网络技术之DHCP工作原理详解!DHCPSnooping

这是我参与 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、接口等信息。

推荐阅读

Linux Shell编程基础!

Linux sudo和sudoers详解!

Linux部署samba服务器!

Linux Zabbix 5.0安装详解!

docker之docker-compose的使用!

docker之Dockerfile文件详解!