网络延迟测量(Linux)

网络延迟测量(Linux)

我想测量 SNMP GET 请求的网络延迟。有一个免费的命令行工具time可用于查找各种命令的时间统计信息。例如,它可以snmpget按以下方式使用:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

根据手册,统计数据包括:

  • 调用和终止之间经过的实际时间,


  • 用户 CPU 时间( struct tms 中的 tms_utime 和 tms_cutime 值的总和,由
    times(2) 返回),


  • 系统 CPU 时间( struct tms 中的 tms_stime 和 tms_cstime 值的总和,由
    times(2) 返回)。

如您所见,这些选项都无法测量实际网络延迟时间(排除其他程序执行时间统计数据)。有什么办法吗?也许不是使用时间工具,而是使用一些内核黑客?

在我开始编写自己的程序之前,我想问一下。

谢谢,Piotr

答案1

tcpdump(8)程序的-ttt标志可能正是您所需要的:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

行首的时间戳显示自上一个数据包以来的时间(以微秒为单位)。通过-t在命令行中给出不同的数字,您可以获得绝对时间、自第一个数据包以来的相对时间或数据包之间的相对时间。

我刚刚展示了随机的 mdns 和 web 流量,因为这些在我的系统上很容易找到;你可以很容易地过滤 SNMP 流量,只tcpdump(8)获取你感兴趣的数据包。(这是一个好主意,因为转储繁忙系统的所有流量可能会产生巨大的加载。)

答案2

尝试 ping:

$ ping -U 192.168.1.3

来自ping手册:

-U 打印完整的用户对用户潜伏(旧行为)。通常 ping 会打印网络往返时间,但由于 DNS 故障,该时间可能会有所不同。

答案3

运行程序,同时使用tcpdump或捕获网络流量wireshark。检查请求和回复的时间并进行简单的减法。

相关内容