Skip to main content

3. Registration (注册)

注册 (Registration) 是移动节点向其归属代理通知其当前转交地址的过程。注册通过交换注册请求 (Registration Request) 和注册应答 (Registration Reply) 消息来完成。

3.1. Registration Overview (注册概述)

当移动节点远离归属地时,它必须 (MUST) 向其归属代理注册其转交地址。注册过程涉及三个实体:移动节点、外部代理(如果使用外部代理转交地址)和归属代理。

注册流程:

  1. 移动节点创建注册请求消息,包含其归属地址、转交地址和所需的生存时间
  2. 如果使用外部代理转交地址,移动节点将请求发送给外部代理
  3. 外部代理处理请求并将其转发给归属代理
  4. 归属代理验证请求,创建或更新移动绑定,并发送注册应答
  5. 外部代理(如果涉及)中继应答给移动节点

3.2. Authentication (认证)

所有注册消息必须 (MUST) 经过认证以防止恶意攻击。Mobile IP定义了三种认证关系:

  1. Mobile-Home Authentication (移动-归属认证): 移动节点与其归属代理之间的认证,这是必需的 (REQUIRED)
  2. Mobile-Foreign Authentication (移动-外部认证): 移动节点与外部代理之间的认证,这是可选的 (OPTIONAL)
  3. 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位密钥。

计算过程:

  1. 将认证扩展附加到注册消息,认证器字段初始化为零
  2. 使用共享密钥和HMAC算法计算整个消息的MAC
  3. 将计算的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) 在以下情况下发送注册请求:

  1. 首次获得转交地址时
  2. 检测到移动到新子网时
  3. 当前注册即将到期时(在到期前重新注册)
  4. 需要更改注册参数时(如封装方法)
  5. 返回归属网络时(发送注销请求)

注册请求构造:

  1. 设置Type字段为1
  2. 设置适当的标志位
  3. 设置请求的Lifetime
  4. 填充Home Address, Home Agent, Care-of Address
  5. 生成新的Identification值(用于重放保护)
  6. 添加必需的Mobile-Home认证扩展
  7. 可选地添加其他扩展

移动节点应该 (SHOULD) 使用递增的Identification值以防止重放攻击。可以使用时间戳或nonce。

3.6.1.1. Unicast Delivery (单播传递)

移动节点应该 (SHOULD) 使用单播将注册请求发送到外部代理或归属代理。

如果使用外部代理转交地址,移动节点将请求发送到外部代理的地址(从代理广告中获取)。

如果使用同位转交地址,移动节点直接将请求发送到归属代理。

3.6.2. Receiving Registration Replies (接收注册应答)

移动节点必须 (MUST) 验证收到的注册应答:

  1. 验证Identification字段与挂起的请求匹配
  2. 验证Mobile-Home认证扩展正确
  3. 检查Code字段确定注册是否成功
  4. 如果成功(Code 0或1),使用授予的Lifetime更新注册状态
  5. 如果失败,根据错误代码采取适当措施

成功注册后,移动节点:

  • 记录授予的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) 维护:

  1. 配置信息:

    • 转交地址列表
    • 支持的封装类型
    • 注册生存时间限制
    • 认证密钥和SPI
  2. 访问者列表 (Visitor List): 每个注册的移动节点一个条目,包含:

    • 移动节点的归属地址
    • 归属代理地址
    • 链路层地址
    • 剩余生存时间
    • 其他注册参数

3.7.2. Receiving Registration Requests (接收注册请求)

外部代理收到注册请求时:

  1. 执行初步检查:

    • 验证UDP校验和
    • 验证IP头有效
    • 检查Type字段为1
  2. 验证请求内容:

    • Care-of Address是外部代理的地址之一
    • Lifetime不超过配置的最大值
    • 如果需要,验证Mobile-Foreign认证扩展
  3. 处理请求:

    • 如果有效,添加或更新访问者列表条目
    • 如果需要,添加Foreign-Home认证扩展
    • 将请求转发给归属代理
  4. 错误处理:

    • 如果请求无效,发送包含适当错误代码的注册应答
    • 不转发给归属代理

常见拒绝原因:

  • 资源不足(如访问者列表已满)
  • 认证失败
  • 请求的封装不支持
  • Lifetime过长

3.7.3. Receiving Registration Replies (接收注册应答)

外部代理从归属代理收到注册应答时:

  1. 定位相应的访问者列表条目(使用归属地址)

  2. 验证应答:

    • 检查Foreign-Home认证扩展(如果使用)
    • 验证应答对应于转发的请求
  3. 更新访问者列表:

    • 如果注册被接受,更新生存时间
    • 如果注册被拒绝或注销,删除条目
  4. 中继应答给移动节点:

    • 将应答发送到移动节点的链路层地址
    • 使用UDP端口434

外部代理必须 (MUST) 维护访问者列表条目的生存时间计时器,并在到期时删除条目。

3.8. Home Agent Considerations (归属代理考虑事项)

3.8.1. Configuration and Registration Tables (配置和注册表)

归属代理必须 (MUST) 维护:

  1. 配置信息:

    • 管理的归属网络前缀
    • 支持的移动节点列表
    • 认证密钥和SPI
    • 支持的封装类型
  2. 移动绑定表 (Mobility Binding List): 每个注册的移动节点一个条目,包含:

    • 移动节点的归属地址
    • 当前转交地址
    • 剩余生存时间
    • 外部代理地址(如果适用)
    • 注册标志(同时绑定、反向隧道等)

3.8.2. Receiving Registration Requests (接收注册请求)

归属代理收到注册请求时:

  1. 验证请求:

    • 检查Mobile-Home认证扩展是否有效
    • 验证移动节点有权在此归属代理注册
    • 检查请求的Lifetime是否可接受
    • 如果来自外部代理,验证Foreign-Home认证扩展
  2. 处理注册:

    • 如果Lifetime为0,这是注销请求,删除移动绑定
    • 如果Lifetime非零,创建或更新移动绑定
    • 如果请求同时绑定(S位),保留先前的绑定;否则替换
  3. 设置隧道:

    • 配置到转交地址的隧道
    • 选择适当的封装方法(IP-in-IP、最小封装或GRE)
  4. 准备注册应答:

    • 设置Code字段(0表示成功)
    • 设置授予的Lifetime
    • 复制Home Address, Home Agent, Identification
    • 添加Mobile-Home认证扩展
    • 如果请求来自外部代理,添加Foreign-Home认证扩展

成功注册后,归属代理:

  • 拦截发往移动节点归属地址的数据报
  • 将数据报封装并隧道传输到转交地址
  • 响应归属网络上对移动节点的ARP请求(代理ARP)

3.8.3. Sending Registration Replies (发送注册应答)

归属代理必须 (MUST) 对每个注册请求发送注册应答,无论接受还是拒绝。

应答路由:

  • 如果请求来自外部代理,将应答发送到外部代理
  • 如果请求直接来自移动节点(同位转交地址),将应答直接发送到移动节点的转交地址

应答使用UDP,目标端口434(如果通过外部代理)或源端口(如果直接发送)。

归属代理必须 (MUST) 维护移动绑定的生存时间计时器,并在到期时删除绑定。