在send()调用期间/之间更改ARP表的效果

时间:2016-02-16 16:26:03

标签: linux sockets networking arp

an issue we're having之后,我试图了解当进程忙于写入数据(数千个UDP视频数据包+偶尔的TCP消息)时,ARP表的影响/影响会发生变化套接字使用重复调用send()

似乎无论出于何种原因,我们的过程(更准确地说:Live555 WIS-Streamer的过程)被此事件绊倒/阻止。

任何人都可以帮助我理解在这种情况下可能发生的事情 - 我们可能期望/从send()捕获的错误/返回状态,我们如何在代码中缓解这种情况?

我目前正在阅读名为Understanding Linux network Internals的信息小册子(仅1035页),但有助于加快调试过程的任何提示都非常受欢迎!

编辑添加:我不希望别人认为我忽略了有关港口状态或流程状态的问题,问题很少发生(平均每24小时一次)只有在我们无法轻易访问的一个(远程)安装上,我们才会在实验室中努力复制它,以便我们可以进行更详细的诊断,但系统监视器会在约3分钟内重置问题发生了,所以当新闻到达我们时它已经重新启动并开始正常工作。

编辑以添加Wireshark信息: 我不确定在这里总结wireshark捕获的最佳方法(很难上传~1Tb捕获的数据包!)但我会尝试。 Cam:X& Cam:Y是来自不同端口的两个相同的Live555 WIS Streamer实例流传输的两个RTSP视频流。服务器' A'和' B'是服务器上两个NIC的MAC。

数据包序列如下:

UDP Packet from Cam:X -> Server 'A'
UDP Packet from Cam:Y -> Server 'A'
UDP Packet from Cam:X -> Server 'A'
UDP Packet from Cam:Y -> Server 'A'
UDP Packet from Cam:X -> Server 'A'
UDP Packet from Cam:Y -> Server 'A'
ARP Packet to Cam from Server 'B' "<my IP> is now on 'B'"
Intel ANS Probe broadcast from Server 'B', Sender ID '1' team ID 'B'
Intel ANS Probe broadcast from Server 'A', Sender ID '2' team ID 'B'
<silence> from Cam:X
UDP Packet from Cam:Y -> Server 'B'
UDP Packet from Cam:Y -> Server 'B'
UDP Packet from Cam:Y -> Server 'B'

此时或此时此流中没有其他数据包。英特尔ANS数据包并不总是与NIC的ARP一致,但我认为为了完整起见,我将其包括在内。

这个问题似乎对时机非常敏感,我们看到这些&#34;团队&#34;经常来自服务器的ARP和蓝月亮中的一次它们会引起我们的问题 - 好像网络堆栈代码中的特定点对ARP表的变化敏感。它并不总是相同的流实例,特别是另一个实例(以及所有其他网络流量 - HTTP等)继续正常工作。

这听起来像是组合的NIC&#34;不应该&#34;像这样的会话中的ARP,当然,当流量全部是UDP时,他们不会意识到任何会话。

1 个答案:

答案 0 :(得分:0)

好吧,如果只是给一些closure这个客户重新配置他们狡猾的网卡,一切正常,所以不幸的是,对于好奇,这意味着没有人会付钱给任何人过分关注什么可能&# 39;已经做好了解决这个案子的事。