跳到主要内容

20. 中继代理行为

  1. 中继代理行为

中继代理可以 (MAY) 被配置为使用一组目的地址列表, 其中可以 (MAY) 包含单播地址、 All_DHCP_Servers 多播地址, 或网络管理员选择的其他地址. 如果中继代理未被显式配置, 它必须 (MUST) 使用 All_DHCP_Servers 多播地址作为默认地址.

如果中继代理将消息中继到 All_DHCP_Servers 多播地址或其他多播地址, 它将跳数限制 (Hop Limit) 字段设置为 32.

20.1. 中继客户端消息或 Relay-forward 消息

中继代理既中继来自客户端的消息, 也中继来自其他中继代理的 Relay-forward 消息. 当中 继代理收到一条待中继的合法消息时, 它构造一条新的 Relay-forward 消息. 中继代理将收 到该消息的 IP 数据报头部中的源地址, 复制到 Relay-forward 消息的 peer-address 字段. 中继代理将收到的 DHCP 消息 (不含任何 IP 或 UDP 头部) 复制进新消息中的一个 Relay Message 选项. 中继代理将任何它被配置要包含的其他选项添加到 Relay-forward 消息中.

20.1.1. 中继来自客户端的消息

如果中继代理从客户端收到待中继的消息, 中继代理将一个全局或站点范围的、带有分配给 该客户端的地址应被分配到的那条链路的前缀的地址, 放入 link-address 字段. 该地址将 被服务器用来确定应为该客户端分配地址和其他配置信息的那条链路. Relay-forward 消息 中的 hop-count 被设置为 0.

如果中继代理不能使用 link-address 字段中的地址来识别将通过其将响应中继给客户端的 接口, 中继代理必须 (MUST) 在 Relay-forward 消息中包含一个 Interface-id 选项 (见 22.18 节). 服务器将把 Interface-id 选项包含在其 Relay-reply 消息中. 无论中继代理是 否在 Relay-forward 消息中包含 Interface-id 选项, 它都按照前一段所述填写 link-address 字段.

20.1.2. 中继来自中继代理的消息

如果中继代理收到的消息是一条 Relay-forward 消息, 且该消息中的 hop-count 大于或等于 HOP_COUNT_LIMIT, 中继代理丢弃收到的消息.

中继代理将收到的消息的 IP 数据报头部中的源地址, 复制到 Relay-forward 消息的 peer-address 字段中, 并将 hop-count 字段设置为收到的消息中的 hop-count 字段取值加 1.

如果收到的消息的 IP 数据报头部的源地址是一个全局或站点本地地址 (且运行该中继代理的 设备只属于一个站点), 中继代理将 link-address 字段设置为 0; 否则, 中继代理将 link-address 字段设置为分配给收到该消息的接口的一个全局或站点本地地址, 或者包含一 个 Interface-ID 选项来标识收到该消息的接口.

20.2. 中继 Relay-reply 消息

中继代理处理 Relay-reply 消息中除 Relay Message 选项之外的任何已包含选项, 然后丢弃 这些选项.

中继代理从 Relay Message 选项中提取消息, 并将其中继到 Relay-reply 消息的 peer-address 字段中所包含的地址.

如果 Relay-reply 消息包含一个 Interface-id 选项, 中继代理通过由该 Interface-id 选项 所标识的链路, 将来自服务器的消息中继给客户端. 否则, 如果 link-address 字段未被设置 为 0, 中继代理在被 link-address 字段所标识的链路上中继该消息.

20.3. Relay-reply 消息的构造

如果来自客户端的原始消息是在 Relay-forward 消息中被中继给服务器的, 服务器使用 Relay-reply 消息来向客户端返回响应; 或者, 如果服务器没有可用于直接向客户端发送消息 的地址, 则使用 Relay-reply 消息向客户端发送 Reconfigure 消息.

对客户端响应的中继必须 (MUST) 经过与原始客户端消息相同的那些中继代理. 服务器通过构 造一条 Relay-reply 消息来实现这一点, 该消息包含一个 Relay Message 选项, 其中装有发 往返回路径上下一个中继代理的消息. 所包含的 Relay-reply 消息又包含另一个要发给下一 个中继代理的 Relay Message 选项, 依此类推. 服务器必须记录收到的消息中 peer-address 字段的内容, 以便构造携带服务器响应的适当 Relay-reply 消息.

例如, 如果客户端 C 发送的消息被中继代理 A 中继给中继代理 B, 然后再发给服务器, 服务 器将向中继代理 B 发送如下 Relay-Reply 消息:

msg-type: RELAY-REPLY hop-count: 1 link-address: 0 peer-address: A Relay Message option, containing: msg-type: RELAY-REPLY hop-count: 0 link-address: address from link to which C is attached peer-address: C Relay Message option:

当通过中继代理向客户端发送 Reconfigure 消息时, 服务器构造一条 Relay-reply 消息, 其中 包含一个 Relay Message 选项, 装有发往返回路径上下一个中继代理的 Reconfigure 消息. 服务器将 Relay-reply 消息头部中的 peer-address 字段设置为客户端的地址, 并按照中继代 理将 Reconfigure 消息中继给客户端所需的方式设置 link-address 字段. 服务器通过先前与 客户端的交互, 或通过某些外部机制, 获得客户端和中继代理的地址.