DHCP简介
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),其主要作用是为主机提供配置参数。如为客户端动态分配IP地址、网关、DNS等配置信息。
DHCP基于C/S模型,使用UDP(User Datagram Protocol,用户数据报协议)作为它的传输协议,采用67(服务端)和68(客户端)两个端口。
DHCP报文
DHCP一共有8种报文,各类报文功能如下:
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:可选选项,格式为“代码+长度+数据”。列出部分可选项:
代码
标签
长度(字节)
说明
1
Subnet
4
子网掩码
3
Router
长度可变(4的倍数)
默认网关
6
DNSserv
长度可变(4的倍数)
DNS服务器
12
Hostname
长度可变
主机名
15
DNSdmain
长度可变
DNS域名
50
Requested IP Address
4
请求到的IP地址
51
IP Address Lease Time
4
租约时间
53
DHCP Message Type
1
报文类型1: DHCP Discover2: DHCP Offer3: DHCP Request4: DHCP ACK5: DHCP NAK6: DHCP Release7: DHCP Decline8: DHCP Inform
DHCP报文可选项列表(表一)
DHCP原理
DHCP原理图(图三)
① 发现阶段 DHCP DISCOVER
DHCP客户端通过DHCP DISCOVER广播报文(255.255.255.255)寻找DHCP服务器,DHCP DISCOVER广播报文内部有客户端的MAC地址、请求参数列表等信息。
② 提供阶段 DHCP OFFER
DHCP服务器收到DHCP发现报文后就根据网关地址挑选和网关同一网段的地址池中闲置IP进行分配。
③ 选择阶段 DHCP REQUEST
当DHCP客户端接受DHCP服务器的租约时,它将发起DHCP REQUEST广播消息,告诉所有DHCP服务器自己已经做出选择,接受了某个DHCP服务器的租约。
在此DHCP REQUEST广播消息中包含了DHCP客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等,所有其他的DHCP服务器将收回它们为此DHCP客户端所保留的IP地址租约,以给其他DHCP客户端使用
④ 确认阶段 DHCP ACK
当服务端接收到客户端的确认选择后,服务器会回ACK单播报文给客户端,并且告知客户端这个网络参数租约的期限,开始租约计时
注:报文类型可以简单的理解为 广播--- 单播 --- 广播 --- 单播
图上的DHCP OFFER可能为单播/广播原因是有的协议栈不能够允许在没有IP地址前接受单播报文,有的协议栈却可以接受以mac地址为基础的单播报文,是否能够接受客户端在DHCP DISCOVER请求时都会进行说明,DHCP OFFER 将根据DHCP DISCOVER报文内提供的客户端协议栈是否支持单播相关信息来判断是通过广播/单播发送。
DHCP Relay原理图(图四)
两者相差不大,为了能够跨网段传输,所以DHCP中继与DHCP服务器之间都是采用单播形式进行传播。
DHCP完整流程可参考下图:
DHCP完整流程图(图五)