一般情况下中小型网络中DHCP服务器和客户端是同一个局域网也就是一个网段,但是在大型网络中可能是服务器在另外一个广播域中,我们知道DHCP通过广播寻找服务器,但是跨广播域就无法进行请求和分配了,因此出现了DHCP中继的概念。
DHCP Relay即DHCP中继,它是为解决DHCP服务器和DHCP客户端不在同一个广播域而提出的,提供了对DHCP广播报文的中继转发功能,能够把DHCP客户端的广播报文“透明地”传送到其它广播域的DHCP服务器上,同样也能够把DHCP服务器端的应答报文“透明地”传送到其它广播域的DHCP客户端。
简单讲就是相当于一个中转代理的功能,前提是中继和DHCP能够正常通信,路由可达。
DHCP Relay主要负责转发DHCP客户端与DHCP服务器之间的DHCP报文,所以DHCP Relay的报文格式只是把DHCP的报文部分字段做了相应的修改,报文格式没有发生变化,如下图所示:
Hops:表示当前的DHCP报文经过的DHCP中继的数目。该字段由客户端或服务器设置为0,每经过一个DHCP中继时,该字段加1。Hops字段的作用是限制DHCP报文所经过的DHCP中继数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。
Giaddr(gateway ip address):表示第一个DHCP中继的IP地址。当客户端发出DHCP请求时,第一个DHCP中继在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段。
发现阶段:DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
提供阶段:DHCP服务器根据DHCP DISCOVER报文中的Giaddr字段选择地址池为客户端分配相关网络参数,DHCP中继收到DHCP OFFER报文后,以单播或组播方式发送给DHCP Client。
选择阶段:中继接收到来自客户端的DHCP REQUEST报文的处理过程同“发现阶段”。
确认阶段:中继接收到来自服务器的DHCP ACK报文的处理过程同“提供阶段”。
DHCP中继收到DHCP DISCOVER报文后,处理规则为:
检查DHCP报文中的Hops字段,如果大于16,则丢弃DHCP报文;否则,将Hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
检查DHCP报文中的Giaddr字段。如果是0,将Giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中Giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向Giaddr字段标识的DHCP中继单播发送DHCP OFFER报文,DHCP中继收到DHCP OFFER报文后,会进行如下处理:
检查报文中的Giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。
DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
DHCP Server配置:
DHCP Relay中继配置:
DHCP中继报文
设置代理服务器有两种方式,上面直接使用IP地址。
也可以设置DHCP服务器组:
DHCP中继在两个网段间代理客户端和服务器请求,中继服务器也需要开启DHCP功能,然后路由可达。大概就是中继服务器在客户端广播域监听信息,然后讲信息转发给另外广播域的DHCP服务器,接收DHCP服务器的回复,转发给客户端实现地址获取。 如果觉得文章感兴趣欢迎关注公众号:不喜欢热闹的孩子
如果您在本文中未能找到解决当前疑问的办法,不用担心——正睿专业技术支持团队随时待命
文章来源:阿里云开发者社区 作者:周周的奇妙编程