TCP 三次握手 四次挥手 相关知识点

三次握手

     开始阶段:假设A是客户端,B是服务器。最开始A和B都处于CLOSED(关闭)状态,A主动打开连接,B被动打开连接,B然后进入LISTEN(监听)状态。

     第一次握手:A发送标志位SYN=1,初始化序号seq=x给B。A进入SYN-SENT(同步已发送)状态。 

     第二次握手:B发送标志位SYN=1,ACK=1,确认序号ack=x+1,seq=y给A。B进入SYN-RCVD(同步收到)状态。

     第三次握手:A发送标志位ACK=1,确认序号ack=y+1,seq=x+1给B。A进入ESTABLISHED(已建立连接)状态,B收到ACK后也进入ESTABLISHED(已建立连接)状态。

 

四次挥手

      开始阶段:假设A是客户端,B是服务器。A和B都处于ESTIBLISHED(已建立连接)状态,A主动关闭连接,B被动关闭。

      第一次挥手:A发送标志位FIN=1,序列号seq=u给B,A进入FIN-WAIT1(终止等待1)状态。

      第二次挥手:B发送标志位ACK=1,序列号ack=u+1,seq=v给B,B进入CLOSE-WAIT(关闭等待)状态,A收到ACK后进入FIN-WAIT2(终止等待2)状态。

      第三次挥手:B发送标志位FIN=1,序列号ack=u+1,seq=w给A,B进入LASK-ACK(最后确认)状态。

      第四次挥手:A发送标志位ACK=1,序列号ack=w+1,seq=u+1给B,A进入TIME-WAIT(时间等待)状态。此时TCP连接还没有释放,必须经过2*MSL(最长报文段寿命)的时间后,A才进入CLOSED(关闭)状态。B收到A的ACK后进入CLOSED(关闭)状态,可见B比A进入CLOSED状态更早一些。

 

四次挥手过程中客户端为什么需要等待2*MSL后才能关闭

      (1)为了保证客户端最后发送的ACK报文能够到达服务器。一方面客户端的ACK报文可能丢失,另一方面客户端可能没有收到服务器发送的FIN-ACK报文。接着客户端就可以在2MSL时间(等于服务器FIN+ACK的时间)内收到服务器重传的报文。然后再重启2MSL计时器。

      (2)为了防止“已经失效的连接请求报文段”出现在当前连接中。当客户端发送完最后一个确认报文后,在2MSL时间内就可以将当前连接中产生的所有报文段在网络中消失。

 

为什么握手是三次,而挥手是四次

      (1)建立连接的时候,服务器是LISTEN状态,当收到客户端的SYN报文后,可以将ACK和SYN报文放在一起反馈给客户端。

      (2)关闭连接的时候,客户端发送FIN给服务器,说明客户端不再发送请求了,但是还可以接收请求,这时服务器并不会立刻关闭连接,所以先反馈ACK表示已经收到,然后确认没有要发送的东西之后才发送FIN,所以是分两次发的。

 

如果TCP连接已经建立,客户端突然出现故障怎么办

      TCP中设置有一个保活计时器,每次服务器成功收到客户端的请求后都会重置保活计时器,计时器通常设置时间是2小时。也就是说如果服务器在2小时内没有收到客户端的任何数据,服务器就会主动发送一个探测报文段,之后每75秒发送一次,连续10个探测报文如果都没有反应,那么就认为客户端出现故障,然后关闭连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值