目录
一、DHCP协议的引出
我们都知道,网络层的通信是依靠IP进行路由的,当网络中的一台主机想与其他主机进行通信时,就必须先知道对端的IP地址,所以IP的配置是每一个终端在通信前所必须的配置。
但当网络中的终端主机数目十分庞大时,管理员手工去配置每一台设备的IP信息就非常困难,并且手工配置的出错概率较大,如配置的IP地址错误,地址冲突,网关配置不正确,dns未配置或配置错误等,都会导致主机的通信存在异常,也加大了后续网络故障排查的工作量。如果你做过不同vlan间通信的实验就不难发现,对于同一广播域内同一网段的主机设备,它们的IP配置往往大同小异,几乎只有IP地址上的不同,所以IP配置几乎就像一个个模板,只需要对不同的设备改动IP地址就可以了。
考虑到这里,聪明的你应该能够想到,是否能通过搭建一台服务器,再使主机能够自发且动态地从该服务器拿到正确的IP配置,从而省去手工配置IP信息的操作,不仅减小了配置的工作量还减少了出错的概率。而对于管理员或工程师而言,只需要去完成IP信息的规划工作即可。
而今天我们所谈的DHCP (Dynamic Host Configuration Protocol) 正是为了解决上述场景而生的协议。了解了DHCP的产生原因,现在我们可以开始分析DHCP的工作原理及过程。
二、DHCP工作原理
首先我们要知道,DHCP是采用C/S模式进行工作的,所谓C/S即客户端/服务器 (Client/Sercer) 的工作模式。客户端如果开启了DHCP服务,那么在启用时就能自发地向服务器端请求IP配置,当服务器收到请求后就会对其响应,为终端动态地下发和更新IP配置。服务器之所以可以动态地下发配置,是因为管理员在服务器端事先创建好了IP地址池,所谓地址池,顾名思义可以理解成一个装满IP配置的池子,当有主机请求时,就可以从池子中拿出一个IP配置进行分配。
了解了DHCP基本的工作原理,现在我们继续进行剖析,可以将DHCP工作分为四个步骤:1. 终端自发寻找并请求服务器;2. 服务器收到请求并下发IP配置;3. 客户端接收配置并通告自己所使用的配置;4. 被使用的服务器收到通告并回复确认。下面我们开始逐一分析这四个步骤:
(一)、寻找DHCP Server
当网络中刚刚接入一台主机时,它的IP协议栈的配置是空白的,且网络设备没有这台设备任何的MAC或路由表项,导致主机无法在当前网络中进行通信,那么如何才能让主机找到网络中的DHCP服务器呢?如果你学过ARP协议,那么应该能够猜到,可以利用广播报文进行泛洪,发送至当前广播域内的所有结点进行响应,而发送的广播报文就是DHCP第一个阶段的Discover报文。
(二)、服务器下发配置
当DHCP服务器收到Discover报文时,首先检查自己的DHCP地址池中是否存在可以分配的地址池,如果发现存在可以分配的地址池,就会从该地址池中拿出相应配置,并将该配置放在第二个阶段的Offer报文中提供给目的主机。
注意,对于DHCP服务器的通信报文是广播还是单播,是由主机发送的Discover报文决定的,由于IP协议栈在没有进行IP配置时,对单播报文的处理动作可能是不同的,可能为丢弃也可能为接受,设计者在设计之初也考虑到了DHCP的兼容性,故在第一阶段报文中就决定了服务器后续发送的报文是使用单播还是广播。
(三)、主机回应服务器
当主机发送Discover报文后,网络中可能有多台DHCP服务器都有符合条件的地址池,那么这些服务器就都会发送Offer报文,此时主机只会接受最先到达的那一份Offer报文,但其他服务器该如何知道主机是否接受了我下发的配置呢?此时就需要通过主机发送三阶段的Request报文,广播通告所有DHCP服务器,自己接受了某台服务器的配置,让他们收回从地址池下发的配置,并请求目的服务器将此配置给自己使用。
(四)、服务器回复确认
当服务器收到Request报文,发现主机接受的是自己的Offer报文后,就会发送第四阶段的ACK报文,确认主机使用这个地址,并从自己的地址池中移除此IP,不会再分配给其他主机,避免了分配的IP存在冲突的情况。此时主机才真正获取到一个有效的IP地址,并可以与其他主机开始进行通信。
三、问题思考
1. 既然所有主机的IP协议栈在没有配置前都能接受广播,为什么还要使用单播进行交互呢?
单播对比广播的最大特点就是不会影响到广播域内的其他主机,如果都使用广播进行工作,那么广播域内就会充斥广播报文,主机处理该广播报文时,就会浪费CPU资源,并且还造成了网络资源浪费,故使用单播来工作肯定更优。
2. 在主机还没获得IP配置时,服务器发送的单播是如何被目的主机接受的呢?
观察Discover报文,发现存在一个Client MAC address的字段:
再查看Discover报文的源MAC地址,我们发现二者是相同的,也就是说,主机在发送Discover报文的时候就已经把自身的MAC地址传给了服务器,而主机与服务器处于同一广播域内,只要有MAC就可以正常二层通信,也就同时可以交互单播的报文了。
3. 若主机和服务器不处于同一广播域内,该如何交互DHCP报文?
我们知道,主机想要自发请求DHCP服务器下发配置,就必须发送Discover报文来使服务器响应,但Discover报文是一个广播报文,若主机与服务器不处于同一广播域,服务器就无法响应,主机就拿不到DHCP服务器下发的IP配置。此时就需要采用DHCP中继的方式,在主机与服务器之间隔绝广播域的设备上配置中继,并指向DHCP服务器,一旦中继设备收到DHCP报文,就会将广播的报文以单播的形式发送给服务器,并等待服务器进行单播响应(配置中继,bootp flag置位为单播),再将收到的报文发送给主机,这样即使主机与服务器不再同一广播域内,也可以正常通信并使主机获取服务器下发的IP配置。
分享结束,感谢观看!