DHCP
动态主机配置协议
DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,用来集中管理、分配IP地址,使网络环境中的主机能够动态获取IP地址、网关地址、DNS服务器地址等信息。DHCP采用客户端+服务器模式,端口号:客户端为68(中继模式下67),服务器端为67,其前身有RARP和Bootstrap
RARP:反向ARP,适用于无盘工作站中,主机可以根据自身的MAC地址请求相对应的IP地址
Bootstrap:自举协议
以上两种协议的缺陷是需要根据主机自身的配置文件才能请求相对应的IP地址,不够灵活;只能请求到IP+子网掩码/网关+DNS信息,内容太少;效率低
相比较以上两种协议,DHCP能够实现有以下优点:即插即用,很灵活;通过在TLV字段中添加多种option字段,能够获取更多的信息;延时低,效率高(低于30S);配置量小;集中管理,保证地址的唯一性;移动性强
DHCP工作流程
寻找DHCP Server
当DHCP Client第一次登陆网络的时候(没有任何IP地址等相关信息信息),以广播的形式通过UDP 67端口向网络中发出DHCP Discover数据包(包含本机MAC和计算机名等信息)。封包的内容包含源地址0.0.0.0,目标地址为255.255.255.255,以及DHCP discover的信息
DHCP discover的等待时间预设为1秒,也就是当客户机将第一个DHCP discover封包送出去之后,在1秒之内没有得到回应的话,就会进行第二次DHCP discover广播。若一直没有得到回应,客户机会将这一广播包重新发送四次(以2,4,8,16秒为间隔,加上1-1000毫秒之间随机长度的时间)。如果都没有得到DHCP Server的回应,客户机会从169.254.0.0/16这个自动保留的私有IP地址中选用一个IP地址。并且每隔5分钟重新广播一次,如果收到某个服务器的响应,则继续IP租用过程
提供IP地址租用
该网络中所有的DHCP Server都会接收和处理该DHCP Discover报文,Server会从那些还没有租出去的地址中,选择最前面的空置IP,连同其它TCP/IP设定,通过UDP 68端口响应给客户机一个DHCP OFFER数据包(包中包含IP地址、子网掩码、地址租期等信息)。此时还是使用广播进行通讯,源IP地址为DHCP Server的IP地址,目标地址为255.255.255.255。同时,DHCP Server为此客户保留它提供的IP地址,从而不会为其他DHCP客户分配此IP地址
由于客户机在开始的时候还没有IP地址,所以在其DHCP discover封包内会带有其MAC地址信息,并且有一个XID编号来辨别该封包,DHCP Server响应的DHCP OFFER封包则会根据这些资料传递给要求租约的客户
option54字段中标注Server的地址。并记录已经分配的Client地址
接受IP租约
Client端会收到所有的Offer报文,但是只会处理一个Offer报文,一般是处理最先到达的,并且会向网络发送一个DHCP REQUEST广播数据包(包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等),告诉所有DHCP Server它将接受哪一台服务器提供的IP地址,所有其他的DHCP服务器撤销它们的提供以便将IP地址提供给下一次IP租用请求。此时,由于还没有得到DHCP Server的最后确认,客户端仍然使用0.0.0.0为源IP地址,255.255.255.255为目标地址进行广播
在Request报文中,option 54报文和option 50报文,会告诉所有DHCP Server,客户端将使用哪一个Server服务器,已及自己的地址
租约确认
DHCP Server收到DHCP Request报文后,会广播返回给客户机一个DHCP ACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机
客户机在接收到DHCP ACK广播后,会向网络发送三个针对此IP地址的ARP解析请求以执行冲突检测,查询网络上有没有其它机器使用该IP地址;如果发现该IP地址已经被使用,客户机会发出一个DHCP DECLINE数据包给DHCP Server,拒绝此IP地址租约,并重新发送DHCP discover信息。此时,在DHCP服务器管理控制台中,会显示此IP地址为BAD_ADDRESS
如果网络上没有其它主机使用此IP地址,则客户机的TCP/IP使用租约中提供的IP地址完成初始化,从而可以和其他网络中的主机进行通讯
DHCP客户机租期续约
在上文中提到过DHCP提供的地址信息中,会包含地址租期,Server和Client是如何处理租期续约的呢?
客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP Server发送DHCP REQUEST消息包。如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%
如果在租期过去50%的时候没有更新,则客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP联系。如果还不成功,到租约的100%时候,客户机必须放弃这个IP地址,重新申请。如果此时无DHCP可用,客户机会使用169.254.0.0/16中随机的一个地址,并且每隔5分钟再进行尝试
实验拓扑
实验配置
#创建两个DHCP地址池,分别为vlan10和vlan20的设备分配IP地址等相关信息
ip dhcp pool vlan10
network 192.168.1.0 255.255.255.0
default-router 192.168.1.1
dns-server 10.10.10.10
ip dhcp pool vlan20
network 192.168.2.0 255.255.255.0
default-router 192.168.2.1
dns-server 20.20.20.20
SW-Core #创建vlan v lan 10,20 #将e0/0、e0/1、e0/2都改为trunk模式,转发vlan10和vlan20的流量 interface GigabitEthernet0/0 no shutdown switchport trunk encapsulation dot1q switchport mode trunk negotiation auto interface GigabitEthernet0/1 no shutdown switchport trunk encapsulation dot1q switchport mode trunk negotiation auto interface GigabitEthernet0/2 no shutdown switchport trunk encapsulation dot1q switchport mode trunk negotiation auto #创建vlan 10和vlan 20的SVI接口 interface Vlan10 no shutdown ip address 192.168.1.254 255.255.255.0 interface Vlan20 no shutdown ip address 192.168.2.254 255.255.255.0 SW-Access1和SW-Access1 #创建vlan v lan 10,20 #将e0/0改为trunk模式interface Ethernet0/0
no shutdown
switchport trunk encapsulation dot1q
switchport mode trunk
#为e0/1和e0/2划分vlan接口
interface Ethernet0/1
no shutdown
switchportaccess vlan 10
switchportmode access
duplex half
interface Ethernet0/2
no shutdown
switchportaccess vlan 20
switchportmode access
duplexhalf
PC1-PC4配置类似 #关闭路由器路由功能no ip routing#接口自动获取ip地址
interface Ethernet0/0
no shutdown
ipaddress dhcp
实验结果
PC1和PC3能获取到192.168.1.0的ip地址,PC2和PC4能获取到192.168.2.0的ip地址,且4台PC之间能够互相通信
思考
1.该TOP是否可以更优化?所有的这些网络节点,没有哪些,也能实现一样的结果
2.PC1和PC3获取到的地址分别为192.168.1.2和192.168.1.3,但是如果在这个局域网中,有其它设备已经手动配置了这两个IP地址,DHCP协议会如何处理?
3.将SW-Access1交换机e0/3端口划分到vlan10,并连接一个路由器,该路由器也配置了DHCP地址池,那么此时PC1和PC2获取到的IP地址等相关信息是新连接路由器的还是之前DHCP服务器分配的?这样会有哪些问题?
-END-
点击留言不迷路,大家一起上高速