本节书摘来自异步社区《深入解析IPv6(第3版)》一书中的第10章,第10.1节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

第10章 IPv6路由选择

在完成本章的学习之后,读者应该能够完成以下任务:

  • 描述IPv6路由表的内容;
  • 解释端到端的IPv6数据包的传输过程;
  • 理解IPv6网络中使用的动态路由选择和路由协议;
  • 描述Windows中IPv6支持的路由选择协议。

10.1 IPv6中的路由选择

与IPv4类似,典型的IPv6节点也会使用本地IPv6路由表来判断如何转发数据包。在初始化时,IPv6会自动创建默认路由表条目,它会根据静态配置,或者基于接收到的包含链路上前缀及路由的“路由器通告”消息,或者使用IPv6动态主机配置协议(DHCPv6)来添加条目。

运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista系统的IPv6协议的所有节点都有一个路由表。路由表中存储了有关IPv6地址前缀和如何到达它们(直接或者间接)的信息。在检查IPv6路由表之前,IPv6会在目的缓存中查找与正在转发的IPv6数据包中目的地址相匹配的条目。如果目的缓存中没有对应目的地址的条目,IPv6就会使用路由表来判断如下信息。

下一跳地址:对于直接传送(即目的地址在本地链路上的情形),下一跳地址就是数据包IPv6头部中的目的地址。对于间接传送(即目的地址不在本地链路上的情形),下一跳地址通常是邻居路由器的链路本地地址。
用于转发的接口(下一跳接口):下一跳接口标识了用于向目的(直接传送)或邻居路由器(间接传送)转发数据包的物理或逻辑接口。
在IPv6确定了下一跳地址和接口之后,就会在目的缓存中添加一个条目。如果路由表的内容没有改变,IPv6就会对去往该目的地址的后续数据包使用目的缓存中的条目进行转发,而不再查看路由表。

10.1.1 IPv6路由表条目类型
IPv6路由表条目通常会存储如下类型的路由。

直连子网或网络路由:直连子网或地址前缀的路由。子网路由的前缀长度是64位。网络路由对一些单播地址空间进行了汇总,其前缀长度小于64位。
远程子网或网络路由:非直连子网或地址前缀,但可以通过邻居路由器到达的路由。远程子网路由的前缀长度是64位。远程网络对一些IPv6地址空间进行了汇总,其前缀长度小于64位。例如远程网络路由fd9c:31f1:2a59::/48,这是聚集了某个机构站点内所有地址空间的唯一本地地址前缀的路由。
主机路由:到达特定IPv6地址的路由。主机路由允许针对每个具体的IPv6地址进行路由转发。对于主机路由,地址前缀是一个128位前缀长度的特定IPv6地址。
默认路由:该路由是对所有IPv6流量的汇总,当无法找到更精确的主机、子网或网络路由时,就会使用这个默认路由。默认路由地址前缀是::/0。
10.1.2 路由判断过程
为了判断使用路由表中的哪个条目来执行转发,IPv6路由器会执行如下过程。

1.对于路由表中的每个条目,将路由地址前缀中的位与目的地址中同样的位作比较,需要比较的位的个数已在路由的前缀长度指定。按照路由前缀长度指定的位数,如果地址前缀的所有位都与目的IPv6地址的所有位匹配,则该路由与目的相匹配。

2.编译匹配路由的列表,选择可用而且有前缀长度最长的路由,即与目的地址匹配了最多位数的路由。这个最长匹配路由就是到达目的的最确切路由。如果存在多个最长匹配路由(例如,到达同一个远程网络前缀的多个路由),则选择度量(metric)最小的路由。如果存在多个最长匹配和度量值最小的可用路由,IPv6则可以选择使用其中任意一个条目。RFC 4191描述了在多个匹配路由并且最小度量相同时,IPv6如何进行选择。

注释

这个过程与IPv4路由器用来判断最近匹配路由是同样的过程。
对任意给定目的地址,这个过程会按下述次序寻找匹配的路由。

1.匹配目的地址的主机路由(所有128位都匹配)。

2.匹配目的地址的子网路由(前64位匹配)。

3.拥有与目的地址最长匹配的前缀的网络路由(前n位匹配,n小于64)。

4.默认路由(地址前缀::/0)。

路由判断过程会在路由表中选择一条路由。选中的路由会产生一个下一跳地址和接口。如果路由判断过程无法在某个路由器上找到路由,IPv6就会向发送方主机发送一条ICMPv6目的不可达-无到达目的的消息,并丢弃该数据包。相反,如果发送方主机的路由判断过程没有找到路由,则IPv6就会声明出现了一个错误。

10.1.3 强主机行为和弱主机行为
在弱主机模式下,IPv6主机可以在没有分配要发送的数据包的源IPv6地址的接口上发送数据包。这就是弱主机发送行为。IPv6主机也可以在没有分配要接收的数据包的目的IP地址的接口上接收包。这就是弱主机接收行为。

在强主机模式下,发送和接收行为是不一样的。在强主机发送中,只有当一个接口上分配了要发送的数据包的源IPv6地址,主机才能在该接口上发送数据包。在强主机接收中,只有当一个接口上分配了要接收的数据包的目的IP地址,主机才能在该接口上接收数据包。

对于准备发送的包,IPv6会首先检查其是否已指定源地址。如果没有,IPv6则会在路由表中对目的地址进行非约束查找。在非约束查找中,路由表中的所有路由都会被考虑在内。接下来,IPv6会根据为该目的地址选中的路由来确定下一跳接口(用于把包放到链路层的接口)和下一跳地址。然后,根据下一跳接口,IPv6会视需要使用(RFC 3484定义的)地址选择过程来判断最佳的源地址。此时,IPv6就具备了发送数据包所需要的一切:源和目的地址、下一跳接口以及下一跳地址。

如果指定了源地址,则也就知道了源接口。源接口分配到了源地址。然后,IPv6会判断该源接口上是否启用了强主机发送。如果禁用了强主机发送,那么IPv6就会在路由表中对数据包的目的地址进行非约束查找。然后,IPv6会根据目的的最佳匹配路由判断出下一跳接口和下一跳地址。这样,IPv6就有了源和目的地址、下一跳接口以及下一跳地址。注意,当源接口上禁用了强主机发送行为时,下一跳接口可能和源接口不同。

如果源接口上启用了强主机发送,IPv6就会在路由表中对数据包的目的地址进行约束查找。在约束查找中,IPv6只会考虑那些拥有源接口的下一跳接口的路由。接下来,IPv6会根据为目的选中的路由判断出下一跳地址。这样,IPv6就有了源和目的地址、下一跳接口和下一跳地址。注意,当源接口上启用了强主机发送行为时,下一跳接口总是和源接口一样。若源地址已指定,则约束查找会选择一个和目的最匹配的、在路由表的众多路由器中有较高度量的路由。

运行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的计算机默认为发送IPv6包支持强主机模式。可以使用下述命令为发送IPv6包启用弱主机模式:netsh interface ipv6 set interface Interface NameOrIndex weakhostsend=enabled。对于运行Windows Server 2012或Windows 8的主机,也可以在Windows PowerShell命令行中使用命令Set-NetIPInterface -InterfaceAlias Name -Address Family IPv6 -WeakHostSend来启用弱主机模式。

10.1.4 Windows Server 2008和Windows Vista的IPv6路由表示例
可使用下列命令,来查看运行Window系统的计算机的IPv6路由表:

  • Get-NetRoute(Windows Server 2012或Windows 8);
  • netsh interface ipv6 show route(命令提示符);
  • route print(命令提示符)。
  • Get-NetRoute命令

下面是在一台运行Windows Server 2012的计算机上使用命令the Get-NetRoute –AddressFamily__IPv6 之后的显示示例:

ifIndex    RouteMetric    DestinationPrefix      NextHop    Store
-------    -----------    -----------------      -------    -----
12      256        ff00::/8          ::      Active
1      256        ff00::/8          ::      Active
12      256        fe80::c51d:624b:b276:6a03/128 ::      Active
12      256        fe80::/64          ::      Active
12      256        2001:db8::1:82e:9636:809e:2472/128 ::    Active
12      256        2001:db8::/64        ::      Active
1      256        ::1/128          ::      Active

在路由表中通过路由条目判断下一跳地址时,会执行以下行为。

如果路由表条目的下一跳字段为::,那么目的就是一台邻居设备,因而下一跳地址就会被设置为IPv6数据包的目的地址。
如果下一跳字段是一个地址(一台邻居路由器的地址),那么目的设备就在远端,下一跳地址就会被设置为下一跳字段中的那个地址。
无论是哪种情形,下一跳接口都是路由InterfaceAlias(接口别名)或InterfaceIndex(接口索引)字段的接口。

netsh interface ipv6 show route命令

下面是在一台运行Windows 7的计算机上使用命令netsh interface ipv6 show route之后的显示示例。该主机所在的子网有一台默认路由器,正在通告前缀2001:db8:21d0:3f48::/64和fd5e:2aa9: b3e:3f48::/64。

Publish  Type    Met  Prefix          Idx  Gateway/Interface Name
-------  --------  ---  ------------------------    ---  ------------------------
No    Manual  256  ::/0            8 fe80::69ee:7d26:3:fbec
No    Manual  256  ::1/128          1 Loopback Pseudo-Interface 1
No    Manual  8  2001:db8:21d0:3f48::/64    8 Local Area Connection
No    Manual  256  2001:db8:21d0:3f48:1b9:88d1:cf98:fcaf/128
8 Local Area Connection
No    Manual  256 2001:db8:21d0:3f48:b500:734b:fe5b:3945/128
8 Local Area Connection
No    Manual  8  fd5e:2aa9:b3e:3f48::/64    8 Local Area Connection
No    Manual  256  fd5e:2aa9:b3e:3f48:1b9:88d1:cf98:fcaf/128
8 Local Area Connection
No    Manual  256  fd5e:2aa9:b3e:3f48:b500:734b:fe5b:3945/128
8 Local Area Connection
No    Manual  256  fe80::/64          10 Teredo Tunneling Pseudo-Interface
No    Manual  256  fe80::/64          8 Local Area Connection
No    Manual  256  fe80::100:7f:fffe/128    10 Teredo Tunneling Pseudo-Interface
No    Manual  256  fe80::5efe:10.0.0.2/128    11 isatap.example.com
No    Manual  256  fe80::b500:734b:fe5b:3945/128 8 Local Area Connection
No    Manual  256  ff00::/8          1 Loopback Pseudo-Interface 1
No    Manual  256  ff00::/8          10 Teredo Tunneling Pseudo-Interface
No    Manual  256  ff00::/8          8 Local Area Connection

netsh interface ipv6 show route命令显示的IPv6路由表包含以下内容。

Publish(发布):该路由是否已发布(在路由通告消息中通告)。
Type(类型):路由的来源。
Met(度量):路由的优先级。最低度量的路由最优。这是用于在相同前缀的多个路由中进行选择的度量。
Prefix(前缀):路由的地址前缀。 - Idx(索引):路由中的接口索引,表示与地址前缀相匹配的数据包通过该接口可达。管理员可以使用命令netsh interface ipv6 show来查看接口索引。
Gateway/Interface Name(网关/接口名称):下一跳IPv6地址(远程路由)或Idx列表示的接口所对应的接口名称(直连路由)。

表10-1罗列出了上述示例所显示的路由,以及对每个路由的描述。



在路由表中判断从某路由出发的下一跳地址时,会发生下述情形。

如果路由表条目的网关/接口名称列中有接口名称,那么目的就是一台邻居设备,因而下一跳地址就会被设置为IPv6数据包的目的地址。
如果路由表条目的网关/接口名称列中有接口地址(邻居路由器的地址),那么目的设备就在远端,下一跳地址就会设置为网关/接口名称列中的那个地址。
无论是哪种情形,下一跳接口都是路由Idx列的接口。

例如,当此IPv6主机发送一个数据包到2001:db8:21d0:3f48:2aa:ff:fe90:4d3c,最长匹配路由是直连子网路由2001:db8:21d0:3f48::/64。因此下一跳地址就会被设置为目的地址2001:db8:21d0: 3f48:dd48:ab34:d07c:3914(目的),下一跳接口是对应接口索引8(名为Local Area Connection[本地区域连接]以太网网络适配器)的接口。当IPv6主机向地址2001:db8:21d0:a957: 2aa:ff:fe03:21a6发送流量时,最长匹配路由是默认路由(::/0)。下一跳地址设置为路由器地址fe80::69ee: 7d26:3:fbec,下一跳接口是对应接口索引8(本地区域连接)的接口。

route print命令

下面是在同一台运行Windows 7的主机(已删除IPv4的那部分路由表)上输入route print命令所显示的内容。

C:\Windows\system32>route print
===========================================================================
Interface List
8 ...00 12 3f 17 e0 cf ...... Broadcom NetXtreme 57xx Gigabit Controller
1 ........................... Software Loopback Interface 1
11 ...00 00 00 00 00 00 00 e0 isatap.{17940FE6-D6C7-4AF3-8B79-8BC68D192EB4}
10 ...02 00 54 55 4e 01 ...... Teredo Tunneling Pseudo-Interface
===========================================================================Table
===========================================================================
Active Routes:
If Metric Network Destination    Gateway
8  286 ::/0            fe80::69ee:7d26:3:fbec
1  306 ::1/128            On-link
8  38 2001:db8:21d0:3f48::/64    On-link
8  286 2001:db8:21d0:3f48:1b9:88d1:cf98:fcaf/128
On-link
8  286 2001:db8:21d0:3f48:b500:734b:fe5b:3945/128
On-link
8  38 fd5e:2aa9:b3e:3f48::/64    On-link
8  286 fd5e:2aa9:b3e:3f48:1b9:88d1:cf98:fcaf/128
On-link
8  286 fd5e:2aa9:b3e:3f48:b500:734b:fe5b:3945/128
On-link
8  286 fe80::/64            On-link
11  296 fe80::5efe:10.0.0.2/128   On-link
8  286 fe80::b500:734b:fe5b:3945/128
On-link
1  306 ff00::/8            On-link
8  286 ff00::/8            On-link
===========================================================================
Persistent Routes:
None

rouet print命令显示的IPv6路由表包含以下内容。

If:路由的接口索引:命令route print显示的Interface List(接口列表)部分中会列出接口索引。
Metric(度量):路由的优先级。最低度量的路由最优。这是用于在相同前缀的多个路由中进行选择的度量。
Network Destination(网络目的):路由的地址前缀。
Gateway(网关):下一跳IPv6地址(远程路由)或表示目的在链路上(直连路由)。

表10-2罗列出了上述示例所显示的路由,以及对每个路由的描述。



https://yqfile.alicdn.com/f85555562846ee2f007f9452902b37478f24eca3.png" >

《深入解析IPv6(第3版)》——第10章 IPv6路由选择10.1 IPv6中的路由选择相关推荐

  1. c语言5版第10章答案,第10章 指 针 参考答案 c语言(1)

    10.1 输入3个整数,按由小到大的顺序输出. 解:程序如下:(xt10-1.c) #include main() { intn1,n2,n3; int *p1,*p2,*p3; printf(&qu ...

  2. 数据结构与算法(C#版)第二章 C#语言与面向对象技术(中)V1.0

    由于本学期我给本科生上<数据结构与算法>这门课程,边上边把自己的教案进行总结,发到CSDN上面,希望大家多多指正. 第二章 C#语言与面向对象技术(中) 二.面向对象技术 1.类与对象 2 ...

  3. jBPM jPDL 用户开发手册 3.2.3 - 第10章

    第10章流程建模 10.1. 概述 流程定义代表业务流程的正式规范并且基于有向图.图由节点和转换组成.图中的每个节点指定类型.节点类型定义运行时行为.一个流程定义绝对有一个开始状态. 令牌(token ...

  4. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第10章-滤波器设计

    第3章 回到目录 第5章 第10章-滤波器设计 10.1 H∞H_\inftyH∞​ 滤波器设计 10.1 H∞H_\inftyH∞​ 滤波器设计

  5. 计算机绘图图层基本线性,计算机绘图基础-第10章 尺寸标注.ppt

    计算机绘图基础-第10章 尺寸标注 第10章 尺 寸 标 注 10.1 尺寸标注基础 10.1.1 尺寸标注的规则 10.1.2 尺寸的组成 10.1.3 尺寸标注的基本类型 AutoCAD提供了四种 ...

  6. 第10章 Linux的进程管理

    文章目录 文档配套视频讲解链接地址 第10章 进程管理 10.1 进程的理解与分类 10.2 进程管理命令 1. ps 查看进程命令 2. kill 杀死进程命令 3. pstree命令 4. top ...

  7. 【山外笔记-计算机网络·第7版】第10章:计算机网络重要概念

    本文下载地址: [学习笔记]第10章_计算机网络重要概念.pdf 教材:<计算机网络·第7版> 作者:谢希仁 时间:2020.04.17 第01章:计算机网络概述 1.计算机网络(可简称为 ...

  8. 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第10章  内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...

  9. 10-9-堆排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第10章  内部排序 - 堆排序 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码 ...

最新文章

  1. http https
  2. 《学得少考得好》读书笔记
  3. mysql+%3c%3e+cdata,bbed 使用实现 drop index 操作
  4. Java中的外观设计模式
  5. php 字符串 字典序序排序,C++ 怎么实现字典序排序法,自然排序
  6. 干掉MySQL:他们的MySQL分库分表架构,搞得太棒了!
  7. WSUS补丁服务器部署详细 利用WSUS部署更新程序
  8. windows+caffe(二)——图片转换为levedb格式
  9. 【081】◀▶ HTML CSS 学习
  10. 肖申克的救赎,阅后瞎想...(zz)写的不错
  11. 杭电计算机组成原理实践课 实验2 一位全加器构成的四位全加器
  12. unity3d脚本控制骨骼旋转
  13. 学习笔记 | 算法导论学习笔记1
  14. [内附完整源码和文档] 基于Java的人事档案管理系统
  15. java使用java.lang.Math类,生成100个0-99之间的随机整数,并找出它们中间的最大值和最小值,并统计大于50的整数的个数。打印3次运行结果,看是否相同。
  16. python画图函数
  17. 领导最不赏识这5类下属
  18. 坐标转换 | EXCEL中WGS84转GCJ02,并在地图上标注
  19. 51单片机点阵屏实现俄罗斯方块
  20. Android 朋友圈之多图显示

热门文章

  1. 超简单的H5input新属性调色器
  2. F. Function!
  3. BeautifulSoup解析爱丽丝梦游仙境网页小练习
  4. Photoshop根据图片模板批量生成动态图片
  5. iCloud是什么?iCloud怎么用?
  6. Excel如何生成随机数
  7. 微信老师发来的试卷文件怎么打印
  8. matlab单边带调幅系统的建模仿真(笔记)
  9. c语言五个数比较大小
  10. 三个朋友圈营销小技巧