如何用scapy计算丢包率?

How to calculate packet loss rate with scapy?

我正在尝试计算视频 运行 时来自 YouTube 的丢包率。

我在 eth0 上通过 Scapy 一个一个地嗅探数据包并过滤 TCP 具有 IP[=23 的数据包=] header。

要计算数据包丢失率,我应该有一些接收数据包和一些发送数据包(或例外数据包) .

我可以很容易地计算出收到的数据包数量,但是我对从youtube发送的数据包有问题。

比这要复杂一点,你需要看看重传(在超时限制内未确认的数据包)。

您看不到来自另一端的数据包在到达您之前丢失了。您可以做的是查看 TCP 序列号,看看是否存在您接收乱序的数据包的间隙。

这可能是数据包丢失的迹象,但不能保证。在将其计为重传之前,您可能需要对两个数据包之间允许的间隔时间限制进行​​一些试验,而不仅仅是出于其他原因的乱序到达。

我建议尽可能多地阅读 TCP 协议以了解详细信息:https://en.wikipedia.org/wiki/Transmission_Control_Protocol

我推荐你试试这个:

准备低、中、高流量的模拟流量。如果您将生成流量,您将提前知道将发送的总数据包。

1) 首先用tcpdump抓取所有流量

2) 其次用scapy捕获所有流量(避免用python将数据包保存到磁盘)。

您将看到以下内容:

  • 低流量 25% 数据包 scapy 丢失。
  • 中等流量 67% 数据包 scapy 丢失。
  • 高流量89%! packet 丢失 scape.

数据来源:计算机安全 – ESORICS 2011:第 16 届欧洲计算机安全研究研讨会。

我自己试了一下,得到了同样的结果。 在没有启用 libpcap 的情况下,scapy 数据包丢失率为 96%。

记住 tcpdump 几乎是比较的完美案例。

经过更多google搜索,我发现了一篇来自 Cisco 的文章,其中解释了如何根据带宽估算丢包率。

这是link,对我有帮助希望对你也有帮助。

Bandwidth, Packets Per Second, and Other Network Performance Metrics

谢谢。