《TCP/IP详解 卷1:协议》 读书笔记 第22章 TCP的坚持定时器

来源:互联网 发布:移动4g数据卡确认欠费 编辑:程序博客网 时间:2024/05/19 08:05

TCP的坚持定时器

  • TCP的坚持定时器
    • 引言
    • 坚持定时器
    • 糊涂窗口综合征症SWSSilly Window Syndrome


引言

ACK的传递是不可靠的,TCP不对ACK报文段进行确认,只确认那些包含数据的ACK报文段。
有些通知窗口大小为0,或者打开窗口的ACK是不包含数据的。这种ACK可能丢失,如果打开窗口的ACK丢失,那么可能导致连接终止。
为了防止这种死锁,发送方使用一个坚持定时器(persist timer)来周期性向接收方询查窗口是否已增大。(发出的报文段叫做窗口探查window probe)


坚持定时器

当通告窗口为0之后,引起客户设置其坚持定时器,当定时器溢出时还没有接收到窗口更新的话,它就探查这个空的窗口来判断窗口更新的报文是否丢失了。

  • 如果得知窗口非0了,就可以开始发送数据了
  • 如果窗口还是0,就重新计时,这个过程将会持续到窗口被打开,或者连接被终止(所以叫做“坚持”定时器)
  • 坚持定时器使用了TCP指数退避,但是坚持定时器总是在5~60秒之间。

糊涂窗口综合征症SWS(Silly Window Syndrome)

基于窗口的流量控制,会导致SWS——少量的数据将通过连接进行交换,而不是满长度的报文段。

  • 接收方可以通告一个小窗口,发送方也可以发送少量的数据(不用等到其他数据一起发送一个大的报文段)。
  • 这样会导致在通道中有很多小数据,可能导致拥塞,影响网络利用率。

避免的方法:

  1. 接收方不通告小窗口,除非窗口有了一个满长度的报文段大小,或者有了一半缓存空间。
  2. 发送方有3个条件,必须满足任一条件才发送数据:
    • 可以发送一个满长度的报文段
    • 可以发送至少是接收方通告窗口大小一半的报文段
    • 可以发送任何数据并且不希望接收ACK(就是说没有未被确认的数据)或者该连接上不能使用Nagle算法(连接上只能有一个未被确认的分组,确认后才能发送新的)。(一半会用Nagle来防止这种SWS的情况
0 0