![](https://i-blog.csdnimg.cn/blog_migrate/3b1d9972e1525da3fa9d414cf4b4e840.png)
DHCP中继的应用环境:早期的DHCP协议只适用于DHCP客户端和服务器处于同一个网段内的情况,不能跨网段。因此,为进行动态主机配置,需要在每个网段置一个DHCP服务器,这显然是很不经济的。
DHCP中继(DHCP Relay)功能的引入解决了这一难题:客户端可以通过DHCP中继与其他网段的DHCP服务器通信,最终取得合法的IP地址。这样,多个网段的DHCP客户端可以使用同一个DHCP服务器,既节省了成本,又便于进行集中管理。
一般来说,DHCP中继既可以是主机,也可以是三层交换机,或者是路由器,只要在设备上启动DHCP中继代理的服务程序即可。
DHCP中继的工作过程为:
• 具有DHCP中继功能的网络设备收到 DHCP客户端以广播方式发送的DHCP-DISCOVER或DHCP-REQUEST报文后,将报文中的giaddr字段填充为DHCP中继的IP地址,并根据配置将报文单播转发给指定的DHCP服务器。
• DHCP服务器根据 giaddr字段为客户端分配 IP地址等参数,并通过 DHCP中继将配置信息转发给客户端,完成对客户端的动态配置。
ciaddr:DHCP 客户端的 IP地址。
yiaddr:DHCP 服务器分配给客户端的 IP地址。Server发送给client的DHCP OFFER 与 DHCP ACK封包中,此栏填写分配给client的IP地址 。
siaddr:服务器发送给客户端的IP地址。若 client 需要透过网络开机,从 server 送出之 DHCPOFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 的地址。
giaddr:(网关IP地址)DHCP 客户端发出的请求报文所经过的第一个DHCP中继的IP地址。 若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。
chaddr:DHCP 客户端的硬件地址。
![](https://i-blog.csdnimg.cn/blog_migrate/8866f8f54338a36e86268f292d1c9fe9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5fbacb918c82d69f7e53cdbdef6e5e6f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c6e9b0b7a2bed53246135c6d037d76e7.png)
DHCP中继接收到DHCPDISCOVER或DHCP REQUEST报文后,将进行如下处理:
为防止DHCP报文形成环路,抛弃报文头中hops字段的值大于限定跳数的DHCP请求报文。否则,继续进行下面的操作。将hops字段增加1,表明又经过一次DHCP中继。
检查giaddr字段。如果是0,需要将giaddr字段设置为接收请求报文的接口IP地址。如果接口有多个IP地址,可选择其一。以后从该接口接收的所有请求报文都使用该IP地址。如果Rgiaddr字段不是0,则不修改该字段。
将请求报文的TTL设置为DHCP中继设备的TTL缺省值,而不是原来请求报文的TTL减1。对中继报文的环路问题和跳数限制问题都可以通过hops字段来解决。
DHCP请求报文的目的地址修改为DHCP服务器或下一个DHCP中继的IP地址,从而将DHCP请求报文转发给DHCP服务器或下一个DHCP中继。
DHCP服务器根据Relay Agent IPAddress字段为客户端分配IP地址等参数,并将DHCP应答报文发送给Relay Agent IPAddress字段标识的DHCP中继。DHCP中继接收到DHCP应答报文后,会进行如下处理:
DHCP中继假设所有的应答报文都是发给直连的DHCP客户端。RelayAgent IP Address字段用来识别与客户端直连的接口。如果Relay Agent IPAddress字段不是本地接口的地址,DHCP中继将丢弃应答报文。
DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP应答报文广播发送给DHCP客户端;否则将DHCP应答报文单播发送给DHCP客户端,其目的地址为Your(Client) IP Address字段内容,链路层地址为Client Hardware Address字段内容。