TIME_WAIT状态和FIN_WAIT_2状态

TIME_WAIT状态

  • TIME_WAIT 状态,又称为 2MSL 等待状态。只有主动关闭一方才能进入 TIME_WAIT 状态。

    • MSL(Maximum Segment Lifetime)表示报文段最大生存时间
    • 当 TCP 协议进入 TIME_WAIT 状态时,必须要在这个状态停留 2 倍 MSL 的时间。
    • tcp连接在TIME_WAIT状态必须存在2MSL才能进入CLOSE状态。
    • 详情请看
  • 用到2MSL原因

    • TCP在四次挥手中,可能出现最后一个ACK丢失,即客户端发送的ACK在网络中丢失了,服务就永远都收不到最后的ACK,服务器也就无法关闭这个tcp连接

      • 2MSL计时器可以让客户端在丢失最后一个ACK确认时,等待服务器的下一个FIN到来,如果在TIME_WAIT状态中有一个新的FIN到来,那么客户端就发送一个新的ACK确认,并重新启动2MSL计时器。因为服务端收到客户端发送的ACK确认报文然后才进入close状态,如果一直没收到客户端发送的ACK确认报文,服务器则等待2MSL超时进入close状态(通常是可能会发送RST来关闭这条连接)。
    • 保证了在2MSL时间内只创建一个连接

      • 假设客户端和服务端已经建立了一条连接1,如果没有TIME_WAIT状态,客户端和服务端马上又建立了连接2,这可能会造成连接2可能会接收到连接1的tcp数据报,从而产生一些错误

FIN_WAIT_2状态

  • 通常主动一方发起FIN报文,只要对端发送ACK确认后主动方就会处于FIN_WAIT2状态,然后等待对端发送FIN报文,如果一直没有发送FIN报文(就会一直处于CLOSE_WAIT状态,还有数据要发送,等等再关闭),那么主动一方就可能永远处于FIN_WAIT2状态,为了解决主动一方永远处于FIN_WAIT2状态,操作系统设置了一个定时器,如果这个连接空闲时间超时了,那么该连接将进入CLOSED状态。
  • 详情请看

TCP的可靠传输

  • TCP的可靠传输是对于传输层来说的,这个可靠传输指的是TCP和TCP之间,TCP协议保证的是所有安装了TCP软件的程序之间的可靠传输。而对于我们开发者来说,我们开发的应用程序属于应用层。而我们开发或者日常生活中遇到的消息丢失,通常发生在传输层和应用层者之间。
  • tcp可靠是因为它是面向连接的协议,她还有很多机制来面对丢包和超时
  • 详情请看
  • TCP不一定可靠
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值