阅读 117

TCP 协议的三步握手与四步挥手

TCP 协议

  • 是一种面向连接的、可靠的、基于字节流的传输层通信协议。
  • 让网络传输更加安全可靠

TCP 报文类型

  • ACK:应答报文,只有 ACk=1时有效。

  • SYN:询问报文。在连接建立时用来同步序号。SYN=1。当 SYN=1,ACK=0 表示是一个连接请求报文;对方若同意建立连接,其应答报文有 SYN=1,ACK=1。

  • FIN:结束。释放一个连接。当 FIN=1 表示该报文的发送方数据已经发送完毕,并要求释放连接。

实例

  • 报文1:[SYN=1, ACK=0, seq=x] 这是询问报文,询问号为 x
  • 报文2:[SYN=1, ACK=1, seq=y, ack=x+1] 这是应答+询问报文,ack=x+1 表示对 seq=x 的报文应答,询问号为 y
  • 报文3:[SYN=0, ACK=1, seq=z, ack=y+1] 这是应答报文,表示对 seq=y 的报文应答。

三部握手

tcp.jpg

  1. 客户端向服务端发送 SYN=1 的询问报文,询问号 seq 为 x,进入 SYN_SENT 状态
  2. 服务端接受请求向客户端回应 SYN=1, ACK=1 的应答+询问报文,应答号 ack 为 x+1,询问号 seq 为 y,进入SYN_RCVD 状态
  3. 客户端收到后向服务端回应 ACK=1 的应答报文,应答号为 ack 为 y+1,进入 Established 状态

为什么要三步握手

当出现网络延迟等原因导致数据同传。客户端只发送一次请求就不再发送数据,服务器就一直处于浪费资源的等待状态。

四步挥手

tcp2.jpg

  1. 客户端发送一个 FIN,告诉服务器想关闭连接。询问号 seq 为 u
  2. 服务端收到 FIN,向客户端回应 ACK=1 的应答报文,应答号 ack 为 u+1
  3. 服务器通知应用程序关闭网络连接,应用程序关闭后通知服务器,服务器向客户端一个 FIN=1 应答号 ack=u+1 的应答报文。
  4. 客户端发回 ACK 报文确认。

为什么要四次挥手

其实服务器两次都是对询问号 seq 为 u 报文的应答。第一次服务器接受请求,立刻应答说准备好关闭。第二次是等到真正关闭应用再次应答,表示可以真正断开连接。服务器关闭应用是需要时间的,若只有三步,客户端会认为应用已经关闭了,但其实并没有。

文章分类
前端
文章标签