1210 字
6 分钟
TCP协议

TCP 三次握手#

TCP(传输控制协议)的三次握手(Three-Way Handshake)是为了建立可靠的连接,确保客户端和服务器之间能够正确通信。三次握手的过程如下:

1. SYN(同步)请求#

  • 客户端服务器发送一个 SYN(同步)报文段,表示客户端希望与服务器建立连接。这个报文段中,SYN 标志位被设置为 1,并且客户端生成一个初始序列号(ISN,Initial Sequence Number),比如ISN=C
  • 此时,客户端处于SYN_SEND状态。

2. SYN-ACK(同步-确认)响应#

  • 服务器收到客户端的 SYN 报文后,回应一个 SYN-ACK 报文段。这个报文段同时包含两个信息:
    • SYN 标志位为 1,表示服务器同意建立连接。
    • ACK 标志位为 1,并且确认号为C+1,即客户端的序列号加 1,表示服务器收到了客户端的 SYN 请求。
    • 服务器会为自己选择一个初始序列号(假设是ISN=S)并将其发送回客户端。
  • 此时,服务器处于SYN_RCVD状态。

3. ACK(确认)确认#

  • 客户端收到服务器的 SYN-ACK 报文后,发送一个 ACK 报文段回服务器,确认号为S+1(即服务器的序列号加 1),表示客户端已收到服务器的 SYN-ACK。
  • 此时,客户端处于ESTABLISHED(已建立连接)状态,服务器也进入ESTABLISHED状态。

总结#

  • 第一次握手:客户端发送 SYN(请求连接)。
  • 第二次握手:服务器回复 SYN-ACK(同意连接)。
  • 第三次握手:客户端发送 ACK(确认连接)。

三次握手的作用是确保双方都有能力发送和接收数据,并且为后续的通信过程提供可靠性保证。

TCP 三次握手的原因#

  1. 确认双方都能发送和接收数据。
  2. 同步序列号。
  3. 防止旧连接数据干扰,避免资源浪费。
  4. 确认双方通信能力。

TCP 的四次挥手#

TCP 的四次挥手(Four-Way Handshake)是关闭一个 TCP 连接的过程,确保双方都能安全地断开连接,避免数据丢失。四次挥手的过程包括四个步骤:

1. 客户端发送 FIN(终止连接)#

  • 客户端服务器发送一个 FIN(Finish)报文段,表示客户端已经没有数据要发送了,请求断开连接。
  • 此时,客户端进入FIN_WAIT_1状态。

2. 服务器响应 ACK(确认)#

  • 服务器收到客户端的 FIN 报文段后,发送一个 ACK(确认)报文段给客户端,表示收到客户端的关闭请求。
  • 服务器此时没有完全关闭连接,它可能还需要继续发送剩余的数据,因此服务器进入CLOSE_WAIT状态。
  • 客户端收到服务器的 ACK 后,进入FIN_WAIT_2状态。

3. 服务器发送 FIN(终止连接)#

  • 服务器在完成所有数据的发送后,向客户端发送 FIN 报文段,表示服务器也没有数据要发送了,准备断开连接。
  • 服务器此时进入LAST_ACK状态。

4. 客户端响应 ACK(确认)#

  • 客户端收到服务器的 FIN 报文段后,发送一个 ACK 报文段给服务器,确认收到服务器的关闭请求。
  • 客户端进入TIME_WAIT状态,等待足够的时间(通常是 2 倍的最大报文段生存时间,MSL),确保服务器收到确认信息后,客户端才会完全关闭连接。
  • 服务器收到客户端的 ACK 后,连接完全断开,进入CLOSED状态。

总结#

  • 第一次挥手:客户端发送 FIN,表示客户端没有数据要发送。
  • 第二次挥手:服务器回复 ACK,确认客户端的关闭请求。
  • 第三次挥手:服务器发送 FIN,表示服务器也没有数据要发送。
  • 第四次挥手:客户端回复 ACK,确认服务器的关闭请求。

四次挥手的过程确保了数据的完整性和双方的同步关闭,避免出现数据丢失的情况。特别是在客户端和服务器都完成数据发送后,才会进行断开连接的操作。

TCP 四次挥手的主要原因#

TCP 四次挥手的主要目的是为了安全、可靠地关闭一个连接,确保双方都能够完成数据传输并正常终止连接。四次挥手的设计是基于 TCP 的全双工通信(即客户端和服务器可以同时发送和接收数据)以及可靠性的需求。下面是四次挥手的主要原因:

  1. 保证双方的数据都已传输完毕。
  2. 防止数据丢失。
  3. 可靠地关闭连接。
  4. 避免连接资源的提前释放。
  5. 确保连接的正确关闭。