有点不知怎么讲诉该问题,本文应该只是一个特例,正常应该不会遇到。
现象跟问题关系不大,可以接看最后的结论
一、最初目的
linux板子通过UDP访问我们公司服务器
二、环境
1、公司服务器地址 10.2.4.160
2、开发板网络设置 IP: 172.16.181.111
子网掩码:255.255.254.0
默认网关:172.16.180.254
如下图

以下linux板子简称板子,windows电脑简称电脑
三、问题
1、调试阶段,板子与自己电脑直连,电脑作为服务器,电脑与板子都可以收到数据,一切正常;
2、板子访问公司服务器,服务器可以正常收到板子的心跳数据,但板子有时能正常收到数据,有时收不到服务器返回的数据,有时会同时收到服务器返回的很多包数据;
3、在板子上ping同网段的电脑是正常的,但ping我们公司的服务器却出现如下DUP数据,而且是每秒弹出20个左右的DUP数据。

4、在相同子网掩码、默认网关的情况下,将开发板IP改为 172.16.180.168,却没发生过以上问题。
IP: 172.16.180.168
子网掩码:255.255.254.0
默认网关:172.16.180.254
四、解决
1、后来又试了其他几个IP,有172.16.181也有172.16.180网段,但发现正常与否与网段无关;
2、能正常使用IP都是有几天没开过机的电脑,其他有问题的IP都是有在日常工作中使用,只是暂时借到linux板子上调试;
3、将之前使用有问题的IP的电脑关机,第二天再将这些IP用到板子上,使用正常;
4、将使用正常的IP用到电脑上,然后再用到板子上,板子又出现同样问题。
五、结论猜想
1、公司路由器有对windows的IP或MAC有一定的ARP缓存机制,但对linux系统的没有。在windows上使用某一IP后会被路由器缓存起来,如果将该IP使用到linux系统,在该linux系统访问服务器时,由于ARP缓存导致从服务器返回数据时,无法解析到正在连接的linux板子信息。
2、只要过了缓存时间,就可以正常使用。
3、如果能进入公司路由器的管理,查看路由信息,一切应该就清晰了,但。。。就到此为止了
网友评论