作者leeyh (哇啦哇啦)
看板Network
标题Re: [问答] 用无线AP,手机与NB一直ip相冲?
时间Fri Jul 27 23:54:12 2012
※ 引述《luke72 (ccc)》之铭言:
: 问题是你是跟谁取IP
: DHCP照规定是要把IP错开没错,它在配发之前必须先侦测这个IP有没有人用(ex:先ping过)
: 问题是市面上便宜Router附的DHCP功能,很多都是拿open source的轻量化DHCP来用
: 基於轻量化,这些DHCP不会去做这些开发者认为不必要的事情
: 他只是很单纯看自己手上的列表,找到没发出去的,就发给你
: 如果这个IP被某台机器设固定IP用掉,就会发生冲突
: 而且DHCP server还是不会知道有人用掉,还是会坚持送这个IP给你
: 变成说你不找出这台固定IP的机器,就永远会冲突
: 如果找不到,可以这样解
: 有的Router,设定页面上可以预约IP,你可以输入NB跟手机的mac address,跟你要的IP
: 这样DHCP配发的时候就会改配这组出去,冲突就解决了
: 哪家的机器做的好不好,看这些小地方就知道了
: 很多是连DHCP要先侦测都不知道的,以为会冲突是使用者的问题...orz
先说一下 这个 Probe 没出现有两种情形, 一个是 dhcp server 本身就没实作
另一个则是实作了但是设定被关闭, 前者违反RFC, 後者则是允许的.
RFC 2131 3.1 - 2.
Servers SHOULD be implemented so that
network administrators MAY choose to disable probes of newly
allocated addresses. The server transmits the DHCPOFFER message
to the client, using the BOOTP relay agent if necessary
刚好有兴趣所以挖了一下 code,
首先 open source 比较老牌子的 dhcp server 如 isc dhcpd,
是有完整实作这些功能的, 这从 man page 就可以看到
至於一般小型 router 常用的呢, 最有名的应该是 busybox?
刚刚抓了 busybox-1.20.2 (latest stable) 下来看,
发现它是这样的:
if (!lease) {
//TODO: DHCP servers do not always sit on the same subnet as clients: should *ping*, not arp-ping!
if (nobody_responds_to_arp(nip, safe_mac))
return nip;
所以说他有做 probe, 只是是 arping, 而不是 ICMP Echo Request.
於是又回去翻 RFC, 使用 ICMP 倒还真的举例的方法, 并不是限制必须的方法
而如同 busybox 注解说的, arping 不能跨 subnet,
对於一般小型 router 使用环境来说, 相信会是在同个 subnet 下面,
因此 arping 应足以达成 RFC 2131 内所提及的"须先确认该IP未有人使用"条件
(当然是说限定同subnet下面, 至於跨subnet他还是没有全然遵照 RFC2131)
当然, 其他版本的 busybox 或dhcp server就没有深入去看了 :P
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.124.12.133
※ 编辑: leeyh 来自: 59.124.12.133 (07/28 00:01)
1F:推 luke72:我记得新版的才有arping 但小型router用的都是万年旧版 07/28 01:02
2F:→ luke72:不过就算没实作 也应该要自己改到能用 才对得起消费者 07/28 01:04
3F:→ leeyh:是啊, 不过不少公司只是拿ref board加上原厂SDK就出货 07/28 11:10
4F:→ leeyh:顶多改改webui, 毕竟要检验这些东西都是时间和钱.. 07/28 11:11