端到端通信一来一回的时间延迟(End To End Round Trip Time)。

司机老王拉一车煤炭从山西大同运到北京大兴,卸掉货,再捎带一车北京烤鸭运回大同,整个过程所经历的时间,是不是更好懂一些?

RTT
一个影响通信性能的很重要的指标,凡是看过电视台主持人实时连线美国前方记者这样的画面,一定会对通话延迟有一个深刻的印象,通常对话是这个样子的:

主持人:老王,我是xx,请你更新一下美国大选的最新进展!

…(通常2-3秒的静音)

记者:主持人好,最终特朗普以微弱选举人票优势胜出,希大妈好像不服,还想上诉…

主持人:你幸福吗?

…(又是2-3秒的静音)

记者:我不姓富,我姓王…

以上的2-3秒静音就是两人之间的RTT时间,这个RTT由以下部分组成:

RTT = 去向的传播延迟 + 对方反应时间 + 返程的传播延迟

假定对方反应时间大体恒定,那么决定RTT的就是去向/返程的延迟,而这两者计算方法都是一样的,那就来分析其中的单程延迟:

单程延迟= 线路的传输延迟 + 路由器的处理延迟+ 路由器的缓冲队列延迟

其中线路的传输延迟,取决于光速,基本上恒定的。

处理延迟,通常每一跳在几毫秒以内。

缓冲队列的延迟取决于队列的深度,排队的IP包长度越长,延迟越大,相反,没有IP包排队,延迟为0。

所以影响RTT的最终因素是路由器的出口队列的排队长度,网络空闲就为0,网络拥塞时几毫米、几十毫秒、几百毫米不等。

以上讨论的是RTT队语音通话的影响,下面来谈谈RTT对基于TCP应用的影响。

RTT是影响TCP性能一个重要指标
看完上文的介绍,同学们是否可以得出一个结论,当动态测量的RTT时间越来越大,说明路径中肯定有一些路由器缓冲队列排队时间越来越长,这个时候如果继续加大发送速率,将很可能将缓冲队列占满并溢出(丢包),这将触发接收方发送多个duplicated ACK来提醒发送方发送速率减半,同时快速重传被丢的包,这是一种事后诸葛亮的修补措施。

为何不让发送速率保持恒定,避免路由器缓冲队列溢出,这样可以不会将“注定被丢的包”注入网络,同时发送方可以保持发送速率恒定,而不会造成因为丢包而引起发送速率的起伏,这样有效的传输效率会更高。