TCP timestamp 相关知识(2)

以上两种方式都不可取!因为无法判断出recv_time对应的ACK是确认第一次数据包的发送还是确认
重传数据包。因此TCP协议栈只能选择非重传数据包进行RTT采样。但是当出现严重丢包(比如整个窗口全部丢失)时,就完全没有数据包可以用于RTT采样。这样后续计算SRTT和RTO就会出现较大的偏差。

timestamp选项很好的解决了上述问题,因为ACK包里面带的TSecr值,一定是触发这个ACK的数据包在发送端发送的时间。不管数据包是否重传都能准确的计算RTT(前提是TSecr遵循RTTM中的计算原则)。

当然timestamp不仅解决了RTT计算的问题,还很好的为PAWS机制提供的信息依据。

开启timestamp会有什么负面影响?

这部分内容以后会根据更多的实际经验来补充。目前列举一些找到的分析。

1

2

3

4

5

6

7

 

1. 10字节的TCP header开销

  

2. The TCP Timestamp when enabled will allow you to guess the uptime   of a target system (nmap v -O . Knowing how long a system has been

   up will enable you to determine whether security patches that require

   reboot has been applied or not.

        引自:http://stackoverflow.com/questions/7880383/what-benefit-is-conferred-by-tcp-timestamp

        注:如果通过热补丁修复bug,是否就能够避免这个问题?

 

什么是RTTM

RTTM规定了一些使用TSecr计算RTT的原则,具体如下
(英文水平有限,为保持原意就使用RFC中的原话了)

1

2

3

4

5

6

7

8

9

 

a.  A TSecr value received in a segment is used to update the

    averaged RTT measurement only if the segment acknowledges

    some new data

b.  The data-sender TCP must measure the effective RTT, including the additional    time due to delayed ACKs. Thus, when delayed ACKs are in use, the receiver should

    reply with the TSval field from the earliest

c.  An ACK for an out-of-order segment should therefore contain the 

    timestamp from the most recent segment that advanced the window

d.  The timestamp from the latest segment (which filled the hole) must be echoed

        在ACK被重传的数据时,应该使用重传数据包中的TSval进行回复

 

如果对以上的特殊情况有疑问,还请直接去看RFC,里面有example解释。

最后,实际上计算RTO除了以上使用TSecr的原则外,还有一些更复杂的计算方法RFC 7323
比如对于每一个RTT采样R,

1

2

 

RTTVAR = (1 - beta) * RTTVAR + beta * |SRTT - R|

SRTT = (1 - alpha) * SRTT + alpha * R

 

什么是PAWS

PAWS — Protect Againest Wrapped Sequence numbers
目的是解决在高带宽下,TCP序号可能被重复使用而带来的问题。

PAWS同样依赖于timestamp,并且假设在一个TCP流中,按序收到的所有TCP包的timestamp值
都是线性递增的。而在正常情况下,每条TCP流按序发送的数据包所带的timestamp值
也确实是线性增加的。
至于为什么要强调按序,请先自行思考。:)

首先给出几个变量的定义,之后具体介绍PAWS的工作过程

1

2

3

4

5

6

7

 

Per-Connection State Variables

    TS.Recent:       Latest received Timestamp

    Last.ACK.sent:   Last ACK field sent

      

Option Fields in Current Segment   

    SEG.TSval:   TSval field from TSopt in current segment.   

    SEG.TSecr:   TSecr field from TSopt in current segment.

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fc127940c2f9ef86bbf21dd582ac25c6.html