DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。DHCP有3个端口,其中UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;546号端口用于DHCPv6 Client,而不用于DHCPv4,是为DHCP failover服务,这是需要特别开启的服务,DHCP failover是用来做“双机热备”的。
DHCP功能概述
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)为互联网上主机提供地址和配置参数。DHCP是基于Client/Server工作模式,DHCP服务器为需要为主机分配IP地址和提供主机配置参数。DHCP具有以下功能:
1.保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
2.DHCP应当可以给用户分配永久固定的IP地址。
3.DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)
4.DHCP服务器应当向现有的BOOTP客户端提供服务。
DHCP有三种机制分配IP地址:
1) 自动分配(Automatic Allocation),DHCP给客户端分配永久性的IP地址;
相关图片连接:
2) 动态分配(Dynamic Allocation), DHCP给客户端分配过一段时间会过期的IP地址(或者客户端可以主动释放该地址);
3) 手工配置(Manual Allocation),由网络管理员给客户端指定IP地址。管理员可以通过DHCP将指定的IP地址发给客户端。
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。
DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。RFC 951和RFC 1542对BOOTP协议进行了详细描述。
DHCP封包格式
DHCP的封包格式如所示,各字段定义如下:
FIELD OCTETS DESCRIPTION
----- ------ -----------
DHCP报文格式
OP:
若是 client 送给 server 的封包,设为 1 ,反向为 2。HTYPE
硬件类别,Ethernet 为 1。
HLEN:
硬件地址长度, Ethernet 为 6。
HOPS:
若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0。
TRANSACTION ID:
DHCP REQUEST 时产生的数值,以作 DHCPREPLY 时的依据。
SECONDS:
Client 端启动时间(秒)。
FLAGS:
从 0 到 15 共 16 bits ,最左一 bit 为 1 时表示 server 将以广播方式传送封包给 client ,其余尚未使用。
ciaddr:
要是 client 端想继续使用之前取得之 IP 地址,则列于这里。
yiaddr:
从 server 送回 client 之 DHCP OFFER 与 DHCPACK封包中,此栏填写分配给 client 的 IP 地址。
siaddr:
若 client 需要透过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。
giaddr:
若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。
chaddr:
Client 之硬件地址。
sname:
Server 之名称字符串,以 0x00 结尾。
file:
若 client 需要透过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。
options:
允许厂商定议选项(Vendor-Specific Area),以提供更多的设定信息(如:Netmask、Gateway、DNS、等等)。其长度可变,同时可携带多个选项,每一选项之第一个 byte 为信息代码,其后一个 byte 为该项数据长度,最后为项目内容。CODE LEN VALUE 此字段完全兼容 BOOTP ,同时扩充了更多选项。其中,DHCP封包可利用编码为 0x53 之选项来设定封包类别:
项值类别:
1 DHCP DISCOVER
2 DHCP OFFER
3 DHCP REQUEST
4 DHCPDECLINE
5 DHCPACK
6 DHCPNACK
7 DHCPRELEASE
DHCP 的选项非常多,有空请查阅 RFC 或相关文献,并好好理解,这里不再叙述了。
DHCP相关介绍
DHCP客户端
DHCP客户端可以让设备自动地从DHCP服务器获得IP地址以及其他配置参数。DHCP客户端可以带来如下好处:
降低了配置和部署设备时间。
降低了发生配置错误的可能性。
可以集中化管理设备的IP地址分配。
DHCP服务器
DHCP服务器指的是由服务器控制一段IP地址范围,客户端登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
DHCP中继代理
DHCPRelay(DHCPR)DHCP中继 也叫做DHCP中继代理。DHCP中继代理,就是在DHCP服务器和客户端
相关连接
之间转发DHCP数据包。当DHCP客户端与服务器不在同一个子网上,就必须有DHCP中继代理来转发DHCP请求和应答消息。DHCP中继代理的数据转发,与通常路由转发是不同的,通常的路由转发相对来说是透明传输的,设备一般不会修改IP包内容。而DHCP中继代理接收到DHCP消息后,重新生成一个DHCP消息,然后转发出去。
在DHCP客户端看来,DHCP中继代理就像DHCP服务器;在DHCP服务器看来,DHCP中继代理就像DHCP客户端。
DHCP工作原理
DHCP工作的基本流程
DHCP请求IP地址的过程如下:
1) 主机发送DHCPDISCOVER广播包在网络上寻找DHCP服务器;
2) DHCP服务器向主机发送DHCPOFFER广播数据包,包含IP地址、MAC地址、域名信息以及地址租期;
3) 主机发送DHCPREQUEST广播包,正式向服务器请求分配已提供的IP地址;
4) DHCP服务器向主机发送DHCPACK单播包,确认主机的请求
需要说明的是:DHCP客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,然后可能接受任何一个DHCPOFFER数据包,但客户端通常只接受收到的第一个DHCPOFFER数据包。另外,DHCP服务器DHCPOFFER中指定的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。
正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。
如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。
在协商过程中,如果DHCP客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCPNAK消息给DHCP客户 端,让客户端重新发起地址请求过程。