浅析TCP三次握手和四次挥手

对于TCP三次握手四次挥手的原理,可以参见通俗大白话来理解TCP三次握手四次挥手TCP的那些事这几篇文章。在这几篇文章中对于TCP三次握手和四次挥手的过程都有详细的讲解。

先放一张图大家理解一下TCP三次握手和四次挥手。
三次握手

为什么握手三次?


大家可以先通过下面一段话来认识一下:

这里写图片描述

谢希仁在《计算机网络》这本书中也写道:

计算机网络
所以三次握手是为了防止服务端一直等待而浪费资源。

为什么挥手四次?


TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。

TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。如果要正确的理解四次分手的原理,还需要了解四次分手过程中的各状态变化。


先看一下TCP连接释放时过程图:

四次挥手

FIN_WAIT_1:

FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,说明它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态, 在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。(主动方)

FIN_WAIT_2:

结合上文,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有数据需要传送给你(ACK信息),稍后再关闭连接。(主动方)

CLOSE_WAIT:

表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。(被动方)

LAST_ACK:

被动关闭一方在发送FIN报文后,最后等待对方的ACK报文的状态。当收到ACK报文后,也即可以进入到CLOSED(关闭)状态了。(被动方)

TIME_WAIT:

表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(主动方)

看完了四次挥手中状态的变化,我们可能还有疑问,为什么主动断开连接的一方要进入TIME_WAIT状态 ?在TIME_WAIT状态需要等待2MSL的时间(上图红色框标注的内容)?

为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段可能会丢失,因而是使处在LAST_ACK状态的B收不到对方已发送的FIN+ACK报文段的确认,B会超时重传这个FIN+ACK报文段,而A就能在2MSL期间收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器,最后,A和B都进入到CLOSED状态。

A最后发送了最后一个确认字段后,进入TIME_WAIT状态,在经过2MSL,就可以使本次连接持续的时间内所产生的所有的报文段都从网络中消失,这样就可以使下一次新的连接不会出现这种旧的连接请求报文段。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值