我有一个程序试图通过UDP与embedded式设备联系。 embedded式设备只有一个链接本地地址(169.254 。 ); Linux主机有一个正常的(DHCP,RFC1918)地址,由NetworkManager在Ubuntu natty上pipe理。 这个本地连接被configuration为'仅为本地networking上的资源使用此连接'。 我的程序在一个套接字上发送一个广播数据包,然后等待一个单播套接字(绑定到本地地址,而不是连接()),用于传入的信标数据包
有时,我发现Linux程序没有收到来自embedded式设备链接本地地址的数据包。 Wireshark显示它们到达传入接口并且格式正确,但是没有收到。 在RFC1918本地地址本地发送的数据包和收到的数据包一样,也是来自同一networking上其他RFC1918主机的数据包。
我也发现,一旦重启,这种情况通常会自发地纠正; 我可以再次从链路本地地址接收数据包。 有时也会在等待一段时间之后自发地纠正自己。
是否有一些模糊的路由设置或可能导致传入数据包丢失? 传出数据包工作正常(可能是因为我在发送数据包时绕过路由)。
关联自发恢复的最后一种情况,我在日志中发现:
Jul 13 20:58:01 hakase NetworkManager[933]: <info> (eth0): DHCPv4 state changed preinit -> reboot Jul 13 20:58:01 hakase NetworkManager[933]: <info> Activation (eth0) Stage 4 of 5 (IP4 Configure Get) scheduled... Jul 13 20:58:01 hakase NetworkManager[933]: <info> Activation (eth0) Stage 4 of 5 (IP4 Configure Get) started... Jul 13 20:58:01 hakase NetworkManager[933]: <info> address 192.168.0.148 Jul 13 20:58:01 hakase NetworkManager[933]: <info> prefix 24 (255.255.255.0) Jul 13 20:58:01 hakase NetworkManager[933]: <info> gateway 192.168.0.1 Jul 13 20:58:01 hakase NetworkManager[933]: <info> nameserver '192.168.0.1' Jul 13 20:58:01 hakase NetworkManager[933]: <info> domain name 'mshome.net' Jul 13 20:58:01 hakase NetworkManager[933]: <info> Scheduling stage 5 Jul 13 20:58:01 hakase NetworkManager[933]: <info> Activation (eth0) Stage 5 of 5 (IP Configure Commit) scheduled... Jul 13 20:58:01 hakase NetworkManager[933]: <info> Done scheduling stage 5 Jul 13 20:58:01 hakase NetworkManager[933]: <info> Activation (eth0) Stage 4 of 5 (IP4 Configure Get) complete. Jul 13 20:58:01 hakase NetworkManager[933]: <info> Activation (eth0) Stage 5 of 5 (IP Configure Commit) started... Jul 13 20:58:01 hakase avahi-daemon[862]: Joining mDNS multicast group on interface eth0.IPv4 with address 192.168.0.148. Jul 13 20:58:01 hakase avahi-daemon[862]: New relevant interface eth0.IPv4 for mDNS. Jul 13 20:58:01 hakase avahi-daemon[862]: Registering new address record for 192.168.0.148 on eth0.IPv4. Jul 13 20:58:02 hakase NetworkManager[933]: <info> Policy set 'Auto dfn3' (wlan0) as default for IPv4 routing and DNS. Jul 13 20:58:02 hakase NetworkManager[933]: <info> (eth0): device state change: 7 -> 8 (reason 0) Jul 13 20:58:02 hakase NetworkManager[933]: <info> Activation (eth0) successful, device activated. Jul 13 20:58:02 hakase NetworkManager[933]: <info> Activation (eth0) Stage 5 of 5 (IP Configure Commit) complete. Jul 13 20:58:03 hakase postfix/master[1245]: reload -- version 2.8.2, configuration /etc/postfix [these next two lines are likely associated with the wireshark session I have running] Jul 13 20:58:09 hakase kernel: [37294.962058] device eth0 left promiscuous mode Jul 13 20:58:10 hakase kernel: [37295.323279] device eth0 entered promiscuous mode Jul 13 20:58:11 hakase ntpdate[23459]: adjust time server 91.189.94.4 offset -0.024960 sec Jul 13 21:02:40 hakase dhclient: DHCPREQUEST of 192.168.0.148 on eth0 to 192.168.0.1 port 67 Jul 13 21:02:40 hakase dhclient: DHCPACK of 192.168.0.148 from 192.168.0.1 Jul 13 21:02:40 hakase dhclient: bound to 192.168.0.148 -- renewal in 248 seconds. Jul 13 21:02:40 hakase NetworkManager[933]: <info> (eth0): DHCPv4 state changed reboot -> renew Jul 13 21:02:40 hakase NetworkManager[933]: <info> address 192.168.0.148 Jul 13 21:02:40 hakase NetworkManager[933]: <info> prefix 24 (255.255.255.0) Jul 13 21:02:40 hakase NetworkManager[933]: <info> gateway 192.168.0.1 Jul 13 21:02:40 hakase NetworkManager[933]: <info> nameserver '192.168.0.1' Jul 13 21:02:40 hakase NetworkManager[933]: <info> domain name 'mshome.net' [at approximately one second later the connection to the link-local device was established]
这个“重新启动”状态可以以某种方式与问题联系起来吗?
在Linux主机上静态分配本地地址,看看是否消失。 从图片中取出DHCP。 在最坏的情况下,当它停止工作时,你不会得到“自发恢复”的效果,但至less你可以把你的列表中的DHCP的忧虑交给你。
而且,如果你想要的话,尝试分配一个169.254 / 16地址,看看是否有帮助。
那里有很多令人费解的信息,我所看到的唯一问题是:“是否存在一些模糊的路由设置或可能导致传入数据包丢失的问题?
你真正的问题是什么? 我将解决这个问题:“我试图从192.168.1.101联系169.254.100.15,为什么我不能联系它?
套接字通信在TCP上工作,对吗?
为了使分开的子网上的两个主机能够相互通话,需要路由它们。
链接本地地址(169.254.0.0/16)不会被路由( http://en.wikipedia.org/wiki/Link-local_address )。
您不能通过任何其他子网与169.254.0.0/16上的地址通话。 没办法,没有。 不是现在,没有。
另外:我只是想,你可以看看使用环回和地址数据包像这样的接口。
在你的输出中打击我的是在248秒内更新你的IP。
那么248秒后你的问题就开始了吗?
如果是的话,当续订命中时,dhcp-client可能会做一些不需要的configuration更改。
这短时间内有什么理由吗?
尝试运行avahi-autoipd让你的机器自己分配一个169.254 / 16地址,那么你应该可以和本地networking上的169.254 / 16中的其他主机通话。