网络之tcp的四次挥手

说说tcp的四次挥手

答:首先说明的是“挥手”是为了终止连接。

tcp四次挥手示意图
关于四次挥手的流程,可以通过上图简单表示出来。
第一次挥手
Client发送一个FIN,用来关闭数据传输,此时CLient进入FIN-WAIT-1阶段。假设seq=u,FIN=1

第二次挥手
SERVER端收到FIN请求后,发送一个ACK来进行确认回复。其中ACK=1,ack=u+1,seq=v。当Client收到这个回复,Client就会进入FIN-WAIT-2阶段。

第三次挥手
在SERVER端将最后的数据传输后,服务端会发送一个FIN来告知最后的数据已经传输完成。此时服务端进入LAST-ACK阶段。FIN=1,ACK=1,ack=u+1,假设seq=w。

第四次挥手
客户端收到服务发送的FIN之后,会进入TIME-WAIT阶段,在这个阶段,最多等待2*MSL时间(ps:MSL是Maximum Segment Lifetime的英文缩写,含义是报文最大生存时间)。然后发送一个ACK给服务端,告诉服务端已接收到FIN,服务端你可以关闭了。ACK=1,seq=u+1,ack=w+1。

说说为什么客户端TIME-WAIT这个阶段存在的意义。

客户端收到服务发送的FIN之后,会进入TIME-WAIT阶段,在这个阶段,最多等待2*MSL时间(ps:MSL是Maximum Segment Lifetime的英文缩写,含义是报文最大生存时间)。
这个阶段存在的意义有两个

  • 能最大程度的确保,当客户端最后一个确认报文丢失,服务端会超时重传FIN+ACK,而客户端就能在2MSL时间内收到这个重传的FIN+ACK,客户端可以再重新传ACK确认报文,重启2MSL计时器。我们想一想,如果没有这个等待时间,客户端发送了ACK之后立即进入关闭阶段,那么当这个ACK丢失,服务端即使超时重传,客户端也无法接收到重传的FIN+ACK,更无法重发ACK给服务端了,这样服务端就没法正常的进入关闭阶段了。
  • 还可以防止“失效的连接请求报文”出现在另一个连接中,因为经过2*MSL,本次连接产生的所有报文段都从网络中消失。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容