我在一个本地局域网上,只有8台连接的计算机使用netgear 24端口千兆位交换机,网络负载非常低,所有相关节点(运行slackware 11)上的发送/接收缓冲区都被设置为16mb。我还在每个节点上运行tcpdump来监控流量。
发送节点发送一个10044字节的大UDP数据包,它通常(3/4次)不会在接收方应用程序中结束,在这些情况下,我注意到(使用tcpdump)前x个片段丢失,只有最后3个片段(所有偏移量>0且按顺序)被tcpdump捕获。因此,零碎的UDP包无法重新组装,很可能会被丢弃。
我发现丢失的片段很奇怪,因为我还尝试了一个简单的负载测试,它突发了10000个相同大小的UDP消息,接收应用程序发送一个响应,到目前为止所有的测试都返回了100%的响应。
有什么线索或提示吗?
发布于 2010-02-08 23:06:51
更新!
在恢复对上面提到的软件的测试后,我找到了一种可重复的方法来重现错误。
在发送windows机器上使用windump,在接收机器上使用tcpdump,在使应用程序空闲一段时间(~5分钟)后,我尝试发送udp消息,但最终只有一个片段被windump和tcpdump捕获,剩下的3个片段丢失。再次发送相同的消息可以很好地工作,booth和tcpdump捕获所有4个片段,接收端的应用程序获得消息。这种模式是可重复的。
开始搜索,找到了以下信息,但对我来说,仍然没有明确的答案。
http://www.eggheadcafe.com/software/aspnet/32856705/first-udp-message-to-a-sp.aspx
重新检查日志我现在注意到发送的ARP请求/回复,这与上面链接中给出的想法之一相匹配。
注意!我在发送端使用"dst host receivernode“过滤了windump。
从windump捕获:第一个失败的udp消息,长度应为4个片段
14:52:45.342266 arp who-has receivernode tell sendernode
14:52:45.342599 IP sendernode> receivernode : udp
从windump捕获:第二个udp消息,内容完全相同,所有4个片段都被捕获
14:52:54.132383 IP sendernode.10104 > receivernode .10113: UDP, length 6019
14:52:54.132397 IP sendernode> receivernode : udp
14:52:54.132406 IP sendernode> receivernode : udp
14:52:54.132414 IP sendernode> receivernode : udp
14:52:54.132422 IP sendernode> receivernode : udp
14:52:56.142421 arp reply sendernode is-at 00:11:11:XX:XX:fd (oui unknown)
有谁知道发生了什么事吗?请详细说明!
https://stackoverflow.com/questions/1324819
复制相似问题