TCP 三次握手和四次挥手

TCP 三次握手详解

TCP(Transmission Control Protocol)的三次握手用于建立可靠的双向通信连接。过程如下:

  1. 第一次握手 (SYN):
    客户端向服务器发送一个带有 SYN 标志的包,表示客户端希望建立连接。此时,客户端进入 SYN-SENT 状态。SYN 包中还包含一个初始序列号(Sequence Number,通常称为 ISN),用于标识后续传输的数据包。

  2. 第二次握手 (SYN-ACK):
    服务器收到 SYN 包后,响应一个带有 SYNACK 标志的包,表示同意连接请求。这个包中包含服务器的初始序列号,并对客户端发送的序列号加 1,表示确认了客户端的 SYN 包。此时,服务器进入 SYN-RECEIVED 状态。

  3. 第三次握手 (ACK):
    客户端收到服务器的 SYN-ACK 包后,发送一个带有 ACK 标志的包,确认服务器的序列号加 1。此时,客户端进入 ESTABLISHED 状态,服务器在收到客户端的 ACK 包后,也进入 ESTABLISHED 状态,连接正式建立。

这三次握手确保了双方都可以互相发送和接收数据,同时确认各自的接收能力。

TCP 四次挥手详解

TCP 的四次挥手用于可靠地断开连接:

  1. 第一次挥手 (FIN):
    主动关闭连接的一方(通常是客户端)发送一个带有 FIN 标志的包,表示数据发送完毕,想要关闭连接。此时,客户端进入 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 倍的报文最大生存时间,2MSL)以确保服务器收到了 ACK,然后再进入 CLOSED 状态。服务器在收到这个 ACK 包后,也进入 CLOSED 状态,连接彻底关闭。

为什么是三次握手而不是两次?

  • 三次握手的核心目的是确保双向的同步:
    • 第一次握手:客户端发送 SYN,告知服务器自己可以发送数据。
    • 第二次握手:服务器响应 SYN-ACK,告知客户端它收到了请求,并且它也可以发送数据。
    • 第三次握手:客户端确认收到服务器的响应,确保连接的双向通信是可靠的。

如果只有两次握手,服务器无法确认客户端是否收到了它的确认信息,可能导致不稳定的连接。

为什么关闭连接需要四次?

  • 关闭连接需要四次是因为 TCP 是全双工通信协议,双方需要分别关闭各自的发送通道。
  • 在发送 FIN 之后,接收方仍可以继续发送数据,直到它自己发送 FIN 包关闭发送通道,因此需要四次挥手来确保双向通信完全关闭。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值