TCP握手为什么是三次,不是两次?不是四次?
(没用)三次握手可建立一个可靠的连接,目的是
- 确保双方都知道对方已准备好通信,
- 并同步双方的序列号,从而保证数据包的顺序性和完整性。
为什么TCP握手不能是两次?
- 防止服务器一直等
- 防止客户端已经失效的连接请求又传送到了服务器。
- 第一种情况:举例:网络传输是有延时的
假如
- 客户端发起了SYN的第一次握手
- 服务器及时回复了SYN和ACK=1的第二次握手
但是这个ACK=1的确认报文段因为某些原因在传输过程中丢失了 - 若没有第三次握手告诉服务器(客户端收到了服务器的回应),那服务端是不知道客户端有没有收到的。
那么服务器就会一直开着端口等客户端回信。
但说不定客户端并没有收到服务器的第二次握手,早跑了
- 第二种情况:
- 一个旧的、延迟的连接请求(SYN=1)被服务器接收,
- 导致服务器错误地开启一个不再需要的连接。
- 第一次握手:客户端发送SYN包给服务器
- 如果这个包延迟了,客户端不会一直等待,
- 它可能会重试并发送一个新的连接请求。
- 第二次握手:服务器收到SYN包后
- 发送一个SYN-ACK包(确认接收到连接请求)回客户端。
- 第三次握手:客户端收到SYN-ACK包后,
- 发送一个ACK包给服务器,确认收到了服务器的响应。
为什么不是四次?
三次握手已经足够创建可靠的连接了,没有必要再多一次握手。

浙公网安备 33010602011771号