打印

uip中如何检测IP被占用?

[复制链接]
3245|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LIU_XF|  楼主 | 2012-5-21 08:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ip, ui, ST, TI, se
产品上要支持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冲突检测的朋友,要是能有相关代码参考一下。就好了,谢谢

相关帖子

沙发
Tinnal| | 2012-5-21 10:09 | 只看该作者
uIP因为要做得小型化,只完成了此基本的功能,这个LLA,lwip印象中是有的。
ARP那边,uIP本来是没有意图开放给应用的,只作内部使用。你想实现这个功能,得好好看uIP的代码,把 RFC 3927协议加进去。要不,每二个方案,你就直接用PING(ICMP)来测试IP有没有被占用好呢(你有可能说我这个方案不行。是,这个方案有问题。最突出的情况就是,如果你本身是IP A, 你是没法去判断IP A是否已经被占用,只能通过IP B来判断IP A 是否被占用),但这是不改uIP的唯一方案。

使用特权

评论回复
板凳
LIU_XF|  楼主 | 2012-5-21 11:17 | 只看该作者
楼上的一看,就是行家

你说的“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在网段中已存在。

使用特权

评论回复
地板
Tinnal| | 2012-5-21 12:52 | 只看该作者
LLA是在RFC 3927中定义的,你理解的LLA倒是没有错的。做为协议栈的实现,都会把已实现现的协议写出来的,uIP就就没有支持RFC 3927。但当然,如果你只要去在uIP上补充实现类似的功能,可以按你的方法2去做。

使用特权

评论回复
5
Tinnal| | 2012-5-21 12:53 | 只看该作者
先做吧,有什么问题再来。

使用特权

评论回复
6
LIU_XF|  楼主 | 2012-5-21 22:34 | 只看该作者
谢谢楼上的朋友。方法二是能检测出ip冲突,和方法一其实也是一回事。老实说我还是不太理解LLA,正常DHCP后的地址是192.168.1.x  ,如果DHCP失败,开始LLA,分配的IP又是169.254.x.x。这和路由及pc都不是同一网段,那么pc还是连接不上设备,那分配这样的地址又有什么用。

使用特权

评论回复
7
Tinnal| | 2012-5-21 23:43 | 只看该作者
本帖最后由 Tinnal 于 2012-5-22 10:03 编辑

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

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

使用特权

评论回复
8
LIU_XF|  楼主 | 2012-5-22 08:22 | 只看该作者
7# Tinnal

呵呵,谢谢你,帮助我很多了。。。

使用特权

评论回复
9
LIU_XF|  楼主 | 2012-5-22 11:41 | 只看该作者
本帖最后由 LIU_XF 于 2012-5-23 11:34 编辑

lwip中确实是有RFC 3927的实现

准备将它移植到uip中来。

使用特权

评论回复
10
flyingcys| | 2013-4-16 15:56 | 只看该作者
关注一下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:无

68

主题

372

帖子

3

粉丝