DHCP协议分析
一、DHCP简介
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)用来为网络设备动态地分配 IP地址等网络配置参数。
DHCP 采用客户端/服务器通信模式,由客户端向服务器提出请求分配网络配置参数的申请,服务器返回为客户端分配的 IP 地址等配置信息,以实现 IP 地址等信息的动态配置。
二、DHCP工作过程
1.IP 地址动态获取过程
2.主要通过四个阶段进行:
A.发现阶段,即 DHCP 客户端寻找 DHCP 服务器的阶段。客户端以广播方式发送DHCP-DISCOVER 报文。
B.提供阶段,即 DHCP 服务器提供 IP 地址的阶段。DHCP 服务器接收到客户端的DHCP-DISCOVER 报文后,根据 IP 地址分配的优先次序选出一个 IP 地址,与其他参数一起通过 DHCP-OFFER 报文发送给客户端。
C.选择阶段,即 DHCP 客户端选择 IP 地址的阶段。如果有多台 DHCP 服务器向该客户端发来DHCP-OFFER 报文,客户端只接受第一个收到的 DHCP-OFFER 报文,然后以广播方式发送DHCP-REQUEST 报文,该报文中包含 DHCP 服务器在 DHCP-OFFER 报文中分配的 IP 地址。
D.确认阶段,即 DHCP 服务器确认 IP 地址的阶段。DHCP 服务器收到 DHCP 客户端发来的DHCP-REQUEST 报文后,只有 DHCP 客户端选择的服务器会进行如下操作:如果确认将地址分配给该客户端,则返回 DHCP-ACK 报文;否则返回 DHCP-NAK 报文,表明地址不能分配给该客户端。
三、实验环境
RT2是DHCP服务器,RT1是客户端;RT2 GE0/0端口配置IP地址10.0.0.254/24,地址池为10.0.0.0/24;RT1 GE0/0端口配置IP地址自动获取。
三、实验内容
1.RT2配置
[Rt2]interface GigabitEthernet 0/0
[Rt2-GigabitEthernet0/0]ip address 10.0.0.254 24
[Rt2-GigabitEthernet0/0]quit
[Rt2]dhcp enable \\开启DHCP服务
[Rt2]dhcp server ip-pool 10 \\创建DHCP地址池
[Rt2-dhcp-pool-10]network 10.0.0.0 24 \\配置为客户端分配的IP地址
[Rt2-dhcp-pool-10]gateway-list 10.0.0.254 \\配置DHCP客户端使用的网关地址
[Rt2-dhcp-pool-10]quit
[Rt2]dhcp server forbidden-ip 10.0.0.254 \\配置DHCP地址池中不参与自动分配的IP地址
2.RT1配置
[RT1]interface GigabitEthernet 0/0
[RT1-GigabitEthernet0/0]ip address dhcp-alloc \IP地址自动获取
3.现在RT1已经获取到IP地址。
[RT1]display ip interface GigabitEthernet 0/0 brief
(s): spoofing (l): loopback
Interface Physical Protocol IP Address Description
GE0/0 up up 10.0.0.1 --
4.RT1路由表里多了一条优先级为70的默认路由
[RT1]display ip routing-table
Destinations : 13 Routes : 13
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 Static 70 0 10.0.0.254 GE0/0
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.0/24 Direct 0 0 10.0.0.1 GE0/0
10.0.0.0/32 Direct 0 0 10.0.0.1 GE0/0
10.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
10.0.0.255/32 Direct 0 0 10.0.0.1 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
原因是在RT2配置了gateway-list 10.0.0.254,如果配置这条命令,RT1里就会存在这条默认路由。
四、实验分析
1.DHCP报文格式
各字段的解释如下:
a. op:报文的操作类型,分为请求报文和响应报文,1 为请求报文;2 为响应报文。具体的报文类型在 options 字段中标识。
b. htype、hlen:DHCP 客户端的硬件地址类型及长度。
c. hops:DHCP 报文经过的 DHCP 中继的数目。DHCP 请求报文每经过一个 DHCP 中继,该字段就会增加 1。
d. xid:客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。
e. secs:DHCP 客户端开始 DHCP 请求后所经过的时间。目前没有使用,固定为 0。
f. flags:第一个比特为广播响应标识位,用来标识 DHCP 服务器响应报文是采用单播还是广播方式发送,0 表示采用单播方式,1 表示采用广播方式。其余比特保留不用。
g. ciaddr:DHCP 客户端的 IP 地址。如果客户端有合法和可用的 IP 地址,则将其添加到此字段,否则字段设置为 0。此字段不用于客户端申请某个特定的 IP 地址。
h. yiaddr:DHCP 服务器分配给客户端的 IP 地址。
i. siaddr:DHCP 客户端获取启动配置信息的服务器 IP 地址。
j. giaddr:DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。
k. chaddr:DHCP 客户端的硬件地址。
l. sname:DHCP 客户端获取启动配置信息的服务器名称。
m. file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。
n. options:可选变长选项字段,包含报文的类型、有效租期、DNS 服务器的 IP 地址、WINS 服务器的 IP 地址等配置信息。
2.抓包分析
a.首先RT1以广播方式发送DHCP-DISCOVER 报文。
源地址全0
b.RT2收到后回复DHCP-OFFER,以广播的方式。
报文包含申请到的IP地址
c.RT1发送DHCP-REQUEST报文请求使用申请到的地址。
此时RT1还没有使用申请到的地址,源地址还是全0,目的地址是依然是广播地址。
d.RT2回复DHCP-ACK
RT2广播发送DHCP-ACK,确认分配10.0.0.1。
七、实验补充
客户端收到服务器返回的 DHCP-ACK 确认报文后,会以广播的方式发送免费 ARP 报文,探测是否有主机使用服务器分配的 IP 地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送 DHCP-DECLINE 报文给 DHCP 服务器,并重新申请 IP 地址。