RHCE(DHCP报文)
1、报文分类DHCP一共有8种报文,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:DHCP 报文类型说明DHCP DiscoverDHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会
1、报文分类
DHCP一共有8种报文,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各种类型报文的基本功能如下:
DHCP 报文类型 | 说明 |
---|---|
DHCP Discover | DHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会在本地网络内以 广播方式发送 Discover 请求报文,以发现网络中的 DHCP 服务器。所有收到 Discover 报文的 DHCP 服务 器都会发送应答报文, DHCP 客户端据此可以知道网络 中存在的 DHCP 服务器的位置。 |
DHCP Offer | DHCP 服务器收到 Discover 报文后,就会在所配置的 地址池中查找一个合适的 IP 地址,加上相应的租约期 限和其他配置信息(如网关、 DNS 服务器等),构造一 个Offer 报文,发送给 DHCP 客户端,告知用户本服务 器可以为其提供 IP 地址。但这个报文只是告诉 DHCP 客户端可以提供 IP 地址,最终还需要客户端通过 ARP 来 检测该 IP 地址是否重复。 |
DHCP Request | DHCP 客户端可能会收到很多 Offer 请求报文,所以必 须在这些应答中选择一个。通常是选择第一个 Offer 应答 报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的 Request 请求报文,通告选择的服务器, 希望获得所分配的 IP 地址。另外, DHCP 客户端在成 功获取 IP 地址后,在地址使用租期达到50% 时,会向DHCP 服务器发送单播 Request 请求报文请求续延租约, 如果没有收到 ACK 报文,在租期达到87.5% 时,会再次发送 广播的 Request 请求报文以请求续延租约。 |
DHCP ACK | DHCP 服务器收到 Request 请求报文后,根据 Request 报文 中携带的用户 MAC 来查找有没有相应的租约记录,如果有 则发送 ACK 应答报文,通知用户可以使用分配的 IP 地址。 |
DHCP NAK | 如果 DHCP 服务器收到 Request 请求报文后,没有发现有相 应的租约记录或者由于某些原因无法正常分配 IP 地址,则向 DHCP 客户端发送 NAK 应答报文,通知用户无法分配合适的 IP 地址。 |
DHCP Release | 当 DHCP 客户端不再需要使用分配 IP 地址时,就会主动向 DHCP 服务器发送RELEASE 请求报文,告知服务器用户不 再需要分配 IP 地址,请求 DHCP 服务器释放对应的 IP 地址。 |
DHCP Decline | DHCP 客户端收到 DHCP 服务器 ACK 应答报文后,通过地址 冲突检测发现服务器分配的地址冲突或者由于其他原因导致 不能使用,则会向 DHCP 服务器发送 Decline请求报文,通知 服务器所分配的 IP 地址不可用,以期获得新的 IP 地址。 |
DHCP Inform | DHCP 客户端如果需要从 DHCP 服务器端获取更为详细的配 置信息,则向 DHCP 服务器发送 Inform 请求报文; DHCP 服 务器在收到该报文后,将根据租约进行查找到相应的配置信 息后,向 DHCP 客户端发送 ACK 应答报文。目前基本上不用了。 |
2、报文格式
DHCP服务的8种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同。DHCP报文格式基于BOOTP的报文格式。下面是各字段的说明。
DHCP报文中各字段含义:
字段 | 长度 | 含义 |
---|---|---|
OP | 1字节 | 表示报文的类型: 1:客户端请求报文 2:服务器响应报文 |
htype | 1字节 | 表示硬件地址的类型。对于以太网,该类型的值为“1”。 |
hlen | 1字节 | 表示硬件地址的长度,单位是字节。对于以太网,该值为6。 |
Hops | 1字节 | 跳数。客户端设置为0,也能被一个代理服务器设置。 |
xid | 4字节 | 事务ID,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配。该ID由客户端设置并由服务器返回,为32位整数。 |
secs | 2字节 | 由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数。 |
flags | 2字节 | 此字段在BOOTP中保留未用,在DHCP中表示标志字段。 只有标志字段的最高位才有意义,其余的位均被置为0。 最左边的字段被解释为广播响应标志位,内容如下所示: a客户端请求服务器以单播形式发送响应报文 1:客户端请求服务器以广播形式发送响应报文。 |
ciaddr | 4字节 | 客户端的IP地址。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。 |
yiaddr | 4字节 | "你自己的"或客户端的IP地址。 |
siaddr | 4字节 | 表明DHCP协议流程的下一个阶段要使用的服务器的IP地址。 |
giaddr | 4字节 | 该字段表示第一个DHCP中继的IP地址(注意:不是地址池中定义的网关)。当客户端发出DHCP请求时,如果服务器和客户端不在同一个网络中,那么第一个DHCP中继在转发这个DHCP请求报文时会把自己的IP地址填入此字段。服务器会根据此字段来判断出网段地址,从而选择为用户分配地址的地址池。服务器还会根据此地址将响应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。 若在到达DHCP服务器前经过了不止一个DHCP中继,那么第一个DHCP中继后的中继不会改变此字段,只是把Hops的数目加1。 |
zhaddr | 16字节 | 该字段表示客户端的MAC地址,此字段与前面的“Hardware Type”和“Hardware Length”保持一致。当客户端发出DHCP请求时,将自己的硬件地址填入此字段。对于以太网,当“Hardware Type”和“Hardware Length”分别为“1”和“6”时,此字段必须填入6字节的以太网MAC地址。 |
sname | 64字节 | 该字段表示客户端获取配置信息的服务器名字。此字段由DHCP Server填写,是可选的。如果填写,必须是一个以0结尾的字符串。 |
file | 128字节 | 该字段表示客户端的启动配置文件名。此字段由DHCP Server填写,是可选的,如果填写,必须是一个以0结尾的字符串。 |
options | 可变 | 该字段表示DHCP的选项字段,至少为312字节,格式为"代码+长度+数据"。DHCP通过此字段包含了服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。 |
DHCP Options定义
options id | 长度 | 描述 |
---|---|---|
1 | 4 | Subnet Mask |
3 | n*4 | Router(网关) |
6 | n*4 | DNS Server |
7 | n*4 | Log Server |
26 | 2 | interface MTU |
33 | n*8 | Static router |
35 | 4 | ARP cache timeout |
42 | n*4 | NTP servers |
51 | 4 | IP address lease time |
53 | 1 | Message type: 1-DHCPDISCOVER 2-DHCPOFFER 3-DHCPREQUEST 4-DHCPDECLINE 5-DHCPACK 6-DHCPNAK 7-DHCPRELEASE 8-DHCPINFORM |
54 | 4 | DHCP Server Identifier |
60 | n | 华为自定义:可配置该终端设备在发起DHCP请求时,通过Option 60携带域信息。收到DHCP报文时,可根据Option 60中携带的域信息来分配IP地址。 |
82 | n | 华为自定义:作为DHCP Relay,在中继用户DHCP报文时,可在Option 82中填写用户的物理位置信息,通知DHCP服务器按物理位置信息对为用户分配IP地址。 |
3、报文样例
3.1、DHCPDISCOVER
客户端发送一个DHCPDISCOVER数据包。以下是网络监视器捕获的摘录,显示DHCPDISCOVER数据包的IP和DHCP部分。在IP部分,可以看到目标地址是255.255.255.255,源地址是0.0.0.0。DHCP部分将数据包标识为发现数据包,并使用网卡的物理地址在两个位置标识客户端。注意CHADDR字段和DHCP:客户端标识符字段中的值相同。
IP: ID = 0x0; Proto = UDP; Len: 328
IP: Version = 4 (0x4)
IP: Header Length = 20 (0x14)
IP: Service Type = 0 (0x0)
IP: Precedence = Routine
IP: ...0.... = Normal Delay
IP: ....0... = Normal Throughput
IP: .....0.. = Normal Reliability
IP: Total Length = 328 (0x148)
IP: Identification = 0 (0x0)
IP: Flags Summary = 0 (0x0)
IP: .......0 = Last fragment in datagram
IP: ......0. = May fragment datagram if necessary
IP: Fragment Offset = 0 (0x0) bytes
IP: Time to Live = 128 (0x80)
IP: Protocol = UDP - User Datagram
IP: Checksum = 0x39A6
IP: Source Address = 0.0.0.0
IP: Destination Address = 255.255.255.255
IP: Data: Number of data bytes remaining = 308 (0x0134)
DHCP: Discover (xid=21274A1D)
DHCP: Op Code (op) = 1 (0x1)
DHCP: Hardware Type (htype) = 1 (0x1) 10Mb Ethernet
DHCP: Hardware Address Length (hlen) = 6 (0x6)
DHCP: Hops (hops) = 0 (0x0)
DHCP: Transaction ID (xid) = 556223005 (0x21274A1D)
DHCP: Seconds (secs) = 0 (0x0) DHCP: Flags (flags) = 0 (0x0)
DHCP: 0............... = No Broadcast
DHCP: Client IP Address (ciaddr) = 0.0.0.0
DHCP: Your IP Address (yiaddr) = 0.0.0.0
DHCP: Server IP Address (siaddr) = 0.0.0.0
DHCP: Relay IP Address (giaddr) = 0.0.0.0
DHCP: Client Ethernet Address (chaddr) = 08002B2ED85E
DHCP: Server Host Name (sname) = <Blank>
DHCP: Boot File Name (file) = <Blank>
DHCP: Magic Cookie = [OK]
DHCP: Option Field (options) DHCP: DHCP Message Type = DHCP Discover
DHCP: Client-identifier = (Type: 1) 08 00 2b 2e d8 5e
DHCP: Host Name = JUMBO-WS
DHCP: Parameter Request List = (Length: 7) 01 0f 03 2c 2e 2f 06
DHCP: End of this option field
3.2、DHCPOFFER
DHCP服务器通过发送DHCPOFFER数据包进行响应。在下面的捕获摘录的IP部分中,源地址现在是DHCP服务器IP地址,目标地址是广播地址255.255.255.255。DHCP部分将数据包标识为提供。YIADDR字段填充服务器向客户端提供的IP地址。注意CHADDR字段仍然包含请求客户端的物理地址。此外,我们在DHCP选项字段部分看到服务器发送的各种选项以及IP地址。在这种情况下,服务器将发送子网掩码、默认网关(路由器)、租用时间、WINS服务器地址(NetBIOS名称服务)和NetBIOS节点类型。
3.3、DHCPREQUEST
客户机通过发送DHCPREQUEST来响应DHCPOFFER。在下面捕获的IP部分中,客户端的源地址仍然是0.0.0.0,数据包的目标地址仍然是255.255.255.255。客户端保留0.0.0.0,因为客户端尚未收到来自服务器的验证,表明可以开始使用提供的地址。目标仍然是广播的,因为可能有多个DHCP服务器已响应,并且可能保留了对客户端提供的服务的保留。这让其他DHCP服务器知道它们可以释放提供的地址并将其返回到可用池。DHCP部分将数据包标识为请求,并使用DHCP:Requested address字段验证提供的地址。DHCP:Server Identifier字段显示提供租约的DHCP服务器的IP地址。
3.4、DHCPACK
DHCP服务器用DHCPACK响应DHCPREQUEST,从而完成初始化周期。源地址是DHCP服务器IP地址,目标地址仍然是255.255.255.255。YIADDR字段包含客户端地址,CHADDR和DHCP:client标识符字段是请求客户端中网卡的物理地址。DHCP选项部分将数据包标识为ACK。
如果客户机以前有DHCP分配的IP地址,并且重新启动,则客户机将在特殊的DHCPREQUEST数据包中特别请求以前租用的IP地址。源地址为0.0.0.0,目标地址为广播地址255.255.255.255。客户端将使用以前分配的地址填充DHCP选项字段DHCP:请求的地址。严格遵守RFC的客户端将使用请求的地址填充CIADDR字段。DHCP服务器将接受其中一个。
此时,服务器可能会响应,也可能不会响应。DHCP服务器的行为取决于所用操作系统的版本以及其他因素,如超级复制。如果服务器确定客户端仍然可以使用该地址,它将保持静默或确认DHCPREQUEST。如果服务器确定客户端不能拥有该地址,它将发送NACK。
然后,客户端将开始发现过程,但DHCPDISCOVER数据包仍将尝试租用相同的地址。在许多情况下,客户端将获得相同的地址,但可能不会。
客户端从DHCP服务器获得的DHCP信息将具有与其关联的租用时间。租用时间定义客户端可以使用DHCP分配的信息的时间。当租约达到某些里程碑时,客户端将尝试续订其DHCP信息。
更多推荐
所有评论(0)