一、DHCP简介
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,前身是BOOTP协议。在大型局域网中,需要给很多主机配置地址信息,如果采用传统手工配置(累死),效率太低,因此采用此协议可以很方便的给主机配置各种地址信息,例如IP地址,SubMask、网关地址、DNS等等。
DHCP协议理解
- 定义:DHCP:Dynamic Host Configuration Protocol,动态主机配置协议,是一个应用在局域网中的网络协议,它使用UDP协议工作。
- 理解:DHCP协议就是一个基于UDP协议工作在局域网内的网络协议,其最终的目的就是获取响应的IP地址,其中这过程中有多种分配方式,以及发送报文的格式要求等。
- 作用:动态分配IP地址,过程自动化,终端无需一一手工配置,配置信息统一管理(DNS,网关),IP地址有限、需要大量配置IP地址、经常移动终端。
- 好处:提高配置IP地址效率,减少配置工作量,减少IP地址冲突。
- 分配IP地址方式:
- (1)手工配置方式:通过网络管理员手工配置某台客户端特定的IP地址,当客户端请求分配时,DHCP服务器就将手动配置的IP地址分配给客户端。。
- (2)自动配置方式:当DHCP客户端第一次想服务端租用到第一个IP地址后,就将这个IP地址永久分配给客户端使用。
- (3)动态配置方式:服务器暂时分配一个IP地址给客户端,根据租约到期或者续约租期的方式来管理分配的IP地址。
二、DHCP工作原理知识
2.1 DHCP 工作过程
(1)客户端通过广播发送 DHCP Discover 报文寻找DHCP 服务端。
(2)服务端通过单播发送 DHCP Offer 报文向客户端提供从地址池中挑选的可用 IP 等网络信息。
(3)客户端只接收第一个收到的 DHCP Offer 报文并提取 IP 地址,然后向通过广播发送 DHCP Request 报文 告知服务端要使用该 IP 地址。
(4)服务端通过单播发送 DHCP ACK 报文告知客户端该 IP 地址是合法可用的,并提供租约信息。
2.2 DHCP Relay 工作原理
DHCP Relay 即DHCP 中继,它实现了不同网段间的DHCP服务器和客户端之间的报文交互。DHCP 中继承担处于不同网段间的DHCP 客户端和服务器之间中继服务,将DHCP 协议报文跨网段透传到目的DHCP 服务器,最终使网络上的DHCP 客户端可以共同使用一个DHCP 服务器。
工作过程:
三、DHCP 报文
3.1 DHCP报文封装格式
3.2 DHCP报文格式
- op:1byte,是报文的操作类型,分为请求报文和响应报文,1为请求报文;2为响应报文。具体的报文类型在option字段中标识。
- htype:1byte,表示client硬件地址的类型,1表示以太网类型。
- hlen:1byte,硬件地址的长度,以太网的硬件地址长度为6bytes。
- hops:1byte,表示当前dhcp报文经过的DHCP中继的数目,每经过一个DHCP中继这个字段就加1.
- xid:4bytes,由client端产生的随机数,用于匹配请求和应答报文,就是匹配应答报文是对哪个请求报文做出应答。
- secs:2bytes,客户端进入IP地址申请进程的时间或者更新IP地址进程的时间;由客户端软件根据情况设定。目前没有使用,固定为0。
- flags:2bytes,是标志字段,16比特中只使用了最高位比特(即最左边的比特),这个个比特是广播响应标识位,用来标识DHCP服务器发出的响应报文是广播还是单播,0是单播,1是广播。其余的比特位保留不用,都为0。
- ciaddr:4bytes,是客户端的IP地址,可以是client自己的IP地址,也可以是server分配给client的IP地址。
- yiaddr(Your IP Address):4bytes,是server分配给client的IP地址。
- siaddr:4bytes,是client端获取IP地址等信息的server端的地址。
- giaddr:4bytes,是client发出请求报文后经过的第一个中继的IP地址。
- chaddr:16bytes,是client端的硬件地址,在client发出报文时会把自己网卡的硬件地址写进这个字段。
- sname:64bytes,服务器主机名,是client端获取IP地址等信息的服务器名称。
- file:128bytes,是client的启动配置文件名,是服务器为client指定的启动配置文件名及路径信息,由服务器填写。
- options:是可选变长的选项字段,这个字段包含了终端的初始配置信息和网络配置信息,包括报文类型,有效租期,DNS服务器的IP地址等配置信息。
3.3 DHCP报文的种类
Dhcp协议一共有8种报文,包括:DHCP Dsicover,DHCP Offer,DHCP Request,DHCP ACK,DHCP NAK,DHCP Release,DHCP Decline,DHCP Inform。
这里只介绍前四个:DHCP Dsicover,DHCP Offer,DHCP Request,DHCP ACK
(1)DHCP Dsicover报文
这个报文是client端开始dhcp过程的第一个请求报文,client在请求地址时,并不知道server端的位置,所以client会以广播的方式发送请求报文,它的目的是发现网络中的服务器。
(2)DHCP Offer报文
这个报文server端对DISCOVERY报文的响应报文。会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如GATEWAY,DNS SERVER等),构造一个OFFER报文,发送给用户,告知用户本SERVER可以为其提供IP地址的分配,并且。发OFFER报文一般是单播的方式发送。
(3)DHCP Request报文
在一个子网中可能有多台服务器,所有收到DISCOVER报文的服务器都会回应OFFER报文,所以client端可能收到多个OFFER报文,通常会选择第一个OFFER报文的服务器作为自己的目标服务器,并回应一个REQUEST请求报文。在续租约的时候client端也会发送REQUEST报文 请求续租期。
(4)DHCP ACK报文
是server对client端的REQUEST报文的确认响应报文,server在收到REQUEST报文后,根据REQUEST报文中携带的client MAC来查找有没有相应的租约记录,如果有则发送ACK报文作为回应,通知client可以使用分配的IP地址。
(5)DHCP Release报文
DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
3.4 实验拓扑图及抓包位置展示
四、主机——DHCP 中继 报文分析
目的:确认客户端是否正确发送Discover 包,是否能够接收到中继设备转发回来的Offer 和ACK 包。
主机与DHCP 中继之间交互用的是广播形式
发现Discover 阶段:
客户端在局域网内以广播的方式发起一个DHCP Discover广播报文,目的是在子网络中发现能够给client端提供IP地址的server端。
特别要注意:PC会随机出一个Transaction ID,如果之后收到的Offer报文中的Transaction ID与PC模拟出的不同,PC会将该Offer报文直接丢弃。
UDP 目标端口号为67 源IP地址:0.0.0.0 目的IP地址:255.255.255.255
提供Offer 阶段:
局域网中DHCP server接受到Discover包之后,通过发送DHCP offer包给客户端应答,主要是告知client(客户)端可以提供IP地址,以及相应的IP地址租约信息和其他配置信息也会在其中。
UDP 目标端口号为68 源IP地址:192.71.100.200 目的IP地址:192.71.64.10
DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。
选择Request 阶段:
在client端可能会接受到多个offer包,通常client端只会接受收到的第一个DHCP offer报文,然后client端就会以广播的方式发送一个DHCP request报文请求分配IP地址。
UDP 目标67 源IP为0.0.0.0 目的IP:255.255.255.255
DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。
确认ACK 阶段:
server端在收到DHCP request报文之后,会判断”option”字段的serverIP地址是否是自己的IP地址,如果符合分配IP地址的条件,就会给client发送一个DHCP ACK包,如果不满足就发挥发送一个DHCP NAK 包。
DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
【地址租期】
DHCP服务器提供的每个IP地址都有相应的租用期,在Offer报文中的IP Address Lease Time中可以看到。地址租期时间过长会导致地址资源长期被占用,租期过短会导致DHCP请求包过多,增加网络负担。还要结合当前使用场景来设置。一般来说,对DHCP客户端数量较大,且断开网络比较频繁的场所,如机场、商铺等,一般把DHCP租期配置较短,这样IP地址能很快被回收。
【IP续租过程】
客户端会在地址租期还有1/2的时候,向DHCP服务器发送DHCP Request报文;
如果收到服务器的DHCP Ack后,客户端的IP地址租期重新回满。
如果未收到Ack,可继续使用该IP,在租期还有1/4时发出第二次Request报文;如果收到Ack,租期回满;
如果未收到Ack,在租期还有1/8时发出第三次Request报文,如果收到Ack,租期回满
如果未收到Ack,租期结束后IP被回收。
五、DHCP 中继——DHCP 服务器报文分析
目的:确认客户端是否正确发送Discover 包,是否能够接收到中继设备转发回来的Offer 和ACK 包。
主机与DHCP 中继之间交互用的是广播形式
发现Discover 阶段:
提供Offer 阶段:
选择Request 阶段:
确认ACK 阶段:
六、DHCP 中继——DHCP 服务器报文分析
目的:确认中继设备是否正确转发Discover 包,并正确填充giaddr 字段。
DHCP 中继以单播的形式与DHCP 服务器交互
发现Discover 阶段:
提供Offer 阶段:
选择Request 阶段:
确认ACK 阶段:
七、DHCP 服务器的响应 报文分析
目的:确认DHCP 服务器是否收到请求,并根据giaddr 字段分配了正确的IP 地址。
八、应用
8.1 DHCP Server 的典型组网应用
以下场合通常利用DHCP 服务器完成IP 地址分配:
网络规模较大,手工配置需要很大的工作量,且难以对整个网络进行集中管理。
网络中主机数目大于该网络支持的IP 地址数量,无法给每个主机分配一个固定的IP 地址。用户需要通过DHCP 服务动态获得自己的IP 地址,而且,网络管理员希望对同时上线的用户数量也有限制。
网络中需要固定IP 地址的主机比较少,大部分主机可以不使用固定的IP 地址。
8.2 DHCP Relay 的典型组网应用
DHCP 中继的应用环境:早期的DHCP 协议只适用于DHCP 客户端和服务器处于同一个网段内的情况,不能跨网段工作。跨网段的主机动态分配IP 地址,需网络管理者在每个网段各配置一个DHCP服务器,不够经济。
DHCP 中继(DHCP Relay)的引入解决了这一难题:
客户端可以通过DHCP 中继与其他网段的DHCP 服务器通信,取得合法的IP 地址。这样,多个网段的DHCP 客户端可以使用同一个DHCP 服务器,既节省了成本,又便于进行集中管理。
记得点赞收藏哦~