2. Agent Discovery (代理发现)
移动节点使用代理发现 (Agent Discovery) 机制来识别具有外部代理或归属代理功能的路由器。代理发现是ICMP路由器发现机制[5]的扩展,允许移动节点确定其当前位置,识别可用的移动代理,并检测它何时移动到新的子网。
2.1. Agent Advertisement (代理广告)
移动代理通过在每个链路上定期广播或多播特殊的ICMP路由器广告消息来宣布其存在。这些代理广告消息包含一个或多个特殊扩展,用于传达移动IP特定信息。
代理广告消息是标准的ICMP路由器广告消息[5],附加了一个或多个移动性扩展。代理必须 (MUST) 在其代理广告消息中包含移动代理广告扩展 (Mobility Agent Advertisement Extension)。
移动代理可以 (MAY) 在代理广告中包含前缀长度扩展 (Prefix-Lengths Extension),以允许移动节点确定其归属网络的前缀。
移动代理应该 (SHOULD) 以足够高的频率发送代理广告,以确保移动节点能够及时检测到其可用性,但频率不应过高以避免过度消耗带宽。建议的默认间隔为每秒一次。
2.1.1. Mobility Agent Advertisement Extension (移动代理广告扩展)
移动代理广告扩展必须 (MUST) 包含在所有代理广告消息中。该扩展遵循第1.10节中定义的长扩展格式。
扩展格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Registration Lifetime |R|B|H|F|M|G|r|T|U| reserved|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| zero or more Care-of Addresses |
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type (类型)
16 (移动代理广告扩展)
Length (长度)
(6 + 4 × (转交地址数量)) 字节
Sequence Number (序列号)
代理广告序列号。从0开始,在每个广告中递增。用于移动检测(第2.4.2节)。
Registration Lifetime (注册生存时间)
此代理愿意接受的注册请求的最大生存时间(以秒为单位)。值为0xffff表示无限生存时间。
标志位:
- R (Registration Required,需要注册): 表示移动节点必须 (MUST) 向此外部代理注册,即使使用同位转交地址。
- B (Busy,忙碌): 表示外部代理当前忙碌且不接受新的注册。
- H (Home Agent,归属代理): 表示此代理提供归属代理服务。
- F (Foreign Agent,外部代理): 表示此代理提供外部代理服务。
- M (Minimal Encapsulation,最小封装): 表示此代理支持最小封装[34]。
- G (GRE Encapsulation,GRE封装): 表示此代理支持GRE封装[35]。
- r: 保留,必须 (MUST) 设置为零。
- T (Reverse Tunneling,反向隧道): 表示此外部代理支持反向隧道[36]。
- U: 保留,必须 (MUST) 设置为零。
Care-of Address(es) (转交地址)
外部代理在此接口上提供的转交地址列表。必须 (MUST) 至少包含一个转交地址。
2.1.2. Prefix-Lengths Extension (前缀长度扩展)
前缀长度扩展可以 (MAY) 包含在代理广告消息中。该扩展指定代理广告中列出的每个路由器地址的前缀长度。
扩展格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Prefix Length 1 | ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type (类型)
19 (前缀长度扩展)
Length (长度)
(路由器地址数量) 字节
Prefix Length (前缀长度)
每个路由器地址的前缀长度(以位为单位)。前缀长度的数量必须 (MUST) 等于代理广告中的路由器地址数量。
2.1.3. One-Byte Padding Extension (单字节填充扩展)
填充扩展可以 (MAY) 用于在必要时对齐后续扩展到4字节边界。
扩展格式:
0
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| Type |
+-+-+-+-+-+-+-+-+
Type (类型)
0 (填充扩展)
此扩展没有长度或值字段。
2.2. Agent Solicitation (代理请求)
移动节点可以 (MAY) 通过发送代理请求消息来主动请求代理广告。代理请求是标准的ICMP路由器请求消息[5]。
移动节点应该 (SHOULD) 使用链路层广播地址发送代理请求,以便所有移动代理都能收到。移动节点不应 (SHOULD NOT) 以超过每秒一次的速率发送代理请求。
当移动代理收到代理请求时,它应该 (SHOULD) 发送单播代理广告到请求节点,而不是等待下一个预定的广播。
2.3. Foreign Agent and Home Agent Considerations (外部代理和归属代理考虑事项)
2.3.1. Advertised Router Addresses (广告的路由器地址)
代理广告中列出的路由器地址应该 (SHOULD) 是代理在其发送广告的接口上的地址。如果代理是多宿主的,它可以 (MAY) 在代理广告中包含其他接口的地址。
归属代理必须 (MUST) 在其代理广告中包含其归属网络的前缀。这允许返回归属网络的移动节点确定其位置。
外部代理必须 (MUST) 在其代理广告中至少包含一个转交地址。转交地址通常是外部代理在其发送广告的接口上的地址。
2.3.2. Sequence Numbers and Rollover Handling (序列号和翻转处理)
代理广告序列号从0开始,在每个广告中递增1。当序列号达到最大值(65535)时,它应该 (SHOULD) 回绕到0。
移动节点使用序列号来检测移动和错误的代理广告。序列号的不连续性通常指示移动节点已移动到新的子网或代理已重新启动。
代理应该 (SHOULD) 在重新启动后从0开始序列号。这有助于移动节点检测代理重新启动。
2.4. Mobile Node Considerations (移动节点考虑事项)
移动节点使用代理发现来:
- 确定其当前位置(归属网络或外部网络)
- 识别可用的移动代理
- 获取转交地址
- 检测移动到新子网
2.4.1. Registration Required (需要注册)
如果移动节点在代理广告中看到R位被设置,它必须 (MUST) 向该外部代理注册,即使它有同位转交地址。这允许外部代理跟踪访问其网络的移动节点。
2.4.2. Move Detection (移动检测)
移动节点必须 (MUST) 能够检测何时它已移动到新的子网。移动检测确保移动节点在移动后及时更新其注册。
移动节点可以 (MAY) 使用以下任一算法来检测移动:
2.4.2.1. Algorithm 1 (算法1)
当移动节点收到代理广告时:
- 如果没有先前的代理广告记录,这是第一个广告,初始化移动检测状态。
- 如果发送广告的代理的链路层地址与先前记录的不同,并且序列号合理,则移动节点已移动。
- 如果代理的网络前缀与移动节点的当前配置不匹配,则移动节点已移动。
2.4.2.2. Algorithm 2 (算法2)
当移动节点在预期时间内没有收到来自其当前代理的代理广告时:
- 如果移动节点在合理时间内(例如,3个广告间隔)没有收到来自其当前代理的广告,它应该 (SHOULD) 假设它可能已移动。
- 移动节点应该 (SHOULD) 发送代理请求以快速发现新代理。
- 如果移动节点从不同的代理收到代理广告,它应该 (SHOULD) 认为自己已移动。
2.4.3. Returning Home (返回归属地)
当移动节点检测到它已返回其归属网络时:
- 它必须 (MUST) 向其归属代理注销(通过发送生存时间为0的注册请求)。
- 它应该 (SHOULD) 开始使用ARP来响应对其归属地址的请求。
- 它必须 (MUST) 停止使用其转交地址。
移动节点通过以下方式检测返回归属地:
- 接收来自其归属网络前缀的代理广告
- 接收来自其归属代理的代理广告(通过检查代理的地址)
2.4.4. Sequence Numbers and Rollover Handling (序列号和翻转处理)
移动节点使用代理广告序列号来:
- 检测移动(序列号不连续)
- 检测代理重新启动
- 防止重放攻击
移动节点应该 (SHOULD) 记录其当前代理的序列号。如果收到的代理广告的序列号与预期的不匹配(考虑正常递增和可能的翻转),这可能指示移动或代理问题。
对于序列号翻转,移动节点应该 (SHOULD) 允许序列号从65535到0或从65535到接近65535的任何值(例如,65530-65535)的转换。
移动节点必须 (MUST) 能够处理序列号的不连续性,这可能由以下原因引起:
- 移动到新子网
- 代理重新启动
- 数据包丢失
- 多个代理在同一链路上