0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

uip中如何检测IP被占用?

产品上要支持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冲突检测的朋友,要是能有相关代码参考一下。就好了,谢谢
提问者:60user28 地点:- 浏览次数:7258 提问时间:02-02 11:01
我有更好的答案
提 交
7条回答
60user74 02-02 21:20 回答数: 被采纳数:
uIP因为要做得小型化,只完成了此基本的功能,这个LLA,lwip印象中是有的。
ARP那边,uIP本来是没有意图开放给应用的,只作内部使用。你想实现这个功能,得好好看uIP的代码,把 RFC 3927协议加进去。要不,每二个方案,你就直接用PING(ICMP)来测试IP有没有被占用好呢(你有可能说我这个方案不行。是,这个方案有问题。最突出的情况就是,如果你本身是IP A, 你是没法去判断IP A是否已经被占用,只能通过IP B来判断IP A 是否被占用),但这是不改uIP的唯一方案。
南山铝业13 02-11 15:44 回答数:0 被采纳数:0
楼上的一看,就是行家

你说的“uIP本来是没有意图开放给应用的”,是不是说我下的的方法,uip不支持?

方法1、在板子上通过发送一个ip detect 的ARP request报文。在这个ARP request报文中,sender ip 和 destination ip 都指向自己获得的ip(这里即为169.254.1.3),发出去之后。拥有"169.254.1.3"这个IP的pc机收到这个ARP request之后,会回应一个ARP reply的报文,如果收到的ARP reply报文中的sender ip 和 destination ip是相同就可以判断板子的IP是否和PC机或移动终端发生了冲突。
方法2:发一个arp请求,请求169.254.1.3的mac地址,如果有回应,则表示该IP在网段中已存在。
cmh12 02-12 08:57 回答数: 被采纳数:
LLA是在RFC 3927中定义的,你理解的LLA倒是没有错的。做为协议栈的实现,都会把已实现现的协议写出来的,uIP就就没有支持RFC 3927。但当然,如果你只要去在uIP上补充实现类似的功能,可以按你的方法2去做。
q510954672 02-09 00:14 回答数:0 被采纳数:0
先做吧,有什么问题再来。
hfgjdgs 02-06 10:26 回答数: 被采纳数:
谢谢楼上的朋友。方法二是能检测出ip冲突,和方法一其实也是一回事。老实说我还是不太理解LLA,正常DHCP后的地址是192.168.1.x  ,如果DHCP失败,开始LLA,分配的IP又是169.254.x.x。这和路由及pc都不是同一网段,那么pc还是连接不上设备,那分配这样的地址又有什么用。
byyyyyyyyyyyy 02-10 05:49 回答数:0 被采纳数:0


是的,分配到这种地址,只能和同样是采用这个方案分配地址的设备通讯。一般只在本地使用,不会穿过路由器,这也就是LLA第二L(Local)的含义。他的存在意义在于:在没有DHCP服务器时,可以在本地范围内通过这种办法去临时分配地址。
一定是本地原因就是:ARP请求是穿不过路由器的,因此,这种方案不能避免路由器的两侧是否有两个相同的都由LLA分配的地址,因为,不让这些IP数据包穿过路由器是最好的选择。

在PC网管看来,网卡采用自动分配地址是出现这个网段地址,就会断定是DHCP服务器坏了。我们很少会用LLA去做事情,至少我不会去用。
呵呵。所以你问这个问题,我还去重新查一下才答你。
bbs注册 02-07 19:55 回答数: 被采纳数:


lwip中确实是有RFC 3927的实现

准备将它移植到uip中来。
撰写答案
提 交
1 / 3
1 / 3