免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4479 | 回复: 0
打印 上一主题 下一主题

[网络管理] [求助]linux收到Broadcast的Gratuitous ARP Request后是否更新arp table? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-01 17:45 |只看该作者 |倒序浏览
本帖最后由 Caivi 于 2010-06-01 17:47 编辑

最近遇到一个DHCP的问题,大概情况描述一下:
linux kernel:2.6.18,ARM平台,运行了udhcpd作为DHCP Server

1.
首先在switch port接入CPE1(MAC1),CPE1拿到IP1: MAC1 <--> IP1(192.168.0.10);
然后接入CPE2(MAC2),CPE2拿到IP2:MAC2 <--> IP2(192.168.0.11)。
linux的arp表是:
MAC1 <--> IP1(192.168.0.10)
MAC2 <--> IP2(192.168.0.11)

2.
然后拔掉CPE1的网线,CPE2还连着,reboot

3.
之后CPE2拿到IP1,也就是MAC2 <--> IP1(192.168.0.10), 即现在MAC2拿到的ip是先前MAC1拿到的ip
此时linux的arp表是:
MAC2 <--> IP1(192.168.0.10)
然后再接上CPE1,则理论上他应该是先去DHCP request 他以前拿到过的IP1,然后DHCP Server会回给CPE1 NAK,这样CPE1再重新去discover。

4.
我遇到的问题是CPE1此时没有收到这个NAK,当他发送3个request没收到server的任何回应后,就会发送broadcast的Gratuitous ARP request去检测这个IP是否冲突了,此时CPE2会回给CPE1一个Gratuitous ARP replay,说这个IP我在用了,然后CPE1会继续去discover重新拿IP,并且拿到了IP2
此时,理论上的期望是:
MAC2 <--> IP1(192.168.0.10)
MAC1 <--> IP2(192.168.0.11)

5.
但实际并非如此,实际的linux arp表变成了:
MAC1 <--> IP1(192.168.0.10)
MAC1 <--> IP2(192.168.0.11)

也就是MAC2的那条记录被那个broadcast的Gratuitous ARP request给毁掉了,然后linux记录了这条错误的arp信息,即由MAC2 <--> IP1(192.168.0.10)变成了MAC1 <--> IP1(192.168.0.10)
后面第4步CPE1是正确的记录到ARP 表了。

我想问的是,当linux收到Broadcast的Gratuitous ARP request时,到底是忽略这个请求,还是更新自己的arp table?
我这台linux似乎是选择了更新自己的arp table,但这明显是不对的,因为Gratuitous ARP request本身并不一定是正确的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP