Tcp定时器调研

        1.TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据,但是数据和确认都可能会丢失。TCP 通过在发送时设置一个定时器来解决数据传输问题。如果当定时器溢出时还没收到确认,它就会重传该数据。关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率

       对于每个连接,TCP 管理着四个不同的定时器:

      重传定时器(防止丢失数据报文段或确认报文段)

      为了防止丢失数据报文段或确认报文段,当 TCP 发送报文段时,启动了特定报文段的重传计时器,若在计时器超时之前收到对报文段的确认,则撤销计时器。若收到特定报文段的确认之前计时器已经超时,则重传该报文,并把计时器复位。

      坚持定时器(解决零窗口大小通知可能导致的死锁问题)

      坚持定时器主要是解决零窗口大小通知可能导致的死锁问题。刚开始接收端向发送端发送了一个零窗口报文段。在不久之后,如果接收端的缓存区有一定的空间可以接收数据,此时接收端就会向发送端发送了一个非零窗口大小的报文段(即窗口更新),但是这个非零窗口大小的报文段在传输过程中丢失,导致发送端无法接收到该非零窗口大小的报文段。因此,发送端就会一直处于等待非零窗口大小的报文端通知,由于接收端已经发送了非零窗口大小的报文段,而且并不知道该报文段在传输过程中丢失,则接收端会一直处于等待接收数据状态,如果没有任何措施的话,这个死锁的局面会一直延续下去。

      为了解决上面这个问题,TCP 为每一个连接设有一个坚持定时器(也叫持续计数器)。当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。探测报文段有序号,但序号永远不需要确认,甚至在计算对其他部分数据的确认时这个序号也被忽略。探测报文段提醒接收端,确认已丢失,必须重传。

      坚持定时器的原理:当 TCP 服务器收到了客户端的 0 滑动窗口报文时,启动一个定时器来计时,并在定时器溢出的时向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到零窗口就再开一个新的定时器准备下一次查询。

      保活定时器(应对TCP连接双方出现长时间的没有数据传输的情况)

      保活定时器是为了应对 TCP 连接双方出现长时间的没有数据传输的情况。如果客户端与服务器建立了 TCP 连接之后,客户端由于某种原因导致主机故障,则服务器就不能收到来自客户端的数据,而服务器不可能一直处于等待状态,保活定时器就是用来解决这个问题的。服务器每收到一次客户端的数据,就重新设置保活定时器,通常为 2 小时,如果 2 小时没有收到客户端的数据,服务端就发送一个探测报文,以后每隔75秒发送一次,如果连续发送10次探测报文段后仍没有收到客户端的响应,服务器就认为客户端出现了故障,就可以终止这个连接。

      2MSL 定时器

      TIME_WAIT 确保有足够的时间让对端收到了ACK,如果被动关闭的那方没有收到 ACK,就会触发被动端重发 FIN。因为最后一次确认应答 ACK 报文段很有可能丢失,因而使被动关闭方处于在LIST_ACK 状态的,此时被动关闭方会重发这个 FIN+ACK 报文段,在这等待的 2MSL 时间内主动关闭方重新收到这个被动关闭方重发的 FIN+ACK 报文段,因此,主动关闭方会重新发送确认应答信息,从而重新启动 2MSL 计时器,直到通信双方都进入 CLOSED 状态。如果主动关闭方在 TIME_WAIT 状态不等待一段时间就直接释放连接并进入 CLOSED 状态,那么主动关闭方无法收到来自被动关闭方重发的 FIN+ACK 报文段,也就不会再发送一次确认 ACK 报文段,因此被动关闭方就无法正常进入CLOSED 状态。

       有足够的时间让这个连接不会跟后面的连接混在一起。防止已失效的请求连接出现在本连接中。在连接处于 2MSL 等待时,任何迟到的报文段将被丢弃,因为处于 2MSL等待的、由该插口(插口是IP和端口对的意思,socket)定义的连接在这段时间内将不能被再用,这样就可以使下一个新的连接中不会出现这种旧的连接之前延迟的报文段。


       2.TCP中标志位的含义
       URG(紧急标志):表示在当前报文中有紧急的事件需要应用程序进程去优先处理;
      ACK(确认标志):表示应答域有效,即TCP应答号会包含于TCP数据包中,有两个取值0或1,为1表示应答域有效,反之为0;
       PSH(推标志):表Push操作,即指在数据包到达接收端后,立即传送给应用程序,而不是在缓冲区排队;
       RST(复位标志):表示连接复位请求,用于复位产生错误的连接,也可用来拒绝错误和非法的数据包;
       SYN(同步标志):表示同步序号,用于建立连接,SYN标志位和ACK标志位搭配使用,当连接请求时,SYN=1,ACK=0;当连接请求被应答时,SYN=1,ACK=1,此标志位的数据包常被用来进行端口扫描;
       FIN(结束标志):表示断开连接,发送端已到达数据末尾,即双方的数据传送已完成,无数据可传送,发送FIN标志位的TCP数据包后,连接将被断开。

       3.TCP的三次握手和四次断开连接
         
          建立连接的过程:"3次握手"
          (1)客户端发出段1,SYN表示连接请求,序号(用于作临时地址)是1000,每发送一个数据字节,此序号要+1,可保证
      在接收端可排出数据包的正确顺序,也可以发现丢包的情况,mss表示最大段尺寸,客户端要声明自己的最大段尺寸,建议服         务器端发来的段不要超过这个长度;
          (2)服务器端发出段2,同时也带有SYN标志位,同时置ACK位表示确认,确认序号是1001,表示“我接收到了序号1000以       及之前所有的段,请下次发送序号为1001的段“,即应答了客户端发出的连接请求,同时,也向客户端发出一个连接请求,声         明它自己的最大尺寸为1024;
          (3)客户端发出段3,对服务器端发出的连接请求进行应答,确认序号ACK为8001.

        
        断开连接的过程:"需4个段"
          (1)客户端发出段7,FIN表示关闭连接的请求;
          (2)服务器端发出段8,ACK表示应答客户端发出的关闭连接的请求;
          (3)同时,服务器端发出段9,也包含FIN位,表示向客户端发出关闭连接的请求;
          (4)客户端发出段10,表示应答服务器端发出的关闭连接的请求;

          
       


       
         
        

        
       

      

       

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值