DHCP协议原理及其实现流程

DHCP(Dynamic Host Configuration Protocol):动态主机配置协议

在常见的小型网络中(例如家庭网络和学生宿舍网),网络管理员都是采用手工分配IP地址的方法,而到了中、大型网络,这种方法就不太适用了。在中、大型网络,特别是大型网络中,往往有超过100台的客户机,手动分配IP地址的方法就不太合适了。因此,我们必须引入一种高效的IP地址分配方法,幸好,DHCP(Dynamic Host Configuration Protocol)为我们解决了这一难题。

DHCP的优缺点

DHCP服务优点不少:网络管理员可以验证IP地址和其它配置参数,而不用去检查每个主机;DHCP不会同时租借相同的IP地址给两台主机;DHCP管理员可以约束特定的计算机使用特定的IP地址;可以为每个DHCP作用域设置很多选项;客户机在不同子网间移动时不需要重新设置IP地址。

但同时也存在不少缺点:DHCP不能发现网络上非DHCP客户机已经在使用的IP地址;当网络上存在多个DHCP服务器时,一个DHCP服务器不能查出已被其它服务器租出去的IP地址;DHCP服务器不能跨路由器与客户机通信,除非路由器允许BOOTP转发。

 

工作流程

DHCP服务的工作过程是这样的:

1. 发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

    

2. 提供阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息。

   

 

3. 选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

   

 

4. 确认阶段,即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

   

 

5. 重新登录。以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

6. 更新租约。DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCP ack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。

DHCP CLIENT的行为

所有支持DHCP 协议并能够发起DHCP过程的终端都称之为DHCP CLIENT,包括普通PC机,各种特殊设备,如CABLE MODEM,IDT等。DHCP CLIENT自己必须能够发出DHCPDISCOVER,DHCPREQUEST,DHCPDECLINE等报文(DHCPINFORM报文也是DHCP CLIENT发出但实际中很少见),并且必须能够处理从服务器收到的以下几种报文:DHCPOFFER,DHCPACK和DHCPNAK。

  

                                                                      图 DHCP CLIENT 行为图

 

DHCP交互过程

     标准的DHCP server 和client的交互过程如下图所示,

 

                                   图 DHCP交互过程时序图

如果客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一个DHCPACK消息,在其中包括一些合适客户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充'yiaddr'字段或租用时间参数。服务器取得DHCPINFORM包内的'ciaddr'地址,而返回DHCPACK包。

DHCPDECLINE ——客户机通知服务器,其分配的地址已经被其他设.

 

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 报文

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

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

DHCP 消息类型对应的Option值
DHCPDISCOVER 1
DHCPOFFER 2
DHCPREQUEST 3
DHCPDECLINE 4
DHCPACK 5
DHCPNAK 6
DHCPRELEASE 7
DHCPINFORM 8
DHCPFORCERENEW 9
DHCPLEASEQUERY 10
DHCPLEASEUNASSIGNED 11
DHCPLEASEUNKNOWN 12
DHCPLEASEACTIVE 13

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报文。

 
posted on 2017-09-18 10:44  csguo  阅读(2836)  评论(0编辑  收藏  举报