您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

有了这款 Linux 网络延迟排查方法,再也不用加班了

时间:2022-09-21 15:45:44  来源:今日头条  作者:Python部落

linux 服务器中,可以通过内核调优、DPDK 以及 XDP 等多种方式提高服务器的抗攻击能力,降低 DDoS 对正常服务的影响。在应用程序中,可以使用各级缓存、WAF、CDN 等来缓解 DDoS 对应用程序的影响。

但是需要注意的是,如果 DDoS 流量已经到达 Linux 服务器,那么即使应用层做了各种优化,网络服务延迟一般也会比平时大很多。

因此,在实际应用中,我们通常使用 Linux 服务器,配合专业的流量清洗和网络防火墙设备,来缓解这个问题。

除了 DDoS 导致的网络延迟增加,我想你一定见过很多其他原因导致的网络延迟,例如:

  • 网络传输慢导致的延迟。

  • Linux 内核协议栈数据包处理速度慢导致的延迟。

  • 应用程序数据处理速度慢造成的延迟等。

那么当我们遇到这些原因造成的延误时,我们该怎么办呢?如何定位网络延迟的根本原因?让我们在本文中讨论网络延迟。

Linux 网络延迟

谈到 网络延迟.NETwork Latency),人们通常认为它是指网络数据传输所需的时间。但是,这里的“时间”是指双向流量,即数据从源发送到目的地,然后从目的地地址返回响应的往返时间: RTT(Round-Trip Time)

除了 网络延迟之外,另一个常用的指标是 应用延迟(Application Latency),它是指应用接收请求并返回响应所需的时间。通常, 应用延迟也称为 往返延迟,它是网络数据传输时间加上数据处理时间的总和。

通常人们使用 ping 命令来测试网络延迟, ping 是基于 ICMP 协议的,它通过计算 ICMP 发出的 响应报文和 ICMP 发出的 请求报文之间的时间差来获得往返延迟时间。这个过程不需要特殊的认证,从而经常被很多网络攻击所利用,如,端口扫描工具 nmap 、分组工具 hping3 等。

因此,为了避免这些问题,很多网络服务都会禁用 ICMP,这使得我们无法使用 ping 来测试网络服务的可用性和往返延迟。在这种情况下,您可以使用 traceroute 或 hping3 的 TCP 和 UDP 模式来获取网络延迟。

例如:

# -c: 3 requests

# -S: Set TCP SYN

# -p: Set port to 80

$ hping3 -c 3 -S -p 80 google.com

HPING google.com (eth0 142.250.64.110): S set, 40 headers + 0 data bytes

len=46 ip=142.250.64.110 ttl=51 id=47908 sport=80 flags=SA seq=0 win=8192 rtt=9.3 ms

len=46 ip=142.250.64.110 ttl=51 id=6788 sport=80 flags=SA seq=1 win=8192 rtt=10.9 ms

len=46 ip=142.250.64.110 ttl=51 id=37699 sport=80 flags=SA seq=2 win=8192 rtt=11.9 ms

--- bAIdu.com hping statistic ---

3 packets transmitted, 3 packets received, 0% packet loss

round-trip min/avg/max = 9.3/10.9/11.9 ms

当然,你也可以使用 traceroute :

$ traceroute --tcp -p 80 -n google.com

traceroute to google.com (142.250.190.110), 30 hops max, 60 byte packets

1 * * *

2 240.1.236.34 0.198 ms * *

3 * * 243.254.11.5 0.189 ms

4 * 240.1.236.17 0.216 ms 240.1.236.24 0.175 ms

5 241.0.12.76 0.181 ms 108.166.244.15 0.234 ms 241.0.12.76 0.219 ms

...

24 142.250.190.110 17.465 ms 108.170.244.1 18.532 ms 142.251.60.207 18.595 ms

traceroute 会在路由的每一跳(hop)发送三个数据包,并在收到响应后输出往返延迟。如果没有响应或响应超时(默认 5s),将输出一个星号 * 。

案例展示

我们需要在此演示中托管 host1 和 host2 两个主机:

  • host1 (192.168.0.30):托管两个 Nginx Web 应用程序(正常和延迟)

  • host2 (192.168.0.2):分析主机

host1 准备

在 host1 上,让我们运行启动两个容器,它们分别是官方 Nginx 和具有延迟版本的 Nginx:

# Official nginx

$ Docker run --network=host --name=good -itd nginx

fb4ed7cb9177d10e270f8320a7fb64717eac3451114c9fab3c50e02be2e88ba2

# Latency version of nginx

$ docker run --name nginx --network=host -itd feisky/nginx:latency

b99bd136dcfd907747d9c803fdc0255e578bad6d66f4e9c32b826d75b6812724

运行以下命令以验证两个容器都在为流量提供服务:

$ curl http://127.0.0.1

<!DOCTYPE html>

<html>

...

<p><em>Thank you forusing nginx.</em></p>

</body>

</html>

$ curl http://127.0.0.1:8080

...

<p><em>Thank you forusing nginx.</em></p>

</body>

</html>

host2 准备

现在让我们用上面提到的 hping3 来测试它们的延迟,看看有什么区别。在 host2 中,执行以下命令分别测试案例机的 8080 端口和 80 端口的延迟:

80 端口:

$ hping3 -c 3 -S -p 80 192.168.0.30

HPING 192.168.0.30 (eth0 192.168.0.30): S set, 40 headers + 0 data bytes

len=44 ip=192.168.0.30 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=29200 rtt=7.8 ms

len=44 ip=192.168.0.30 ttl=64 DF id=0 sport=80 flags=SA seq=1 win=29200 rtt=7.7 ms

len=44 ip=192.168.0.30 ttl=64 DF id=0 sport=80 flags=SA seq=2 win=29200 rtt=7.6 ms

--- 192.168.0.30 hping statistic ---

3 packets transmitted, 3 packets received, 0% packet loss

round-trip min/avg/max = 7.6/7.7/7.8 ms

8080 端口:

# 测试8080端口延迟

$ hping3 -c 3 -S -p 8080 192.168.0.30

HPING 192.168.0.30 (eth0 192.168.0.30): S set, 40 headers + 0 data bytes

len=44 ip=192.168.0.30 ttl=64 DF id=0 sport=8080 flags=SA seq=0 win=29200 rtt=7.7 ms

len=44 ip=192.168.0.30 ttl=64 DF id=0 sport=8080 flags=SA seq=1 win=29200 rtt=7.6 ms

len=44 ip=192.168.0.30 ttl=64 DF id=0 sport=8080 flags=SA seq=2 win=29200 rtt=7.3 ms

--- 192.168.0.30 hping statistic ---

3 packets transmitted, 3 packets received, 0% packet loss

round-trip min/avg/max = 7.3/7.6/7.7 ms

从这个输出中您可以看到两个端口的延迟大致相同,均为 7 毫秒。但这仅适用于单个请求。如果换成并发请求怎么办?接下来,让我们用 wrk (https://Github.com/wg/wrk) 试试。

80 端口:

$ wrk --latency -c 100 -t 2 --timeout 2 http://192.168.0.30/

Running 10s test@ http://192.168.0.30/

2 threads and 100 connections

Thread Stats Avg Stdev Max +/- Stdev

Latency 9.19ms 12.32ms 319.61ms 97.80%

Req/Sec 6.20k 426.80 8.25k 85.50%

Latency Distribution

50% 7.78ms

75% 8.22ms

90% 9.14ms

99% 50.53ms

123558 requests in10.01s, 100.15MB read

Requests/sec: 12340.91

Transfer/sec: 10.00MB

8080 端口:

$ wrk --latency -c 100 -t 2 --timeout 2 http://192.168.0.30:8080/

Running 10s test@ http://192.168.0.30:8080/

2 threads and 100 connections

Thread Stats Avg Stdev Max +/- Stdev

Latency 43.60ms 6.41ms 56.58ms 97.06%

Req/Sec 1.15k 120.29 1.92k 88.50%

Latency Distribution

50% 44.02ms

75% 44.33ms

90% 47.62ms

99% 48.88ms

22853 requests in10.01s, 18.55MB read

Requests/sec: 2283.31

Transfer/sec: 1.85MB

从以上两个输出可以看出,官方 Nginx(监听 80 端口)的平均延迟为 9.19ms,而案例 Nginx(监听 8080 端口)的平均延迟为 43.6ms。从延迟分布上来看,官方 Nginx 可以在 9ms 内完成 90% 的请求;对于案例 Nginx,50% 的请求已经达到 44ms。

那么这里发生了什么呢?我们来做一些分析:

在 host1 中,让我们使用 tcpdump 捕获一些网络数据包:

$ tcpdump -nn tcp port 8080 -w nginx.pcap

现在,在 host2 上重新运行 wrk 命令

$ wrk --latency -c 100 -t 2 --timeout 2 http://192.168.0.30:8080/

当 wrk 命令完成后,再次切换回 Terminal 1(host1 的终端)并按 Ctrl+C 结束 tcpdump 命令。然后,用 Wireshark 把抓到的 nginx.pcap 复制到本机(如果 VM1(host1 的虚拟机)已经有图形界面,可以跳过复制步骤),用 Wireshark 打开。

由于网络包的数量很多,我们可以先过滤一下。例如,选中一个包后,可以右键选择 “Follow”->“TCP Stream”,如下图:

然后,关闭弹出的对话框并返回 Wireshark 主窗口。这时你会发现 Wireshark 已经自动为你设置了一个过滤表达式 tcp.stream eq 24 。如下图所示(图中省略了源 IP 和目的 IP):

从这里,您可以看到从三次握手开始,此 TCP 连接的每个请求和响应。当然,这可能不够直观,可以继续点击菜单栏中的 Statistics -> Flow Graph,选择 “Limit to display filter”,将 Flow type 设置为 “TCP Flows”:

请注意,此图的左侧是客户端,而右侧是 Nginx 服务器。从这个图中可以看出,前三次握手和第一次 HTTP 请求和响应都相当快,但是第二次 HTTP 请求就比较慢了,尤其是客户端收到服务器的第一个数据包后,该 ACK 响应(图中的蓝线)在 40ms 后才被发送。

看到 40ms 的值,你有没有想到什么?事实上,这是 TCP 延迟 ACK的最小超时。这是 TCP ACK 的一种优化机制,即不是每次请求都发送一个 ACK,而是等待一段时间(比如 40ms),看看有没有“搭车”的数据包。如果在此期间还有其他数据包需要发送,它们将与 ACK 一起被发送。当然,如果等不及其他数据包,超时后会单独发送 ACK。

由于案例中的客户端发生了 40ms 延迟,我们有理由怀疑客户端开启了 延迟确认机制(Delayed Acknowledgment Mechanism)。这里的客户端其实就是之前运行的 wrk 。

根据 TCP 文档,只有在 TCP 套接字专门设置了 TCP_QUICKACK 时才会启用 快速确认模式(Fast Acknowledgment Mode);否则,默认使用 延迟确认机制

TCP_QUICKACK (since Linux 2.4.4)

Enable quickack mode ifsetor disablequickack mode ifcleared. In quickack mode, acks are sent imme‐

diately, rather than delayed ifneeded inaccordance to normal TCP operation. This flag is not perma‐

nent, it only enables a switch to or from quickack mode. Subsequent operation of the TCP protocol will

once again enter/leave quickack mode depending on internal protocol processing and factors such as

delayed ack timeouts occurring and data transfer. This option should not be used incode intended to be

portable.

让我们测试一下我们的质疑:

$ strace -f wrk --latency -c 100 -t 2 --timeout 2 http://192.168.0.30:8080/

...

setsockopt(52, SOL_TCP, TCP_NODELAY, [1], 4) = 0

...

可以看到 wrk 只设置了 TCP_NODELAY 选项,没有设置 TCP_QUICKACK 。现在您可以看到为什么延迟 Nginx(案例 Nginx)响应会出现一个延迟。

结论

在本文中,我们向您展示如何分析增加的网络延迟。网络延迟是核心网络性能指标。由于网络传输、网络报文处理等多种因素的影响,网络延迟是不可避免的。但过多的网络延迟会直接影响用户体验。

  • 使用 hping3 和 wrk 等工具确认单个请求和并发请求的网络延迟是否正常。

  • 使用 traceroute ,确认路由正确,并查看路由中每个网关跳跃点的延迟。

  • 使用 tcpdump 和 Wireshark 确认网络数据包是否正常收发。

  • 使用 strace 等观察应用程序对网络 socket 的调用是否正常。

来源:https://blog.devgenius.io/linux-troubleshoot-network-latency-a6da740f5cb8



Tags:网络延迟   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
简易百科之什么是网络延迟?
简易百科之什么是网络延迟?随着互联网的普及和发展,网络已经成为我们生活中不可或缺的一部分。然而,我们在使用网络时可能会遇到一种情况,那就是网络延迟。那么,什么是网络延迟呢...【详细内容】
2024-01-24  Search: 网络延迟  点击:(149)  评论:(0)  加入收藏
网络延迟与网络速度有什么区别?分享具体的答案
通常,许多人抱怨网速测试。速度还是不错的,但是他们玩游戏的时候怎么会卡住,还是断开连接等等问题,这一系列问题始终困扰着大家。那么,网络延迟与网络速度有什么区别呢?请不要担心...【详细内容】
2024-01-24  Search: 网络延迟  点击:(51)  评论:(0)  加入收藏
利用网络延迟对购物平台“薅羊毛” 一新型网络诈骗案告破
利用网络延迟对购物平台“薅羊毛”兰州警方破获一起新型网络诈骗案1秒左右的网络延迟,被犯罪嫌疑人发现后动起歪脑筋,“巧妙”利用疯狂“薅羊毛”。今年7月,甘肃省兰州市公安局...【详细内容】
2023-08-09  Search: 网络延迟  点击:(81)  评论:(0)  加入收藏
以太网交换机中的网络延迟是什么呢?
网络延迟指的是网络等待时间,是指一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间。网络延迟是影响网络速度的因素之一。那么,网络...【详细内容】
2022-11-07  Search: 网络延迟  点击:(544)  评论:(0)  加入收藏
有了这款 Linux 网络延迟排查方法,再也不用加班了
在 Linux 服务器中,可以通过内核调优、DPDK 以及 XDP 等多种方式提高服务器的抗攻击能力,降低 DDoS 对正常服务的影响。在应用程序中,可以使用各级缓存、WAF、CDN 等来缓解 DDo...【详细内容】
2022-09-21  Search: 网络延迟  点击:(552)  评论:(0)  加入收藏
SpaceX申请新频段:以扩大服务范围 网络延迟将低于50毫秒
9月8日消息,当地时间周二SpaceX向美国联邦通信委员会(FCC)申请更多频谱资源,从而为更多移动用户提供星链卫星互联网服务。 SpaceX在提交给FCC的申请文件中提出使用1.6 Ghz和2....【详细内容】
2022-09-08  Search: 网络延迟  点击:(225)  评论:(0)  加入收藏
网络丢包,网络延迟?这款神器帮你搞定所有
常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络联通性判断工具,它可以结合ping nslookup traceroute 来判断网络的相关特性,这个...【详细内容】
2022-06-07  Search: 网络延迟  点击:(499)  评论:(0)  加入收藏
论降低网络延迟 5G甩4G好几条街
很多人都知道5G网速快,一部超高清电影只需要几十秒就可以下载好,用测速软件跑一跑,发现5G的下载速度是4G的10倍&hellip;&hellip;在惊呼5G比4G快很多的同时,我们也不能忽视5G“低...【详细内容】
2021-04-16  Search: 网络延迟  点击:(449)  评论:(0)  加入收藏
6款免费网络延迟测试工具
作为网络管理员或网络工程师,时刻关注网络的交付速度至关重要。不仅需要确保自己有良好的响应时间,还需要确保网络的速度足以满足用户通信所需的每一条路径。而手动测试每个路...【详细内容】
2020-06-01  Search: 网络延迟  点击:(697)  评论:(0)  加入收藏
6款免费网络延迟测试工具,等你来下载
作为网络管理员或网络工程师,时刻关注网络的交付速度至关重要。不仅需要确保自己有良好的响应时间,还需要确保网络的速度足以满足用户通信所需的每一条路径。而手动测试每个路...【详细内容】
2019-11-14  Search: 网络延迟  点击:(984)  评论:(0)  加入收藏
▌简易百科推荐
手机就可以修改WiFi密码,进行网络提速,还能防止别人蹭网
随着网络的普及和使用频率的增加,很多人可能遇到了一些网络管理上的问题,比如忘记了WiFi密码、网络速度缓慢、或者发现有不明设备在家中蹭网。相信朋友们也曾遇到过吧?但是,你知...【详细内容】
2024-04-03  老毛桃    Tags:WiFi密码   点击:(7)  评论:(0)  加入收藏
手机WiFi信号满格却接收消息延迟?这里有妙招帮你解决!
在现代社会,手机已经成为了我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,手机都扮演着重要的角色。然而,有时我们会遇到一些令人烦恼的问题,比如明明手机WiFi信号满格...【详细内容】
2024-04-03  蔡前进    Tags:手机WiFi   点击:(6)  评论:(0)  加入收藏
SASE技术应用落地的五个关键趋势
在Gartner 最新发布的《2023网络技术成熟度曲线》报告中认为,SASE技术已经开始走出最初的技术炒作期,将逐步迈向新一轮的实用落地阶段。在Gartner发布的《Hype Cycle for Ente...【详细内容】
2024-04-01    安全牛  Tags:SASE   点击:(10)  评论:(0)  加入收藏
提示“该网站安全证书存在问题,连接可能不安全”如何解决
在你输入网址并浏览网页时,如果你的浏览器弹出一个警告,提示“网站的安全证书存在问题”,或是显示一个红色的锁标志,这些都是网站不安全的警示。这些提示通常是由HTTPS协议中的S...【详细内容】
2024-03-18  倏然间    Tags:网站安全证书   点击:(9)  评论:(0)  加入收藏
如何有效排除CAN总线错误
控制器局域网(CAN)控制器局域网(CAN)是现代车辆中电子元件无缝运行的基础。在远程信息处理领域,CAN总线系统的效率至关重要,其能够实现支撑当今汽车技术的复杂功能。然而,CAN总...【详细内容】
2024-02-20    千家网  Tags:CAN   点击:(49)  评论:(0)  加入收藏
网络连接受限或无连接怎么办?这里提供几个修复办法
可能错误提示 连接受限或无连接:连接具有有限的连接或无连接。你可能无法访问Internet或某些网络资源。 连接受限。排除和解决“连接受限或无连接”错误此错误可能由计算机上...【详细内容】
2024-02-06  驾驭信息纵横科技    Tags:网络连接受限   点击:(43)  评论:(0)  加入收藏
如何将Mac连接到以太网?这里有详细步骤
在Wi-Fi成为最流行、最简单的互联网连接方式之前,每台Mac和电脑都使用以太网电缆连接。这是Mac可用端口的标准功能。如何将Mac连接到以太网如果你的Mac有以太网端口,则需要以...【详细内容】
2024-02-03  驾驭信息纵横科技    Tags:Mac   点击:(66)  评论:(0)  加入收藏
简易百科之什么是端口映射
端口映射,也称为端口转发,是一种网络通信中的技术手段,通过将内网中的一个端口上的数据流量转发到另一个端口,使得外部网络能够访问到内部网络中的特定服务。在实现上,端口映射通...【详细内容】
2024-01-26    简易百科  Tags:端口映射   点击:(156)  评论:(0)  加入收藏
ip因频繁登陆已被禁止访问 无法显示图片 怎么办
首先,我们要明白,部分网站为了有效遏制数据爬取和非法攻击,保证访问速度和普通用户查询,会在系统中增加网络安全设备,加强安全防护机制,并提前设置安全访问规则。因此,一旦用户的行...【详细内容】
2024-01-20  何福意思    Tags:ip   点击:(64)  评论:(0)  加入收藏
电脑连上wifi却上不了网怎么办
当电脑连接上 WiFi 却无法上网时,可能会让人感到困惑和沮丧。这个问题通常会有多种可能的原因,包括网络配置问题、路由器故障、无线适配器问题等。在面对这个问题时,可以尝试以...【详细内容】
2024-01-16  编程资料站    Tags:wifi   点击:(69)  评论:(0)  加入收藏
站内最新
站内热门
站内头条