本节书摘来自异步社区《深入解析IPv6(第3版)》一书中的第10章,第10.3节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。
10.3 IPv6路由协议
IPv6网络是由通过IPv6路由器相互连接的众多IPv6子网所构成的。为了使IPv6网络中任意位置都可达,发送方主机和路由器都必须拥有将流量发送给所需目的的路由。这些路由既可以是一般路由(如汇总所有节点的默认路由),也可以是特殊路由(如某子网中所有节点的汇总路由)。
主机通常会使用直连子网路由到达邻居节点,而使用默认路由以到达其他节点。路由器通常使用子网路由以到达站点中的所有节点,而使用汇总路由以到达其他站点或互联网。虽然拥有直连子网和默认路由的主机,可以使用“路由通告”消息进行自动配置,但路由器的配置方法就相对复杂一些。路由器可以采用静态的方法配置路由,也可以通过路由协议动态维护路由。
静态路由采用手动配置的方法配置的路由表条目,这些路由不会随着网络拓扑的变更而改变。使用手动配置路由表的路由器称为静态路由器。网络管理员如果了解网络拓扑,就可以通过向路由表中输入所有路由条目的方式,来手动建立和更新路由表。由于静态路由器需要手动管理,扩展性不强,因此仅适用于小型网络,而不适用于大型网络或动态改变的网络。
静态路由器不具备容错功能。手动配置的静态路由的生存时间是无限的,所以,静态路由器无法发现和恢复掉线的路由器或链路。
运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista系统的IPv6协议的计算机可以配置为静态IPv6路由器。
10.3.1 动态路由概述
动态路由是能够根据网络拓扑的变更而自动更新路由表的路由条目。使用动态配置路由表的路由器称为动态路由器。动态路由器会通过路由器之间正在进行的通信来自动创建和维护自己的路由表。这些通信会使用路由协议,而路由协议会使用一系列周期性发送或按需发送的消息在路由器之间交换路由信息。除了初始配置外,动态路由器通常不需要实时维护,所以动态路由适用于大型网络。由于动态路由扩展性强,具有根据网络错误调整路由和从中恢复的能力,因此它是大中型网络和超大型网络的最佳选择。
动态路由器使用路由协议进行通信,并动态更新路由表。路由协议是在路由器之间进行使用的,因此会产生一些额外的流量负载。这些流量在规划WAN链路时会成为重要的要素。
IPv4中普遍使用的路由协议有路由信息协议(Router Information Protocol, RIP)、开放最短路径优先(Open Shortest Path First, OSPF)协议和边界网关协议(Border Gateway Protocol, BGP)。
对于网络协议的应用来说,发现网络错误并从中恢复的能力是一个重要因素。恢复速度取决于错误的类型、错误是如何发现的,以及路由信息是如何在网络中传播的。当网络中所有路由器的路由表中都具备了正确的路由信息时,网络就收敛了。当网络完成收敛时,网络就会处于稳定状态,所有路由选择都沿着最佳路径执行。
若某个链路或路由器失效了,网络就必须进行重新配置,以反映新的拓扑。因此,路由表中的信息就必须更新。在网络再次收敛之前,它都会处于不稳定状态,这种状态下有可能发生路由环路和路由黑洞。网络收敛所用的时间称为收敛时间。收敛时间根据路由协议和错误类型(链路掉线或路由器掉线)会有所不同。
与IPv4不同,Windows Server 2012、Windows Server 2008 R2和Windows Server 2008的路由和远程访问不支持任何IPv6路由协议。
10.3.2 路由协议技术
路由协议可以基于距离矢量、链路状态或路径矢量技术。
距离矢量
距离矢量路由协议以地址前缀加上自身“距离”(跳数)的形式公布路由信息。路由器可以使用基于路由矢量的路由协议,来周期性地通告自己路由表中的路由。在距离矢量路由器之间进行的路由信息交换是不同步的,而且无法进行确认。基于距离矢量的路由协议的优点是简单且易于配置,缺点是它们产生的网络流量相对较大,收敛时间相对较长,而且无法应用大型或超大型网络。
链路状态
使用基于链路状态的路由协议的路由器,会通过网络来交换链路状态通告(Link State Advertisement, LSA),并以此更新路由表。LSA中包含路由器所连接的网络的地址前缀,以及到达这些前缀的开销(cost)。路由器会在启动时和发现网络拓扑变更时通告LSA。它们会使用单播或组播流量来发送链路状态更新信息,而不会采用广播的形式。链路状态路由器会建立链路状态通告的数据库,并使用这个数据库计算出最佳路由,将其加入路由表中。在链路状态路由器之间进行的路由信息交换是同步,而且可以得到确认的。
基于链路状态的路由协议的优点是它们给网络增加的额外负载较少,收敛时间较短而且它们可以应用于大型和超大型网络,缺点是比较复杂且不易配置。
路径矢量
路由器可以使用基于路径矢量的路由协议以交换一系列跳数(例如自治系统数),以此标识路由经过的路径。自治系统是同一管理机构下的一部分网络。所有自治系统都会被分配一个唯一的自治系统标识符。在路径矢量路由器之间进行的路由信息交换是同步,而且可以得到确认的。基于路径矢量的路由协议的优点是它们给网络增加的额外负载较少,收敛时间较短而且它们可以适应含有多个自治系统的超大型网络,缺点是复杂且不易配置。
10.3.3 IPv6路由协议
在编写此书时,IETF已为IPv6定义了下列路由协议。
- IPv6 RIPng协议。
- IPv6 OSPF协议。
- IPv6集成的中间系统到中间系统(IS-IS)协议。
- BGP-4协议。
- IPv6 RIPng协议
下一代RIP(RIPng)是IPv6的一种距离矢量路由协议,该协议定义在RFC 2080中。RIPng协议用于通告IPv6网络前缀,是对RFC 1723定义的RIPv2协议的改进。IPv6 RIPng的数据包结构简单,它使用UDP端口521周期性地通告它的路由、响应路由请求,并异步地通告路由变更信息。
IPv6 RIPng的最大距离是15,15是累计开销(跳数)。距离为16或更远的节点会被判定为不可达。IPv6的RIPng协议是一种执行周期性路由通告机制的简单协议,适用于小型和中型的IPv6网络。IPv6的RIPng协议不适用于大型或超大型IPv6网络。
当IPv6的RIPng路由器启动后,它会在所有接口上通告路由表中的合适路由。IPv6的RIPng路由器同时会在所有接口上发送“通用请求”消息(General Request message)。所有邻居路由器则会发送它们路由表中的内容进行响应;所有的响应消息共同建立起最初的路由表。在IPv6 RIPng协议中,学来的路由条目默认有3分钟生存时间,超过生存时间后相应的路由条目会从IPv6路由表中移除。
在启动后,IPv6 RIPng路由器会在每个接口上周期性地通告(默认每30秒)路由表中合适的路由。其所通告的具体路由,取决于IPv6 RIPng路由器是否实施了水平分割(即路由器不会在自己学来路由条目的那个接口上通告这条路由条目)或毒性反向水平分割(即路由器会在自己学来路由条目的那个接口上将这条路由通告为不可达)。
RIP网络的容错能力是以IPv6所学路由的RIPng超时情况为基础。如果网络拓扑发生了改变,IPv6 RIPng路由器就会发送一个触发更新(立即发送的路由更新),而不是等待下一次的通告周期。
有关IPv6 RIPng的详细解释,请参见RFC 2080。
IPv6 OSPF协议
IPv6 OSPF协议(也称作OSPFv3)是一种链路状态路由协议,由RFC 2740定义。它是用于单个自治系统的路由协议。IPv6 OSPF是RFC 2328为IPv4定义的OSPF路由协议版本2的改进。每个路由器链路的OSPF开销是网络管理员分配的无单位的数字,它可以包含延迟、带宽和财政开支等因素。OSPF网络中的各个网络段间累计开销必须小于65535。OSPF消息作为上层PDU发送,其使用的下一头部值为89。
IPv6 OSPF相对OSPF版本2进行了如下改变。
- 对OSPF数据包结构进行了修改,使其不再依赖IPv4编址规则。
- 定义了新的能承载IPv6地址和前缀的LSA。
- OSPF可以在每个链路上运行,不再是在每个子网上运行。
- 扩大了LSA泛洪(flooding LSA)的范围。
- OSPF协议不再提供认证功能,而是依靠认证头部(AH)和封装安全负载(ESP)的头部与尾部。
每个路由器都有一个描述自身当前状态的LSA。通过相邻居路由器(称为邻接点)的逻辑关系,整个OSPF网络中高效地散播了每个IPv6 OSPF路由器的LSA。当所有当前路由器的LSA的泛洪都完成时,OSPF网络就收敛了。
根据OSPF LSA的汇总信息(称为链路状态数据库[LSDB]),OSPF可以计算出到达每个路由的最低开销路径,这些路径就成为IPv6路由表中的OSPF路由。为了减小LSDB,OSPF允许创建区域(area)。一个OSPF区域就是一组邻接的网络段。在所在的OSPF网络中,至少有一个区域称为骨干区域。OSPF区域允许汇总或聚合OSPF区域边界的路由信息。OSPF区域边界的路由器称为区域边界路由器(ABR)。
有关IPv6 OSPF更详细的解释,请参见RFC 2749。
IPv6集成的IS-IS协议
集成IS-IS(也称为双IS)协议是一种十分类似于OSPF的链路状态路由协议,该协议定义在ISO文档10589中。IS-IS支持IPv4和无连接网络协议(CLNP,即OSI协议栈中的网络层)。IS-IS允许两层分级扩展,而OSPF只支持一层(区域)。Internet草案“Routing IPv6 with IS-IS”(使用IS-IS的IPv6路由)对IPv6的集成IS-IS协议进行了描述。
有关IPv6集成IS-IS协议的详细解释,参见ISO 10589和Internet草案“Routing IPv6 with IS-IS”。
BGP-4
边界网关协议版本4(BGP-4)是一种路径矢量路由协议,该协议定义在RFC 4271中。IPv6 RIPng和IPv6 OSPF都是用于单个自治系统之内,而BGP-4与它们不同,它用于在自治系统之间交换信息。BGP-4路由信息会被用来创建一个描述所有自治系统之间的连接的逻辑路径树,然后用路径树的信息在BGP-4路由器的路由表中创建一个无环路的路由。BGP-4消息会使用TCP端口179进行发送。BGP-4是用于维护IPv4互联网路由表的主要域间协议。
根据定义,BGP-4独立于那些用于传播路由信息的地址族。根据RFC 2545和4760的描述,经过扩展的BGP-4已经能够支持IPv6地址前缀。有关IPv6 BGP-4的详细解释,请参见RFC 4271、2545和4760。