gpt4 book ai didi

tcpdump - 如何解决tcpdump丢包问题?

转载 作者:行者123 更新时间:2023-12-02 19:08:21 24 4
gpt4 key购买 nike

我正在使用 tcpdump 捕获网络数据包,当我开始丢弃数据包时遇到问题。我运行了一个通过网络快速交换数据包的应用程序;导致网络带宽较高。

>> tcpdump -i eno1 -s 64 -B 919400
126716 packets captured
2821976 packets received by filter
167770 packets dropped by kernel

因为我只对 TCP 数据包中的协议(protocol)相关部分感兴趣;我想收集没有数据/有效负载的 TCP 数据包。我希望这个策略也可以帮助在丢弃数据包之前捕获更多数据包。看来我只能将缓冲区大小(-B 参数)增加到一定限制。即使有更高的限制,我丢弃的数据包也多于捕获的数据包。

你能帮我理解上述消息和我的问题吗

  1. 捕获了什么数据包?
  2. 过滤器收到的数据包是什么?
  3. 内核丢弃的数据包是什么?
  4. 如何在高带宽下捕获所有数据包而不丢失任何数据包。我的测试应用程序运行了 3 分钟,并且以非常高的速率交换数据包。我只对协议(protocol)相关信息感兴趣,而不是发送的实际数据/有效负载。

最佳答案

来自Guy Harris他自己:

“捕获的数据包”数字是每次 tcpdump 看到数据包时都会递增的数字,因此它会计算 tcpdump 从 libpcap 读取的数据包,从而计算 libpcap 从 BPF 读取并提供给 tcpdump 的数据包。

“过滤器收到的数据包”编号是调用 pcap_stats() 时的“ps_recv”编号;对于 BPF,这是来自 BIOCGSTATS ioctl 的 bs_recv 编号。该计数包括所有交给 BPF 的数据包;这些数据包可能仍在 libpcap 尚未读取的缓冲区中(因此未交给 tcpdump),或者可能位于 libpcap 已读取但尚未交给 tcpdump 的缓冲区中,因此它可以对以下数据包进行计数:未报告为“已捕获”。

来自tcpdump man page :

数据包“被内核丢弃”(这是由于缺少缓冲区空间,由运行 tcpdump 的操作系统中的数据包捕获机制丢弃的数据包数量,如果操作系统向应用程序报告该信息;如果没有,则报告为 0)。

要尝试提高捕获性能,可以尝试以下几项操作:

  • 如果不需要,请勿在混杂模式下进行捕获。这将减少内核必须处理的流量。通过使用 -p 选项来执行此操作。
  • 由于您只对 TCP 流量感兴趣,因此请应用仅将流量限制为 TCP 的捕获表达式。通过将 "tcp" 附加到您的命令中来执行此操作。
  • 尝试将数据包写入文件(或限制大小的文件),而不是在屏幕上显示数据包。使用 -w file 选项执行此操作,或者如果您想限制文件大小,请查看 -C file_size-Grotate_seconds 选项。
  • 您可以尝试通过 nice 提高 tcpdump 的调度优先级.

来自 Wireshark 的 Performance维基页面:

  • 停止该计算机上运行的其他程序,以消除系统负载
  • 购买更大、更快的机器:)
  • 增加缓冲区大小(您已经在这样做)
  • 设置捕捉长度(您已经在这样做)
  • 将捕获文件写入 RAM 磁盘

尝试使用PF_RING .

您也可以尝试使用 dumpcap而不是 tcpdump,尽管如果性能截然不同,我会感到惊讶。

您可以尝试使用 TAP 或 Switch+SPAN 端口通过外部专用设备进行捕获。请参阅 Wireshark 的 Ethernet Capture Setup想法的维基页面。

另一个有希望的可能性:Capturing Packets in Linux at a Speed of Millions of Packets per Second without Using Third Party Libraries .

另请参阅安德鲁·布朗的 Sharkfest '14 Maximizing Packet Capture Performance文档以获取更多想法。

祝你好运!

关于tcpdump - 如何解决tcpdump丢包问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39866757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com