DHCP协议原理及应用

来源:互联网 发布:c语言char怎么输出 编辑:程序博客网 时间:2024/06/05 18:54

DHCP: 动态主机配置协议 
  TCP/IP协议想要运行正常的话,网络中的主机和路由器不可避免地需要配置一些信息(如接口的IP地址等)。有了这些配置信息主机/路由器才能提供/使用特定的网络服务。 
  主机信息的必要元素有:IP地址、子网掩码、DNS服务器IP地址 
  TCP/IP协议配置主机信息主要有三种方法: 
1. 手动配置 
2. 动态获取 
3. 根据特定算法计算。 
  在网络中,我们把主机分为两大类,服务器主机和客户端主机, 
+ 服务器主机: 一般采用手动配置 
+ 客户端主机: 一般采用动态获取 
  服务器一般采用手动配置,而客户端一般动态获取。主要基于以下原因: 
1. 客户主机比服务主机移动更频繁 
2. 服务主机需要提供更可靠的服务,其配置信息应该减少对其他系统/主机的依赖 
3. 客户主机比服务主机的数量要多得多。 
4. 客户主机使用者的网络配置知识比服务主机的使用者低

  DHCP有Bootp协议发展而来。Bootp协议提供了有限的主机信息配置,且主机信息已经配置就很难被修改。DHCP提供 几乎所有的主机信息的配置,且引入了租约等概念,使得主机信息能够动态发生变化。 DHCP向后兼容Bootp。 
  DHCP基于UDP/IP传输。DHCP服务器使用端口号67,DHCP 客户端使用端口号68.

DHCP 协议内容

DHCP 主要分为两部分: 地址的管理 和 配置信息的传递 
地址管理: 地址管理处理IP‘地址的动态分配、向客户端提供地址租约 
配置信息的传递: 包含DHCP报文格式、状态机

DHCP 地址管理

地址池 与 地址租约

  在IP地址的动态分配中,DHCP客户端想DHCP服务器发送IP地址请求。DHCP服务器会维护一个 IP地址池,DHCP从地址池从取出一个IP回应给DHCP客户端。在地址分配时,DHCP服务器也会指定回应给DHCP客户端的IP地址的租约期,该地址只有在该租约期内可用,不过DHCP客户端可用在租约期内请求延长租约(更新租约期)。

DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细的交互过程如下图。
  1. DHCP Client以广播的方式发出DHCP Discover报文。
  2. 所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文。
    DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录。
  3. DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。
    DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
  4. DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
  5. DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
  6. DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
需要说明的是:DHCP客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,然后可能接受任何一个DHCPOFFER数据包,但客户端通常只接受收到的第一个DHCPOFFER数据包。另外,DHCP服务器DHCPOFFER中指定[1] 的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。
正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。
如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。
在协商过程中,如果DHCP客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCPNAK消息给DHCP客户 端,让客户端重新发起地址请求过程。


DHCP 报文

这里写图片描述 
Op: 报文类型,分为 两大类: Request(1) 和 Reply(2) 
HW Type: 硬件类型,一般是以太网:1 
HW Len: 硬件地址长度,单位字节。对应以太网:6(mac地址长度为6字节48bit) 
Transaction ID:事务ID,随机数,有客户端生成,服务器Reply时,会把Request中的Transaction拷贝到Reply报文中。 
Secs: 距离第一次发射IP请求或Renew请求过去的秒数 
Flags:标志位,目前仅第一个bit有使用,置1 标明广播 
Client IP Address:当前客户端的IP地址,如果当前客户端没有IP地址,则置0 
Your IP Address: 服务器想客户端提供IP地址时,会把IP地址填入本字段 
(Next)Server IP Address:客户端引导时需要的另一个服务器的IP地址 
Gateway (Relay) IP Address: 网关(中继)IP地址,有DHCP 中继器在转发DHCP报文的时候填入 
Server Name: Server名字,有64bytes,一般不使用,填充为0 
Boot File name: boot file的路径,128bytes, 一般不使用,填充为0 
Option: 选项,不定长度。 DHCP报文中比较重要的字段,后面会有比较详细的介绍。

DHCP Option

  DHCP从Bootp拓展而来,DHCP报文也是有Bootp报文发展而来。但是DHCP在Bootp之上添加了许多功能,其报文也需要有一定的拓展。如果Bootp报文不能满足的内容,就以Option的形式存在于DHCP报文中。 
  DHCP协议其实就是携带许多Option的Bootp 
  DHCP有许多类型的Option,长度不一(但都是整数字节)。Option遵循以下格式 
+ 如果Option没有值,则只有标志位之类的内容,则以一个字节表示 
+ 如果Opiton有值,即Opiton是以下name-value对,则Opiton需要多个字节表示,其中第一个字节表示 option的名字,第二字节表示value的长度,第三个字节开始表示value。

  DHCP支持大量的Option(Bootp也支持其中的部分),下面列举一些常用的

Option名称描述0Pad填充位1Subnet Mask子网 掩码3Router Address路由器地址6DNSDNS server15DN域名50Requested IP Address请求的IP地址51Address Lease Time地址租约时间53DHCP Message TypeDHCP 消息类型,如Discover、Request、Offer、ACK等54Server Identifier服务器标识55Parameter Request List参数请求列表56DHCP Error MessageDHCP 错误消息58Lease Renewal Time租约续期时间59Lease Rebinding Time租约重新设定的时间61Client Identifier客户标识119Domain Search List域名查找列表255End结束

上面是常用的Option,DHCP报文与Option 255标识报文的结束。 
在DHCP Option中,我们着重看下DHCP Message Type(53),DHCP Message Type标识DHCP消息类型,主要有一下类型

DHCP 消息类型对应的Option值DHCPDISCOVER1DHCPOFFER2DHCPREQUEST3DHCPDECLINE4DHCPACK5DHCPNAK6DHCPRELEASE7DHCPINFORM8DHCPFORCERENEW9DHCPLEASEQUERY10DHCPLEASEUNASSIGNED11DHCPLEASEUNKNOWN12DHCPLEASEACTIVE13

DHCP 协议 操作流程

主机新加入网络时,获取IP的流程 
1. 新的client加入网络时,会使用0.0.0.0作为源地址,发送discover广播报文,查询网络上有哪些DHCP server,以及这些DHCP server 能Offer哪些IP地址 
2. DHCP服务器接收到DHCP Discover报文后,回应Offer报文,提供IP地址(可能包含DNS等其他信息)给client 
3. client 根据收到的Offer报文,选择一个DHCP server,并选择它提供的IP地址。然后广播Request报文,想DHCP Server请求该IP地址,同时想本地网络(尤其是其他DHCP Server)公告自己已经选择了某个DHCP Server的某个IP地址。 
4. DHCP Server 回应ACK报文,将IP地址分配给Client端 (特殊情况:DHCP Server在发送Offer报文和接收到Request的短暂时间内把IP分配给了其他主机) 
5. DHCP Client 收到ACK报文后,会针对获得的IP地址发送ARP Request,进行IP地址冲突检测。 
6. 如果IP地址已经被其他主机使用,则Client放弃该IP地址,想Server发送DHCP DECLINE报文告诉Server该地址不能使用。然后一段时间后(一般10s)再此尝试获取该IP地址 
7. 如果Client仍然无法使用该IP地址,则发送DHCP RELEASE报文,放弃该地址。

主机已经有IP地址,只想更新租约 
1. 此时可以跳过DHCP Discover报文和DHCP Offer报文 
2. Client发送携带当前IP地址的Request报文 
3. 如果Server同意Client续约,则发送DHCP ACK报文。如果拒绝续约,则发送DHCPNAK报文。

* 主机只想更新IP地址以外的信息* 
用DHCPINFORM 取代 DHCP Request报文。

1.      抓包分析:

(1)DHCP discover阶段:


(2)DHCP offer阶段:


(3)DHCP request阶段:


(4)DHCP ack阶段:


2.      总结:

阶段

源MAC

目标MAC

源IP

目标IP

Discover

PC机的MAC

全FF

0.0.0.0

255.255.255.255

Offer

Dhcp服务器或者中继器路由的MAC

Dhcp客户机的MAC

Dhcp服务器或者中继路由器的IP地址

准备分配的IP地址

Request

PC机的MAC

全FF

0.0.0.0

255.255.255.255

Ack

Dhcp服务器或者中继器路由的MAC

Dhcp客户机的MAC

Dhcp服务器或者中继路由器的IP地址

准备分配的IP地址

 

 

3.DHCPTransaction  ID是由客户机产生一个随机数获得,不同MAC地址产生的Transaction ID不同,Transaction  ID是区分不同DHCP请求的标识


原创粉丝点击