RTT是什么?对TCP中RTT时延的理解

最近服务器环境部署了tcprtt网络时延监控,发现不同服务器不同节点之间的rtt时延表象非常奇怪,无法准确的判断服务器的网络情况。因此需要弄清楚什么是rtt,以及能否作为服务器网络性能的检测指标。
1、rtt是什么?tcp中的 rtt指的是“往返时延”(round-trip time) ,即从发送方发送数据开始,到发送方接收到来自接收方的确认消息所经过的时间。rtt时延通常由三部分决定: 链路的传播时间、末端系统的处理时间、路由器等网络中间节点的缓存和排队时间 。正常情况下报文的传输时间和在应用处理时间相对固定,在网络拥堵情况下会出现rtt时延的波动。
rtt是衡量网络传输性能的重要指标之一,能够反映出数据在网络中传输的速度和稳定性。通常情况下,rtt越短,网络传输的速度就越快,反之则越慢。因此, 通过监测tcp中的rtt时延,可以初步判断网络的性能如何。 但需要注意的是,rtt时延只是一个指标,要全面评估网络性能还需要结合其他指标进行综合分析。
1.1 rtt和rto关系说起rtt就要提到rto(retransmission timeout),tcp协议在握手过程中会启动一个定时器,如果在定时器时间内没有收到,则会进行重传,这个 重传的超时时间称为rto 。rtt和rto的关系是:由于网络的不确定性,每个rtt都是动态变化的,rto也会动态变化。
当 rto rtt 时候, 如果频繁出现丢包, 重传不及时, 又会造成网络的反应慢, 最好的结果是 rto 略大于 rtt.
1.2 rtt和ping区别ping是使用 icmp传输协议 ,可以用来评估rtt时延和网络性能的好坏。相比之下, rtt则是在应用层 (osi/iso的第7层)进行的网络时延测量,包括更高级别的协议和应用程序引起的额外处理时延。
1.3 rtt和时延的区别网络时延与rtt密切相关,但又不同。延迟是数据包从发送端点传输到接收端点所需的时间(仅一次行程)。许多因素可能会影响此路径,包括网络链路性能情况、网络拥堵情况还有交换机层的缓存和队列等。 ** rtt除了网络传输的时延,还有末端处理的时延** ,因此网络时延并不一定完全等于rtt的一半。因此我们 可以解释在部分主备节点的数据库中,主节点到备节点的rtt时延表现正常,低于1ms,但是备节点到主节点之间的rtt时延超过10ms ,这中间很大一部分原因是因为备节点到主节点发送数据库的时候,主节点处理耗费了大部分时间。
2、rtt的算法和测量方法2.1 rtt经典算法 [rfc793]该算法称为加权移动平均算法exponential weighted moving average,过程如下:
1) 首先,先采样rtt,记下最近几次的rtt值。
2)然后做平滑计算srtt(smoothed rtt),公式为:
srtt=(α∗srtt)+((1−α)∗rtt)其中的α取值在0.8到0.9之间3)开始计算rto。公式如下:
rto=min[ubound,max[lbound,(β∗srtt)]]ubound 是最大的 timeout 时间,上限值;lbound 是最小的 timeout 时间,下限值;β值一般在1.3到2.0之间。该算法的问题在于重传时,是用重传的时间还是第一次发数据的时间和ack回来的时间计算rtt样本值,另外,delay ack的存在也让rtt不能精确测量。
2.2 rtt标准算法(jacobson / karels算法)该算法[ rfc6298 ]特点是引入了最新的rtt的采样rtts和平滑过的srtt的差值做参数来计算。 公式如下:
1)计算平滑rtt
srtt=srtt+α(rttssrtt)2)计算平滑rtt和真实的差距(加权移动平均)
rttvar=(1−β)∗rttvar+β∗(|rtts−srtt|)3)计算rto
rto=u∗srtt+∂∗rttvar4)考虑到时钟粒度,给rto设置一个下界。
rto=max(u∗srtt+max(g,∂∗rttvar),1000)这里g为计时器粒度,1000ms为整个rto的下届值。因此rto至少为 1s。在linux下,α=0.125,β=0.25,μ=1,∂=4。
5)在首个syn交换前,tcp无法设置rto初始值。根据[rfc6298],rto初始值为1s,而初始syn报文段采用的超时间隔为3s。当计算出首个rtt测量结果rtts,则按如下方法进行初始化:
srtt=rttsrttvar=rtts/22.3 rtt测量方法每发送一个分组,tcp都会进行rtt采样,这个采样并不会每一个数据包都采样,同一时刻发送的数据包中,只会针对一个数据包采样,这个采样数据被记为samplertt,用它来代表所有的rtt。采样的方法一般有两种:
tcp timestamp选项 :在tcp选项中添加时间戳选项,发送数据包的时候记录下时间,收到数据包的时候计算当前时间和时间戳的差值就能得到rtt。这个方法简单并且准确,但是需要发送段和接收端都支持这个选项。重传队列中数据包的tcp控制块 :每个数据包第一次发送出去后都会放到重传队列中,数据包中的tcp控制块包含着一个变量,tcp_skb_cb->when,记录了该数据包的第一次发送时间。如果没有时间戳选项,那么rtt就等于当前时间和when的差值。linux内核中,更新rtt的函数为tcp_ack_update_rtt:
3、rtt网络性能检测和优化3.1 rtt时延检测方法1)使用ping命令测量rtt是最常用的方法
ping命令将icmp协议回显请求数据包发送到目的地,然后报告接收响应信号所需的时间(以毫秒为单位)。
[root@tango-rac01 ~]# ping -c 20 -i 1 www.csdn.netping r3lzca9monbh9slnohm4wwh32vxfadus.yundunwaf4.com (60.205.172.2) 56(84) bytes of data.--- r3lzca9monbh9slnohm4wwh32vxfadus.yundunwaf4.com ping statistics ---20 packets transmitted, 20 received, 0% packet loss, time 20099msrtt min/avg/max/mdev = 45.053/62.665/163.425/29.858 ms2)时延 bcc-tools工具tcprtt (内核版本为4.1以上)
tcprtt -i 1 -d 10 -a 192.168.1.100 -p 80 tracing tcp rtt... hit ctrl-c to end. msecs : count distribution 0 - > 1 : 4 | | 2 - > 3 : 0 | | 4 - > 7 : 1055 |****************************************| 8 - > 15 : 26 | | 16 - > 31 : 0 | | 32 - > 63 : 0 | | 64 - > 127 : 18 | | 128 - > 255 : 14 | | 256 - > 511 : 14 | | 512 - > 1023 : 12 | |3)使用ss -ti命令
[root@tango-rac01 tools]# ss -tistate recv-q send-q local address:port peer address:port estab 0 0 192.168.112.135:ssh 192.168.112.1:56505 cubic wscale:8,9 rto:241 rtt:40.225/0.997 ato:74 mss:1448 cwnd:10 bytes_acked:152109 bytes_received:12047 segs_out:733 segs_in:816 send 2.9mbps lastsnd:41 lastrcv:137 pacing_rate 5.8mbps rcv_rtt:28 rcv_space:28960其中有rtt:40.225/0.997数据,表示rtt均值和中位数
3.2 rtt时延优化1)rtt时延波动的原因
前文提到rtt时延包括网络传输时延和末端处理时延,末端处理时延相对比较固定,因此rtt波动很大可能和以下因素有关:
网络拥塞 :当网络拥塞时,数据包需要在网络中等待更长时间,从而导致 rtt 增加。网络质量 :网络质量差、丢包率高等问题也会导致 rtt 波动较大。网络设备问题 :网络设备的故障、配置错误等也可能导致 rtt 波动较大。2) 网络拥塞的检测方法
网络拥塞是指网络中的数据传输量超过了网络链路或节点的处理能力,导致网络性能下降或出现数据丢失等问题。除了常见的传输延迟、丢包率等指标外,还有以下几种网络拥塞的检测手段:
流量分析:通过对网络流量的监测和分析,找出网络中的高流量区域,从而判断哪些地方可能存在拥塞。响应时间监测:通过测量网络设备响应时间,判断网络是否处于拥塞状态。带宽占用监测:通过对网络带宽的监测和分析,找出网络中的高带宽占用区域,从而判断哪些地方可能存在拥塞。包延迟监测:通过测量数据包在网络中传输所需的时间,判断网络是否处于拥塞状态。拓扑分析:通过分析网络拓扑结构,找出网络中的瓶颈节点和链路,从而判断哪些地方可能存在拥塞。3)网络抖动检测方法
网络抖动是指网络通信中出现的延迟或者丢包现象,导致通信不稳定。要检测网络抖动,可以使用以下方法:
ping命令 :ping命令可以测试网络是否能够正常通信,如果出现延迟或者丢包现象,就说明存在网络抖动。tracert命令 :tracert命令可以追踪网络通信的路径,如果在通信过程中出现延迟或者丢包现象,就说明存在网络抖动。网络诊断工具 :网络诊断工具可以帮助检测网络抖动,并提供详细的网络状态信息,帮助用户更好地理解网络通信过程中出现的问题。网络质量监测系统:网络质量监测系统可以监测网络质量,包括延迟、丢包等指标,并提供实时报警和分析报告,帮助用户及时发现和解决网络抖动问题。4、总结rtt作为网络时延的检测工具,是 在应用层进行的网络性能检测 ,包括了网络传输的时延和末端响应的时延。在实际分析过程中,主机上单个服务的rtt时延较长并不能说明服务器之间的物理网络异常,需要更多的指标数据进行分析,比如相同主机上的其它服务的rtt时延、ping包时延等。
如上图所示的主机1中的服务1和主机2中的服务2和服务3配置了rtt时延监控,发现服务器1到服务2的rtt时延明显差于服务1到服务3的rtt时延。这个时候就可以辨别出,如果是网络层的性能变差,两个rtt检测的值表现上会相似,但实际上却是相反的,只能 说明服务2在响应服务1的请求处理时间比服务3长 。
因此在实际的监控配置过程中,rtt时延只能作为网络性能监控的一个参考指标,不排除会出现误判的情景,需要和其它主机和服务横向对比去分析判断。

克服对传统能源的依赖,中国立法推动可再生能源
小米6真机曝光:玫瑰金配色双摄超声波指纹
探索宇宙的重大突破?人工智能代替人类进行宇宙探索
移动安全“芯”方案丨芯盾时代入选GoUpSec《移动安全产品及服务购买决策参考》
向“高”而行 聚势破圈:中国(苏州)世界光子产业发展大会5月底在苏州开幕
RTT是什么?对TCP中RTT时延的理解
懒惰强化学习算法在发电调控REG框架的应用
深度敏感拉曼光谱在啮齿动物皮肤创伤评估中的应用
诚邀报名|与你同行——开源教育晨雾中的早行者
“三遥”遥测、遥控、遥信的智能环网柜设计解决方案
Piccolo微处理器DC-DC LED开发套件
产业洗牌小米只是开始 无人机已过剩 洗牌会比手机还惨烈
七项对策支持,我国机器人产业加速发展
高速传输的5G时代,AR安防或成下一个风口
冷气扇倾倒断电保护方案该如何实现
某终端基于重定向到4G发生VoNR掉话的问题处理化
实现模拟量子系统的人工智能神经网络
超声波避障传感器在AGV行业中的应用
一文了解高通3D Sonic Max超声波指纹传感器
苹果正研发隐藏式铰链的折叠屏iPhone