我在本地局域网上,只有8台连接的计算机使用netgear 24端口千兆交换机,网络负载非常低,所有相关节点(运行slackware 11)上的发送/接收缓冲区已设置为16mb。我还在每个节点上运行tcpdump来监控流量。
发送节点发送一个10044字节的大型UDP数据包,通常情况下(3/4次)不会在接收方应用程序中结束,在这些情况下,我注意到(使用tcpdump)前面的x个片段丢失了只有最后3个(所有偏移量> 0且按顺序)都被tcpdump捕获。因此,碎片化的UDP包不能重新组装,很可能被丢弃。
我发现丢失的片段很奇怪,因为我还尝试了一个简单的负载测试,突破了相同大小的10000条UDP消息,接收应用程序发送了一个响应,到目前为止所有测试都给出了100%的响应。
任何线索或提示?
答案 0 :(得分:1)
更新!
在恢复上述软件的测试后,我找到了一种重现错误的可重复方法。
在发送Windows机器上使用windump,在接收机器上使用tcpdump,在将应用程序空闲一段时间(约5分钟)后,我尝试发送udp消息,但最终只有一个被windump捕获的片段和tcpdump,其余3个片段丢失了。再次发送相同的消息工作正常,booth windump和tcpdump捕获所有4个片段,接收端的应用程序获取消息。这种模式是可重复的。
开始搜索并找到以下信息,但对我来说,仍然不是一个明确的答案。
http://www.eggheadcafe.com/software/aspnet/32856705/first-udp-message-to-a-sp.aspx
重新检查日志我现在注意到正在发送的ARP请求/回复,它与上面链接中给出的一个想法相符。
请注意!我使用以下方法过滤发送方的windump:“dst host receivernode”
从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)
任何对最新情况有所了解的人?请详细说明!