TCP的建立连接与关闭连接

发布于:2024-12-06 ⋅ 阅读:(24) ⋅ 点赞:(0)

一、建立连接---三次握手

TCP连接的建立需要三次握手来同步双方的序列号,并确保双方都准备好进行数据传输。具体过程如下:

1. 客户端发起连接请求 (SYN)

  • 客户端发送一个SYN(Synchronize Sequence Numbers)报文给服务器。
  • 报文中包含了一个初始序列号 ISN(Initial Sequence Number),用于标识这个连接中的第一个字节的数据。
  • 客户端进入 SYN_SENT 状态,等待服务器回应。

2. 服务器接收并回应 (SYN+ACK)

  • 服务器接收到客户端的SYN报文后,它将自己也设置为SYN状态,并生成自己的初始序列号。
  • 服务器向客户端发送一个SYN-ACK报文作为响应,其中包含了对客户端SYN的确认(ACK字段)以及服务器自身的初始序列号。
  • 服务器进入 SYN_RECV 状态,等待客户端的最终确认。

3. 客户端确认 (ACK)

  • 客户端接收到服务器的SYN-ACK报文后,发送一个ACK报文给服务器以确认收到其SYN。
  • ACK报文中会包含服务器SYN报文的序列号加1,表示已经成功接收到了该报文。
  • 客户端进入 ESTABLISHED 状态。
  • 服务器接收到ACK后也进入 ESTABLISHED 状态,连接建立完成,此时双方可以开始传输数据。

二、关闭连接---四次挥手

TCP连接是全双工的,因此关闭连接时需要分别关闭两个方向的数据流。这通常需要四个步骤来完成:

1. 主动关闭方发送FIN (第一次挥手)

  • 主动关闭方(可能是客户端或服务器)发送一个FIN报文给对方,表示不再发送数据。
  • 发送方进入 FIN_WAIT_1 状态。

2. 被动关闭方接收FIN并回应ACK (第二次挥手)

  • 被动关闭方接收到FIN后,发送一个ACK报文作为回应,确认序号为收到的FIN报文的序列号加1。
  • 被动关闭方进入 CLOSE_WAIT 状态,而此时主动关闭方进入 FIN_WAIT_2 状态,等待被动关闭方的FIN报文。

3. 被动关闭方发送FIN (第三次挥手)

  • 当被动关闭方也没有数据要发送时,它会发送一个FIN报文给主动关闭方。
  • 被动关闭方进入 LAST_ACK 状态,等待最后一个ACK。

4. 主动关闭方接收FIN并回应ACK (第四次挥手)

  • 主动关闭方接收到FIN后,发送一个ACK报文作为回应,确认序号为收到的FIN报文的序列号加1。
  • 主动关闭方进入 TIME_WAIT 状态,等待一段时间(通常是2倍的最大段生存时间MSL),以确保被动关闭方能够接收到ACK报文。这段时间结束后,如果没有任何重传发生,则主动关闭方关闭连接,进入 CLOSED 状态。
  • 被动关闭方在接收到ACK后立即关闭连接,进入 CLOSED 状态。

三、总结

  • 三次握手:确保了双方都能正确初始化序列号,并且保证双方都知道对方已准备好通信。
  • 四次挥手:因为TCP连接是双向的,所以每个方向都需要单独关闭。TIME_WAIT 状态的存在是为了处理可能在网络中延迟到达的重复报文,确保旧连接的数据不会影响新连接。此外,它还有助于解决网络分组重组的问题。

网站公告

今日签到

点亮在社区的每一天
去签到