内容目录

路由技术主要是指路由选择算法。

路由器基础

路由原理

路由选择发生在网络层,主要由路由器来完成。路由器有多个接口,用于连接不同的IPv6网段,不同接口的IPv6不能重叠。
路由器的工作就是接收数据分组,然后根据当前网络的状况选择最有效的路径将其转发出去。
路由器中的路由表必须实时更新,以准确地反映当前的网络状态。

网络前缀相同的主机之间可以直接通信,网络前缀不同的主机之间若要通信,则必须经过同一网段上的某个路由器或网关(gateway)实现。
路由器在转发IPv6分组时,根据目的IPv6地址的网络前缀选择合适的接口,把IPv6分组发送出去。
路由技术就是为了转发IP数据分组而在通信子网中寻找最佳传输路径,以将其发送到最终设备。

路由选择算法必须启动并维护包含路由信息的路由表,其中路由信息因所用的路由选择算法而不尽相同。
路由选择算法将收集到的不同信息填入路由表中,根据路由表可将目的网络与下一跳(next-hop)的关系告诉路由器。
路由器间互通信息进行路由更新,以更新维护路由表,使之正确反映网络的拓扑变化,并根据度量值来决定最佳路径,这就是路由协议(Routing Protocol)。
开放式最短路径优先协议版本3(Open Shortest-Path First v3,OSPFv3)和边界网关协议(Border Gateway Protocol,BGP)等都是常见的路由协议。

路由转发即沿寻址好的最佳路径传送数据分组。
路由器首先在路由表中查找相关信息,以查询将分组发送到下一跳(路由器或主机)的最佳路由,如果路由器不知道如何发送分组,通常会将该分组丢弃;
否则就根据路由表的相应表项将分组发送到下一跳;如果目的网络直接与路由器相连,那么路由器就把分组直接发送到相应的接口上。

路由协议

根据路由器学习路由信息、生成并维护路由表的方式,可将路由分为直连路由、静态路由和动态路由。
直连路由通过接口配置生成,静态路由通过管理员手动配置生成,动态路由通过动态路由协议计算生成。

直连路由

直连路由由数据链路层协议发现,是指去往路由器的接口IPv6地址所在网段的路径,该路径信息不需要网络管理员维护,也不需要路由器通过某种算法进行计算获得,只要该接口处于激活状态(active),路由器就会把直连接口所在网段的路由信息填写到路由表中去。
IPv4中,路由器会自动产生激活接口所在网段的直连路由。在IPv6中,路由器同样也会自动产生激活接口所在网段的直连路由。

file

router-1的配置如下:

Router>enable
Router#conf t
Router(config)#hostname Router-1
Router-1(config)#ipv6  unicast-routing       开启IPv6路由协议,有些路由器默认并没有开启IPv6路
由支持
Router-1(config)#interface  Loopback0       配置环回接口0,这是路由器上的虚拟接口,可用来模拟路由
Router-1(config-if)#ipv6  enable           启用接口的IPv6功能,默认情况下,接口的IPv6功能处于未启用状态。未启用状态的接口不会处理某些IPv6报文,比如ND中的RA报文。没有RA报文,接口将无法通过RA获取网络前缀和网关,也就无法形成IPv6地址。此命令不是必需的,在接口配置IPv6地址后,同样的功能也会开启。
Router-1(config-if)#ipv6 address 2001:1::1/64
Router-1(config-if)#no shutdown
Router-1(config-if)#interface Ethernet0/0
Router-1(config-if)#ipv6 enable
Router-1(config-if)#ipv6 address 2001:2::1/64
Router-1(config-if)#no shutdown

router-2的配置如下:

Router>enable
Router#conf t
Router(config)#hostname Router-2
Router-2(config)#ipv6 unicast-routing
Router-2(config)#interface Loopback0
Router-2(config-if)#ipv6 enable
Router-2(config-if)#ipv6 address 2001:3::1/64
Router-2(config-if)#no shutdown
Router-2(config-if)#interface Ethernet0/0
Router-2(config-if)#ipv6 enable
Router-2(config-if)#ipv6 address 2001:2::2/64
Router-2(config-if)#no shutdown

router-2执行show ipv6 route命令,显示如下:

Router-2#show ipv6 route
IPv6 Routing Table - default - 5 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
       H - NHRP, I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea
       IS - ISIS summary, D - EIGRP, EX - EIGRP external, NM - NEMO
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, la - LISP alt
       lr - LISP site-registrations, ld - LISP dyn-eid, a - Application
C   2001:2::/64 [0/0]  //C表示直连路由,是接口所在网段的路由;前面的0代表管理距离,后面的0代表度量值也称为开销
     via Ethernet0/0, directly connected  //通过eth0/0接口可到达这个网段,是直连的路由
L   2001:2::2/128 [0/0]  //L表示本地,这是接口ip所在的128位的主机路由
     via Ethernet0/0, receive
C   2001:3::/64 [0/0]
     via Loopback0, directly connected
L   2001:3::1/128 [0/0]
     via Loopback0, receive
L   FF00::/8 [0/0]  //L表示本地,多播地址空间的路由
     via Null0, receive

静态路由

静态路由是指由网络管理员手动配置的路由信息。IPv4IPv6网络都支持静态路由。
当网络的拓扑或链路状态发生变化时,网络管理员需要手动修改路由表中相关的静态路由信息。静态路由信息是私有的,不会传递给其他的路由器。

常规静态路由

如果路由器Router-1知道把去往2001:3::1的数据包发给Router-2Router-1路由器默认会使用距离目标最近的接口IP作为源IP,也就是Router-1使用2001:2::1作为源IP地址,去ping Router-2
Router-2收到数据包后,查询ping包的目的IP地址,发现2001:3::1/128是本地接口路由,然后再查询ping包的源IP地址,发现是来自2001:2::1的数据包。Router-2查询本地的路由表,发现2001:2::/64是直连路由,于是把ping的应答包从eth0/0接口发出。
Router-1收到应答包,表示ping成功。关键是管理员如何通知路由器Router-1去往2001:3::1的数据包要发往Router-2呢?这就需要添加静态路由。添加静态路由的命令格式如下:

ipv6 route 2001:3::/64 2001:2::2

IPv6静态路由的配置与IPv4的类似,它使用的命令是ipv6 route,后面是要去往的目的网络。
IPv4中,目的网络采用“网络号+网络掩码”的形式表示,在IPv6中则是网络地址后跟“/网络前缀长度”。
这里配置的2001:3::/64,表示的是去往以2001:0003:0000:0000为起始地址的所有IPv6地址。

接下来是输入下一跳路由器直连接口的IP地址,或者输入本路由器的外出接口。

这里特别要注意的是,即使要到达的网络与本路由器相隔数台路由器,这里填入的还是下一跳地址,而不是目标网络的前一跳。也就是说,在静态路由中,只需指出下一跳的地址即可,至于以后如何指向,则是下一跳路由器考虑的事情。
此时,在Router-1ping 2001:3::1,可以ping通。取消上面的静态路由命令,改用外出接口,命令如下:

Router-1(config)#no ipv6 route 2001:3::/64 2001:2::2
Router-1(config)#ipv6 route 2001:3::/64 ethernet 0/0

这里使用的是路由器Router-1的外出接口。在Router-1ping 2001:3::1,发现无法ping通。
这两条命令都是在Router-1上添加一条去往2001:3::/64网段的静态路由。
由上可知,至于添加的是下一跳的地址还是本路由器的外出接口,还是有差别的。

如果是以太网这种多路访问链路,若使用外出接口,则路由器将不知道把包发往哪一台路由器,也不知道要发往哪一个IPv6地址,自然也就无法完成数据链路层的解析过程。
在不知道下一跳设备MAC地址的情况下,也就无法完成ping包的数据封装。

使用下面命令在Router-1上恢复静态路由器的配置:

Router-1(config)#no ipv6 route 2001:3::/64 ethernet 0/0
Router-1(config)#ipv6 route 2001:3::/64 2001:2::2

使用下面的命令在Router-2上配置静态路由
ipv6 route 2001:1::/64 2001:2::1

配置完成后,Router-2就可以pingRouter-1环回接口的IP地址了。

路由器默认会使用距离目的最近的接口IP执行ping操作。下面的命令强制Router-1使用环回接口的IP地址2001:1::1ping路由器Router-2的环回接口的IP地址2001:3::1
ping ipv6 2001:3::1 source 2001:1::1

在路由器Router-2上执行debug ipv6 icmp命令,检测Router-1来访的IPv6地址,显示如下:

Router-2#debug ipv6 icmp
  ICMPv6 Packet debugging is on
Router-2#
*Feb 17 17:19:57.924: ICMPv6: Received echo request, Src=2001:1::1, Dst=2001:3::1
*Feb 17 17:19:57.924: ICMPv6: Sent echo reply, Src=2001:3::1, Dst=2001:1::1

从上面的输出可以看出,Router-1是使用环回接口去ping路由器Router-2的环回接口的。

下面总结一下配置静态路由的一般步骤。

  • 1.为路由器每个接口配置IP地址。
  • 2.确定本路由器有哪些直连网段。
  • 3.确定网络中有哪些属于本路由器的非直连网段。
  • 4.在路由表中添加所有非本路由器直连网段的相关路由信息。

实验:配置静态路由
配置静态路由,使下图的任何两个IP地址之间都可以连通。

file

分析:根据前面配置静态路由的总结,首先配置接口IP地址。然后分析每台路由器有哪些直连网段,有哪些非直连网段,然后给所有非直连网段添加静态路由。
整个网络中有6个环回口路由,2个互联网络,共8个网段。

Router-1有3个直联网段(2001:da8:1011:1001::/64、2001:da8:1011:1002::/64、2001:da8:1011:f001::/64),需要添加5(8-3=5)段路由(2001:da8:1011:2001::/64、2001:da8:1011:2002::/64、2001:da8:1011:3001::/64、2001:da8:1011:3002::/64、2001:da8:1011:f001::/64)。

Router-2直连了4个网段,只需要添加4条静态路由。Router-3Router-1一样,直连了3个网段,需要添加5条静态路由。

Router-1的配置如下:

Router>enable
Router#conf t
Router(config)#host Router-1
Router-1(config)#ipv6 unicast-routing
Router-1(config)#int lo0
Router-1(config-if)#ipv6 add 2001:da8:1011:1001::1/64
Router-1(config-if)#int lo1
Router-1(config-if)#ipv6 add 2001:da8:1011:1002::1/64
Router-1(config-if)#int eth 0/0
Router-1(config-if)#ipv6 add 2001:da8:1011:f001::1/64
Router-1(config-if)#no shut
Router-1(config-if)#exit
Router-1(config)#ipv6 route 2001:da8:1011:2001::/64  2001:da8:1011:f001::2   去往Router-2环回接口0
Router-1(config)#ipv6 route 2001:da8:1011:2002::/64  2001:da8:1011:f001::2   去往Router-2环回接口1
Router-1(config)#ipv6 route 2001:da8:1011:3001::/64  2001:da8:1011:f001::2   去往Router-3环回接口0,不管之间隔了多少台路由器,只需要把数据包发给下一台路由器直连接口的IP地址即可
Router-1(config)#ipv6 route 2001:da8:1011:3002::/64  2001:da8:1011:f001::2   去往Router-3环回接口1
Router-1(config)#ipv6 route 2001:da8:1011:f002::/64  2001:da8:1011:f001::2   去往Router-2和Router-3之间的互联网段

Router-2的配置如下:

Router>enable
Router#conf t
Router(config)#host Router-2
Router-2(config)#ipv6 unicast-routing
Router-2(config)#int lo0
Router-2(config-if)#ipv6 add 2001:da8:1011:2001::1/64
Router-2(config-if)#int lo1
Router-2(config-if)#ipv6 add 2001:da8:1011:2002::1/64
Router-2(config-if)#int eth 0/0
Router-2(config-if)#ipv6 add 2001:da8:1011:f001::2/64
Router-2(config-if)#no shut
Router-2(config-if)#int eth 0/1
Router-2(config-if)#ipv6 add 2001:da8:1011:f002::1/64
Router-2(config-if)#no shut
Router-2(config-if)#exit
Router-2(config)#ipv6 route 2001:da8:1011:1001::/64  2001:da8:1011:f001::1     去往Router-1环回接口0
Router-2(config)#ipv6 route 2001:da8:1011:1002::/64  2001:da8:1011:f001::1     去往Router-1环回接口1
Router-2(config)#ipv6 route 2001:da8:1011:3001::/64  2001:da8:1011:f002::2     去往Router-3环回接口0
Router-2(config)#ipv6 route 2001:da8:1011:3002::/64  2001:da8:1011:f002::2     去往Router-3环回接口1

Router-2的配置如下:

Router>enable
Router#conf t
Router(config)#host Router-3
Router-3(config)#ipv6 unicast-routing
Router-3(config)#int lo0
Router-3(config-if)#ipv6 add 2001:da8:1011:3001::1/64
Router-3(config-if)#int lo1
Router-3(config-if)#ipv6 add 2001:da8:1011:3002::1/64
Router-3(config-if)#int eth 0/0
Router-3(config-if)#ipv6 add 2001:da8:1011:f002::2/64
Router-3(config-if)#no shut
Router-3(config-if)#exit
Router-3(config)#ipv6 route 2001:da8:1011:1001::/64  2001:da8:1011:f002::1
Router-3(config)#ipv6 route 2001:da8:1011:1002::/64  2001:da8:1011:f002::1
Router-3(config)#ipv6 route 2001:da8:1011:2001::/64  2001:da8:1011:f002::1
Router-3(config)#ipv6 route 2001:da8:1011:2002::/64  2001:da8:1011:f002::1
Router-3(config)#ipv6 route 2001:da8:1011:f001::/64  2001:da8:1011:f002::1

经过上述配置后,图中的所有IP地址之间都可以连通。

Router-1中的5条路由都是去往Router-22001:da8:1011:f001::2
有没有办法简化些配置呢?办法是有的,那就是采用路由汇总。
把所有路由写出来,然后把所有路由共有的部分写出来,再统计一下共用的位数。
所有路由共用的部分为2001:da8:1011,共用的位数是48位,汇总后的路由是2011:da8:1011::/48(当然这里的汇总属于不精确汇总)。
这样Router-1上只写一条路由就可以了。在Router-1删除明细路由,再添加一条汇总的路由。

采用类似的方法,在Router-3上只写一条汇总路由ipv6 route 2011:da8:1011::/48 2001:da8: 1011:f002::1

Router-2上去往Router-1的两条路由可以简单地汇总成2001:da8: 1011:1000::/60(因为16+16+16+12=60)。

还可以进一步把IP地址中的1和2划分成4位二进制,进一步汇总成2001:da8:1011:1000::/62(因为16+16+16+12+2=62)。
这里属于比较精确的汇总,但仍不是最精确的汇总,因为汇总中包括了2001:da8:1011:1000::/642001:da8:1011: 1003::/64路由条目。

浮动静态路由

在简单的网络中可以通过指定静态路由的管理距离来达到链路冗余备份的目的。指定了管理距离的静态路由叫做浮动静态路由,广泛应用于链路备份的场合。下面通过一个实验来演示浮动静态路由的使用。

  • 实验:配置浮动静态路由
    如图下图所示。总部和分部之间通过双链路互连,假设e0/2的链路是10Gbit/s链路,e0/3的链路是1Gbit/s链路。
    配置静态IPv6路由,使其在两条链路都正常时,流量走10Gbit/s链路。
    10Gbit/s链路发生故障时,流量自动切换到1Gbit/s链路。当10Gbit/s链路恢复时,再自动切换回10Gbit/s链路。

Switch-1模拟分部的核心交换机,其中VLAN 1IPv6地址是2001:da8:1011:1001::1/64Win10-1VLAN 1中,自动获取IPv6地址。
Switch-2模拟总部的核心交换机,其中VLAN 1IPv6地址是2001:da8:1011:2001::1/64Win10-2VLAN 1中,自动获取IPv6地址。

file

  • 1.配置核心交换机。switch-1的配置如下:
    Switch>enable
    Switch#conf t
    Switch(config)#host Switch-1
    Switch-1(config)#ipv6 unicast-routing
    Switch-1(config)#interface Ethernet0/2
    Switch-1(config-if)# no switchport
    Switch-1(config-if)# ipv6 address 2001:DA8:1011:F001::1/64
    Switch-1(config-if)# ipv6 enable
    Switch-1(config-if)# no shutdown
    Switch-1(config-if)#interface Ethernet0/3
    Switch-1(config-if)# no switchport
    Switch-1(config-if)# ipv6 address 2001:DA8:1011:F002::1/64
    Switch-1(config-if)# ipv6 enable
    Switch-1(config-if)# no shutdown
    Switch-1(config-if)#interface Vlan1
    Switch-1(config-if)# ipv6 address 2001:DA8:1011:1001::1/64
    Switch-1(config-if)# ipv6 enable
    Switch-1(config-if)# no shutdown
    Switch-1(config-if)#exit
    Switch-1(config)#ipv6 route 2001:DA8:1011:2001::/64 2001:DA8:1011:F001::2   这条路由没有指定静态路由的管理距离,使用默认的管理距离1
    Switch-1(config)#ipv6 route 2001:DA8:1011:2001::/64 2001:DA8:1011:F002::2 2   这条路由指定静态路由的管理距离是2

switch-2的配置如下:

Switch>enable
Switch#conf t
Switch(config)#host Switch-2    
Switch-2(config)#ipv6 unicast-routing
Switch-2(config)#interface Ethernet0/2
Switch-2(config-if)# no switchport
Switch-2(config-if)# ipv6 address 2001:DA8:1011:F001::2/64
Switch-2(config-if)# ipv6 enable
Switch-2(config-if)# no shutdown
Switch-2(config-if)#interface Ethernet0/3
Switch-2(config-if)# no switchport
Switch-2(config-if)# ipv6 address 2001:DA8:1011:F002::2/64
Switch-2(config-if)# ipv6 enable
Switch-2(config-if)# no shutdown
Switch-2(config-if)#interface Vlan1
Switch-2(config-if)# ipv6 address 2001:DA8:1011:2001::1/64
Switch-2(config-if)# ipv6 enable
Switch-2(config-if)# no shutdown
Switch-2(config-if)#ipv6 route 2001:DA8:1011:1001::/64 2001:DA8:1011:F001::1
Switch-2(config)#ipv6 route 2001:DA8:1011:1001::/64 2001:DA8:1011:F002::1 2
  • 2.配置终端的ipv6地址并测试连通性。Win10-1Win10-2默认启用了IPv6协议,且自动获取地址。
    使用ipconfig命令验证两台计算机是否都获取了正确的IPv6地址,其中Win10-2的显示如图所示。

file

可以看到Win10-2获取了2001:da8:1011:2001::/64IPv6地址,并成功ping通以2001:da8:1011:1001::/64开头的Win10-1IPv6地址(这里Win10-1的IPv6地址是2001:da8:1011:1001:d57c:b6c:cf69:cec6)。
这里也可以看到,因启用了IPv4协议和自动获取IPv4地址,而网络上没有DHCP服务器,所以IPv4IP地址被随机配置成以169.254打头的IP地址。

  • 3.验证路由。查看switch-1的路由表,显示如下:
    Switch-1#show ipv6 route
    IPv6 Routing Table - default - 8 entries
    Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, R - RIP, I1 - ISIS L1, I2 - ISIS L2
       IA - ISIS interarea, IS - ISIS summary, D - EIGRP, EX - EIGRP external
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       RL - RPL, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
       OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       a - Application
    C   2001:DA8:1011:1001::/64 [0/0]
     via Vlan1, directly connected
    L   2001:DA8:1011:1001::1/128 [0/0]
     via Vlan1, receive
    S   2001:DA8:1011:2001::/64 [1/0]
     via 2001:DA8:1011:F001::2
    C   2001:DA8:1011:F001::/64 [0/0]
     via Ethernet0/2, directly connected
    L   2001:DA8:1011:F001::1/128 [0/0]
     via Ethernet0/2, receive
    C   2001:DA8:1011:F002::/64 [0/0]
     via Ethernet0/3, directly connected
    L   2001:DA8:1011:F002::1/128 [0/0]
     via Ethernet0/3, receive
    L   FF00::/8 [0/0]
     via Null0, receive

可以看到Switch-1去往2001:DA8:1011:2001::/64的下一跳是2001:da8:1011:F001::2,走的是e0/2链路。

为了让效果更明显,在Win10-2上持续用大包ping Win10-1,命令如下:
ping 2001:da8:1011:1001:d57c:b6c:cf69:cec6 -t -l 10240
ping测试默认是发送4个包,这里-t的意思是一直pingping包的默认大小是32字节,这里-l 10240指定ping包的大小是10240字节

在交换机Switch-1上使用show命令,分别查看e0/2e0/3端口的数据包统计,e0/2接口上的数据持续不断,e0/3接口上的数据基本不变,这证明了大量的ping包确实走的是e0/2链路。

也可以通过抓包来验证。可以观察到e0/2接口捕获到了大量的ICMPv6报文。
由于数据包的默认大小是1510字节,所以导致每个10240字节的ping包被拆成了多个报文。
e0/3接口没有捕获到这样的数据包。

  • 4.模拟故障。断开Switch-1Switch-2e0/2接口,发现Win10-1Win10-2之间仍然可以ping通。
    可以使用show interface e0/3命令查看接口的通信情况,以证明此时流量切换到e0/3链路。

Switch-1上查看路由表,显示如下。可以看出去往2001:da8:1011:2001::/64的下一跳是2001:DA8:1011:F002::2,已经切换到e0/3链路。注意这条静态路由后的显示是[2/0],管理距离是2。

Switch-2(config-if)#do show ipv6 route
IPv6 Routing Table - default - 6 entries
Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
       B - BGP, R - RIP, I1 - ISIS L1, I2 - ISIS L2
       IA - ISIS interarea, IS - ISIS summary, D - EIGRP, EX - EIGRP external
       ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
       RL - RPL, O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1
       OE2 - OSPF ext 2, ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       a - Application
S   2001:DA8:1011:1001::/64 [2/0]
     via 2001:DA8:1011:F002::1
C   2001:DA8:1011:2001::/64 [0/0]
     via Vlan1, directly connected
L   2001:DA8:1011:2001::1/128 [0/0]
     via Vlan1, receive
C   2001:DA8:1011:F002::/64 [0/0]
     via Ethernet0/3, directly connected
L   2001:DA8:1011:F002::2/128 [0/0]
     via Ethernet0/3, receive
L   FF00::/8 [0/0]
     via Null0, receive
  • 5.模拟故障恢复。打开Switch-1Switch-2e0/2接口,此时再次执行show interface命令,可以看到流量又切换回e0/2链路。

静态路由优缺点

与所有的路由协议一样,静态路由协议也有自己的优缺点。了解每种路由协议的优缺点,有利于根据网络规模的状况,正确地选择适合的路由协议。静态路由具有以下优点。

  • 对CPU、内存等硬件的需求不高。静态路由不像动态路由协议那样,需要缓存相互交换的路由信息,并执行一些算法,这意味着静态路由对CPU和内存的要求不高。
  • 不占用带宽。静态路由不像动态路由协议那样,需要相互交换网络信息或路由表,这意味着静态路由可以节省带宽。
  • 增加网络安全。静态路由是网络管理员手动添加的,即使不同的网络之间存在物理路径,只要管理员没有添加它们之间的静态路由,网络也是不可达的。相较于动态路由协议,静态路由更容易实现网络间的控制。

静态路由具有以下缺点。

  • 配置工作量大且容易出错。由于所有的路由都需要管理员手动加入,对大型网络来说,这几乎是不可能的,而且容易出错。当某个新的网络出现时,管理员必须在所有路由器上添加这条静态路由。
  • 适应拓扑变化的能力较差。静态路由不能适应网络拓扑的变化,从而动态地调整路由表。虽说可通过配置浮动静态路由,起到了冗余备份的作用,但毕竟只是用在简单的网络中。当网络规模较大时,试图通过配置浮动静态路由来冗余备份将变得异常复杂和不可行。

默认路由

默认路由(default routing)也称作缺省路由,使用默认路由可以将那些路由表中没有明确列出目标网络的数据包转发到下一跳路由器。
在存根网络(只有一条连接到其邻居网络的路由,进出这个网络都只有一条路可以走)上可以使用默认路由,因为存根网络与外界之间只有一个连接。

file

上图所示为某公司的网络拓扑,该公司通过路由器接入ISP,并通过ISP路由器2001: da8:a3::1访问整个互联网。

如果配置具体的静态路由来访问互联网,将要配置多条,低端的路由器根本无法承受如此多的路由条目。
可以配置公司路由器,使其使用默认路由。
默认路由的配置方法与静态路由的类似,只是将网络地址和前缀长度改成了::/0,即只要匹配0位就可以,也就是匹配了所有IPv6地址。图中公司出口路由器的默认路由配置如下:
ipv6 route ::/0 2001:da8:a3:a007::1

其实不只存根网络使用了默认路由,据统计,互联网上99.9%的路由器都使用了默认路由。
在使用IPv6的计算机上执行命令route print,可以在路由表中看到::/0的路由条目,该条目对应的网关是路由器接口的链路本地地址。

  • 实验:配置默认路由

file

每台路由器都通过loopback 0接口模拟一个网段。要求配置最少数量的静态路由条目,以实现全网全通。

分析:根据前面介绍的静态路由的配置步骤,先确定网络中有6个网段,每台路由器都直连了3个网段,然后为所有非直连的网段添加静态路由。

Router-1为例,添加一条去往2001:2::/64的路由,下一跳是2001:12::2;添加一条去往2001:3::/64的路由,下一跳是2001:13::3
添加一条去往2001:23::/64的路由,下一跳是2001:12::22001:13::3

Router-1上需要配置3条静态路由,与之类似,Router-2Router-3上也需要各自配置3条静态路由,这样3台路由器总共配置了9条静态路由,由此实现了全网全通。

默认路由是一种特殊的静态路由,可以理解为最不精确的汇总,如果使用默认路由,在图6-11中只需要配置下面3条默认路由就可以实现全网全通。

Router-1(config)#ipv6 route ::/0 2001:12::2       Router-1上所有未知的数据包都发给路由器Router-2
Router-2(config)#ipv6 route ::/0 2001:23::3       Router-2上所有未知的数据包都发给路由器Router-3
Router-3(config)#ipv6 route ::/02 001:13::1       Router-3上所有未知的数据包都发给路由器Router-1

配置完成后,可以在任意路由器上测试任意IP地址,都可ping通。
但数据包的往返路径不一定相同。
比如在Router-1ping路由器Router-3上的2001:3::1,去的路径是Router-1→ Router-2→Router-3,返回的路径是Router-3→Router-1

由于默认路由不是精确的路由,会产生一些副作用,比如路由环路。
Router-1上随便ping一个不存在的IPv6路由条目,比如2001::1,显示如下:

Router-1#ping ipv6 2001::1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001::1, timeout is 2 seconds:
TTTTT
Success rate is 0 percent (0/5)

返回值为TTTTT,这应该是跳数(Hop Count)超过最大允许值后返回的报错。
Hop Count对应IPv4报头中的TTLTime-To-Live),每经过一台路由器,TTL减1,当TTL为零时,路由器丢弃数据包,并向源发送方返回错误提示。

在路由器上执行traceroute 2001::1命令,显示如下:

Router-1#traceroute 2001::1
Type escape sequence to abort.
Tracing the route to 2001::1

  1 2001:12::2 0 msec 0 msec 1 msec
  2 2001:23::3 0 msec 1 msec 0 msec
  3 2001:13::1 1 msec 0 msec 0 msec
  4 2001:12::2 1 msec 0 msec 1 msec
  5 2001:23::3 1 msec 0 msec 1 msec
  6 2001:13::1 0 msec 0 msec 1 msec
  7 2001:12::2 0 msec 1 msec 1 msec
  8 2001:23::3 0 msec 0 msec 1 msec
  9 2001:13::1 1 msec 1 msec 0 msec
 10 2001:12::2 0 msec *  1 msec
 11 2001:23::3 1 msec 1 msec 1 msec
 12 2001:13::1 1 msec 1 msec 1 msec
 13 2001:12::2 1 msec 1 msec 1 msec
 14 2001:23::3 1 msec 1 msec 1 msec
 15 2001:13::1 1 msec 1 msec 1 msec
 16 2001:12::2 1 msec 2 msec 1 msec
 17 2001:23::3 1 msec 1 msec 2 msec
 18 2001:13::1 1 msec 1 msec 1 msec
 19 2001:12::2 1 msec 1 msec 2 msec
 20 2001:23::3 1 msec *  2 msec
 21 2001:13::1 1 msec 2 msec 1 msec
 22 2001:12::2 2 msec 2 msec 1 msec
 23 2001:23::3 2 msec 2 msec 1 msec
 24 2001:13::1 2 msec 2 msec 1 msec
 25 2001:12::2 2 msec 2 msec 1 msec
 26 2001:23::3 1 msec 2 msec 2 msec
 27 2001:13::1 2 msec 2 msec 1 msec
 28 2001:12::2 1 msec 2 msec 2 msec
 29 2001:23::3 2 msec 2 msec 2 msec
 30 2001:13::1 2 msec *  3 msec
Destination not found inside max hopcount diameter.

traceroute默认显示的最大跳数是30,该命令执行完毕并不表示数据包已经被丢弃。跳数占用8位,最大值是255,当该值减为零时,数据包才会被丢弃

可以通过配置静态路由来实现全网全通,可一旦拓扑发生变化,比如Router-1Router-2之间发生链路故障,将导致Router-1Router-2之间不通。
尽管在事实上可以通过Router-3中转,但静态路由不会根据拓扑的变化自动调整路由表。接下来介绍的动态路由协议可以自动调整路由表。

动态路由协议

前面介绍了直连路由、静态路由和默认路由的配置。
通过静态路由虽然可以实现网络的互联,但如果网络规模很大,假设有100台路由器,101个网络,每台路由器上有两个直联网络,那么需配置静态路由的条目是100(101-2)=9900条,通过手动配置几乎无法实现。
另外,当网络出现变化时,静态路由也不能很好地反映拓扑变化,这时就需要使用动态路由协议。

静态路由与动态路由的比较

静态路由是由管理员在路由器中手动添加的路由条目。
除非网络管理员干预,否则静态路由不会发生变化。
由于静态路由不能对网络的改变做出反应,因此一般用于网络规模不大、拓扑结构固定的网络中。
静态路由的优点是简单、高效、可靠。

动态路由是网络中的路由器相互之间通信,传递路由信息,并利用收到的路由信息更新路由表的过程。
收到路由更新信息后,路由器会重新计算路由,并发出新的路由更新信息。

这些信息在网络中传送,引起各路由器执行路由算法,并更新各自的路由表,以动态地反映网络拓扑变化。
动态路由适用于网络规模大、网络拓扑复杂的网络。
当然,各种动态路由协议会不同程度地占用网络带宽和CPU资源。

动态路由 静态路由
配置的复杂性 网络规模的增加对配置的影响不大 随着网络规模的增加,配置越来越复杂
对管理员的要求 相对较高 相对较低
拓扑改变 自动适应拓扑的改变 需要管理员手动干预
适用环境 简单和复杂网络均可 简单的网络
安全性 较低 较高
资源使用 使用cpu、内存、额外带宽 不使用额外的资源

链路状态路由协议

链路状态路由协议也称为最短路径优先协议,链路状态路由协议使用的算法是最短路径优先(Shortest Path First,SPF)算法,有时也称Dijkstra算法。

链路状态路由协议一般要维护3个表:邻居表,用来跟踪直接连接的邻居路由器;拓扑表,保存整个网络的拓扑信息数据库;路由表,用来维护路由信息。
链路状态路由器维护着远端路由器及其互连情况的全部信息,路由选择算法根据拓扑数据库执行SPF算法。
链路状态路由协议不易出现路由环路问题。

常见的动态路由协议

  1. OSPF
    20世纪80年代中期,由于RIP已不能适应大规模异构网络的互联,所以开放式最短路径优先(Open Shortest Path First,OSPF)随之产生。
    OSPFIETF的内部网关协议工作组为IP网络开发的一种路由协议。

OSPF是一种基于链路状态的路由协议,需要每个路由器向其同一管理域中的所有其他路由器发送链路状态通告信息。
OSPF的链路状态通告信息中包括接口信息、度量值和其他一些参数。
运行OSPF的路由器首先必须收集所有的链路状态信息,并以本路由器为根,使用SPF算法算出到每个节点的最短路径。

  1. BGP
    BGP是为TCP/IP互联网设计的外部网关协议,用于在多个自治系统之间传递路由信息。
    它既不是纯粹的链路状态算法,也不是纯粹的距离矢量算法,各个自治系统可以运行不同的内部网关协议,不同的自治系统通过BGP交换网络可达信息。
    BGP的配置较复杂,是运营商级的路由协议。

OSPFv3

OSPF是典型的链路状态路由协议。OSPFv3用于在IPv6网络中提供路由功能,是IPv6网络中主流的路由协议。
OSPFv3虽在工作机制上与OSPFv2基本相同,但并不向下兼容OSPFv2,不支持IPv4协议。

  1. OSPFv3OSPFv2的相同点
    OSPFv3在协议设计思路和工作机制与OSPFv2基本一致,两者具有的相同点如下所示。

    • 报文类型相同,也有5种类型的报文:Hello、DBD、LSR、LSU、LSAck
    • 区域划分相同。
    • LSA泛洪和同步机制相同。
    • 为了保证LSDB内容的正确性,需要保证LSA的可靠泛洪和同步。
    • 路由计算方法相同:采用最短路径优先算法计算路由。
    • 邻居发现和邻接关系形成机制相同。
    • DR选举机制相同:在NBMA和广播网络中需要选举DRBDR
  2. ospfv3ospfv2的不同点
    为了能在IPv6环境中运行,OSPFv3OSPFv2做出了一些必要的改进,使OSPFv3可以独立于网络层协议,而且后续只要稍加扩展就可以适应各种协议。
    这为未来可能的扩展预留了充分的空间。OSPFv3OSPFv2的不同主要表现在以下几个方面。

  • 基于链路的运行OSPFv2是基于网络运行的,两个路由器要形成邻居关系,则必须在同一个网段。OSPFv3是基于链路运行的,一个链路可以划分为多个子网,节点即使不在同一个子网内,也可以形成邻居关系。
  • 使用链路本地地址OSPFv3的路由器使用链路本地地址作为发送报文的源地址。一个路由器可以学习到这个链路上相连的所有其他路由器的链路本地地址,并使用这些链路本地地址作为下一跳来转发报文。
  • 通过Router ID唯一标识邻居在OSPFv2中,当网络类型为点到点或者通过虚链路与邻居相连时,路由器通过Router ID来标识邻居路由器。当网络类型为广播或NBMA时,则通过邻居接口的IP地址来标识邻居路由器。OSPFv3取消了这种复杂性,即无论对于何种网络类型,都通过Router ID来唯一标识邻居。Router IDArea ID仍然采用32位长度。
  • 认证的变化OSPFv3协议本身不再提供认证功能,而是通过使用IPv6提供的安全机制来保证自身报文的合法性。
  • 报头的不同:与OSPFv2报头相比,OSPFv3报头长度从24字节变成16字节,去掉了认证字段,但加了Instance ID字段。Instance ID字段用来支持在同一条链路上运行多个实例,且只在链路本地范围内有效,如果路由器接收到的Hello报文的Instance ID与当前接口配置的Instance ID不同,将无法建立邻居关系。
  • 组播地址的不同OSPFv3的组播地址为FF02::5FF02::6
  1. 实验:配置ospfv3
    file

    • 1.router-1的配置如下:

      Router-1(config)# ipv6 router ospf 1    启用OSPFv3协议,这里的1代表进程号,只具有本地意义
      Router-1(config-rtr)# router-id 1.1.1.1   OSPFv3中每台路由器的Router ID不会自动根据IPv6地址产生,需要手动指定。路由器上若有IPv4的IP地址,也可不指定Router ID,Router ID由IPv4地址而来,生成的规则与OSPFv2相同
      Router-1(config-rtr)#int e0/0
      Router-1(config-if)# ipv6 ospf 1 area 0  OSPFv3不同于OSPFv2,不是在路由进程下通告所有的直连网络,而是在接口通告这个接口。这里的1代表OSPF进程号,其值需要与前面ipv6 router ospf命令配置的进程号一样。area 0代表该接口所在的OSPF区域。后面还可以跟Instance ID,若不设置,则默认是0
      Router-1(config-if)#int e0/1
      Router-1(config-if)# ipv6 ospf 1 area 0
      Router-1(config-if)#int loop 0
      Router-1(config-if)# ipv6 ospf 1 area 0
    • 2.router-2的配置如下:

      Router-2(config)#ipv6 router ospf 1      这里的1同样只具有本地意义
      Router-2(config-rtr)# router-id 2.2.2.2
      Router-2(config-rtr)#int e0/0
      Router-2(config-if)#ipv6 ospf 1 area 0
      Router-2(config-if)#int e/1
      Router-2(config-if)#ipv6 ospf 1 area 0
      Router-2(config-if)#int loop 0
      Router-2(config-if)#ipv6 ospf 1 area 0
    • 3.router-3的配置如下:

      Router-3(config)#ipv6 router ospf 1
      Router-3(config-rtr)#router-id 3.3.3.3
      Router-3(config-rtr)#int e0/0
      Router-3(config-if)#ipv6 ospf 1 area 0
      Router-3(config-if)#int e0/1
      Router-3(config-if)#ipv6 ospf 1 area 0
      Router-3(config-if)#int lo0
      Router-3(config-if)#ipv6 ospf 1 area 0
    • 4.测试。配置完成后,在Router-1、Router-2、Router-3上任意ping图中标出的所有IPv6地址,都可以ping通。
      Router-3上执行show ipv6 route命令,路由条目显示如下:

      Router-3#show ipv6 route
      IPv6 Routing Table - default - 13 entries
      Codes: C - Connected, L - Local, S - Static, U - Per-user Static route
      B - BGP, HA - Home Agent, MR - Mobile Router, R - RIP
      H - NHRP, I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea
      IS - ISIS summary, D - EIGRP, EX - EIGRP external, NM - NEMO
      ND - ND Default, NDp - ND Prefix, DCE - Destination, NDr - Redirect
      O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
      ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2, la - LISP alt
      lr - LISP site-registrations, ld - LISP dyn-eid, a - Application
      1 S   ::/0 [1/0]
      2      via 2001:13::1
      3 R   2001:1::/64 [120/2]
      4      via FE80::A8BB:CCFF:FE00:110, Ethernet0/0
      5 O   2001:1::1/128 [110/10]
      6      via FE80::A8BB:CCFF:FE00:110, Ethernet0/0
      7 R   2001:2::/64 [120/2]
      8      via FE80::A8BB:CCFF:FE00:200, Ethernet0/1
      9 O   2001:2::1/128 [110/10]
      10      via FE80::A8BB:CCFF:FE00:200, Ethernet0/1
      11 C   2001:3::/64 [0/0]
      12      via Loopback0, directly connected
      13 L   2001:3::1/128 [0/0]
      14      via Loopback0, receive
      15 O   2001:12::/64 [110/20]
      16      via FE80::A8BB:CCFF:FE00:110, Ethernet0/0
      17      via FE80::A8BB:CCFF:FE00:200, Ethernet0/1
      18 C   2001:13::/64 [0/0]
      19      via Ethernet0/0, directly connected
      20 L   2001:13::3/128 [0/0]
      21      via Ethernet0/0, receive
      22 C   2001:23::/64 [0/0]
      23      via Ethernet0/1, directly connected
      24 L   2001:23::3/128 [0/0]
      25      via Ethernet0/1, receive
      26 L   FF00::/8 [0/0]
      27      via Null0, receive

第5行的`O`代表是`OSPF`的路由;`2001:1::1/128`表示网络前缀,这里是`Router-1`环回接口的路由。
`OSPF`会自动识别环回接口,并直接显示128位的主机路由。若想恢复环回接口原来的前缀,需要配置下面的命令:

Router(config)#int loopback 0
Router(config-if)#ipv6 ospf network point-to-point

第5行的[110/10]中的110表示`OSPF`的管理距离是110;10表示`OSPF`的开销(`Cost`),该值是沿途上链路开销的总和,该值由带宽计算而来。
第6行`是OSPF`路由的下一跳地址和本路由器的外出接口,使用的仍然是邻居的链路本地地址。

第9行和第10行是`Router-2`环回接口的`OSPF`路由。

第15、16、17行是`Router-1`和`Router-2`互联网段的路由,这两条路由是等值链路,可以进行负载均衡。

断开某条链路,测试`OSPF`根据拓扑变化调整路由表的能力。会发现`OSPF`可以根据拓扑变化动态调整路由表,并且收敛的速度比较快。

路由选路

路由器默认根据数据分组中的目标`IP`地址进行选路,
路由器如何进行选路:一个目标地址被多个目标网络包含时;
一个目标网络的多种路由协议的多条路径共存时;
一个目标网络的同一种路由协议的多条路径共存时。

管理距离

管理距离(`Administrative Distance,AD`),是用来衡量路由可信度的一个参数。
管理距离越小,路由越可靠,这意味着具有较小管理距离的路由将优于较大管理距离的路由,管理距离的取值为0~255的整数值,0是最可信的,255是最不可信的。

如果一台路由器收到同一个网络的两个路由更新信息,那么路由器将把管理距离小的路由放入路由表中。

路由选路原则

  1. 最长匹配优先
    如果一个目标地址被多个目标网络包含,那么它将优先选择最长匹配的路由。
    比如`Router-3`如果去访问`Router-1`的环回接口`2001:1::1`,那么下面的3条路由都满足。
    根据最长匹配原则,路由器将选择第5行的路由,这条路由匹配了128位,第3行的路由匹配了64位,第1行的路由匹配了0位(属于最不精确的匹配)。

    1    S    ::/0 [1/0]
    2         via 2001:13::1
    3    R    2001:1::/64 [120/2]
    4         via FE80::A8BB:CCFF:FE00:110, Ethernet0/0
    5    O    2001:1::1/128 [110/10]
    6         via FE80::A8BB:CCFF:FE00:110, Ethernet0/0
  2. 管理距离最小优先
    当一个目标网络的多种路由协议的多条路径共存时,将按照下列顺序进行选路。

在子网掩码长度相同的情况下,路由器优先选择管理距离小的路由。
Router-3通过RIPng学到了2001:12::/64的路由,又配置了OSPFv3路由,Router-3通过OSPF也学到了2001:12::/64的路由。

由于RIP的管理距离是120,OSPF的管理距离是110,对于同样的路由条目,管理距离小的路由进入路由表,管理距离大的路由被抑制。

Router-1Router-2环回接口下,输入ipv6 ospf network point-to-point命令,恢复环回口的前缀路由。Router-1Router-2环回接口的路由前缀长度都变成了64位。

  1. 度量值最小优先
    当一个目标网络同一种路由协议的多条路径共存时,将根据度量值进行选路。

如果路由的子网掩码长度相同,管理距离也相等(这往往是一种路由协议的多条路径),接下来比较的就是度量值。
Router-1通过RIPng协议把2001:1::/64路由发给了Router-2Router-3,稍后Router-2会把自己的路由表也发给Router-3
Router-3Router-1Router-2都学到了2001:1::/64路由,但从Router-1学到的跳数是2,从Router-2学到的跳数是3。
比较从两处学来的路由:前缀长度相同,管理距离也相同。
接下来比较的就是度量值,度量值小的路由进入路由表,度量值大的跳由被抑制。

最后修改日期: 2024年7月13日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。