TIME_WAIT

image.png

为什么需要三次握手

1、保证全双工通信
2、防止失效的连接请求到服务器,让服务器错误地打开连接,浪费资源
2原因:

谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

为什么需要四次挥手

因为客户端发送FIN连接请求释放连接后,服务器接受请求后可能还有没有发送完的数据,所以先返回ACK,等待数据都发送完毕后再发送FIN信号。

TIME_WAIT

客户端收到服务的释放连接的请求后,不是立马进入CLOSE状态,而是还要再等待2MSL(MSL:maximum segment lifetime报文最大存活时间,2倍是发和收的最大时间)
原因:

  • 确保最后一个确认报文能够到达。如果没能到达,服务端就会会重发FIN请求释放连接。等待一段时间没有收到重发就说明服务的已经CLOSE了。如果有重发,则客户端再发送一次LAST ack信号
  • 确保当前连接所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容