DHCP报文格式和类型
DHCP 报文的基本格式如图所示。
- op:报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为 1;服务器发送给客户端的包为响应报文,值为 2。
- htype:DHCP 客户端的 MAC 地址类型。MAC 地址类型其实是指明网络类型,htype 值为 1 时表示为最常见的以太网 MAC 地址类型。
- hlen:硬件地址长度。以太网 MAC 地址长度为 6 个字节,即 hlen 值为 6。
- hops:跳数,DHCP 报文经过的中继数量。每经过一个路由器,该字段就会增加 1。如果没有经过路由器,则值为 0(同一网内)。
- xid:事务 ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的 xid 都是一样的。
- secs:DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得 IP 地址前,该字段始终为 0。
- flags:BOOTP 标志位。只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送。其中,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。
- ciaddr:DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,在其他报文中均显示为 0。这是因为在得到 DHCP 服务器确认前,DHCP 客户端还没有分配到 IP 地址。
- yiaddr:DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
- siaddr:为 DHCP 客户端分配 IP 地址等信息的其他 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。
- giaddr:转发代理(网关)IP 地址,DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。
- chaddr:DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。
- sname:为客户端分配 IP 地址的服务器名称(DNS 域名格式)。只在 DHCP Offer 和 DHCP ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。
- file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。
- options:可选选项,格式为“代码+长度+数据”。
了解了 DHCP 报文格式以后,下面根据 Wireshar 抓取的数据包详细讲解 DHCP 请求 IP 地址时的每种报文。
DHCP Discover 报文
DHCP Discover 报文数据包如图所示。在 Bootstrap Protocol(Discover) 部分中显示了该数据包报文的每个字段。为了方便讲解,下面将报文字段列出并标注如下:
Bootstrap Protocol (Discover)
Message type: Boot Request (1) #报文的操作类型, 这是一个请求包, 所以该选项的值为1
Hardware type: Ethernet (0x01) #硬件类型为Ethernet
Hardware address length: 6 #硬件地址长度为6
Hops: 0 #经过DHCP中继数为0
Transaction ID: 0x597c6b82 #事务ID
Seconds elapsed: 0 #客户端启动时间
Bootp flags: 0x0000 (Unicast) #BOOTP标识字段
Client IP address: 0.0.0.0 #客户端IP地址
Your (client) IP address: 0.0.0.0 #服务器分配给自己的IP地址
Next server IP address: 0.0.0.0 #下一个服务器的IP地址
Relay agent IP address: 0.0.0.0 #DHCP中继器的IP地址
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a) #客户端的MAC地址
Client hardware address padding: 00000000000000000000 #客户端硬件地址填充
Server host name not given #服务器主机名
Boot file name not given #启动文件名
Magic cookie: DHCP #与BOOTP兼容
Option: (53) DHCP Message Type (Discover) #DHCP消息类型为53
Length: 1
DHCP: Discover (1) #发现包
Option: (61) Client identifier #客户端标识符
Length: 7
Hardware type: Ethernet (0x01) #硬件类型为Ethernet
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a) #客户端MAC地址
Option: (50) Requested IP Address #请求IP地址
Length: 4
Requested IP Address: 192.168.0.108 #请求的IP地址
Option: (12) Host Name #客户端主机名
Length: 15
Host Name: WIN-RKPKQFBLG6C #主机名
Option: (60) Vendor class identifier #供应商类标识符
Length: 8
Vendor class identifier: MSFT 5.0 #供应商标识符为MSFT 5.0
Option: (55) Parameter Request List #参数请求列表
Length: 12
Parameter Request List Item: (1) Subnet Mask #子网掩码
Parameter Request List Item: (15) Domain Name #域名
Parameter Request List Item: (3) Router #路由
Parameter Request List Item: (6) Domain Name Server #域名服务
Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server #NetBIOS名称服务
Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type #NetBIOS节点类型
Parameter Request List Item: (47) NetBIOS over TCP/IP Scope #NetBIOS作用范围
Parameter Request List Item: (31) Perform Router Discover #完成路由发现
Parameter Request List Item: (33) Static Route #静态路由
Parameter Request List Item: (121) Classless Static Route #无类静态路由
Parameter Request List Item: (249) Private/Classless Static Route
(Microsoft) #私有静态路由
Parameter Request List Item: (43) Vendor-Specific Information #供应商特定信息
Option: (255) End
Option End: 255
Padding: 000000000000000000000000
DHCP Offer 报文
DHCP Offer 报文数据包如图所示。报文字段信息如下:
Bootstrap Protocol (Offer)
Message type: Boot Reply (2) #报文的操作类型, 这是一个响应包, 所以该选项的值为2
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x597c6b82 #事务ID
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.0.108 #服务器分配给客户端的IP地址
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Offer)
Length: 1
DHCP: Offer (2)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.0.1 #DNS服务器标识地址为192.168.0.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask #服务器分配给客户端的子网掩码
Length: 4
Subnet Mask: 255.255.255.0 #子网掩码为255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.0.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.0.1
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...
事务 ID 为 0x597c6b82,与 DHCP Discover 报文中的事务 ID 相同,因此属于同一请求地址过程。
另外,可以看到服务器标识地址为 192.168.0.1,所以捕获的数据包的源 IP 地址为 192.168.0.1。目标地址为提供的 IP 地址 192.168.0.108。
DHCP Request 报文
DHCP Request 报文数据包如图所示。由于此时客户端还没有真正拥有IP地址,因此源 IP 地址仍然为 0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标 IP 地址为 255.255.255.255。
报文字段信息如下:
Bootstrap Protocol (Request)
Message type: Boot Request (1) #报文的操作类型, 这是一个请求包, 所以该选项的值为1
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x597c6b82 #事务ID
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0 #客户端IP地址
Your (client) IP address: 0.0.0.0
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (Request)
Length: 1
DHCP: Request (3)
Option: (61) Client identifier
Length: 7
Hardware type: Ethernet (0x01)
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
Option: (50) Requested IP Address
Length: 4
Requested IP Address: 192.168.0.108 #客户端选择租用的IP地址为192.168.0.108
… #省略部分信息
DHCP ACK 报文
DHCP ACK 报文数据包如图所示。报文字段信息如下:
Bootstrap Protocol (ACK)
Message type: Boot Reply (2) #报文的操作类型, 这是一个响应包, 所以该选项的值为2
Hardware type: Ethernet (0x01)
Hardware address length: 6
Hops: 0
Transaction ID: 0x597c6b82 #事务ID
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
Client IP address: 0.0.0.0
Your (client) IP address: 192.168.0.108 #客户端可以使用的IP地址为192.168.0.108
Next server IP address: 0.0.0.0
Relay agent IP address: 0.0.0.0
Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
Client hardware address padding: 00000000000000000000
Server host name not given
Boot file name not given
Magic cookie: DHCP
Option: (53) DHCP Message Type (ACK)
Length: 1
DHCP: ACK (5)
Option: (54) DHCP Server Identifier
Length: 4
DHCP Server Identifier: 192.168.0.1
Option: (51) IP Address Lease Time
Length: 4
IP Address Lease Time: (7200s) 2 hours
Option: (1) Subnet Mask #客户端可以使用的子网掩码
Length: 4
Subnet Mask: 255.255.255.0 #子网掩码为255.255.255.0
Option: (3) Router
Length: 4
Router: 192.168.0.1
Option: (6) Domain Name Server
Length: 4
Domain Name Server: 192.168.0.1
Option: (255) End
Option End: 255
Padding: 000000000000000000000000000000000000000000000000...
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算