TCP 3次握手及4次挥手

3次握手:
TCP协议建立三次握手的过程如下:
  第一次握手:客户端向服务器发送SYN段(SYN=1),请求建立新连接
  第二次握手:服务器收到SYN段后,向客户端发送的SYNACK段(SYN=1,ACK=1)进行确认,同意建立新连接

  第三次握手:客户端收到服务器的SYNACK段后,向服务器发送ACK确认段(ACK=1),并确认连接建立成功;服务器收到ACK确认段后,也确认连接建立成功

原因:
 1)为了确保连接建立的双方彼此完全清楚对方状态(如初始序列号和接收窗口大小),从而保证可靠、稳定地建立连接
 2)通过三次握手建立连接还可以有效地预防过期、失效的连接请求到达后,导致无效连接的建立

 3)两次握手建立连接是不可行的,因为网络存在数据丢失;第二次握手控制段可能丢失,这样主动发起连接的一方由于没有收到第二次握手控制段,则无法建立连接,而接受连接建立的一方则认为连接已经建立,从而出现无效链接


     有种情况就是客户端发起了请求,但是过了超时时间又重发的连接请求,而第一个请求并没有丢失,服务端收到syn后,发送了ACK,确认了连接,客户端收到ACK也确认了连接。
     这时第二次发送的连接请求阻塞在网络上,但没有丢失,并最终在客户端断开连接后,到达了服务器,此时服务器会理解为新的连接请求,并发送ACK确认连接建立

     这一连接并不属于有效连接,属于半连接,但是服务器已经为该连接分配了资源;这类半连接的存在会消耗服务器的资源,降低服务器性能,甚至导致拒绝服务;


4次挥手:
TCP协议断开连接的四次挥手过程:
 第一次挥手:客户向服务器发送FIN段(FIN=1),请求释放连接,等待服务器确认
 第二次挥手:服务器向客户发送ACK段(ACK=1)
 第三次挥手:服务器向客户发送FIN段(FIN=1),请求释放连接,等待客户确认

 第四次挥手:客户向服务器发送ACK段,并等待2MSL时间后关闭连接;服务器收到ACK段后马上关闭连接


MSL是最大段生存时间,是任何TCP段被丢弃前在网络内“存活”的最长时间
TCP协议规范规定的MSL是2min,但实际系统在实现TCP时设定的时间有所不同

    客户在TIME_WAIT状态之所以要等待2MSL时间才真正释放连接,一方面是为了以防最后一次ACK段丢失,会导致服务器重发FIN,这样在客户端真正释放连接前还可以再次发送ACK段,尽可能确保服务器尽快释放连接;另一方面是为了保证在2MSL期间,该连接的本地端点地址(IP+PORT)不被再次使用,避免可能的较早连接请求到达,被误认为时新连接请求


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值