网络模型

HTTP/1.1 200 OK

理解网络模型对于掌握网络通信原理至关重要,本文将针对OSI模型和TCP/UDP概念层模型进行总结,并重点对OSI模型中的各层功能及重要协议进行总结

OSI模型及TCP/IP概念层模型总结及对比

OSI七层模型 TCP/UDP概念层模型 功能 TCP/IP协议族
应用层 文件传输、电子邮件及文件服务等 FTP\HTTP\DNS
表示层 应用层 数据格式化及加密
会话层 建立或解除连接
—————————
传输层 传输层 提供端对端接口 TCP/UDP
—————————
网络层 网络层 为数据包选择路由 IP/ICMP
—————————
数据链路层 传输有地址的帧及错误检测 PPP
物理层 链路层 在物理介质上传输数据 IEEE

应用层

HTTP/HTTPS(超文本传输协议)

关于这部分详见关于HTTP的讲解

传输层

TCP

三次握手

sequenceDiagram

    participant 客户
    participant 服务器


    客户->>客户:主动打开
    服务器->>服务器:被动打开
    客户->>服务器:SYN=1,seq=x
    服务器->>客户:ACK=1,ack=x+1, SYN=1,seq=y
    客户->>服务器:ACK=1,ack=y+1
    客户->>客户:Established
    服务器->>服务器: Established
三次握手流程

第一次握手(客户到服务器)

其中SYN表示请求建立链接,给定一个序号seq=x,一般为1,客户进入SYN-SENT阶段

第二次握手(服务器到客户)

标志位为SYN和ACK,表示确认报文seq有效,服务器能正常接收客户端发送的数据,同意创建新连接,给定序号seq=y,确认号ack=x+1,服务器进入SYN-RECV阶段

第三次握手(客户到服务器)

客户进入Established状态,标志位为ACK,表示确认收到服务器端同意连接的信号,序号seq=x+1,表示收到服务端的确认号ack,并将其作为自己的序号值,确认号ack=y+1,表示收到服务器端序号seq,并将seq+1作为确认号。服务器在接收到信号后进入Established状态,双方开始进行数据收发。

为何进行三次握手

为了防止服务器端开启一些无用连接增加开销,同时避免已经失效的连接请求报文段突然又传回服务端,产生错误响应。如果只有两次握手,那么服务器不知道客户端是否正确接收到了服务器端返回的消息。

四次挥手

四次挥手流程

第一次挥手:A发出FIN

第二次挥手:B回复ACK

第三次挥手:B发出FIN

第四次挥手:A发出ACK,用于确认收到B的FIN

当B接收到消息,认为双方达成同步,连接可以释放,此时B可以单方面释放端口号及内存等资源。但A不知道B是否接收到ACK,会有如下两种情况

  1. 如果B未收到ACK,会超时重传FIN,那么A会再次接收到FIN,并发送ACK
  2. 如果B接收到了ACK,那么不会回复任何消息

无论是那种情况,都需要等待,那索性就等吧,等待两种情况的最坏值,即去向ACK和来向FIN的最大消息存活时间,这是一个被动等死的过程。

为何等待2msl

为了确认服务器端收到了来自客户端发出的ACK确认报文,如果在2msl内,客户端又接收到了来自服务器端的FIN报文,说明服务器端没能接收到客户端发出的ACK确认。则客户端再次发送,并重置计时器。

TCP协议传输可靠性

由于TCP是一种面向字节流的传输协议,因此必须有一套机制保证传输过程可靠性,方法如下:

  • 字节流服务
  • 数据包校验
  • 失序重排
  • 超时重发
  • 流量控制

参考文献

0%