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客户 端,让客户端重新发起地址请求过程。