3. Registration (注册)
注册 (Registration) 是移动节点向其归属代理通知其当前转交地址的过程。注册通过交换注册请求 (Registration Request) 和注册应答 (Registration Reply) 消息来完成。
3.1. Registration Overview (注册概述)
当移动节点远离归属地时,它必须 (MUST) 向其归属代理注册其转交地址。注册过程涉及三个实体:移动节点、外部代理(如果使用外部代理转交地址)和归属代理。
注册流程:
- 移动节点创建注册请求消息,包含其归属地址、转交地址和所需的生存时间
- 如果使用外部代理转交地址,移动节点将请求发送给外部代理
- 外部代理处理请求并将其转发给归属代理
- 归属代理验证请求,创建或更新移动绑定,并发送注册应答
- 外部代理(如果涉及)中继应答给移动节点
3.2. Authentication (认证)
所有注册消息必须 (MUST) 经过认证以防止恶意攻击。Mobile IP定义了三种认证关系:
- Mobile-Home Authentication (移动-归属认证): 移动节点与其归属代理之间的认证,这是必需的 (REQUIRED)
- Mobile-Foreign Authentication (移动-外部认证): 移动节点与外部代理之间的认证,这是可选的 (OPTIONAL)
- Foreign-Home Authentication (外部-归属认证): 外部代理与归属代理之间的认证,这是可选的 (OPTIONAL)
认证使用认证扩展 (Authentication Extensions),这些扩展包含消息认证码 (MAC, Message Authentication Code)。
3.3. Registration Request (注册请求)
注册请求消息格式:
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 |S|B|D|M|G|r|T|x| Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Home Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Home Agent |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Care-of Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Identification +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extensions...
+-+-+-+-+-+-+-+-
字段说明:
- Type: 1 (注册请求)
- S (Simultaneous Bindings,同时绑定): 请求归属代理保留先前的移动绑定
- B (Broadcast Datagrams,广播数据报): 请求归属代理隧道传输广播数据报
- D (Decapsulation,解封装): 移动节点将自己解封装数据报(使用同位转交地址)
- M (Minimal Encapsulation,最小封装): 请求使用最小封装
- G (GRE Encapsulation,GRE封装): 请求使用GRE封装
- r: 保留,必须设置为0
- T (Reverse Tunneling,反向隧道): 请求反向隧道支持
- x: 保留,必须设置为0
- Lifetime (生存时间): 注册的请求生存时间(秒),0表示注销
- Home Address (归属地址): 移动节点的归属地址
- Home Agent (归属代理): 归属代理的地址
- Care-of Address (转交地址): 移动节点当前的转交地址
- Identification (标识): 64位用于匹配请求和应答、防止重放攻击
3.4. Registration Reply (注册应答)
注册应答消息格式:
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 | Code | Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Home Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Home Agent |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Identification +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extensions...
+-+-+-+-+-+-+-+-
字段说明:
- Type: 3 (注册应答)
- Code (代码): 指示注册请求的结果
- 0: 注册被接受
- 1: 注册被接受,但同时绑定不支持
- 64-127: 归属代理拒绝原因
- 128-192: 外部代理拒绝原因
- Lifetime (生存时间): 授予的注册生存时间(秒)
- Home Address, Home Agent, Identification: 与请求中相同
常见拒绝代码:
- 64: 原因未指定
- 65: 管理性禁止
- 66: 资源不足
- 67: 移动节点认证失败
- 68: 归属代理认证失败
- 69: 请求的生存时间过长
- 70: 格式不正确的请求
- 128: 原因未指定(外部代理)
- 129: 管理性禁止(外部代理)
- 130: 资源不足(外部代理)
- 131: 移动节点认证失败(外部代理)
- 133: 请求的封装不可用
- 134: 请求的VPN支持不可用
3.5. Registration Extensions (注册扩展)
3.5.1. Computing Authentication Extension Values (计算认证扩展值)
认证扩展中的认证器 (Authenticator) 字段包含使用共享密钥计算的消息认证码 (MAC)。默认算法是HMAC-MD5,使用128位密钥。
计算过程:
- 将认证扩展附加到注册消息,认证器字段初始化为零
- 使用共享密钥和HMAC算法计算整个消息的MAC
- 将计算的MAC放入认证器字段
3.5.2. Mobile-Home Authentication Extension (移动-归属认证扩展)
移动-归属认证扩展必须 (MUST) 包含在所有注册请求和应答中。
扩展格式:
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 | Subtype | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SPI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authenticator... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type: 32 (移动-归属认证扩展)
- SPI (安全参数索引): 标识使用的密钥和算法
- Authenticator (认证器): 消息认证码,长度可变(默认128位)
3.5.3. Mobile-Foreign Authentication Extension (移动-外部认证扩展)
移动-外部认证扩展可以 (MAY) 包含在注册消息中,用于移动节点和外部代理之间的认证。
扩展格式与移动-归属认证扩展相同,但Type值为33。
3.5.4. Foreign-Home Authentication Extension (外部-归属认证扩展)
外部-归属认证扩展可以 (MAY) 包含在注册消息中,用于外部代理和归属代理之间的认证。
扩展格式与移动-归属认证扩展相同,但Type值为34。
3.6. Mobile Node Considerations (移动节点考虑事项)
3.6.1. Sending Registration Requests (发送注册请求)
移动节点必须 (MUST) 在以下情况下发送注册请求:
- 首次获得转交地址时
- 检测到移动到新子网时
- 当前注册即将到期时(在到期前重新注册)
- 需要更改注册参数时(如封装方法)
- 返回归属网络时(发送注销请求)
注册请求构造:
- 设置Type字段为1
- 设置适当的标志位
- 设置请求的Lifetime
- 填充Home Address, Home Agent, Care-of Address
- 生成新的Identification值(用于重放保护)
- 添加必需的Mobile-Home认证扩展
- 可选地添加其他扩展
移动节点应该 (SHOULD) 使用递增的Identification值以防止重放攻击。可以使用时间戳或nonce。
3.6.1.1. Unicast Delivery (单播传递)
移动节点应该 (SHOULD) 使用单播将注册请求发送到外部代理或归属代理。
如果使用外部代理转交地址,移动节点将请求发送到外部代理的地址(从代理广告中获取)。
如果使用同位转交地址,移动节点直接将请求发送到归属代理。
3.6.2. Receiving Registration Replies (接收注册应答)
移动节点必须 (MUST) 验证收到的注册应答:
- 验证Identification字段与挂起的请求匹配
- 验证Mobile-Home认证扩展正确
- 检查Code字段确定注册是否成功
- 如果成功(Code 0或1),使用授予的Lifetime更新注册状态
- 如果失败,根据错误代码采取适当措施
成功注册后,移动节点:
- 记录授予的Lifetime
- 在Lifetime到期前重新注册
- 使用转交地址接收数据报
- 使用标准路由发送数据报(或反向隧道)
失败处理:
- 如果是临时错误(如资源不足),稍后重试
- 如果是配置错误(如认证失败),通知用户
- 如果是不支持的功能,禁用该功能并重试
3.6.3. Registration Retransmission (注册重传)
如果移动节点在合理时间内没有收到注册应答,它应该 (SHOULD) 重传注册请求。
建议的重传策略:
- 初始超时: 1秒
- 最大超时: 4秒
- 使用指数退避
- 最多重传3-4次
- 使用相同的Identification值重传
移动节点应该 (SHOULD) 为每个挂起的注册维护一个计时器。
3.7. Foreign Agent Considerations (外部代理考虑事项)
3.7.1. Configuration and Registration Tables (配置和注册表)
外部代理必须 (MUST) 维护:
-
配置信息:
- 转交地址列表
- 支持的封装类型
- 注册生存时间限制
- 认证密钥和SPI
-
访问者列表 (Visitor List): 每个注册的移动节点一个条目,包含:
- 移动节点的归属地址
- 归属代理地址
- 链路层地址
- 剩余生存时间
- 其他注册参数
3.7.2. Receiving Registration Requests (接收注册请求)
外部代理收到注册请求时:
-
执行初步检查:
- 验证UDP校验和
- 验证IP头有效
- 检查Type字段为1
-
验证请求内容:
- Care-of Address是外部代理的地址之一
- Lifetime不超过配置的最大值
- 如果需要,验证Mobile-Foreign认证扩展
-
处理请求:
- 如果有效,添加或更新访问者列表条目
- 如果需要,添加Foreign-Home认证扩展
- 将请求转发给归属代理
-
错误处理:
- 如果请求无效,发送包含适当错误代码的注册应答
- 不转发给归属代理
常见拒绝原因:
- 资源不足(如访问者列表已满)
- 认证失败
- 请求的封装不支持
- Lifetime过长
3.7.3. Receiving Registration Replies (接收注册应答)
外部代理从归属代理收到注册应答时:
-
定位相应的访问者列表条目(使用归属地址)
-
验证应答:
- 检查Foreign-Home认证扩展(如果使用)
- 验证应答对应于转发的请求
-
更新访问者列表:
- 如果注册被接受,更新生存时间
- 如果注册被拒绝或注销,删除条目
-
中继应答给移动节点:
- 将应答发送到移动节点的链路层地址
- 使用UDP端口434
外部代理必须 (MUST) 维护访问者列表条目的生存时间计时器,并在到期时删除条目。
3.8. Home Agent Considerations (归属代理考虑事项)
3.8.1. Configuration and Registration Tables (配置和注册表)
归属代理必须 (MUST) 维护:
-
配置信息:
- 管理的归属网络前缀
- 支持的移动节点列表
- 认证密钥和SPI
- 支持的封装类型
-
移动绑定表 (Mobility Binding List): 每个注册的移动节点一个条目,包含:
- 移动节点的归属地址
- 当前转交地址
- 剩余生存时间
- 外部代理地址(如果适用)
- 注册标志(同时绑定、反向隧道等)
3.8.2. Receiving Registration Requests (接收注册请求)
归属代理收到注册请求时:
-
验证请求:
- 检查Mobile-Home认证扩展是否有效
- 验证移动节点有权在此归属代理注册
- 检查请求的Lifetime是否可接受
- 如果来自外部代理,验证Foreign-Home认证扩展
-
处理注册:
- 如果Lifetime为0,这是注销请求,删除移动绑定
- 如果Lifetime非零,创建或更新移动绑定
- 如果请求同时绑定(S位),保留先前的绑定;否则替换
-
设置隧道:
- 配置到转交地址的隧道
- 选择适当的封装方法(IP-in-IP、最小封装或GRE)
-
准备注册应答:
- 设置Code字段(0表示成功)
- 设置授予的Lifetime
- 复制Home Address, Home Agent, Identification
- 添加Mobile-Home认证扩展
- 如果请求来自外部代理,添加Foreign-Home认证扩展
成功注册后,归属代理:
- 拦截发往移动节点归属地址的数据报
- 将数据报封装并隧道传输到转交地址
- 响应归属网络上对移动节点的ARP请求(代理ARP)
3.8.3. Sending Registration Replies (发送注册应答)
归属代理必须 (MUST) 对每个注册请求发送注册应答,无论接受还是拒绝。
应答路由:
- 如果请求来自外部代理,将应答发送到外部代理
- 如果请求直接来自移动节点(同位转交地址),将应答直接发送到移动节点的转交地址
应答使用UDP,目标端口434(如果通过外部代理)或源端口(如果直接发送)。
归属代理必须 (MUST) 维护移动绑定的生存时间计时器,并在到期时删除绑定。