DHCP总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DHCP总结
DHCP是Dynamic Host Configuration Protocol的缩写,即动态主机配置协议,他的前身是BOOTP,BOOTP用于无盘工作站,在以前由于存储设备比较贵,所以没有硬盘之类的存储设备,网络主机使用BOOT ROM启动连接上网络,通过BOOTP服务器非配IP地址,加载操作系统和所需要的文件,但是BOOTP存在一个缺点,也就是必须分配的IP地址由唯一的MAC地址相对应,因而非常的浪费IP地址,并且可扩展性不强。
真是由于BOOTP 的一些缺点,从而提出了DHCP,DHCP是BOOTP的增强版本,DHCP不仅可以分配IP地址,而且能分配默认网关,DNS服务器,租期等等一些参数。
DHCP分配地址的方式有以下三种:
1:Manual Allocation
网络管理员手工为某些主机分配IP地址
2:Automatic Allocation
DHCP Server为Client分配一个永久的IP地址
3:Dynamic Allocation
DHCP Server为Client自动生成一个IP地址,与自动分配的不同,动态分配的IP地址不是永久的,而是有一个租期,租期默认为1天,也就是说租期到期,Client就要释放这个IP地址给其他的使用。
DHCP的工作流程如下:
1:Client发DHCP的DISCOVERY消息
当Client第一次登陆网络的时候,由于没有IP地址,因此会向网络上发送一个DHCP DISCOVERY的广播包,用来发现网络上有没有DHCP的服务器,由于没有IP地址,改数据包的源地址为0.0.0.0目的地址为255.255.255.255。
DHCP discover 的等待时间预设为1 秒,也就是当客户端将第一个DHCP discover 封包送出去之后,在 1 秒之内没有得到响应的话,就会进行第二次DHCP discover 广播。
若一直得不到响应的情况下,客户端一共会有四次DHCP discover 广播(包括第一次在内),除了第一次会等待 1 秒之外,其余三次的等待时间分别是9、13、16 秒。
如果都没有DHCP服务器的响应,客户端会显示错误信息,宣告DHCP discovery的失败。
之后基于使用者的选择,系统会继续在5 分钟之后再重复一次DHCP discover 的过程,在微软系统里面如果没有得到DHCP服务器的响应,主机会自己分配一个168.254.0.0/24网段的IP地址。
2:DHCP Server给Client发DHCP Offer消息
当网络中有DHCP server,并且收到Client发来的DISCOVERY消息的时候,DHCP会发一个DHCP的OFFER消息给予响应,内容包括可以分配的IP地址,默认网关,租期,DNS Server 等等。
,DHCP OFFER消息的源地址为SERVER的IP地址,目的地址为255.255.255.255。
. 3:Client发给DHCP Server的REQUEST消息
Client只会接受一个服务器的Offer,当网络中有多个DHCP Server的时候,Client只会接受最先受到Offer的Server,Client差看分配给自己的IP地址后,并不会马上使用它,而是在网络上发一个解析改地址的ARP,如果有ARP 响应,那么网络上已经有主机使用该地址啦,Client会给服务器发送一个DHCP DECLIENT包给Server,拒绝其DHCP OFFER,并且重新发送DHCP Discovery消息,如果没有响应,那么Client则发送一个DHCP的REQUEST 消息给Server,表示接受这个IP地址,该数据包的源地址为0.0.0.0,目的地址为255.255.255.255。
4:DHCP SERVER发DHCP的ACK消息给Client
当DHCP 服务器接收到客户端的DHCP request 之后,会向客户端发出一个DHCPACK 响应,以确认IP 租约的正式生效,也就结束了一个完整的DHCP 工作过程,该数据包的源
地址为SERVER的IP地址,目的地址为255.255.255.255。
当主机再次启动的时候和租期到一半的时候也会发送DHCP的REQUEST消息,表示希望继续使用上次分配的IP地址,当然DHCP SERVER会尽量让客户使用原来分配的地址,如果没问题,那么DHCP SERVER会发送一个DHCP ACK消息给客户端表示同意。
如果SERVER不同意,那么会给客户端发送一个DHCPNACK消息给Client,要求其重新执行DHCP的DISCOVERY过程。
我做啦一个简单的DHCP实验,用抓包工具抓啦下包,正常情况下有这四种包,如下图所示:
DHCP DISCOVERY:
DHCP REQUEST:
DHCP OFFER:
DHCP ACK:
跨网络的DHCP 运作
从前面描述的过程中,我们不难发现:DHCP DISCOVER 是以广播方式进行的,其情形只能在同一网络之内进行,因为router 是不会将广播传送出去的。
但如果DHCP 服务器安设在其它的网络上面的话,由于DHCP 客户端还没有IP 环境设定,所以也不知道Router 地址,而且有些Router 也不会将DHCP 广播封包传递出去,因此这情形下DHCP DISCOVER 是永远没办法抵达DHCP 服务器那端的,当然也不会发生OFFER 及其它动作了。
我们可以使用DHCP中继来解决这个问题。
DHCP中继实验拓扑如下:
在R1到R3的接口上抓包:
发现主机首先给他分配地址为12.1.1.1,然后为12.1.1.2,R1发送Gratuitous ARP解析12.1.1.1和12.1.1.2的IP地址,都有人响应,因此他发送啦DHCP Decline消息给Server,最终接受的ip 地址为12.1.1.3。
在DHCP SERVER上DEBUG DHCP有以下信息:
在R3和R4所连接口上抓包:
发现R3将R1发给他的DHCP DISCOVERY的广播消息转为单播发送给DHCP SERVER,源地址为收到DHCP DISCOVERY的接口地址,目的地址为DHCP SERVER的地址。
其过程和普通的DHCP请求过程一样,只是广播包都转变为单播。
当然DHCP远远不止上面这么简单,还有很多特性,例如:
还可以配置DHCP DATABASE的AGENT,用于存放已经分配的IP地址和主机的映射,便于恢复;还可以手工配置MAC地址和IP地址的映射,便于安全和管理;还可以配置DHCP的安全和审计等等,特性太多不一一介绍。
一些简单查看DHCP的命令:
show ip dhcp pool [name]
show ip dhcp binding [address]
show ip dhcp conflict [address]
show ip dhcp database [url]
show ip dhcp server statistics [type number]
例子:
R4#show ip dhcp pool PC
Pool PC :
Utilization mark (high/low) : 100 / 0
Subnet size (first/next) : 0 / 0
Total addresses : 254
Leased addresses : 1
Pending event : none
1 subnet is currently in the pool :
Current index IP address range Leased addresses 12.1.1.4 12.1.1.1 - 12.1.1.254 1
R4#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type
Hardware address/
User name
12.1.1.3 0063.6973.636f.2d63. Mar 03 2002 12:00 AM Automatic
6330.362e.3134.3630.
2e30.3030.302d.4574.
302f.30
R4#show ip dhcp database
由于没有配置DHCP DATABASE的AGENT因此没有显示
R4#show ip dhcp conflict
IP address Detection method Detection time VRF
12.1.1.2 Gratuitous ARP Mar 01 2002 12:00 AM
R4#show ip dhcp server statistics
Memory usage 23754
Address pools 1
Database agents 0
Automatic bindings 1
Manual bindings 0
Expired bindings 0
Malformed messages 0
Secure arp entries 0
Message Received
BOOTREQUEST 0
DHCPDISCOVER 6
DHCPREQUEST 2
DHCPDECLINE 1
DHCPRELEASE 0
DHCPINFORM 0
Message Sent
BOOTREPL Y 0
DHCPOFFER 2
DHCPACK 2
DHCPNAK 0
清除DHCP SERVER上服务信息的命令:clear ip dhcp binding {address | *}
clear ip dhcp conflict {address | *}
clear ip dhcp server statistics。