TCP/IP详解--三次握手、四次挥手和TIME_WAIT状态

三次握手

  • 第一次握手:主动打开方发送SYN同步报文段,表示我要和你连接了,自己进入SYN_SENT状态

  • 第二次握手:被动打开方收到SYN报文,恢复ACK报文,自己也发送SYN报文表示我也要连接,进入SYN_RECV状态。

  • 第三次握手:主动打开方收到对方ACK和SYN,自己再发送对SYN的确认。自己就可以进入ESTABLISHED状态表示自己可以通信了。被动打开方收到最后一个ACK,就表示自己的请求对方也收到了,自己进入到ESTABLISHED状态。此时两端都可以通信了。

  • 问题:两次握手可以么???

    • 如果是两次握手就可以建立连接,即最后一次主动打开方没有发送确认的ACK,那么当主动打开方发送了SYN后,就异常断开了,而接收方收到发送方的SYN后并不知道对方已挂掉了,他就会以为自己维护了一个完整的连接,一旦之后发送数据就会出现错误。所以不能通过两次握手来建立一个连接。

四次挥手

  • 第一次挥手:主动断开方发送结束报文段(FIN),进入FIN_WAIT_1状态

  • 第二次挥手:被动断开方发送对结束报文段的确认(ACK),进入CLOST_WAIT状态(因为此时它可能还有数据需要发送,如果没有数据发送,也可以直接发送ACK和FIN,表示收到对方的FIN请求,并且自己也FIN,这样就会是三次挥手),而此时主动断开方会进入FIN_WAIT_2状态。

  • 第三次挥手:被动断开方发送FIN请求,表示自己数据处理结束了,可以关闭连接了,此时进入LAST_ACK状态,表示等待最后一个ACK到达就可以完全关闭,到达CLOSED状态了。

  • 第四次挥手:主动断开方发送最后一个ACK,表示对对方发送的FIN的确认。然后自己进入TIME_WAIT状态。(是2倍的MSL时间)

  • ---------------------------------------------------------------------------------------------------------------------

  • TIME_WAIT状态存在主要是为了解决两个问题

    • 处于TIME_WAIT状态的端口号是不能被重用的,而在高并发的短连接情况下,服务器会在短时间占用大量端口号,而端口号只有0-65535个,再除去系统和其他服务要用的,能用的就更少了,所以大量处于TIME_WAIT会导致客户端连接不上。
    • 有时候短连接时,“业务处理+传输数据”的时间远远小于2MSL,所以会导致服务器资源严重浪费。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值