TCP中RTT时延的理解

news2024/9/25 23:25:09

最近服务器环境部署了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 时候, 如果频繁出现丢包, 重传不及时, 又会造成网络的反应慢, 最好的结果是 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+∂∗rttvar

4)考虑到时钟粒度,给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/2
2.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.net
PING 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 20099ms
rtt min/avg/max/mdev = 45.053/62.665/163.425/29.858 ms

2)时延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 -ti
State       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时延只能作为网络性能监控的一个参考指标,不排除会出现误判的情景,需要和其它主机和服务横向对比去分析判断。


参考资料:

  1. https://www.stormit.cloud/blog/what-is-round-trip-time-rtt-meaning-calculation/
  2. https://blog.csdn.net/yizhiniu_xuyw/article/details/109643610
  3. https://blog.csdn.net/weixin_52183917/article/details/127924584

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

倾向得分匹配案例分析

一、倾向得分匹配法说明 倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的&#xff0c;首次运用在生物医药领域&#xff0c;后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素&#xff08;干扰因素&#xff09;的偏差。 …

为什么硬件性能监控很重要

当今的混合网络环境平衡了分布式网络和现代技术的实施。但它们并不缺少一个核心组件&#xff1a;服务器。保持网络正常运行时间归结为监控和管理导致网络停机的因素。极有可能导致性能异常的此类因素之一是硬件。使用硬件监控器监控网络硬件已成为一项关键需求。 硬件监视器是…

连接金蝶云星空,数据交互轻松搞定!丨三叠云

金蝶云星空 路径 拓展 >> 插件 功能简介 新增插件「金蝶云星空」。 用户可通过配置「金蝶云星空」插件&#xff0c;就可以实时获取「金蝶云星空」的数据&#xff0c;同时支持回填数据至金蝶系统内。 地图视图 路径 表单 >> 表单设计 功能简介 新增「地图视…

prometheus+cadvisor监控docker

官方解释 cAdvisor&#xff08;ContainerAdvisor&#xff09;为容器用户提供了对其运行容器的资源使用和性能特性的了解。它是一个正在运行的守护程序&#xff0c;用于收集、聚合、处理和导出有关正在运行的容器的信息。具体来说&#xff0c;它为每个容器保存资源隔离参数、历史…

活动目录(Active Directory)组策略管理工具

活动目录&#xff08;Active Directory&#xff09;是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。&#xff08;Active Directory不能运行在Windows Web Server上&#xff0c;但是可以通过它对运行Windows Web Server的…

虚拟数字人直播带货相比人工有哪些优势?

新经济时代的到来&#xff0c;彻底改变了传统的消费方式。虚拟数字人的出现&#xff0c;标志着新一波的消费升级到来。虚拟数字人直播带货&#xff0c;不仅降低了商家的带货成本&#xff0c;拉近了商家与消费者的距离&#xff0c;也给消费者带来全新的消费方式。 花西子虚拟形象…

华为OD机试模拟题 用 C++ 实现 - 删除最少字符(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明删除最少字符题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率…

在Redis集群模式下使用pipeline进行批量操作

最近开始又接触到了Redis&#xff0c;之前在工作中使用Redis的时候&#xff0c;由于QPS不高&#xff0c;都是直接get/set搞定了。这次遇到的业务数据量比较大&#xff0c;更新也很频繁&#xff0c;Redis使用是集群模式&#xff0c;所以本文记录下捣鼓出来的如何在集群模式下使用…

动手学深度学习(第二版)学习笔记 第三章

第三章 线性神经网络 代码&#xff1a;d2l-zh/pytorch/chapter_linear-networks 3.1 线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation 解析解 线性回归的解可以用一个公式简单地表达出来&#xff0c;这类解叫作解析解&#xff08;analytical solution&…

深度学习实战19(进阶版)-SpeakGPT的本地实现部署测试,基于ChatGPT在自己的平台实现SpeakGPT功能

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来SpeakGPT的本地实现&#xff0c;在自己的网页部署&#xff0c;可随时随地通过语音进行问答&#xff0c;本项目项目是基于ChatGPT的语音版&#xff0c;我称之为SpeakGPT。 ChatGPT最近大火&#xff0c;其实在去年12月份…

「架构」全链路异步模式

总结自尼恩的全链路异步&#xff1a;网关纯异步化网关层的特点&#xff1a;不需要访问业务数据库只做协议转换和流量转发特点是 IO 密集型&#xff0c;特别适合纯异步的架构&#xff0c;可以极大的节省资源。如何进行网关异步化&#xff1f;使用高性能的通信框架Netty&#xff…

CSS3新增的视口单位Vh、Vw单位

定义vw&#xff1a;浏览器可见视口【宽度】的百分比&#xff08;1vw代表视窗【宽度】的1%&#xff09;vh&#xff1a;浏览器可见视口【高度】的百分比&#xff08;1vw代表视窗【高度】的1%&#xff09;vmin&#xff1a;当前 vw 和 vh 较小的一个值。vmax&#xff1a;当前 vw 和…

现在入行软测=49年入国军?三句话,让面试官再掏2K!

还有三五天就步入金三银四&#xff0c;很多软测人吐槽因为疫情&#xff0c;公司都在裁员&#xff0c;别说跳槽涨薪&#xff0c;能保住现在的工作就不错了。但也有那么一批人&#xff0c;凭借自己口才与实力拿到年薪近50W的offer。面试是初见1小时就要相互了解优缺点的过程&…

软考知识笔记 2023.2.24 2018下半年真题

答案&#xff1a; A BIOS (BasicInputOutputSystem) (基本输入输出系统) 是一组固化到计算机内主板上一个ROM芯片上的程序&#xff0c; 它保存着计算机最重要的基本输入输出的程序&#xff0c; 开机后自检程序和系统自启动程序&#xff0c; 它可从CMOS中读写系统设置的具体信息…

SpringBoot整合(六)多数据源和 JPA、MyBatis、JdbcTemplate 的集成

在springboot项目中&#xff0c;我们可能会碰到需要多数据源的场景。例如说&#xff1a; 读写分离&#xff1a;数据库主节点压力比较大&#xff0c;需要增加从节点提供读操作&#xff0c;以减少压力。多数据源&#xff1a;一个复杂的单体项目&#xff0c;因为没有拆分成不同的…

PPP简介,PPP分层体系架构,PPP链路建立过程及PPP的帧格式

PPP&#xff08;Point-to-Point Protocol&#xff09;是一种用于在两个网络节点之间传输数据的通信协议。它最初是为在拨号网络上进行拨号连接而开发的&#xff0c;现在已经被广泛应用于各种网络环境中&#xff0c;例如在宽带接入、虚拟专用网&#xff08;VPN&#xff09;等场景…

在linux中使用lftp和sftp下载文件(夹)

一、首先确保你的系统中已经下载了lftp和sftp。 1.安装lftp sudo apt install lftp sudo apt install screen 2.安装sftp 在Linux系统中&#xff0c;一般RedHat系统默认已经安装了openssh-client和openssh-server&#xff0c;即默认已经集成了sftp服务&#xff0c;不需要重…

LVGL8.3 集成 ST7789V 显示驱动和 CST816T 触摸屏驱动

LVGL8.3 集成 ST7789V 显示驱动和 CTS816S 触摸屏驱动起因效果&#xff08;正常显示&#xff0c;触摸屏可调换X&#xff0c;Y轴&#xff09;使用方式前提操作步骤最后参考起因 LVGL的ESP32 Drivers库中已经包含了大多数显示和触摸芯片的驱动&#xff0c;基本上只需要在MenuCon…

高级前端面试题汇总

iframe 有那些优点和缺点&#xff1f; iframe 元素会创建包含另外一个文档的内联框架&#xff08;即行内框架&#xff09;。 优点&#xff1a; 用来加载速度较慢的内容&#xff08;如广告&#xff09;可以使脚本可以并行下载可以实现跨子域通信 缺点&#xff1a; iframe 会…

【ssm框架】从0开始搭建ssm框架(idea版本)

SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、MyBatis两个开源框架整合而&#xff08;SpringMVC是Spring中的部分内容&#xff09;&#xff0c;常作为数据源较简单的web项目的框架。 一、 环境介绍 先创建一个web工程。这里使用SSM最终完成一个员工信息的…