TCP往返传输时间(RTT)的估计

本文介绍了TCP往返传输时间(RTT)的测量方法,包括利用重传队列中的TCP控制块和TCP时间戳选项,并讨论了使用时间戳选项的原因。同时,文章还提及了平滑RTT(SRTT)的概念,它是通过加权平均来减少RTT波动,用于更准确地判断重传超时。

RTT Round-Trip Time

比如重传定时器,那么到底多长时间没接到ACK才重传呢?

测量的RTT
RTT的测量可以采用两种方法:

(1)重传队列中数据包的TCP控制块
在TCP重传队列中保存着发送而未被确认的数据包,数据包skb中的TCP控制块包含着一个变量,
tcp_skb_cb->when,记录了该数据包的第一次发送时间。
RTT = 当前时间 – when
 

image

(2)TCP Timestamp选项
在前面的blog中有详细的介绍过这个选项,TCP时间戳选项可以用来精确的测量RTT。
RTT = 当前时间 -  数据包中Timestamp选项的回显时间
这个回显时间是该数据包发出去的时间,知道了数据包的接收时间(当前时间)和发送时间
(回显时间),就可以轻松的得到RTT的一个测量值。

为什么用时间戳选项测量RTT?
既然不用时间戳选项就可以实现RTT测量,为何还增加时间戳选项呢?看下面解释:

“TCP must use Karn's algorithm for taking RTT samples. That is, RTT samples MUST NOT be made using segments that were retransmitted (and thus for which it is ambiguious whether the reply was for the first instance of the packet or a later instance). The only case when TCP can safely take RTT samples from retransmitted segments is when the TCP timestamp option is employed, since the timestamp option removes the ambiguity regarding which instance of the data segment triggered the acknowledgement.”

上面这段话的意思是,不能确定ACK是对原包的回复还是对重传包的回复。

画个图就明白了,如下image

平滑的RTT
(Smoothed RTT): 因为RTT对不同的往返有不同的数值,而且其起伏比较大,以致不能为重传超时做标准,所以需要平滑的RTT,记为SRTT它对和前一个SRTT加权平均。
即SRTT=(α*SRTT)+((1-α)*RTT),α推荐为0.9.

如需深入了解,可以查看[链接]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值