我知道充当中继代理的路由器将 DHCP 消息从客户端发送到 DHCP 服务器。当服务器用DHCPOFFER消息回复中继代理时,该消息将如何发送到客户端、广播或单播?
路由器在配置为中继代理时如何中继 DHCP 数据包?
很好的问题。答案可以像这样在 GNS3 中标注 -
拓扑:
R1:
ip dhcp excluded-address 192.168.10.0 192.168.10.99
!
ip dhcp pool Users
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
!
ip route 192.168.10.0 255.255.255.0 10.1.2.2
R2:
interface FastEthernet0/1
ip address 192.168.10.1 255.255.255.0
ip helper-address 10.1.2.1
PC(实际上只是另一个路由器):
interface FastEthernet0/1
ip address dhcp
现在让我们来看看一些数据包捕获 -
R1 和 R2 之间的流量:
R2 和 PC 之间的流量:
所以你看,R1 和 R2 之间的流量是单播的(正如你所期望的),而 R2 和 PC 之间的流量是广播的,就像 R2 是 DHCP 服务器一样。
但请注意,DHCP 请求来自 R2 的 Fa0/1 接口。因此,这意味着 R1 需要到该网络的路由,即使它直接连接到 R2。这就解释了为什么我在 R1 上有静态路由。
如果设置了广播标志,中继代理将发送 DHCPOFFER 作为广播,与 DHCP 服务器的方式相同。就客户端而言,它正在处理 DHCP 服务器,而不是中继代理。
通常,DHCP 服务器和 BOOTP 中继代理尝试使用 uicast 传递将 DHCPOFFER、DHCPACK 和 DHCPNAK 消息直接传递给客户端。IP 目标地址(在 IP 标头中)设置为 DHCP 'yiaddr' 地址,链路层目标地址设置为 DHCP 'chaddr' 地址。不幸的是,一些客户端实现无法接收这样的单播 IP 数据报,直到实现配置了有效的 IP 地址(导致死锁,在客户端配置了 IP 地址之前无法传递客户端的 IP 地址)。
在客户端发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中,在其协议软件配置了 IP 地址之前无法接收单播 IP 数据报的客户端应该将“标志”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供一个提示,以向客户端子网上的客户端广播任何消息。可以在其协议软件配置之前接收单播 IP 数据报的客户端应该将 BROADCAST 位清除为 0。BOOTP 澄清文档讨论了使用 BROADCAST 位 [21] 的后果。
服务器或中继代理直接向 DHCP 客户端发送或中继 DHCP 消息(即,不发送或中继到“giaddr”字段中指定的中继代理)应该检查“标志”字段中的 BROADCAST 位。如果该位设置为 1,则 DHCP 消息应该作为 IP 广播发送,使用 IP 广播地址(最好是 0xffffffff)作为 IP 目的地址,使用链路层广播地址作为链路层目的地址。 如果 BROADCAST 位被清除为 0,则消息应该作为 IP 单播发送到“yiaddr”字段中指定的 IP 地址和“chaddr”字段中指定的链路层地址。如果单播是不可能的,消息可以作为 IP 广播发送,使用 IP 广播地址(最好是 0xffffffff)作为 IP 目的地址和链路层广播地址作为链路层目的地址。


