5. 进行一些测试

5.1. 预测试

按照上述所示完成所有配置;尤其重要的是在家乡网络和访问网络上使用不同的 ESSID。

当你在 MN 上启动 mobile-IPv6 时,你将会看到组播路由器请求消息

      # tcpdump -i eth0 -vv ip6 or proto ipv6

      ...
      13:32:54.681763 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \
      (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255)

      13:32:55.681763 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \
      (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255)

      13:32:57.681765 fe80::202:a5ff:fe6f:a08a > ff02::2: icmp6: router solicitation \
      (src lladdr: 0:2:a5:6f:a0:8a) (len 16, hlim 255)
      ...

      

5.2. 移动检测

通用移动检测使用邻居不可达检测来检测默认路由器何时不再双向可达,在这种情况下,移动节点必须发现一个新的默认路由器(通常在新链路上)。

为了轻松查看正在发生的事情,你应该为每个命令都准备一个 xterm 窗口

      # watch ifconfig eth0
      # watch route -A inet6
      # tcpdump -i eth0 -vv ip6 or proto ipv6
      

"travel"到另一个网络,你可以在 MN 上发出命令

      # iwconfig eth1 essid visitnet
      

MN 随后将位于另一个无线网络上,并且由于它发送"路由器请求"(组播),我们的 AR 将会用它的前缀进行响应。MN 随后将使用接收到的前缀和它自身的 MAC 地址配置一个新的 IPv6 地址。如果你输入 ifconfig eth0 你将会看到新的 IPv6 地址

    # ifconfig eth0
    eth0  Link encap:Ethernet  HWaddr 00:90:7D:F3:03:1A  
          inet6 addr: fec0:106:1100:0:290:7dff:fef3:31a/64 Scope:Site (1)
          inet6 addr: fec0:106:2700:0:290:7dff:fef3:31a/64 Scope:Site (2)
          inet6 addr: fec0:106:2700::4/64 Scope:Site                  (3)
          inet6 addr: fe80::290:7dff:fef3:31a/64 Scope:Link           (4)
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:854 errors:154 dropped:154 overruns:0 frame:148
          TX packets:293 errors:58 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:96536 (94.2 Kb)  TX bytes:44664 (43.6 Kb)
          Interrupt:3 Base address:0x100

      
(1)
新的"foreign"地址,通过结合 AR 的前缀和 MAC 地址生成
(2)
多余的家乡网络地址(因为 HA radvd 消息和 MN 自动配置设置为 "true")。
(3)
"original"(家乡)地址
(4)
启动时生成的链路本地地址

几乎在同一时间,MN 将会对 HA 执行绑定更新。在你的 tcpdump 窗口中,你将会看到几个发往 HA 的数据包。要验证绑定更新是否已从 MN 发送并确认

      # mipdiag -s
      Mobile IPv6 Statistics
      NEncapsulations           : 0
      NDecapsulations           : 0
      NBindUpdatesRcvd          : 0
      NBindAcksRcvd             : 1    (1)
      NBindNAcksRcvd            : 0
      NBindRqsRcvd              : 0
      NBindUpdatesSent          : 1    (2)
      NBindAcksSent             : 0
      NBindNAcksSent            : 0
      NBindRqsSent              : 0
      NBindUpdatesDropAuth      : 0
      NBindUpdatesDropInvalid   : 0
      NBindUpdatesDropMisc      : 0
      NBindAcksDropAuth         : 0
      NBindAcksDropInvalid      : 0
      NBindAcksDropMisc         : 0
      NBindRqsDropAuth          : 0
      NBindRqsDropInvalid       : 0
      NBindRqsDropMisc          : 0
     
(1)
收到一个绑定 ACK。
(2)
发送一个绑定 UPDATE。

你也可以使用以下命令(在 MN 上)验证绑定

     # mipdiag -l
     Mobile IPv6 Binding update list
     Recipient CN: fec0:106:2700::2
     BINDING home address: fec0:106:2700::4 care-of address: fec0:106:1100:0:290:7dff:fef3:31a
             expires: 936 sequence: 0 state: 1
             delay: 3 max delay 32 callback time: 736
     

你也可以在 HA 上使用统计选项 (-s) 和 "binding cache" (-c) 选项来验证它

     # mipdiag -c
     Mobile IPv6 Binding cache
     Home Address      Care-of Address                    Lifetime  Type 
     fec0:106:2700::4  fec0:106:1100:0:290:7dff:fef3:31a  971       2    
     

5.3. ping6

从 MN,你可以尝试 ping AR 的 eth1 (fec0:106:1100::1)

     # ping6 fec0:106:1100::1
     PING fec0:106:1100::1(fec0:106:1100::1) from fec0:106:2700::4 : 56 data bytes
     64 bytes from fec0:106:1100::1: icmp_seq=1 ttl=62 time=8.01 ms
     64 bytes from fec0:106:1100::1: icmp_seq=2 ttl=62 time=8.02 ms
     ...
     

通过使用 tcpdump,你可以看到数据包如何传输

     12:13:51.789688 fec0:106:1100:0:202:a5ff:fe6f:a08a > fec0:106:2700::2: \  (1)
     fec0:106:2700::4 > fec0:106:1100::1: icmp6: echo request \ (2)
     (len 64, hlim 64) (len 104, hlim 255)

     12:13:51.797675 fec0:106:2700::2 > fec0:106:1100:0:202:a5ff:fe6f:a08a: \ (3)
     fec0:106:1100::1 > fec0:106:2700::4: icmp6: echo reply \
     (len 64, hlim 62) (len 104, hlim 253)
     
(1)
数据包首先从 MN 使用 MN 新的 IPv6 地址发送到 HA。
(2)
然后从 HA 到 AR。
(3)
AR 然后响应 HA 并将数据包隧道传输到 MN。

你现在可以看到统计信息已更新(在 MN 上)

     # mipdiag -s
     Mobile IPv6 Statistics
     NEncapsulations           : 56
     NDecapsulations           : 25
     ...
    

5.4. 内核 IP 路由表

MIPv6 做的一件有趣的事情是将默认路由更改为隧道。新的默认路由变为

    # route -A inet6
    Kernel IPv6 routing table
    Destination      Next Hop       Flags Metric Ref    Use Iface
    ::/0             ::             UD    64     0        0 ip6tnl1
    ....
    

如果它没有添加默认路由,你可以手动添加它

    # ip route ::/0 via dev ip6tnl
    

5.5. 穿越多个 foreign LAN

穿越到多个访问网络,与穿越到一个网络没有区别。你唯一需要记住的是,你将为每个访问网络生成一个新的地址。

MN 穿越多个不同的 LAN。

  1. MN 首先访问 'visitnet',正如我们上面已经经历过的那样。

  2. MN 随后从 'visitnet' 穿越到 'visitnet2'。

  3. 当在 'visitnet2' 时,MN 生成一个新的 IPv6 地址并对 HA 进行新的绑定更新。

  4. MN 随后返回家乡。(见下一节。)

位于 "visitnet2" 的 AR 的配置与另一个 AR(位于 "visitnet")完全相同,除了使用地址fec0:106:1000::/64而不是fec0:106:1100::/64.

要使移动节点从 'visitnet' 穿越到 'visitnet2',请发出命令(在 MN 上)

     # iwconfig eth0 essid visitnet2
     

然后你将会看到 MN 将自身配置到新网络

    # ifconfig eth0
    eth1  Link encap:Ethernet  HWaddr 00:90:7D:F3:03:1A  
          inet6 addr: fec0:106:1000:0:290:7dff:fef3:31a/64 Scope:Site (1)
          inet6 addr: fec0:106:1100:0:290:7dff:fef3:31a/64 Scope:Site 
          inet6 addr: fec0:106:2700:0:290:7dff:fef3:31a/64 Scope:Site 
          inet6 addr: fec0:106:2700::4/64 Scope:Site                  
          inet6 addr: fe80::290:7dff:fef3:31a/64 Scope:Link           
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1073 errors:212 dropped:212 overruns:0 frame:204
          TX packets:371 errors:72 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:120340 (117.5 Kb)  TX bytes:56912 (55.5 Kb)
          Interrupt:3 Base address:0x100 
     
(1)
在 'visitnet2' 的新的自动配置地址。

注意!当来到一个新网络时,你可能需要在 MN 上重启 mobile-IPv6!

    # /etc/init.d/mobile-ip6 restart
    Stopping Mobile IPv6: OK
    Starting Mobile IPv6: OK
    

MN 随后将对 HA 执行新的绑定更新。注意新的 "care-of address"

    # mipdiag -l
    Mobile IPv6 Binding update list
    Recipient CN: fec0:106:2700::2
    BINDING home address: fec0:106:2700::4 care-of address: fec0:106:1000:0:290:7dff:fef3:31a
        expires: 973 sequence: 14 state: 1
        delay: 3 max delay 32 callback time: 773
    

你也可以看到 HA 上的 "binding cache" 已更新

    # mipdiag -c
    Mobile IPv6 Binding cache
    Home Address      Care-of Address                    Lifetime  Type 
    fec0:106:2700::4  fec0:106:1000:0:290:7dff:fef3:31a  943       2  
    

5.6. 返回家乡

要使 MN 返回家乡,你只需发出命令

    # iwconfig eth0 essid homenet
    

MN 将会知道它已返回家乡,因为 HA 正在发送设置了 HA 位 (AdvHomeAgentFlag) 的 radvd 消息,参见 第 4.2.4 节

你可以看到 MN "is back home",因为 HA 上的绑定缓存信息已被刷新(为空)

    Mobile IPv6 Binding cache
    Home Address      Care-of Address                     Lifetime  Type 
    

5.7. 真实生活测试 - 无缝切换

要真正体会移动 IP 的工作原理,启动 GnomeMeeting(参见图 GnomeMeeting 并开始一个网络会议。注意!你必须使用最新的 GnomeMeeting 才能获得 IPv6 支持!然后执行一个 "travel",你就可以看到几乎无缝的切换。

使用带有 IPv6 的 GnomeMeeting 测试两个无线网络之间的漫游