win10局域网复制特别慢 (win10局域网复制特别慢怎么办?
来源:https://blog.devgenius.io/linux-troubleshoot-network-latency-a6da740f5cb8

在 Linux 服务器中,可通过内核调优,DPDK 以及 XDP 以各种方式提高服务器的抗攻击能力,降低 DDoS 影响正常服务。各级缓存可用于应用程序中,WAF、CDN 等来缓解 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.comHPING google.com (eth0 142.250.64.110): S set, 40 headers 0 data byteslen=46 ip=142.250.64.110 ttl=51 id=47908 sport=80 flags=SA seq=0 win=8192 rtt=9.3 mslen=46 ip=142.250.64.110 ttl=51 id=6788 sport=80 flags=SA seq=1 win=8192 rtt=10.9 mslen=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 lossround-trip min/avg/max = 9.3/10.9/11.9 ms


当然,也可以用 traceroute:

$ traceroute --tcp -p 80 -n google.comtraceroute to google.com (142.250.190.110), 30 hops max, 60 byte packets1 * * *2 240.1.236.34 0.198 ms * *3 * * 243.254.11.5 0.189 ms4 * 240.1.236.17 0.216 ms 240.1.236.24 0.175 ms5 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.二、分析主机


host1 准备

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

# Official nginx$ docker run --network=host --name=good -itd nginxfb4ed7cb9177d10e270f8320a7fb64717eac3451114c9fab3c50e02be2e88ba2# Latency version of nginx
$ docker run --name nginx --network=host -itd feisky/nginx:latencyb99bd136dcfd907747d9c803fdc0255e578bad6d66f4e9c32b826d75b6812724


验证两个容器都在为流量提供服务:

$ curl http://127.0.0.1<!DOCTYPE html><html>...<p><em>Thank you for using nginx.</em></p></body></html>$ curl http://127.0.0.1:8080...<p><em>Thank you for using nginx.</em></p></body></html>


host2 准备

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

80 端口:

$ hping3 -c 3 -S -p 80 192.168.0.30HPING 192.168.0.30 (eth0 192.168.0.30): S set, 40 headers 0 data byteslen=44 ip=192.168.0.30 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=29200 rtt=7.8 mslen=44 ip=192.168.0.30 ttl=64 DF id=0 sport=80 flags=SA seq=1 win=29200 rtt=7.7 mslen=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 lossround-trip min/avg/max = 7.6/7.7/7.8 ms


8080 端口:

# 8080端口延迟测试$ hping3 -c 3 -S -p 8080 192.168.0.30HPING 192.168.0.30 (eth0 192.168.0.30): S set, 40 headers 0 data byteslen=44 ip=192.168.0.30 ttl=64 DF id=0 sport=8080 flags=SA seq=0 win=29200 rtt=7.7 mslen=44 ip=192.168.0.30 ttl=64 DF id=0 sport=8080 flags=SA seq=1 win=29200 rtt=7.6 mslen=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 lossround-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