OSI7层网络架构
网络协议
计算机网络体系结构分层
当发起一个HTTP请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。
链路层
以太网协议,规定接入的网络设备必须有网卡,网卡的MAC地址是唯一的。
链路层主要工作是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。
网络层
-
互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。
-
ARP协议
地址解析协议,是根据IP地址获取MAC地址。有的说在网络层,有的说在链路层。
-
路由协议
首先通过IP协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过ARP协议查询对应的MAC地址,然后以广播的形式向该子网内的主机发送数据包;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。
路由器工作在网络层,交换机工作在链路层。
网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。
传输层
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。可靠通信由确认和重传机制保障,TCP流量控制通过滑动窗口机制7控制。
UDP(User Datagram Protocol用户数据报协议)是一种无连接、不提供可靠传输服务的、面向报文的传输层协议。
传输层主要工作是定义端口,标识应用程序身份,实现端口到端口的通信。
应用层
应用层定义了各种各样的协议来规范数据格式,常见的有HTTP、FTP、SSH、SMTP、DNS(通过域名获取IP)、DHCP(动态分配IP)等。
TCP三次握手四次挥手
SYN:发起一个新连接;ACK:确认序号有效;FIN:释放一个连接8。
为什么建立连接需要三次握手
- 假如是一次握手,C端发了个连接请求消息到S端,S端收到后S端就知道自己与C端是可以连接成功的,但是C端此时并不知道S端是否接收到这个消息,所以S端接收到消息后得应答,C端得到S端的回复后,才能确定自己与S端是可以连接上的,所以两次握手肯定是最基本的。
- 第三次握手是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。具体情况就是:C端发出去的第一个网络连接请求由于某些原因在网络节点中滞留了,导致延迟,直到连接释放的某个时间点才到达S端,这是一个早已失效的报文,但是此时S端仍然认为这是C端的建立连接请求第一次握手,于是S端回应了C端,第二次握手。如果只有两次握手,那么到这里,连接就建立了,但是此时C端并没有任何数据要发送,而S端就会傻傻的等待着,造成很大的资源浪费。所以需要第三次握手,只有C端再次回应一下,就可以避免这种情况。
为什么释放连接比建立连接多了一次握手
可以看到这里服务端的ACK(回复客户端)和FIN(终止)消息并不是同时发出的,而是先ACK,然后再FIN,这也很好理解,当客户端要求断开连接时,此时服务端可能还有未发送完的数据,所以先ACK,然后等数据发送完再FIN。这样就变成了四次握手了。