三次握手, 四次挥手

1634345213(1).png

为什么连接的时候是三次握手,关闭的时候却是四次握手?

Server端收到SYN连接报文请求后, 可以直接发送SYN+ACK报文, ACK报文用来应答, SYN用来同步, 关闭连接时, Server端可能不会立即关闭Socket, 只能先发送ACK报文, 只有等到Server端所有报文都发送完毕,才能发送fin报文, 因此需要四次握手。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回CLOSE状态

网络是不可靠的,可能最后一个ACK会丢失, 如果Server没有收到最后一个ACK, 将不断发送FIN片段, Client不能立刻关闭。

为什么不能用两次握手进行连接

三次握手完成两个重要的功能, 双方做好发送数据的准备工作, 并且允许双方就初始序列号进行协商, 在握手过程中被发送和确认。如果只有两次握手,如果Server发送给Client的确认应答丢失,Client将不知道Server是否准备好。

如果已经建立连接, 客户端出现故障

TCP设有一个保活计时器, 服务器每收到一次客户端的连接都会重新复位计时器, 默认2小时,如果2小时都没有收到客户端的任何数据,服务器发送探测报文段, 每75秒发送一次,连续10次没反应, 服务器认为客户端故障, 关闭连接。

猜你喜欢

转载自juejin.im/post/7019464628274987045