文章目录
  1. 1. 关注TCP/IP的若干事
    1. 1.1. TCP协议组成
    2. 1.2. TCP3次握手
      1. 1.2.1. 过程描述
      2. 1.2.2. 为什么需要3次握手
    3. 1.3. TCP4次挥手
      1. 1.3.1. 过程描述
      2. 1.3.2. 为什么需要等待
      3. 1.3.3. 为什么TIME_WAIT状态需要等2*MSL秒后才能返回到CLISED状态
    4. 1.4. TCP11种状态

关注TCP/IP的若干事

TCP协议组成

  • TCP头部组成

TCP3次握手

过程描述

  • 客户端(client)-> 发起请求:携带 SYN=1 ACK=0 Seq=x (SYN=1不能携带数据,但需要一个序号)
  • 服务端(server)-> 回复确认:携带 SYN=1 ACK=x+1 Seq=y
  • 客户端(client)-> 二次确认:携带 ACK=y+1 Seq=x+1

为什么需要3次握手

  • 信道不可靠,通信双方需要就某个问题达成一致;

TCP4次挥手

过程描述

  • 客户端(client)-> 发起释放请求:携带 FIN=1 Seq=u
  • 服务端(server)-> 回复确认:携带 ACK=u+1 , seq=v -> Close-Wait
  • 服务端(server)-> 发送数据 : 携带 FIN=1 ACK=u+1 Seq=w -> Close Wait
  • 客户端(client)-> 再次确认:携带 ACK=w+1 Seq=u+1 ->Time-Wait

为什么需要等待

  • 客户端接到服务端的释放连接请求之后 -> 发送一个确认信息
  • 信息丢失,服务端未收到确认释放连接指令
  • 服务端重发释放连接请求
  • 此时,客户端处于TIME_WAIT状态,再次给服务端发送一个确认消息

为什么TIME_WAIT状态需要等2*MSL秒后才能返回到CLISED状态

  • 网络不可靠,无法保证最后发送的ACK报文一定会被对方收到,作用是用来重发可能丢失的ACK报文

TCP11种状态

  • CLOSED 初始状态,TCP连接未打开

  • LISTEN 处于socket监听状态,等待接受客户端连接

  • SYN_RCVD 表示服务器接收到了来自客户端请求连接的SYN报文

  • SYN_SENT 表示客户端已发送SYN报文

  • ESTABLISHED 表示TCP连接已经成功建立

  • FIN_WAIT_1

  • FIN_WAIT_2

  • TIME_WAIT 表示收到了对方的FIN报文,并发送出了ACK报文

  • CLOSING 表示双方都正在关闭SOCKET连接

  • CLOSE_WAIT 表示正在等待关闭

  • LAST_ACK 当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态

参考

[1] https://www.cnblogs.com/qingergege/p/6603488.html?from=singlemessage&isappinstalled=0

文章目录
  1. 1. 关注TCP/IP的若干事
    1. 1.1. TCP协议组成
    2. 1.2. TCP3次握手
      1. 1.2.1. 过程描述
      2. 1.2.2. 为什么需要3次握手
    3. 1.3. TCP4次挥手
      1. 1.3.1. 过程描述
      2. 1.3.2. 为什么需要等待
      3. 1.3.3. 为什么TIME_WAIT状态需要等2*MSL秒后才能返回到CLISED状态
    4. 1.4. TCP11种状态