2024年1月18日发(作者:)

DHCP原理

●DHCP是在BOOTP基础之上制定的一种自动进行IP地址分配的协议

一、DHCP概述

DHCP工作过程如下:

①当DHCP客户机启动时,客户机在当前的子网中广播DHCPDISCOVER报文,

向DHCP服务器申请一个IP地址。

②DHCP服务器收到DHCPDISCOVER报文后,它将从针对那台主机的地址区间中为它提供一个尚未被分配出去的IP地址,并把提供的IP地址暂时标记为不可用。服务器以DHCPOFFER报文送回给主机。如果网络里包含不止一个的DHCP服务器,则客户机可能收到好几个DHCPOFFER报文,客户机通常只承认第一个DHCPOFFER。

③客户端收到DHCPOFFER后,向服务器发送一个含有有关DHCP服务器提供的IP地址的DHCPREQUEST报文。如果客户端没有收到DHCPOFFER报文并且还记得以前的网络配置,此时使用以前的网络配置(如果该配置仍在有效期内)。

④DHCP服务器向客户机发回一个含有原先被发出的IP地址及其分配方案的一个应答报文(DHCPACK)

⑤客户端接收到包含了配置参数的DHCPACK报文后,利用ARP检查网络上是否有相同IP地址。如果检查通过,则客户机接收这个IP地址及其参数,如果发现有

问题,客户机向服务器发送DHCPDECLINE信息,并重新开始新的配置过程。服务器收到DHCPDECLINE信息,将该地址标为不可用。

⑥DHCP服务器只能将那个IP地址分配给DHCP客户一定时间,DHCP客户必须在该次租用过期前对它进行更新。客户机在50%租借时间过去以后,每隔一段时间就开始请求DHCP服务器更新当前租借。如果DHCP服务器应答,则租用延期;如果DHCP服务器始终没有应答,在有效租借期的87.5%,客户应该任何一个其他的DHCP服务器通信,并请求更新它的配置信息,如果客户机不能和所有的DHCP服务器取得联系,租借时间到后,它必须放弃当前的IP地址并重新发送一个DHCPDISCOVER报文开始上述IP地址获得过程。

⑦客户端可以主动向服务器发出DHCPRELEASE报文,将当前的IP地址释放。

●DHCP从两个方式上扩充了Bootp

第一 DHCP可使计算机用一个消息获取它所需要的所有配置信息,即传送配置信息的协议

第二 DHCP允许计算快速,动态的获取IP地址,即动态分配IP地址的机制。DHCP支持三种类型的地址分配:自动分配方式中DHCP给主机指定一个永久的IP地址;动态分配方式中DHCP给主机指定一个有时间限制的IP地址,到时间或主机明确表示放弃这个地址时,这个地址可以被其他的主机使用;手工分配方式中主机的IP地址是由网络管理员指定的,DHCP只是把指定的IP地址告诉主机

●DHCP协议采用Client-Server方式实现,而且DHCP协议是基于UDP层之上的应用,DHCP

Client将采用知名端口号68,DHCP Sever采用知名端口号67进行交换互,DHCP协议一般采用终端的硬件地址(如果是以太网,就是我们常说的MAC地址)来唯一标识一个终端设备

●DHCP协议基本上是一个单向驱动协议,Server 完全是被动的,其动作、行为基本

由Client的请求行为而激发,即Server端无法主动控制Client端。因此其交互性和安全性

就没有PPP协议那么完善

一、DHCP协议的封装

●DHCP协议是基于UDP层之上的应用,DHCP Client将采用知名端口号68,DHCP Server采用知名端口号67。其报文内容的封装如图1所示

链路层头 IP头 UDP头 DHCP报文

<1>DHCP协议是初始化协议,是让终端获取IP地址的协议。既然终端连IP地址都没有,何以能够发出IP报文呢?Server给Client回送的报文该怎么封装呢?

1)当DHCP Client第一次启动时,向DHCP Server发出DHCP Discover报文请求分配到一个IP地址,及相关的网络参数。它并不知道DHCP Server的IP地址和MAC地址,因此链路层的封装的源MAC为自己的MAC地址,目的MAC为全F的广播地址。网络层封装的源IP地址为32bit全0的地址(点分十进制表示为0.0.0.0),目的IP地址为32bit全1的广播地址(点分十进制表示为255.255.255.255)

2)上面的措施保证了DHCP Server能够收到终端的请求报文,但凭链路层和IP层信息,DHCP

Server无法区分出DHCP报文,因此DHCP Client发出的DHCP请求报文的UDP层的源端口为68,目的端口为67。即DHCP Server通过知名端口号67来判断一个报文是否是DHCP报文。

3)DHCP Server给终端的响应报文将会根据DHCP报文中的内容决定是广播还是单播,一般都是广播形式。当广播封装时,在以太网中,目的MAC为全F的广播地址;目的IP地址为32bit全1的广播地址(点分十进制表示为255.255.255.255);如果链路层的封装是单播形式,在以

太网中,目的MAC为终端的网卡MAC地址(此MAC地址存在于DHCP Discover报文中)。目的IP地址为32bit全1的广播地址(点分十进制表示为255.255.255.255),两种封装发式中的UDP层都是相同的,终端通过知名端口68来判断一个报文是否是DHCP Server的响应报文。

0 8 16 24 31

OP HTYPE HLEN 跳数(Hops)

事务IP(XID)

秒数(Second) 标识(Flag)

客户机IP地址(Client IP address)

你的IP地址(Your IP address)

服务器IP地址(Server IP address)

中继代理IP地址(giaddr)

客户机硬件地址(Client hardware address)

服务器主机名(Host name)

启动文件(file)

选项(option)

OP:表示当前报文时Client的请求还是Server的应答,为1时表示是Client的请求,为2时表示是Server的应答

HTYPE:表示Client硬件地址的类型

HLEN:表示Client硬件地址的长度

Hops:表示当前的DHCP报文经过的DHCP Relay的数目,Client或Server发出DHCP报文时,此字段都初始化为0,每经过一个DHCP Relay,此字段就会加1,此字段的作用是限制

DHCP报文不要经过过多的DHCP Relay,协议规定HOPS值大于4时,DHCP报文被丢弃

XID:Client每次发送DHCP请求报文时选择的随机数,用来匹配Server的响应报文是对哪个请求报文的响应,Client会丢弃XID不匹配的响应报文

Second:客户进入IP地址申请进程的时间或者更新IP地址进程的时间

Flag:标志字段。这个16 比特的字段,目前只有最左边一个BIT有用。

Client IP address:客户的IP地址。只有在客户端处于BOUND,RENEW,REBINDING 的状态下发送消息的时候才设置。可以用来响应ARP协议。

Your IP address:由DHCP Server分配给Client的IP地址。当DHCP Server响应Client的DHCP请求时,将把分配给Client的IP地址填入此字段

Server IP address:表明DHCP协议流程的下一个阶段要使用的Server的地址

giaddr:DHCP Relay的IP地址

Client hardware address:Client的硬件地址。当Client发出DHCP请求时,将自己的网卡硬件地址填入此字段

Host name:服务器的主机名,记录Client获取启动配置信息的服务器名字

file : 启动文件名字段,记录Client的启动配置文件名,此字段有DHCP Server填写,而且是可选的

option:此字段中包含了大量可选的终端配置信息和网络配置信息

DHCP协议报文的种类

由Option字段中的 Dhcp message type选项的Value值来确定

DHCP Discover (0X01) Client刚刚开始时,Client向Server请求的报文

DHCP Offer (0X02) Server对DHCP Discover报文的回应

DHCP Request (0X03)

DHCP Decline (0X04)

DHCP Ack (0X05)

DHCP Nak (0X06)

DHCP Release (0X07)

DHCP Inform (0X08)