我正在尝试计算网络上服务器的任何 snmp 流量(输入或输出)的网络利用率百分比。我已遵循以下步骤,有人能指出我在此过程中是否出了错吗?
步骤 1:运行 tcpdump 一分钟,捕获所有源端口或目标端口为 161(snmp)的数据包,并将其发送到文本文件
步骤 2:从捕获的数据包中提取长度,示例如下
11:09:59.602526 IP (tos 0x0, ttl 252, id 21267, offset 0, flags [none], proto UDP (17), **length 84**)
myremotedevice.snmp > mylocalserver.32802: { SNMPv1 C=public { GetResponse(37) R=<redected> E:redected=redected } }
步骤 3:添加文件中的所有长度,假设总长度 = 4505407 字节
步骤4:执行Y=(X * 8)/60得到每秒的位数。
Y = (4505407 * 8) / 60
Y = 600720.93
步骤 5:我有一个千兆网络,因此要找到网络实用性,我执行以下操作:%util =(Y / 1000000000)* 100
%util = (600720.93/1000000000) * 100
%util = 0.06%
因此,我可以得出结论,我的服务器每秒 SNMP 流量的网络利用率为 0.06%
那么,问题是,上述计算准确吗?谢谢!
答案1
不,这个结果大约是应有结果的两倍。
由于您的过滤器的源端口或目标端口都是 161,所以这意味着您对传入和传出的 SNMP 流量都感兴趣。
千兆以太网始终是交换式的,这意味着它始终是全双工的。因此,它具有 1 千兆位/秒的传入带宽,加上 1 千兆位/秒的传出带宽,总计 2 千兆位/秒的聚合带宽。因此,您应该除以 20 亿,而不是 10 亿。
除此之外,对于大多数目的而言,您的计算可能已经足够接近了。如果您想要更精确,可以考虑强制性数据包间间隙、物理层前导码和帧起始分隔符所占用的时间。千兆以太网发送比特时,其发送速度为每秒 1,000,000,000 比特,但不会持续发送有用的比特(因为我提到的强制性间隙和前导码)。这些东西不会显示在 tcpdump 捕获的内容中,因此为了做到极致精确,您必须记住考虑它们。如果我没记错的话,间隙是 96 位时间,前导码+分隔符是 64 位,每个数据包总共有 160 个“不可见”比特。
编辑以添加:您可能还需要仔细检查您从该 tcpdump 输出中使用的长度字段是否是完整的以太网帧长度,而不仅仅是 IP 或 UDP 数据报长度。