我正在使用python工具在一个虚拟机中生成数据包,并将它们捕获到我的程序中,作为另一个虚拟机中的Linux进程运行。这两个虚拟机都是ubuntu,它们在同一个子网上运行。我注意到一些数据包在我的程序中丢失了。知道数据包丢弃的最佳工具是什么?如何理解UDP数据包在我的ubuntu C程序中丢失的位置
我发现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
UDP本身就是不可靠的。数据包可能会从任何地方掉落。您必须嗅探网络流量,例如Wireshark,以查看它是否位于发送端,接收端以及它们之间的任何位置。 [可能由linux内核丢弃UDP数据包的重复](https://stackoverflow.com/questions/10899937/)。最有可能的是,接收方不会像发送方发送数据包那样快速接收数据包,因此接收缓冲区会填满并丢弃数据包。 –
@Jim在netstat输出显示接收缓冲区时收到数据包,但接收缓冲区在应用程序可以使用之前变满。 – Adel