gpt4 book ai didi

c - 如何了解 UDP 数据包在我的 ubuntu C 程序中被丢弃的位置

转载 作者:行者123 更新时间:2023-11-30 16:42:01 25 4
gpt4 key购买 nike

我正在使用 python 工具在一个虚拟机中生成数据包,并在另一个虚拟机中作为 Linux 进程运行的程序中捕获它们。两个虚拟机都是 ubuntu 并且在同一子网上运行。我注意到我的程序中有些数据包被丢弃。了解数据包丢失位置的最佳工具是什么?

我发现当我发送新数据包时,netstat 输出中的 RcvbufErrors 会增加。

# netstat -us
IcmpMsg:
InType0: 14
InType3: 1493
InType5: 204
InType8: 54
InType13: 5
InType17: 5
OutType0: 54
OutType3: 645946
OutType8: 584
OutType14: 5
Udp:
7686124 packets received
646545 packets to unknown port received.
33928069 packet receive errors
7157259 packets sent
RcvbufErrors: 33928069
IgnoredMulti: 345772
UdpLite:
IpExt:
InMcastPkts: 4
InBcastPkts: 363522
InOctets: 13243409806
OutOctets: 8445992434
InMcastOctets: 144
InBcastOctets: 114457552
InNoECTPkts: 100191590
InECT0Pkts: 143

最佳答案

好吧,如果您认为需要找出一些数据包在哪里被丢弃,这可能没有用,因为您已经知道至少 RcvbufErrors 这个数字正在增长。这意味着 NIC 能够将数据包传送到内核,但后者无法将数据包传送到应用程序,显然,因为固定大小的接收缓冲区变满的速度比应用程序读取数据的速度快(或者只是冲洗它)。

所以,我想说这样的结果只会给人留下糟糕的应用程序设计的印象。也许,您应该考虑一些好的技术来增强应用程序中的数据包捕获,以便每秒捕获/检查/丢弃更多数据包。一个很好的例子是 PACKET_MMAP Rx 环,它有一个 exhaustive description并广泛用于基于libpcap的应用程序。后一个方面使得使用 wireshark 或仅 tcpdump 而不是您手工制作的应用程序来检查真实捕获率等确实合理。

关于c - 如何了解 UDP 数据包在我的 ubuntu C 程序中被丢弃的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062621/

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