产品上要支持LLA,即link-local 地址,
Link Local地址也被称为:链路本地地址(link local address),是设备在本地网络中通讯时用的地址,网段为169.254.0.1~169.254.254.255
当DHCP服务器故障,或者DHCP超时,不致于设备没有IP而造成连接不上。
LLA要求,先设置一个IP,然后检测网络中该IP有没有被占用,如果占用,则重设,直到设置的IP没有被占用,才表示设置成功。
上网了解了一些资料,说是IP设置后,在板子上通过发送一个ip detect 的ARP request报文即可达到检测IP是否冲突的目的。在这个ARP request报文中,sender ip 和 destination ip 都指向自己获得的ip(这里即为169.254.1.3),发出去之后。拥有"169.254.1.3"这个IP的pc机收到这个ARP request之后,或回应一个ARP reply的报文,并且此报文中的sender ip 和 destination ip相同(这里都为169.254.1.3)。 那么只需在我的程序中判断收到的ARP reply报文中的sender ip 和 destination ip是否相同就可以判断板子的IP是否和PC机或移动终端发生了冲突。
大家说这样可行吗?
这几天仔细研究了uip的代码,了解了大概的流程,但还不知道如何发ARP包。
有没有做过IP冲突检测的朋友,要是能有相关代码参考一下。就好了,谢谢 |