这是我参与 8 月更文挑战的第 27 天,活动详情查看: 8月更文挑战
DHCP简介
DHCP(Dynamic Host Configuration Protocol)
,动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
DHCP的前身是BOOTP协议(Bootstrap Protocol)
,BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHCP比BOOTP更加复杂,功能更强大。后面可以看到,在用Wireshark过滤显示DHCP包,需要输入过滤条件BOOTP,而不是DHCP,但或许是因为我使用的Wireshark版本是比较旧的1.12.9,没有在新版本中尝试过,也许可以输入DHCP让其只显示DHCP包。
DHCP原理
R1(config)#ip dhcp pool test ->创建DHCP地址池
R1(dhcp-config)#network 172.16.1.0 255.255.255.0 ->发布地址池网段
R1(dhcp-config)#default-router 172.16.1.1 ->默认网关
R1(dhcp-config)#dns-server 8.8.8.8 ->DNS服务器
R1(config)#int g0/0
R1(config-if)#ip add 172.16.1.1 255.255.255.0
R2(config)#int g0/0
R2(config-if)#ip address dhcp
复制代码
从日志信息已经可以看到获取到IP地址了
*Dec 10 18:23:17.187: %DHCP-6-ADDRESS_ASSIGN: Interface GigabitEthernet0/0 assigned DHCP address 172.16.1.2, mask 255.255.255.0, hostname R2
复制代码
查看获取到IP地址
R2#show ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 172.16.1.2 YES DHCP up up
复制代码
报文交互过程
DHCP的客户端会发一个DHCP Discover的一个广播包,从下面报文可以看出DHCP是基于UDP协议,服务端的端口67,客户端的端口68
当DHCP服务器收到了DHCP Discover广播包后,就会回复一个DHCP Offer包,DHCP服务器就会从地址池中分配一个IP地址给客户端。从Your IP address属性可以看到获取到的IP地址。
特别注意一下的是,如果DHCP的地址池和网关不在同一个网段,DHCP Discover广播包会被三层接口丢弃,解决方法就是设置DHCP中继,这样端口收到DHCP 广播包就会把广播包变成单播包发给指定的DHCP服务器
如果有多台DHCP服务器向DHCP客户机发来的DHCP Offer提供信息,则DHCP客户机只接受第一个收到的DHCP Offer提供信息,然后它就以广播方式回答一个DHCP Request请求报文,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。
当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。
当电脑关机或者禁用了网卡之后,DHCP客户端会向服务端发送Release数据包去释放地址
更新租约
DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。
为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCPack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack)而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。
如果我们把R1的地址池改成不同网段的,可以看到PC发出的DHCP Discover广播包没有收到回应,因为这些数据包被三层接口丢弃了
R1(config)#ip dhcp pool test
R1(dhcp-config)#network 172.16.2.0 255.255.255.0
复制代码
DHCP中继
R2作为DHCP服务器为PC1提供DHCP服务
R1:
R1(config)#interface g0/0
R1(config-if)#ip address 172.16.1.1 255.255.255.0
R1(config-if)#ip helper-address 172.16.2.2 ->设置中继的DHCP服务器IP地址
R1(config)#interface g1/0
R1(config-if)#ip address 172.16.2.1 255.255.255.0
R2:
R2(config)#ip dhcp pool test
R2(dhcp-config)#network 172.16.2.0 255.255.255.0
R2(dhcp-config)#default-router 172.16.2.1
R2(dhcp-config)#dns-server 8.8.8.8
R2(config)#interface g0/0
R2(config-if)#ip address 172.16.2.2 255.255.255.0
复制代码
在PC1上已经获取到了IP地址
*Dec 15 10:44:49.935: %DHCP-6-ADDRESS_ASSIGN: Interface GigabitEthernet0/0 assigned DHCP address 172.16.2.3, mask 255.255.255.0, hostname PC1
复制代码
DHCP Snooping
DHCP Snooping
是 DHCP 的一种安全特性,通过截获 DHCP Client 和 DHCP Server 之
间的 DHCP 报文并进行分析处理,过滤不信任的 DHCP 报文并建立和维护一个 DHCP
Snooping 绑定表。该绑定表包括 MAC 地址、IP 地址、租约时间、绑定类型、VLAN
ID、接口等信息。
近期评论