DHCP协议分析


一、DHCP简介

    DHCPDynamic Host Configuration Protocol,动态主机配置协议)用来为网络设备动态地分配 IP地址等网络配置参数。

DHCP 采用客户端/服务器通信模式,由客户端向服务器提出请求分配网络配置参数的申请,服务器返回为客户端分配的 IP 地址等配置信息,以实现 IP 地址等信息的动态配置。

 


二、DHCP工作过程

  1.IP 地址动态获取过程

     141509602398.png

   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 报文,表明地址不能分配给该客户端。

 

 

三、实验环境

  141509602351.png

RT2DHCP服务器,RT1是客户端;RT2 GE0/0端口配置IP地址10.0.0.254/24,地址池为10.0.0.0/24RT1 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报文格式

141509602436.png

各字段的解释如下:

a. op:报文的操作类型,分为请求报文和响应报文,为请求报文;为响应报文。具体的报文类型在 options 字段中标识。

b. htypehlenDHCP 客户端的硬件地址类型及长度。

c. hopsDHCP 报文经过的 DHCP 中继的数目。DHCP 请求报文每经过一个 DHCP 中继,该字段就会增加 1

d. xid:客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。

e. secsDHCP 客户端开始 DHCP 请求后所经过的时间。目前没有使用,固定为 0

f. flags:第一个比特为广播响应标识位,用来标识 DHCP 服务器响应报文是采用单播还是广播方式发送,表示采用单播方式,表示采用广播方式。其余比特保留不用。

g. ciaddrDHCP 客户端的 IP 地址。如果客户端有合法和可用的 IP 地址,则将其添加到此字段,否则字段设置为 0。此字段不用于客户端申请某个特定的 IP 地址。

h. yiaddrDHCP 服务器分配给客户端的 IP 地址。

i. siaddrDHCP 客户端获取启动配置信息的服务器 IP 地址。

j. giaddrDHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。

k. chaddrDHCP 客户端的硬件地址。

l. snameDHCP 客户端获取启动配置信息的服务器名称。

m. fileDHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。

n. options:可选变长选项字段,包含报文的类型、有效租期、DNS 服务器的 IP 地址、WINS 服务器的 IP 地址等配置信息。

 

2.抓包分析

  141509602485.png

 

 a.首先RT1以广播方式发送DHCP-DISCOVER 报文。

  141509602529.png

   源地址全0

 

b.RT2收到后回复DHCP-OFFER,以广播的方式。

  141509601569.png

  报文包含申请到的IP地址  

 

c.RT1发送DHCP-REQUEST报文请求使用申请到的地址。

  141509601613.png

  此时RT1还没有使用申请到的地址,源地址还是全0,目的地址是依然是广播地址。

 

d.RT2回复DHCP-ACK 

  141509601669.png

   RT2广播发送DHCP-ACK,确认分配10.0.0.1

 

 

 

七、实验补充

    客户端收到服务器返回的 DHCP-ACK 确认报文后,会以广播的方式发送免费 ARP 报文,探测是否有主机使用服务器分配的 IP 地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送 DHCP-DECLINE 报文给 DHCP 服务器,并重新申请 IP 地址。