我有一台 DHCP 服务器,通过 DHCP 中继为多个子网提供服务。当它发出 DHCP 请求时,它会将服务器标识符(选项 54)设置为自己的 IP 地址。
当客户端需要更新时,它们会尝试单播到该 IP 地址,但没有任何客户端能够路由到该 IP 地址。
当使用中继时,单播到 DHCP 服务器应该如何工作?预期行为是否是客户端在 RENEWING 状态期间无法通过单播续订,然后在时间 T2 之后的 REBINDING 状态期间通过广播续订?
答案1
是的,一点没错。
客户端无法将单播路由到他们的 DHCP 服务器,这有点奇怪,但这根本不是问题;他们只会在租约有效期内稍后进行续订(这会减少 DHCP 服务器停机的余地)。
答案2
租约续订(在 T1 阶段)通过从 DHCP 客户端到 DHCP 服务器的单播消息来实现。为什么来自客户端子网的单播流量不会被路由到服务器子网?如果来自客户端子网的 DHCPDiscover 消息没有被路由(中继)到服务器子网,那么原始广播将如何中继到服务器子网?如果子网之间没有路由流量,那么客户端将如何首先获取 IP 地址?
最终,来自 DHCP 客户端子网的流量将通过路由器进行路由(在原始 DHCPDiscover 阶段和之后的 T2 阶段通过来自 DHCP 中继代理的单播消息进行路由)和/或在 T1 更新阶段通过直接从 DHCP 客户端进行单播进行路由。
正如您所说,如果客户端到达 T2 阶段,则它会提交广播续订请求,DHCP 中继代理应将其中继(单播)到 DHCP 服务器。
编辑
这是一个理论问题还是您实际上遇到了这个问题?
编辑2
对我的答案进行另一种解释:当客户端在 T1 阶段发起租约续订时,续订请求是直接从客户端到服务器的单播消息(单播是直接的一对一通信),因此 DHCP 中继代理根本不应该参与。如果客户端到达 T2 续订阶段,则续订请求将通过广播消息发送,并应由 DHCP 中继代理进行中继(这实际上是来自 DHCP 中继代理的单播消息)。
如果 T1 阶段单播消息未从客户端子网路由到服务器子网,那么这是一个路由/网络问题,而不是 DHCP 问题。
答案3
好的,看来我无法对之前的答案发表评论,而只能向您发送额外的答案。
我认为这不完全是路由问题。请看以下非常基本的示例以了解:
- 我在第 2 层和第 3 层广播发送 DISCOVER,
- 我也在“双重”广播中收到了一个 OFFER,
- 我再次以“双重”广播的方式发送了请求(以便通知潜在的辅助 DHCP 服务器我已丢弃其提议)
- 服务器 ACK 是广播还是单播。
=> 我在哪里需要知道服务器的 MAC?哪里都没有。我无法确定我收到的数据包(无论是广播还是单播)的源 MAC 是否是服务器的 MAC。无论如何,T1 很有可能超出 arp 缓存超时...
- T1 到期。我想续订。我应该向 DCHP 服务器 (siaddr) 发送 L3 单播消息。假设我没有询问选项 3。我将选择哪个目标 MAC?
通常我会对 siaddr 进行 ARP。如果单播服务器 IP 不在我的链接上怎么办?好吧,我最终会放弃请求和任何后续重试,直到我进入 REBINDING 状态。
这里没有真正的路由错误。这是一个拓扑问题,我甚至无法实施解决方案,将更新发送到“giaddr”IP,因为这违反了标准。