DHCP服务看似简单,但功能强大,配置主要涉及DHCP服务器、DHCP中继、DHCP Snooping和DHCP客户端
DHCP基础
DHCP(Dynamic HostConfiguration Protocol,动态主机配置协议)技术实现了客户端IP地址和配置信息的动态分配以及集中管理。采用客户端/服务器通信模式,由客户端向服务器提出配置申请(包括IP地址、子网掩码、缺省网关等参数),服务器根据策略返回相应配置信息。
利用DHCP的场合:
--网络规模较大,手工配置工作量大;
--网络中主机数目大于该网络支持的IP地址数量,无法给每个主机分配一个固定IP;
--网络中只有少数主机需要固定IP地址。
一、DHCP概述
DHCP服务采用Client/Server(客户端/服务器)模式结构。
主要包括以下三种角色:
1、DHCP Client(DHCP客户端)
2、DHCP Server(DHCP服务器)
3、DHCP Relay(DHCP中继),如果DHCP服务器和客户端不在同一个网段范围,需要由中继负责DHCP服务器与DHCP客户端之间的DHCP报文转发。
二、DHCP报文及其格式
DHCP服务工作在C/S模式,但两者进行报文传输时所使用的UDP传输端口不一样。DHCP客户端使用68号UDP端口发送请求报文;DHCP服务器使用67号UDP端口发送应答报文。两种报文分别称为DHCP请求报文和DHCP应答报文
1、DHCP报文种类
整个DHCP服务一共8种类型的DHCP报文,分别是DCHP Discover、DCHP Offer、DCHP Request、DCHP ACK、DCHP NAK、DCHP Release、DCHP Decline、DCHP Inform。
2、DHCP报文格式
DHCP服务的报文种类虽比较多,但每种报文的格式相同,不同类型的报文只是报文中的某些字段取值不同。DHCP报文格式基于BOOTP的报文格式
①OP:Operation,指定DHCP报文的操作类型,占8位,请求报文置1,应答报文置2。DCHP Discover、DCHP Request、DCHP Release、DCHP Decline、DCHP Inform为请求报文,而DCHP Offer、DCHP ACK、DCHP NAK为应答报文。
②Htype、Hlen:分别指定DHCP客户端的MAC地址类型和MAC地址长度,各占8位。MAC地址类型其实用于指明网络类型,Htype字段置1时表示以太网MAC地址类型;以太网MAC地址长度为6字节,即Hlen字段值为6。
③Hops:指定DHCP报文经过的DHCP中继的数目,占8位。DHCP请求报文每经过一个DHCP中继该字段增加1,没有经过DHCP中继时值为0。
④Xid:客户端通过DHCP Discover报文发起一次IP地址请求时选择的随机数,相当于请求标识(占32位),用来标识一次IP地址请求过程。在一次请求中所有报文的Xid都是一样的。
⑤Secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位,占16位。在没有获取IP地址前该字段始终为0.
⑥Flags:标志位,16位,第一位为广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,置0时表示采用单播发送方式,置1时表示采用广播发送方式,其余位保留不用。
在客户端正式分配IP地址之前的第一IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCP Discover和DHCP Request报文以及DHCP服务器发送的DHCP Offer、DHCP ACK和DHCP NAK报文。如果是由DHCP中继转发的报文,都是以单播方式进行发送的。
⑦Ciaddr:指示DHCP客户端的IP地址,32位,仅在DHCP服务器发送的ACK报文中显示,其他报文中均显示0.0.0.0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。
⑧Yiaddr:指示DHCP服务器分配给客户端的IP地址,32位,仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0.0.0.0
⑨Siaddr:指示下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址,占32位。仅在Offer、ACK报文中显示,其他报文显示为0.0.0.0
⑩Giaddr:指示DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址,32位,如没有经过DHCP中继,显示为0.0.0.0
11Chaddr:指示DHCP客户端的MAC地址,占128位(16字节),在每个报文中都会显示对应DHCP客户端的MAC地址。
12Sname:指示为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式),占512位(64字节)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为空。
13File:指示DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息,占1024位(128字节)。仅在DHCP Offer报文中显示,其他报文显示为空。
14Option:可选字段,长度可变,最多为312字节。DHCP通过此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址、DNS服务器的IP地址、客户端可以使用IP地址的有效租期等信息。
在此部分可选的选项包含:报文类型(代码为53,占1字节)、有效租约期(代码为51,以秒为单位,占4字节)、续约时间(代码为58,占4字节)、子网掩码(代码为1,占4字节)、默认网关(代码为3,可以是一个路由器IP地址列表,长度可变但必须为4字节的整数倍)、DNS服务器(代码为6,可以是一个DNS服务器IP地址列表,长度可变但必须为4字节的整数倍)、域名城(代码为15,主DNS服务器名称,长度可变)、WINS服务器(代码为44,可以是一个WINS服务器IP列表,长度可变但必须为4字节的整数倍)等配置信息。表5-1所示的DHCP报文类型的取值分别如下:
-DHCP DISCOVER:1
-DHCP OFFER:2
-DHCP REQUEST:3
-DHCP DECLINE:4
-DHCP ACK :5
-DHCP NAK:6
-DHCP RELEASE:7
三、DHCP服务IP地址自动分配原理
DHCP提供服务时,客户端以UDP68号端口进行数据传输,服务器以UDP 67号端口进行数据传输。DHCP服务不仅体现在为DHCP客户端提供iP地址自动分配的过程中,还体现在后面的IP地址续约和释放过程。
在整个DHCP服务器为客户端初次提供IP地址自动分配过程中,一共经历4个阶段,利用了4个报文:发现阶段(DHCP客户端在网络中广播发送DHCP DISCOVER请求报文,发现DHCP服务器,请求IP地址租约)、提供阶段(DHCP服务器通过DHCP OFFER报文向DHCP客户端提供IP地址预分配)、选择阶段(DHCP客户端通过DHCP REQUEST报文确认选择第一个DHCP服务器为它提供IP地址自动分配服务)和确认阶段(被选择的DHCP服务器通过DHCP ACK报文把在DHCP OFFER报文中准备的IP地址租约给对应DHCP客户端)。
DHCP客户端在获得一个IP地址后,就可以发送一个免费的ARP请求探测网络中是否还有其他主机使用IP地址,来避免由于DHCP服务器地址池重叠而引发的IP冲突。
1、发现阶段
即DHCP客户端获取网络中DHCP服务器信息的阶段。客户端启动后,以广播方式发送DHCP DISCOVER报文来寻找网络中的DHCP服务器。此广播报文采用传输层的UDP68号端口发送(封装的目的端口为UDP67号端口),经过网络层IP协议封装后,源IP地址为0.0.0.0(因为此时还没有分配IP地址),目的地址为255.255.255.255(有限广播IP地址)。下面是一个DHCP DISCOVER报文封装的IP报头实例,可见Destination Address(目的地址)是255.255.255.255,而源地址Source Address是0.0.0.0。
255.255.255.255有限广播地址,代表任意一个IPv4子网的广播地址,当然是发送报文的主机所在的子网和DHCP服务器所在子网的广播地址。IP报头中的源地址(Source Address),因为当前DHCP客户端主机并未分配具体的IP地址,只能用具有任意代表功能的0.0.0.0地址表示。
此时,DHCP客户端没有分配到IP地址,也不知道DHCP服务器或DHCP中继的IP地址,所以在DHCP DISCOVER报文中Ciaddr(客户端IP地址)、Yiaddr(被分配的DHCP客户端IP地址)、Siaddr(下一个为DHCP客户端分配IP地址的DHCP服务器地址)、Giaddr(DHCP中继IP地址)这4个字段均为0.0.0.0。在Ciaddr字段和DHCP选项中,Client Identifier字段都标识了DHCP客户端网卡MAC地址。
2、提供阶段
即DHCP服务器向DHCP客户端提供预分配IP地址的阶段。网络中的所有DHCP服务器接收到客户端的DHCP DISCOVER报文后,都会根据自己地址池中IP地址分配的优先次序选出一个IP地址,然后与其他参数一起通过传输层的UDP67号端口,在DHCP OFFER报文中以广播方式发送给客户端(目的端口是DHCP客户端的UDP68号端口)。客户端通过封装在帧中的目的MAC地址(就是在DHCP DISCOVER报文中的CHADDR字段值)的比对来确定是否接收该帧。理论上DHCP客户端可能会收到多个DHCP OFFER报文(当网络中存在多个DHCP服务器时),但DHCP客户端只接收第一个到来的DHCP OFFER报文。
DHCP OFFER报文经过IP协议封装后的源IP地址为DHCP服务器自己的IP地址,目的地址仍是255.255.255.255广播地址,使用的协议仍为UDP。
在DHCP OFFER报文中,Ciaddr字段仍为0.0.0.0,因为客户端仍没有分配到IP地址;Yiaddr字段有值,这是DHCP服务器为该客户端预分配的IP地址;Siaddr字段值为DHCP服务器地址;因为没有经过DHCP中继服务器,Giaddr字段值为0.0.0.0。在DHCP可选项部分,可以看到由服务器随IP地址一起发送的各种选项,这种情况下,服务器发送的是子网掩码、默认网关(路由器)、租约时间、WINS服务器地址(NetBIOS名称服务)和NetBIOS节点类型。
DHCP OFFER报文:
3、选择阶段
即DHCP客户端选择IP地址的阶段。客户端只接受第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文。在该报文的“Requested Address”选项中包含DHCP服务器在DHCP OFFER报文中预分配的IP地址,对应的DHCP服务器IP地址等。这相当于同时告诉其他DHCP服务器,它们可以释放已经提供的地址,并将这些地址返回到可用地址池中。
在DHCP REQUEST报文封装的IP协议头部,客户端的Source Address仍然是0.0.0.0,数据包的Destination仍然是255.255.255.255,但在DHCP REQUEST报文中Ciaddr、Yiaddr、Siaddr、Giaddr字段的地址均为0.0.0.0。
4、确认阶段
即DHCP服务器确认分配给DHCP客户端IP地址的阶段。某个DHCP服务器在收到DHCP客户端发来的DHCP REQUEST报文后,只有DHCP客户端选择的服务器会进行如下操作:如果确认将地址分配给该客户端,则以广播方式返回DHCP ACK报文;否则返回DHCP NAK报文,表明地址不能分配给该客户端。
在DHCP服务器发送的DHCP ACK报文的IP协议头部中,Source Address是DHCP服务器IP地址,Destination Address仍然是广播地址255.255.255.255。在DHCP ACK报文中的Yiaddr字段包含要分配给客户端的IP地址,而Chaddr和DHCP:Client Identifier字段是发出请求的客户端中网卡的MAC地址。同时,在选项部分也会把在DHCP OFFER报文中所分配的IP地址的子网掩码、默认网关、DNS服务器、租约期、续约时间等信息加上。
客户端在收到服务器返回的DHCP ACK后,以广播方式发送免费ARP报文(该报文中,源IP地址和目标IP地址都是本机IP地址——ACK报文分配的IP,源MAC地址是本机MAC地址,目的MAC地址是广播MAC地址),如果在规定时间内没有收到回应,客户端才使用此地址。否则客户端发送DHCP DECLINE报文给DHCP服务器,并重新申请IP地址。
四、DHCP服务IP地址租约更新原理
DHCP服务器按照如下优先次序为客户端选择IP地址。
1、DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址。
2、客户端以前曾经使用过的IP地址,即客户端发送的DHCPDISCOVER报文中请求IP地址选项的地址。
3、在DHCP地址池中,在顺序查找可供分配的IP地址中,最先找到的IP地址。
4、如果在DHCP地址池中未找到可供分配的IP地址,则依次查询超过租期、发生冲突的IP地址,如找到可用IP地址,则分配否则报告错误。
DHCP客户端申请续约的步骤:
1、在DHCP客户端的IP地址租约期限达到1/2时,DHCP客户端会向为它分配IP地址的DHCP服务器以单薄方式发送DHCPREQUEST请求报文,以期进行IP租约的更新。
2、如果DHCP服务器同意续约,则DHCP服务器向客户端以单播方式返回DHCP ACK报文,通知DHCP客户端已经获得新IP租约,可继续使用此IP地址;相反,如服务器不同意续约,则DHCP服务器以单播方式返回DHCP NAK报文,通知DHCP客户端不能获得新的租约。此IP地址不可以再分配给该客户端。
3、如上面的续约申请失败,则DHCP客户端还会在租约期限达到7/8时,再次以单播方式发送REQUEST请求报文进行续约。
五、DHCP中继代理服务
在DHCP客户端初次从DHCP服务器获取IP地址的过程中,所有从DHCP客户端发出的请求报文和所有由DHCP服务器返回的应答报文均是以广播方式(目的地址为255.255.255.255)进行发送的,所以DHCP服务只适用于DHCP客户端和服务器处于同一个子网的情况,因为广播包不能穿越子网。
DHCP中继功能可以解决超越子网的问题。DHCP中继代理位于DHCP客户端和DHCP服务器之间,负责广播DHCP报文的转发。
DHCP中继代理必须至少有一端口连接了DHCP客户端所在子网,另一端口直接连接了DHCP服务器所在子网。
1、DHCP中继代理简介
Option 82是DHCP报文中的中继代理信息选项(RelayAgent Information Option),该选项记录了DHCP客户端的位置信息。管理员可以利用该选项定位DHCP客户端,实现对客户端的安全和计费等控制。还可根据该选项的信息制定IP地址和其他参数的分配策略。
在整个Option 82选项中最多可以包含255个子选项,且至少要定义一个子选项。目前的设备主要只支持两个子选项:sub-option 1(Circuit ID,电路ID子选项)和sub-option 2(Remote ID,远程ID子选项)。设备作为DHCP中继设备都支持Option 82子选项的扩展填充格式。
Sub-option 1和sub-option 2两个子选项的格式如下图,固定字段(相当于子选项头)括号中的内容为该字段的固定取值。Sub-option 1子选项中的内容是接收到DHCP客户端请求报文的端口所属VLAN的编号(对应“VLAN ID”字段,占2字节)以及端口索引(豆蔻索引的取值为物理编号减1,对应“Port Index”字段,占2字节)。Sub-option 2子选项的内容是接收到DHCP客户端请求报文的DHCP中继设备的MAC地址(对应“MAC Address”字段,占6字节)。
2、通过DHCP中继代理动态IP地址分配原理
也经历发现、提供、选择和确认4个阶段。所用到的报文也对应是DHCP DISCOVER、DHCP OFFER、DHCP REQUEST、DHCP ACK,只是在这里DHCP中继代理需要起到一个中介代理的角色,负责转发DHCP客户端与DHCP服务器之间交互的报文。
DHCP中继设备将在DISCOVER和REQUEST这两种报文中都添加Option82选项。
工作机制:
①DHCP客户端以广播方式(因为不知道中继代理设备的IP地址)向本网段发送DHCP DISCOVER或DHCP REQUEST请求报文。此时只有DHCP中继代理设备会接收该报文。
②DHCP中继代理设备在收到DHCP客户端发来的DHCP DISCOVER或DHCP REQUEST请求报文后,将检查报文中是否已有Option 82选项。
如果请求报文中已有Option82,DHCP中继代理设备会按照配置的策略对该报文进行处理(丢弃或者用中继设备本身的Option82选项替代报文中原有的Option82选项,或保持报文原有的Option82选项)。同时根据Option82选项sub-option1子选项中的VLAN ID和Port Index字段配置,找到为对应网段所分配的DHCP服务器地址,并将请求报文中的giaddr字段填充为DHCP中继代理设备的IP地址,然后将请求报文以单播方式(因为在中继代理设备中已配置好了对应的DCHP服务器地址)转发给指定的DHCP服务器。
如果请求报文中没有Option82选项,则DHCP中继设备将Option82选项添加到报文中后,根据Option82选项sub-option1子选项中的VLAN ID和Port Index字段配置,找到为对应网段所分配的DHCP服务器地址,并将报文中的giaddr地段填充为DHCP中继道理设备的IP地址,然后根据中继代理设备中为对应网段所配置的DHCP服务器地址以单播方式将请求报文转发给DHCP服务器。
③DHCP服务器在收到由DHCP中继代理设备转发的DHCP DISCOVER或DHCP REQUEST请求报文后,根据转发的请求报文中的giaddr字段值所对应的中继代理设备IP地址,以及在Option82选项中sub-option2子选项中的中继代理MAC地址以单播方式向DHCP中继代理返回对应的DHCP OFFER或者DHCP ACK应答。
④DHCP中继设备在收到DHCP服务器的应答报文后,将剥离报文中的Option82信息,然后以广播方式将带有DHCP配置信息的对应应答报文转发给DHCP客户端,完成对客户端的IP地址动态分配。