Chinaunix

标题: 问个DHCP问题 [打印本页]

作者: lzueclipse    时间: 2011-04-07 11:03
标题: 问个DHCP问题
一个客户端用DHCP CLIENT 从DHCP SERVER那里拿IP,标准流程如下(用ubuntu 下dhcpdump抓包):
1)DHCP-DISCOVER
TIME: 2011-04-07 09:43:43.422
    IP: 0.0.0.0 (c8:a:a9:9e:14:a5) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 3a8471d5
  SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: c8:0a:a9:9e:14:a5:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
OPTION:  61 (  7) Client-identifier         01:c8:0a:a9:9e:14:a5
OPTION:  60 ( 12) Vendor class identifier   udhcp 1.13.3
OPTION:  57 (  2) Maximum DHCP message size 576
OPTION:  55 (  7) Parameter Request List      1 (Subnet mask)
                                              3 (Routers)
                                              6 (DNS server)
                                             12 (Host name)
                                             15 (Domainname)
                                             28 (Broadcast address)
                                             42 (NTP servers)
                                            
---------------------------------------------------------------------------

2)DHCP-OFFER
  TIME: 2011-04-07 09:43:43.422
    IP: 10.10.50.10 (0:13:72:4e:2a: > 10.10.50.243 (c8:a:a9:9e:14:a5)
    OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 3a8471d5
  SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.10.50.243
SIADDR: 10.10.50.10
GIADDR: 0.0.0.0
CHADDR: c8:0a:a9:9e:14:a5:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION:  53 (  1) DHCP message type         2 (DHCPOFFER)
OPTION:  54 (  4) Server identifier         10.10.50.10
OPTION:  51 (  4) IP address leasetime      86400 (24h)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.10.50.1
OPTION:   6 (   DNS server                10.10.50.10,10.10.50.11
---------------------------------------------------------------------------

3)DHCP-REQUEST
  TIME: 2011-04-07 09:43:43.445
    IP: 0.0.0.0 (c8:a:a9:9e:14:a5) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 3a8471d5
  SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: c8:0a:a9:9e:14:a5:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
OPTION:  61 (  7) Client-identifier         01:c8:0a:a9:9e:14:a5
OPTION:  60 ( 12) Vendor class identifier   udhcp 1.13.3
OPTION:  50 (  4) Request IP address        10.10.50.243
OPTION:  54 (  4) Server identifier         10.10.50.10
OPTION:  55 (  7) Parameter Request List      1 (Subnet mask)
                                              3 (Routers)
                                              6 (DNS server)
                                             12 (Host name)
                                             15 (Domainname)
                                             28 (Broadcast address)
                                             42 (NTP servers)
                                            
---------------------------------------------------------------------------

4)DHCP-ACK
  TIME: 2011-04-07 09:43:43.446
    IP: 10.10.50.10 (0:13:72:4e:2a: > 10.10.50.243 (c8:a:a9:9e:14:a5)
    OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 3a8471d5
  SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.10.50.243
SIADDR: 10.10.50.10
GIADDR: 0.0.0.0
CHADDR: c8:0a:a9:9e:14:a5:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION:  53 (  1) DHCP message type         5 (DHCPACK)
OPTION:  54 (  4) Server identifier         10.10.50.10
OPTION:  51 (  4) IP address leasetime      86400 (24h)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   10.10.50.1
OPTION:   6 (   DNS server                10.10.50.10,10.10.50.11
---------------------------------------------------------------------------

我的疑问:
第2)步,DHCP CLIENT尚未分配IP,为何DHCP-OFFER报文的目的地址却已经是10.10.50.243?
这样DHCP CLIENT会怎么处理这个DHCP-OFFER报文?

很疑惑,求解答。
作者: ssffzz1    时间: 2011-04-07 15:29
IP: 10.10.50.10 (0:13:72:4e:2a: > 10.10.50.243 (c8:a:a9:9e:14:a5)

不会吧。此时应该是广播报文啊。.pcap上来看看。
作者: lzueclipse    时间: 2011-04-08 09:23
回复 2# ssffzz1


附件,rar格式的,解压就是,客户端是busybox中带的udhcpc:
    dhcp.rar (352 Bytes, 下载次数: 47)
作者: ssffzz1    时间: 2011-04-08 10:15
你看一下是续租约还是首次获取地址。我抓取的首次获取地址的是广播的。后续续租约的不一定是。
作者: lzueclipse    时间: 2011-04-10 10:22
回复 4# ssffzz1

上面抓包是首次获取IP的。
作者: ssffzz1    时间: 2011-04-10 11:19
这就奇怪了。DHCP服务器是什么系统的??
作者: lzueclipse    时间: 2011-04-11 14:57
回复 6# ssffzz1


ISC DHCPD。
Linux下用的基本都是这个,不过客户端用的是udhcpc,是我嵌入式盒子上的,经过抓包发现,dhcp client的实现差异挺大的。
作者: silty    时间: 2011-04-14 23:33
回复 6# ssffzz1


DHCP Server发送给客户端的offer与ack可以是单播,也可以是广播,取决于客户端DHCP discover bootp flags字段是单播还是广播。
操作系统不同,行为不同,windows xp系统默认flags字段是单播,而Vista与win7则是广播。

至于DHCP offers或者ack采用单播或者是广播,取决于客户端DHCP Discover以及request的bootp flags字段:0为单播,1为广播。
见rfc2131: A client that cannot receive unicast IP datagrams until its protocol software has been configured with an IP address SHOULD set the BROADCAST bit in the 'flags' field to 1 in any DHCPDISCOVER or DHCPREQUEST messages that client sends.
对于协议栈因为没有配置IP而不能够接收单播报文的客户机,所发送的DHCP discover以及DHCP request包中的bootp标志位应设置为“1”,即请求服务器所发送offers以及ack采用广播的方式。
作者: silty    时间: 2011-04-14 23:35

作者: inknk    时间: 2011-04-15 12:35
哈哈,一直疑惑的问题终于明白了
看来数据包各个字段都要明白了,不能马马虎虎的
作者: ssffzz1    时间: 2011-04-17 12:15
哦。原来如此啊。RFC还是要看的。
作者: niuhai211    时间: 2011-04-18 14:03
client--discover--server   broadcast
server--offer--client         unicast
client--request--server    broadcast
server--replay--client      unicast
跟平台没有关系,这是协议标准,不管是什么平台的dhcp server,什么平台的client都是可以获取到




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2