目录
5.1 NDP概念
IPv6的ND协议实现了IPv4中的一些协议功能,如 ARP、ICMP路由器发现和ICMP 重定向等,并对这些功能进行了改进。同时,作为IPv6的一个基础性协议,ND协议还提供了其他许多非常重要的功能,如前缀发现、邻居不可达检测、重复地址检测、无状态地址自动配置等,如图 5‑1 ND协议功能组成所示。
图 5‑1 ND协议功能组成
图 5‑1 ND协议功能组成提到的术语、概念解释如下。
- 地址解析:地址解析是一种确定目的节点的链路层地址的方法。ND中的地址解析功能不仅替代了原IPv4中的ARP协议,同时还用邻居不可达检测(NUD)方法来维护邻居节点之间的可达性状态信息。
- 无状态地址自动配置:ND协议中特有的地址自动配置机制,包括一系列相关功能,如路由器发现、接口 ID自动生成、重复地址检测等。通过无状态自动配置机制,链路上的节点可以自动获得IPv6全球单播地址。
- 路由器发现:路由器在与其相连的链路上发布网络参数信息,主机捕获此信息后,可以获得全球单播IPv6地址前缀、默认路由、链路参数(链路MTU)等信息。
- 接口 ID 自动生成:主机根据EUI-64规范或其他方式为接口自动生成接口标识符,注意EUI-64方式的前缀长度必须小于等于64,否则不会自动生成地址。
- 重复地址检测(DAD:根据前缀信息生成IPv6地址或手动配置IPv6地址后,为保证地址的唯一性,在这个地址可以使用之前,主机需要检验此IPv6地址是否已经被链路上其他节点所使用,类似于IPv4中无故ARP。
- 前缀重新编址:当网络前缀变化时,路由器在与其相连的链路上发布新的网络参数信息,主机捕获这些新信息,重新配置前缀、链路MTU等地址相关信息。
- 路由器重定向:当在本地链路上存在一个到达目的网络的更好的路由器时,路由器需要通告节点来进行相应配置改变。
NDP整合了 IPv4中的ARP、ICMP重定向、ICMP路由器发现,并且进行了改进。 NDP协议工作会使用如下几个地址。
- 未指定地址:表示发送者暂时无地址。
- 链路本地地址:只在链路范围内的单播地址。
- FF02::1 (所有节点组播地址):到本链路范围内的所有节点地址。
- FF02::2 (所有路由器多播地址):到本链路范围内的所有路由器地址。
- 被请求节点组播地址:由固定前缀FF02::1:FF00:0/104和单播地址的最后24位组成。
5.2 NDP协议报文
在 IPv4的地址解析中,ARP报文直接封装在以太帧中,其以太网协议类型为0x0806, 代表ARP报文。ARP被看做是工作在2. 5 层的协议。而 ND协议本身基于ICMPv6实现,因此ND协议是在第三层上实现的。ND协议报文的以太网协议类型为0x86DD,即 IPv6报文。IPv6的下一个报头协议类型为58,表示是 ICMPv6报文。上述两者的对比如图 5‑2 ARP与NDP协议报文分装所示。
图 5‑2 ARP与NDP协议报文分装
ND协议定义了 5 种 ICMPv6报文类型,包括 RS、RA、NS、NA 和 Redirect报文,如图 5‑3 ICMPv6报文类型所示。
图 5‑3 ICMPv6报文类型
其中:
- NS/NA报文主要完成地址解析、DAD和NUD三个功能;
- RS/RA报文主要完成路由器发现、前缀重新编址等;
- Redirect报文用于路由器重定向。
5.2.1 RS消息
当主机刚刚接入网络并使能IPv6协议栈,主机需要自动获得前缀、前缀长度、 默认网关等信息时,就会发送RS消息。源IP是发送接口的Link Local地址或者未指定地址,目的地址是FF02::2,路由器收到RS消息后立刻回送RA消息给主机,在 RA消息中有主机想要的单播地址的前缀及前缀长度等信息。
图 5‑4 RS消息报文格式
如图 5‑4 RS消息报文格式所示。
- Type: 8 bit,值为 133。
- Code: 8 bit,值为 0。
- Checksum: 16bit, ICMPv6校验和,用于验证IPv6报头的完整性。 Reserved: 32bit,保留为 0。
- Options:选项,目前只定义了一个,包含发送者的链路层地址,如果源地址为未指定地址,则RS消息中不能包含此选项。
5.2.2 RA消息
RA消息由路由器周期性地发送,或者在收到主机发送的RS消息后立刻发送,主要为主机提供编址信息以及其他配置信息。该消息的源IP是路由器发出消息接口的Link Local 地址,目的地址是FF02::1。
图 5‑5 RA消息的格式
如图 5‑5 RA消息的格式所示。
- Type: 8bit,值为 134。Code:8 bit,值为0。
- Checksum: 16bit,ICMPv6 校验和,用于验证 ICMPv6 报头。
- Cur Hop Limit: 8 bit,表示主机跳数限制,路由器建议采用无状态自动配置的主机在IP包的跳数限制在该字段中的值,该值为0 时表示路由器不推荐跳数限制值,由主机自己设置各自的跳数限制值。
- M位:1bit,管理地址配置位,该位置0 表示使用无状态自动配置;置 1表示告诉主机使用DHCPv6服务器来获取配置信息,当置1时O位无意义,因为所有参数都可以通过DHCPv6获得。
- O位:1bit,表示其他配置标志位,该位置0 表示DHCPv6服务器没有其他可用信息。该位置1时,其他参数使用DHCPV6服务器获得,包括路由器生存时间、邻居可达时间、邻居的重传时间、链路的MTU信息和DNS相关信息等。
- Reserverd:保留字段,6 bit,该字段未使用。
- Router Lifetime: 16bit,与默认路由器关联的生存时间,以秒为单位,最大为65535。 缺省情况下为1800s。该值表示主机把该路由器作为默认网关的有效时间。收到等于 0 的RA消息时,主机不会将通告该RA消息的源路由器配置为自己的默认网关。主机在每次收到RA消息时,都会刷新此计时器。
- Reachable Time: 32 bit,以毫秒为单位,表示通告邻居的可达时间,用作邻居不可达检测,为0 表示未指定。
- Retrans Timer: 32bit,重传计时器,以毫秒为单位,表示主机在重传邻居请求消息前应该等待的时间,为0表示未指定。该字段一般用作地址解释和邻居不可达性检测。
- Options:可能包含的选项有发送RA消息的路由器的链路层地址、MTU、前缀信息。
说明:如果M位和O位标记位不设置,那么就表示无法通过DHCPv6服务器获取配置信息。
5.2.3 NS消息
当节点不知道目标地址的链路层地址时,将发送NS消息。此时NS消息的源地址是发送接口的global地址或者链路本地地址,目标地址是被访问的地址所对应的被请求节点组播地址。此消息中包含发送端的链路层地址,作用类似于ARP功能,这里的链路层地址一般是指以太网的MAC地址。
此外,NS还可以用来检测邻居的可达性和进行重复地址检测,当节点需要验证邻居的可达性时,将发送单播的NS消息;在DAD (重复地址检测)过程中,源地址为未指定地址。
图 5‑6 NS消息格式
如图 5‑6 NS消息格式所示。
- Type:8bit,值为 135。
- Code:8bit,值为 0。
- Checksum:16bit, ICMPv6 校验和,用来验证 ICMPv6 报头。
- Reserved:32bit,该字段未使用,保留为0。
- Target Address:128bit,请求的目标设备的IPv6地址,该字段不能使用组播地址。
- Options:选项,发送者的链路层地址。当源IP地址是未指定地址时不能包括此选项。在有IPv6地址的链路层上,必须包含此选项。
5.2.4 NA消息
当节点接受到NS消息后,会快速响应NA消息(作用类似于ARP解析),或者当节点需要快速传播新的信息 (非请求)时,也会发送NA消息(作用类似于无故ARP)。对于收到NS后回复的NA消息是以单播的形式发送的,源 IP是被访问的IP地址,目的IP是NS消息中的源地址;如果收到的NS消息中的源地址是未指定地址,则NA消息的目的地址为所有节点的组播地址(DAD过程)。
图 5‑7 NA消息格式
如图 5‑7 NA消息格式所示。
- Type: 8 bit,值为 136。 Code: 8bit,值为 0。
- Checksum: 16bit, ICMPv6校验和,用于验证ICMPv6的报头。
- R 位:1bit,路由器标记位,置 1表示该节点为路由器,在邻居不可达检测中检测路由器是否变成主机。
- S 位:1bit,请求标记位,置 1表示该NA消息是收到NS消息后的回应。S 位在邻居可达性检测时被用作可达性确认。
- O位:1bit,替代标记位,置 1表示需要替代当前已缓存的IPv6地址的链路层地址, 从而更新邻居缓存表项。如果置0 ,则表示该NA消息不更新现有的链路层地址,如果没有相应的链路层地址,则添加新的表项。
- Reserved: 29bit,该字段未使用,保留为0。
- Target Address: 128bit,如果用作NS回应的NA 消息,此字段应该是收到NS消息中的Target Address字段的值,对于非响应的NA消息,此字段应该是链路层地址发生变化的IPv6地址。
- Options:选项,包含此NA消息发送者的链路层地址,对于回应组播NS请求的NA消息必须包含此选项,对于回应单播NS请求的NA消息可以不包含此选项,因为单播NS请求的发送者有正确的链路层地址。
5.2.5 重定向消息
如图 5‑8 重定向消息格式所示。
- Type: 8bit,值为 137。 Code: 8bit,值为 0。
- Checksum: 16bit, ICMPv6 校验和,用于验证 ICMPv6 报头。
- Reserved: 32bit,该字段未使用,保留为0。
- Target Address:是通知到主机的最优下一跳路由器,必须是该下一跳路由器的link local地址;当目的地是邻居时,Target Address必须是Destination A ddress,否则是重定向后的下一跳路由器地址。
- Destination Address:需要被重定向的目的地址。
- Options:选项,包含目标地址(重定向后使用的下一跳路由器)的链路层地址。路由器可以通过ICMPv6重定向消息通知主机,在去往目的地址的路径上有更优的 一跳,主机发出的数据包能被重定向到更好的下一跳路由器,也可以用于通知目标地址就是邻居。
重定向消息的源地址是发送接口的链路本地地址,目的地址是触发此重定向报文的源地址。
5.3 地址解析
5.3.1 代替ARP
地址解析是指使用NS和NA消息来完成IPv6地址到链路层地址映射的过程,该过程类似于IPv4中的ARP,如图 5‑9 ND地址解析所示。 PC1准备访问PC2之前,首先在本地邻居表中查找PC2 IPv6地址对应的以太网MAC地址,如果查找到相关表项,则将发往PC2的数据包封装在以太数据帧中然后发出;如果没有找到PC2的MAC地址,则发送NS消息用来请求其链路层地址,该NS消息源地址是发送接口的global地址或者链路本地地址,目标地址是被访问的地址所对应的被请求节点组播地址。
拓展思考:
- PC1 如何判断本次通信为二层还是三层?
- PC1 和 PC2 通过 DHCPv6 获取到地址,且没有 fe80::2023:2:11:ffff 的网关地址和2023:2:11::/64 的路由,是否实现通信?过程如何?
- PC1 和 PC2 通过 DHCPv6 获取到地址,且通过 RA 报文获取到 fe80::2023:2:11:ffff 的网关地址,但是没有 2023:2:11::/64 的路由,是否通信?过程如何?
- PC1 地址为2023:2:11::1/64,PC2 地址为 2024:2:11::1/64,且 PC1 存在 2024:2:11::/64的路由,PC2 存在 2023:2:11::/64,此时 PC1 和 PC2 在没有网关地址的情况下能否实现通信?过程如何?
如图 5‑9 ND地址解析所示的网络环境中PC1的global为2023:2:11::1,Link-Local地址为fe80::227b:d2ff:fe73:c1c;PC2的global地址为:2023:2:11::2,Link-Local地址为fe80::fe34:97ff:fe68:5511 。
图 5‑9 ND地址解析
第 1步:PC1准备访问PC2之前,在邻居表中查找PC2 IPv6地址对应的以太网MAC地址,如果查找到相关表项,没有找到PC2的MAC地址,则发送NS消息用来请求其链路层地址,如图 5‑10 电脑查看IPv6邻居所示,命令:netsh interface ipv6 show nei "7" ,“7”为接口编号。
图 5‑10 电脑查看IPv6邻居
第2步:如图 5‑11 PC1向PC2的请求节点的组播地址发送NS消息所示,该消息是通过类型为135的 ICMPv6报文来承载,上层报文中目标地址是PC2的 IPv6单播地址。
图 5‑11 PC1向PC2的请求节点的组播地址发送NS消息
第 3 步:如图 5‑12 PC2收到NS消息后,以单播的方式向PC1回应NA消息所示,该消息中包含了 PC2的MAC地址。
图 5‑12 PC2收到NS消息后,以单播的方式向PC1回应NA消息
如图 5‑13 PC2的邻居缓存表所示,PC2还会将PC1的IPv6地址和MAC地址对应关系添加至本地的邻居缓存表中。
图 5‑13 PC2的邻居缓存表
第 4 步:如图 5‑14 PC1的邻居缓存表所示,PC1收到来自PC2的NA消息后,将 PC2的 IPv6地址以及它的MAC地址添加至本地的邻居缓存表中,并且分装数据包,如图 5‑15 R1封装的PING包所示。
图 5‑14 PC1的邻居缓存表
图 5‑15 R1封装的PING包
如图 5‑11 PC1向PC2的请求节点的组播地址发送NS消息所示,PC1的NS报文是发送到一个组播IPv6地址,这个地址我们称为请求节点组播地址。一个IPv6接口会通过自动映射技术为自己的每个单播地址(包括链路本地地址)创建一个请求节点组播地址。该地址由固定的前缀加上IPv6单播地址的最后24bit 位构成,前缀是 FF02:0:0:0:0:1:FF00::/104。 PC2 的 IPv6 地址是 2023:2:11::2/64,它的最后24位为00:0002,加上前缀,它的请求组播地址为FF02:0:0:0:0:1:FF00::2。当PC2接收到这份NS报文后,识别目的IPv6地址是自己接口的请求组播地址,因此会接收和处理该数据包,并且给予NA报文响应。
在现实网络中,有可能存在IPv6地址最后24比特和PC2相同的的设备,同时二层数据帧的目的MAC地址前十六位为固定的十六进制3333,然后再加上IPv6组播地址的低32位,构成了48位MAC地址。当这些设备接收到PC1的NS报文时,根据ICMPv6报文中的Target address来辨别该报文是否是发给自己的。也就是说,即使同个局域网中有多台设备的单播IPv6地址最后24比特位相同,也不会影响地址解析的进程,因为Target address中携带了被请求节点的IPv6地址,即PC2的global地址2023:2:11::2,其余和PC2最后24比特相同的主机收到该NS消息解封装后,发现Target address字段的地址不是自己,因此不会在处理该NS消息。
5.3.2 NUD (邻居不可达性检测)
IPV6的邻居表相较于IPV4的arp表有很大的不同,IPV6的邻居表反映了邻居也就是表象的状态;IPV4是通过老化时间维护ARP表的,如果某台主机离线,但是我的arp表中针对该主机的表象尚未老化,那么此时我仍然能给主机发送数据包,造成资源和带宽的浪费;IPV6通过NUD这个机制针对IPV6邻居表中的表象进行维护,在发送数据包之前我通过NS/NA报文来确认一下,IPV6邻居表的邻居是否仍然存在,避免资源的浪费;
邻节点不可到达检测方法有2种:
- 通过发送单播邻节点请求报文和接收响应请求的邻节点公告报文来完成。
- 借助上层协议确定可达性。(TCP)
RFC4861定义了5种邻居状态,NUD利用这些状态和状态间的切换来检测和解析邻居的可达性。
- Incomplete(未完成状态):表示解析还在进行,本机已发出NS,还未收到NA;
- Reachable(可达状态):本机已收到对方的NA,获得对端的链路层地址;
- Stale(过期状态):邻居可达时间超时,表示未知是否可达。或者收到了邻居的非请求NA,携带的链路层地址和本地表项的地址不一致,该邻居立即变为Stale;
- Delay(延迟状态):Delay不是一个稳定的状态,而是一个延时等待状态,当向Stale状态的邻居发送报文时,该邻居变为Delay状态,并发送NS消息;
- Probe(探测状态):节点向处于Probe状态的邻居持续发送单播NS报文,如持续收不到NA回应,将删除表项,如收到NA,邻居变为Reachable;
- Empty(空闲状态):表示节点上没有相关邻居缓存表项。
如图 5‑16 邻居不可达性检测的NS/NA报文,SIP和DIP都是单播。
图 5‑16 邻居不可达性检测的NS/NA报文
以图 5‑17 邻居状态变迁过程为例,路由器2023:2:11:FFFF要访问PC1,路由器的缓存中无 PC1 的邻居信息。在路由器上开启debug ipv6 nd,结合debug信息分析邻居状态变迁的过程。
图 5‑17 邻居状态变迁过程
- 路由器先发送 NS,并生成缓存条目,状态为 Incomplete;
- 若PC1回复 NA,则 Incomplete->Reachable,否则 10s 后 Incomplete->Empty,即删除条目;
Nov 4 2023 23:43:56 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Try to create dynamic neighbor 2023:2:11::1%0 on vlan10 in vrf 0
Nov 4 2023 23:43:56 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: New neighbor's dependentroute is 2023:2:11::/64
Nov 4 2023 23:43:56 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Dependent route cache does not exist, will allocate
Nov 4 2023 23:43:57 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Sending NS on vlan10, dad=0
Nov 4 2023 23:43:57 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Sending NS to ff02::1:ff00:1 on vlan10
Nov 4 2023 23:43:57 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Receive NA from 2023:2:11::1 to fe80::2023:2:11:ffff on vlan10
Nov 4 2023 23:43:57 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: get link-layer information: vlan id 0, svlan id 0, ag 0, flags 0
Nov 4 2023 23:43:57 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: nd6_na_input INCOMP -> REACH: 2023:2:11::1
- 经过 Reachable Time(默认30s),路由器关于PC1的条目状态 Reachable->Stale;
Nov 4 2023 23:44:21 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: REACH -> STALE: 2023:2:11::1
- 或者在 Reachable 状态,收到PC1的非请求NA,且链路层地址不同,则马上->Stale,类似于免费ARP;
- 在 Stale 状态若路由器要向PC1发送数据,比如路由器ping PC1,并从 Stale->Delay,同时发送NS请求;
- 在 Delay_First_Probe_Time(默认5秒)内,若有 NA 应答或者应用层的提示信息,则 Delay->Reachable;无应用层提示信息,Delay->Probe;
Nov 4 2023 23:44:59 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: DELAY -> PROBE: 2023:2:11::1
Nov 4 2023 23:44:59 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Sending NS on vlan10, dad=0
Nov 4 2023 23:44:59 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Sending NS to 2023:2:11::1 on vlan10
Nov 4 2023 23:44:59 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Receive NA from 2023:2:11::1 to 2023:2:11::ffff on vlan10
Nov 4 2023 23:44:59 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: nd6_na_input PROBE -> REACH: 2023:2:11::1
- 在Probe状态,每隔Retrans Timer(默认1秒)发送单播NS,发送 MAX_UNICAST_SOLICIT(缺省3个)个后再等 Restrans Timer,有应答则->Reachable,否则进入 Empty,即删除表项。
5.4 无状态地址自动配置
IPv6同时定义了无状态与有状态地址自动配置机制。有状态地址自动配置使用 DHCPv6协议来给主机动态分配IPv6地址,无状态地址自动配置通过ND协议来实现。在无状态地址自动配置中,主机通过接收链路上的路由器发出的RA消息,结合接口的标识符而生成一个全球单播地址。
无状态地址自动配置的优点如下:
- 真正的即插即用。节点连接到没有DHCP服务器的网络时,无须手动配置地址等参数便可访问网络。
- 网络迁移方便。当一个站点的网络前缀发生变化,主机能够方便地进行重新编址而不影响网络连接。
- 地址配置方式选择灵活。系统管理员可根据情况决定使用何种配置方式-有状态、无状态还是两者兼有。
无状态自动配置涉及3 种机制:路由器发现、DAD检测和前缀重新编址。路由器发现可以使节点获得链路上可用的前缀及路由器信息;DAD检测保证了配置的每个IPv6地址在链路上的唯一性;前缀重新编址则是在前面两个机制的基础上,重新通告前缀,完成网络前缀的切换。
5.4.1 路由器发现
路由器发现是指主机怎样定位本地链路上的路由器和确定其配置信息的过程,主要包含以下3方面的内容。
- 路由器发现(Router Discovery):主机发现邻居路由器以及选择哪一个路由器作为默认网关的过程。
- 前缀发现(Prefix Discovery): 主机发现本地链路上的一组IPv6前缀,生成前缀列表。该列表用于主机的地址自动配置和on-link判断。
- 参数发现(Parameter Discovery): 主机发现相关操作参数的过程,如链路最大传输单元(MTU)、报文的默认跳数限制(Hop Limit)、地址配置方式等信息。
在路由器通告报文RA中承载着路由器的相关信息,ND协议通过RS和 RA 的报文交互完成路由器发现、前缀发现和参数发现三大功能。协议交互主要有两种情况:主机请求触发路由器通告和路由器周期性发送路由器通告。
当主机启动时,会向本地链路范围内所有的路由器发送RS报文,触发链路上的路由器响应RA报文。主机接收到路由器发出的RA报文后,自动配置默认路由器,建立默认路由器列表、前缀列表和设置其他的配置参数。
图 5‑18 路由器发现示例图
如图 5‑18 路由器发现示例图所示,其中 PC1的链路层地址为20-7B-D2-73-0C-1C,链路本地地址为fe80::227b:d2ff:fe73:c1c;路由器的链路层地址为0001.7a92.f709,链路本地地址为fe80::2023:2:11:ffff。
PC1以自己的链路本地地址fe80::227b:d2ff:fe73:c1c作为源地址,发送一个RS报文到所有路由器的组播地址FF02::2,如图 5‑19 PC1发送的RS报文示例所示。
图 5‑19 PC1发送的RS报文示例
路由器收到该报文后 ,用它的链路本地地址fe80::2023:2:11:ffff作为源地址,发送 RA 报文到所有节点的组播地址FF02::1,如图 5‑20 路由器回复的RA报文示例所示。PC1从而获得了路由器上的相关配置信息,且将路由器发送RA报文的源地址(fe80::2023:2:11:ffff)作为网关地址使用。
图 5‑20 路由器回复的RA报文示例
注意:为了避免链路上有过多的RS报文泛滥,启动时每个节点最多只能发送 3 个RS报文。
路由器周期性发送路由器通告
路由器周期性地发送RA报文,使主机节点发现本地链路上的路由器及其配置信息,主机节点根据这些内容来维护默认路由器列表、前缀列表和配置其他参数。
图 5‑20 路由器回复的RA报文示例所示,路由器用它的本地链路地址fe80::2023:2:11:ffff作为源地址 ,所有节点的组播地址FF02::1作为目的地址,周期性(华为设备发送间隔是一个有范围的随机值,缺省的最大时间是600秒,最小时间是200秒)地发送 RA报 文,通告自己的前缀(2023:2:11::/64)等配置信息。然后,监听到该消息的PC 1和PC2可以据此配置自己的IPv6全球单播地址。
路由器可通过以下参数调整RA消息的周期时间。
5.4.1.1 IPv6地址多样性
经上述主机请求触发路由器通告,如图 5‑21 IPv6地址多样性示例所示。IPv6地址与IPv4地址除格式不同外,IPv6地址的多样性和源地址选择的复杂性也远远超过IPv4。IPv4地址要么是手动静态配置,要么是通过DHCP分配,二者只能选其一。
IPv6的地址可以是手动静态配置、可以是SLAAC(可能还存在公用地址和临时地址)、还可以是有状态DHCPv6配置,同时还存在链路本地地址,关键是这些类型的IPv6地址可以在一台IPv6设备上同时存在。这样算来,一台IPv6设备最多会同时存在5种类型的IPv6地址。假如这些类型的IPv6地址中有多种类型同时存在,那么在设备访问外部网络时,源IPv6地址默认选择的是哪一类的IPv6地址呢?
图 5‑21 IPv6地址多样性示例
- 无静态网关时IPv6地址的优先性
临时IPv6>公用IPv6>手动静态配置IPv6(DHCPv6不能早于静态配置,否则DHCPv6优先)>DHCPv6
- 有静态网关时IPv6地址的优先性
临时IPv6>手动静态配置IPv6(DHCPv6不能早于静态配置,否则DHCPv6优先)>DHCPv6>公用IPv6。
5.4.1.2 禁止随机化标识符
经过上述主机请求触发路由器通告,如图 5‑22 PC1的网卡信息所示。
图 5‑22 PC1的网卡信息
如上所示,PC1的物理地址为20-7B-D2-73-0C-1C,但是可以发现其IPv6地址显示,似乎没有按照EUI-64生成?
这是因为WIN10电脑关于IPv6的链路本地地址具备同IPv4中的随机mac类似功能,为了隐私和安全WIN10电脑默认使能了“随机化标识符功能”,该功能避免通过IPv6地址可以反推出设备的mac,反之亦然。查看命令:netsh interface ipv6 show global,如图 5‑23 随机化标识符功能下:
图 5‑23 随机化标识符功能
可以通过命令:netsh interface ipv6 set global randomizeidentifiers=disable和netsh interface ipv6 set global store=persistent禁用,调整后如图 5‑24 PC1按照EUI-64生成的IPv6地址所示。
图 5‑24 PC1按照EUI-64生成的IPv6地址
5.4.1.3 禁止系统临时地址
Windows主机上无论是DHCPv6、手动或者是无状态自动获取地址后,默认都会产生临时地址, 而且随着主机开机时间的增加,临时IPv6地址有可能还会增加,主机在与外界通信时也总是最优先使用最近生成的临时地址。
在Win10的命令提示符窗口执行netsh interface ipv6 show privacy命令,可以看到“使用临时地址”处于enable状态,如图 5‑25 netsh interface ipv6 show privacy所示。
图 5‑25 netsh interface ipv6 show privacy
要禁止Win10使用临时IPv6地址,有两种方法。
一种是在命令行窗口中执行命令netsh interface ipv6 set privacy state=disable store=persistent,其中,“store=persistent”表示修改永久有效(这是默认参数,可以不用输入),若仅是希望在下次重启前生效,可以使用参数“store=active”,命令如下:
netsh interface ipv6 set privacy state=disable store=persistent
netsh interface ipv6 set privacy state=disable store=active
另一种方法是使用PowerShell,即在PowerShell下执行Set-NetIPv6Protocol -Use Temporary Addresses Disabled命令。
如图 5‑26 PC1禁止临时地址后所示,重启计算机,或禁用网卡然后再启用(相当于网卡的重启),执行netsh interface ipv6 show interface命令,发现没有临时地址了。
图 5‑26 PC1禁止临时地址后
5.4.1.4 禁止公用地址
禁用临时地址后,除了DHCP的地址外,还有一个地址类型是公用的IPv6地址。此时,主机在与外界通信时使用公用地址。
关闭路由自动发现功能,即禁止接收RA报文,这样自然也就无法获得默认网关和RA报文中用于自动配置地址的前缀了,也就达到了只能手动配置地址,不能自动获得地址和默认网关的目的。如图 5‑27 关闭路由发现功能所示,关闭路由发现功能的命令是:
netsh interface ipv6 set interface "22" routerdiscovery=disabled
再次查看配置的地址和对应的接口,如下图所示。可以发现公用IPv6地址不见了。若要恢复自动配置地址功能,把参数disabled换成enable即可:
netsh interface ipv6 set interface "22" routerdiscovery=enable
图 5‑27 关闭路由发现功能
由上可知,关闭路由自动发现功能后,主机的默认网关就必须手动配置了,实际部署中尽量避免禁用该功能。
思考,在IPv6局域网DHCPv6部署中,如何在不禁用临时地址和公用地址的情况下,精简主机的IPv6地址?
5.4.1.5 SLAAC常用命令
本实验将演示在路由器上如下配置后,且Windows主机关闭临时地址和随机化标识。
Router(config)#interface vlan10
Router(config-if)#ipv6 enable
Router(config-if)#ipv6 address fe80::2023:2:11:ffff link-local
Router(config-if)#ipv6 address 2023:2:11::ffff/64
Router(config-if)#ipv6 nd ra interval 20 //默认RA通告时间为600s
Router(config-if)#ipv6 nd ra mtu //开启RA报文携带网关MTU参数
Router(config-if)#no ipv6 nd suppress-ra period //缺省情况下,接口上不会周期性发送RA报文
Router(config-if)#no ipv6 nd suppress-ra response //缺省情况下,接口收到RS报文,不回应RA报文
Router(config-if)#ipv6 address 2017::1/64
Router(config-if)#ipv6 address 2018::1/64
Router(config-if)#ipv6 address 2019::1/64
Router(config-if)#ipv6 address 2020::1/64
Router(config-if)#ipv6 address 2021::1/64
Router(config-if)#ipv6 address 2022::1/65
Router(config-if)#ipv6 nd prefix 2017::/64 no-advertise //不通告前缀
Router(config-if)#ipv6 nd prefix 2018::/64 3600 1800 off-link //前缀处于off-link状态(能获取地址,但是不加载路由)
Router(config-if)# ipv6 nd prefix 2019::/64 infinite infinite //有效寿命和首选时间均为永久
Router(config-if)#ipv6 nd prefix 2020::/64 3600 1800 no-autoconfig //前缀不用于自动配置(不能获取地址,但是能加载路由)
Router(config-if)#ipv6 dhcp server
默认情况下获取哪些IPv6地址,且默认网关如何选择,理解路由器无状态配置的相关命令。
- 如图 5‑28 通过ipcofig查看主机地址所示。
图 5‑28 通过ipcofig查看主机地址
- 如图 5‑29 通过netsh interface ipv6 show address查看主机ipv6地址所示。
图 5‑29 通过netsh interface ipv6 show address查看主机ipv6地址
- 如图 5‑30 通过netsh interface ipv6 show address rotue查看主机路由表所示。
图 5‑30 通过netsh interface ipv6 show address rotue查看主机路由表
- 如图 5‑31 路由器发送RA报文所示。
- 图 5‑31 路由器发送RA报文
- ipv6 nd prefix 2017::/64 no-advertise ,因此路由器不通告该前缀,如图 5‑31 路由器发送RA报文的RA报文中没有关于2017::/64的前缀信息;
- ipv6 nd prefix 2018::/64 3600 1800 off-link ,因此路由器正常通过RA报文通告2018::/64前缀,但是flag(L)字段置为0,故该前缀主机可以正常学习地址,但是不加载路由。如图 5‑32 flag(L)字段置为0的RA报文所示。
图 5‑32 flag(L)字段置为0的RA报文
- ipv6 nd prefix 2019::/64 infinite infinite,因此路由器正常通过RA报文通告2019::/64前缀,其flag(L)字段和其flag(A)置为1,因此主机可以正常学习地址和加载路由,且有效时间和首选时间为永久。如图 5‑33 flag(L)和(A)字段置为1的RA报文,且有效时间和首选时间为永久的RA报文所示。
图 5‑33 flag(L)和(A)字段置为1的RA报文,且有效时间和首选时间为永久的RA报文
- ipv6 nd prefix 2020::/64 3600 1800 no-autoconfig ,因此路由器正常通过RA报文通告2020::/64前缀,但是flag(A)字段置为0,故该前缀主机不学习IP地址,但是正常加载路由。如图 5‑34 flag(A)字段置为0的RA报文所示。
图 5‑34 flag(A)字段置为0的RA报文
- 2021::/64前缀路由器正常通过RA报文通告,flag字段和其余参数均默认,主机可以正常学习IPv6地址且可以加载路由。如图 5‑35 正常的RA报文所示。
图 5‑35 正常的RA报文
- 2022::/65前缀路由器正常通过RA报文通告,flag字段和其余参数均默认,但是由于前缀长度大于65,主机无法通过EUI-64方式生成地址,但是可以正常加载路由。如图 5‑36 前缀长度为65的RA报文所示。
图 5‑36 前缀长度为65的RA报文
5.4.2 DAD(重复地址检测)
DAD(Duplicate Address Detection,重复地址检测)是节点确定即将使用的地址是否在链路上唯一的过程。所有的IPv6单播地址,包括自动配置或手动配置的单播地址,在节点使用之前必须要通过重复地址检测,另如果一个接口配置了多个IPv6单播地址(包括链路本地地址或者全局单播地址),每个地址在使用之前都需要执行DAD的过程。
图 5‑37 重复地址检测过程示例
DAD机制通过NS和NA报文实现。DAD中节点所回应的NA报文的源地址为该节点的发送报文接口的链路本地地址,S请求标记置为0、0 覆盖标志置为1。
如图 5‑37 重复地址检测过程示例所示,分别依次将2023:2:11::12/64的地址配置给PC1、PC2和路由器,观察DAD检测过程。
1、PC1配置2023:2:11::12/64,进入Tentative生命期,且进行重复地址检测。
如图 5‑38 PC1发送的NS报文所示,其源地址为未指定地址,目的地址为接口配置的IPv6地址对应的被请求节点组播地址,NS报文的目标地址字段为待检测的这个IPv6地址(2023:2:11::12) 。
图 5‑38 PC1发送的NS报文进行DAD检测
在NS报文发送到链路上(默认发送一次NS报文)后,如图 5‑39 PC1规定时间内没有收到应答NA报文,发送NA报文,则认为这个单播地址在链路上是唯一的,可以分配给接口,且同时PC1发送NA消息告知网络中其他主机自己在使用该地址(该NA消息以2023:2:11::12为源,目的地址为ff:2::1,Target address为2023:2:11::12的地址,Target leayer-link address为PC1的MAC);
图 5‑39 PC1规定时间内没有收到应答NA报文,发送NA报文
2、PC2配置2023:2:11::12/64,进入Tentative生命期,且进行重复地址检测。
如图 5‑40 PC2发送的NS报文进行DAD检测,该过程同PC1类似。
图 5‑40 PC2发送的NS报文进行DAD检测
PC1收到PC2发送的NA报文,发现发现2023:2:11::12是自身正常使用的一个地址,那么PC 1会向All-Nodes组播组发送一个NA报文,该报文中Target Address为2023:2:11::12,如图 5‑41 PC2回复自身使用2023:2:11::12的NA报文所示。
图 5‑41 PC2回复自身使用2023:2:11::12的NA报文
PC2收到该NS报文后就放弃使用该地址,同时将2023:2:11::12显示为"复制",则证明地址冲突,如图 5‑42 终端地址冲突显示示例所示。
图 5‑42 终端地址冲突显示示例
3、路由器配置2023:2:11::12/64,进入Tentative生命期,且进行重复地址检测。
其过程同PC2重复地址检测类似,如下为路由器DAD过程的debug信息。
IPv6_Test_R_01(config-if-vlan10)# ipv6 address 2023:2:11::12/64
IPv6_Test_R_01(config-if-vlan10)#
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:vlan10: starting DAD for 2023:2:11::12
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: pfxlist_onlink_check.
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Received Nsm route notify type = 3
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Try to create local neighbor 2023:2:11::12%0 on vlan10 in vrf 0
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: New neighbor's dependentroute is 2023:2:11::12/128
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Dependent route cache does not exist, will allocate
Nov 5 2023 22:27:47 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: New neighbor mac 0001.7a92.f709
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Try to create dynamic neighbor ::%0 on vlan10 in vrf 0
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: New neighbor has not a correct dependent route
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Sending NS on vlan10, dad=1
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Sending NS to ff02::1:ff00:12 on vlan10
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-7:ICMPv6-ND: Receive NA from 2023:2:11::12 to ff02::1 on vlan10
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-4:Duplicate address 2023:2:11::12 on vlan10
Nov 5 2023 22:27:48 IPv6_Test_R_01 MPU0 %IPV6-7:vlan10: DAD detected duplicate IPv6 address 2023:2:11::12: NS in/out=0/1, NA in=1
在路由器上使用show ipv6 int vlan10命令查看显示。其中的DUP表示这个IPv6地址是重复的,且不被使用。如所示。
图 5‑43 路由器地址冲突显示示例
5.4.3 前缀重新编址
前缀重新编址(Prefix Renumbering)允许网络从以前的前缀平稳地过渡到新的前缀,提供对用户透明的网络重新编址能力。路由器通过RA报文中的优先时间和有效时间参数来实现前缀重新编址。
- 优先时间(Preferred Lifetime):无状态自动配置得到的地址保持优先选择状态的时间;
- 有效时间(Valid Lifetime):地址保持有效状态的时间。
对于一个地址或者前缀,优先时间小于或等于有效时间。该地址的优先时间到期时,该地址不能被用来建立新连接,但是在有效时间内,该地址还能用来保持以前建立的连接。
在前缀重新编址时,站点内的路由器会继续通告当前前缀,但是有效时间和优先时间被减小到接近于0值;同时,路由器开通新的前缀。这样,在每个链路上至少有两个前缀共存,RA消息中包含一个旧的和一个新的IPv6前缀信息。
收到RA消息后,节点发现当前前缀具有短的生命周期从而废止使用,同时得到新的前缀。节点基于新的前缀,配置自己的接口IPv6地址,并进行DAD检测。在转换期间,所有节点使用以下两个单播地址。
- 旧的单播地址:基于旧的前缀,用以维持以前已建立的连接。
- 新的单播地址:基于新的前缀,用来建立新的连接。
当旧的前缀的有效时间递减为0时,旧的前缀完全被废止,此时RA报文中仅包括新的前缀,前缀重新编址完成。
本实验主要演示IPv6通过RA消息重新编址过程,观察主机如何选择IPv6地址,主机替换地址的过程是否存在丢包,重新编址结束后旧的前缀,能否维持以前已建立的连接。
第一、路由器配置如下:
interface gigabitethernet0
media-type auto
ipv6 enable
ipv6 address 2021::1/64
ipv6 nd ra mtu
no ipv6 nd suppress-ra period
no ipv6 nd suppress-ra response
ipv6 nd prefix 2021::/64
exit
interface loopback0
ipv6 enable
ipv6 address 2022:6:28::1/64
exit
第二、如图 5‑44 查看主机正常获取IPv6前缀所示,通过EUI-64生成地址,且获取网关地址,且主机长ping 2022:6:28::1 -t 。
图 5‑44 查看主机正常获取IPv6前缀
第三、重新编制,路由配置如下:
ipv6 address 2022::1/64
ipv6 nd prefix 2022::/64 //通告新的前缀
ipv6 nd prefix 2021::/64 1800 60 //老前缀有效时间和优先时间被减小到接近于0值
第四、查看路由器发送的RA消息(注意,RA消息只能响应RS或者周期更新,不会触发更新),如图 5‑45 重新编址的RA消息所示。
图 5‑45 重新编址的RA消息
第五、查看主机重新编址后的地址表,如图 5‑46 netsh interface ipv6 show address所示。
图 5‑46 netsh interface ipv6 show address
第六、重新编址后,主机ping 2022:6:28::1 -t没有丢包,只是有一个报文的延迟较大,如图 5‑47 重新编址过程ping测所示。
图 5‑47 重新编址过程ping测
第七、如图 5‑48 重新编址的抓包所示,编号为1466的为路由器RA报文,主机通过RA消息获取到2022::/64的前缀后,生成地址进行DAD检测,如编号1489的NS报文。主机检测IPv6地址可用后,ping 2022:6:28::1 -t的源IPv6报文切换到2022::/64的,如编号1492的抓包。
图 5‑48 重新编址的抓包
第八、在路由器上ping主机2021::/64的地址,仍然可以通信。
Router#ping 2021::d9a1:fbee:4c12:73c2
Press key (ctrl + shift + 6) interrupt it.
Sending 5, 76-byte ICMP Echos to 2021::d9a1:fbee:4c12:73c2 , timeout is 2 seconds:
!!!!!
Success rate is 100% (5/5). Round-trip min/avg/max = 0/0/0 ms.
第九、待所有主机完成重新编址后,可在路由器上删除2021::/64相关配置,主机地址完成平滑切换。
5.4.5 接口ID自动生成
ND协议的无状态自动化配置包含两个阶段:链路本地地址的配置和全球单播地址的配置。
当一个接口启用时,主机首先会根据本地前缀FE80::/64和EUI-64接口标识符,为该接口生成一个本地链路地址,如果在后续的DAD检测中发生地址冲突,则必须对该接口手动配置链路本地地址,否则该接口将不可用。需要说明的是,一个链路本地地址的优先时间和有效时间是无限的,它永不超时。
若接口使能IPv6后,会默认生成EUI-64格式的Link-local地址,且此时配置接口IP自动生成后,会按照EUI-64生成接口IPv6地址,如下:
interface vlan4094
ipv6 enable
ipv6 address 2019::/64 eui-64
exit
show ipv6 interface vlan 4094
vlan4094 is down
VRF: global
IPv6 is enable, link-local address is fe80::0201:7aff:fe58:effe
Global unicast address(es):
2019::0201:7aff:fe58:effe,subnet is 2019::/64
省略
若接口使能IPv6后,且同时手动配置Link-Local地址,此时若配置了接口IP自动生成后,则会根据手动配置Link-local地址生成,如下:
interface vlan4094
ipv6 enable
ipv6 address fe80::2019 link-local
ipv6 address 2019::/64 eui-64
exit
show ipv6 interface vlan 4094
vlan4094 is down
VRF: global
IPv6 is enable, link-local address is fe80::2019
Global unicast address(es):
2019::2019,subnet is 2019::/64
省略
由此说明接口自动生成全球单播IPv6地址,是根据Link-Local地址生成,而非MAC地址转换的EUI-64格式。
5.4.6 地址的状态及生存周期
自动配置的IPv6地址在系统中有一个生存周期,在这个生存周期中,这个地址根据与优先时间和有效时间的关系 ,可以被划分为临时 (Tentative)、优先 (Preferred)、反对(Deprecated)和无效(Invalid)4种状态,如所示。
图 5‑49 地址状态与生存周期的关系
如图 5‑49 地址状态与生存周期的关系所示的优先时间和有效时间在RA报文的前缀信息选项字段中携带,时间轴起始点表示该IPv6地址初始生成的时间点。
- 临时状态
临时状态(Tentative State)位于优先时间的前阶段,此时节点获得的地址正处在DAD 检测过程中。节点不能接收发往处于临时状态的地址的单播报文,但可以接收并处理DAD检测过程中响应NS的 NA 报文。
- 优先状态
当地址的唯一性通过了 DAD检测后,就进人了优先状态(Preferred State)。在优先状态下,节点可以使用此地址接收和发送报文。
- 反对状态
当地址的优先时间耗尽后,地址就从优先状态变为反对状态(Deprecated State),反对状态居于有效时间的最后阶段。在反对状态中,协议不建议使用这个地址去发起新的通信,但现有的通信仍然可以继续使用反对状态的地址。
反对状态和优先状态合称为有效状态。只有在有效状态中,地址才可用于发送和接收单播数据报文。
- 无效状态
在有效时间耗尽后,地址进人无效状态(Invalid State),此时地址不能再用于发送和接收单播数据报文。
5.5 路由器重定向
路由器发送重定向消息需要满足以下规则:
- 检查收到数据包的源地址,是本设备的邻居表中的邻居;
- 下一跳的接口等于收到数据包的接口;
- 数据包的目的地址不是一个组播地址。
主机接收到的重定向消息必须满足以下条件,否则将被丢弃。
- 报文的源地址必须是一个link local地址。路由器必须使用它们的link local地址作为RA消息以及重定向消息的源地址,以便主机能唯一识别路由器。
- HOP LIMIT字段必须等于255 ,报文不可能被路由器转发。
- ICMP校验和有效。
- ICMP Code 必须是 0。
- ICMP报文的长度必须是40Byte或以上。
- 所有包含的选项长度必须大于0。
图 5‑50 ICMPv6重定向示例
如图 5‑50 ICMPv6重定向示例所示,PC1要访问目标地址2001::3,查找路由表,下一跳地址是2000::2 (R2),PC1会把数据包给到R2,当R2收到数据包后,发现去往2001::3的下一跳是fe80::3 (R3 ),并且数据包的进接口等于出接口,则向原报文的源IP 2000::1发送单播的重定向报文,告诉PC1去往2001:3的最优下一跳是FE80::3。以后PC1访问2001::3报文直接发给R3 ,而不会再发给R2。
图 5‑51 ICMPv6重定向报文
如图 5‑51 ICMPv6重定向报文所示,是 R2发送的重定向报文,其中,Destination Address表示需要被重定向的目的地址,Target Address表示去往目的地址的最优下一跳。
如图 5‑50 ICMPv6重定向示例所示,本实验主要演示主机使用下一跳全局可聚合单播地址,是否能实现重定向功能。
第一、如表 5‑1 路由器配置所示。
R2配置 | R3配置 |
interface vlan1 ipv6 enable ipv6 address fe80::2 link-local ipv6 address 2000::2/64 exit ipv6 route 2001::/64 2000::3 | interface vlan1 ipv6 enable ipv6 address fe80::3 link-local ipv6 address 2000::3/64 exit interface loopback0 ipv6 enable ipv6 address 2001::1/64 exit |
第二、如图 5‑52 主机配置静态地址以及网关所示。
图 5‑52 主机配置静态地址以及网关
第三、如图 5‑53 主机ipconfig查看所示,主机使用全球聚合单播地址作为默认路由的下一跳地址;
图 5‑53 主机ipconfig查看
第四、如图 5‑54 主机ping 2002::1和tracert -d 2001::1下,主机访问2001::1需要经过R2;
图 5‑54 主机ping 2002::1和tracert -d 2001::1
第五、此时如图 5‑55 主机关于重定向抓包信息所示,R2告诉主机到达2001::1需要经过FE80::1,而FE80::1为主机自己,因此主机查到路由信息去往2001::1需要经过R2。
图 5‑55 主机关于重定向抓包信息
第六、网关R2路由器接口开启RA消息通告功能,如下:
no ipv6 nd suppress-ra period
no ipv6 nd suppress-ra response
第七、主机通过RA消息学习到路由器的链路本地地址,如图 5‑56 默认网关有两个地址所示。
图 5‑56 默认网关有两个地址
第八、如图 5‑57 主机ping 2002::1和tracert -d 2001::1所示,主机访问2001::1仍然需要经过R2;
图 5‑57 主机ping 2002::1和tracert -d 2001::1
第九、此时如图 5‑58 主机关于重定向抓包信息所示,R2告诉主机到达2001::1需要经过FE80::1,而FE80::1为主机自己,因此主机查到路由信息去往2001::1需要经过R2。
图 5‑58 主机关于重定向抓包信息
第十、网关R2路由器关于2001::/64的路由使用本地链路地址作为下一跳,如下:
R2(config)#no ipv6 route 2001::/64 2000::3
R2(config)#ipv6 route 2001::/64 vlan 1 fe80::3
第十一、如图 5‑59 主机ping 2002::1和tracert -d 2001::1所示,主机访问2001::1仍然需要经过R2;
图 5‑59 主机ping 2002::1和tracert -d 2001::1
第十二、此时R2告诉主机到达2001::1需要经过FE80::3,但是主机的默认网关存在两个地址,分别是2000::2和FE80::2,主机任然选择2000::2出局,ICMPv6重定向失效,且通过netsh interface ipv6 show ne查看FE80::3为无法访问,如图 5‑60 主机查看邻居状态所示。
图 5‑60 主机查看邻居状态
第十三、如图 5‑61 主机删除静态网关2000::2的地址所示。
图 5‑61 主机删除静态网关2000::2的地址
第十四、如图 5‑62 主机ipconfig查看所示,主机使用Link-local作为默认路由的下一跳地址;
图 5‑62 主机ipconfig查看
第十五、如图 5‑63 主机ping 2002::1和tracert -d 2001::1所示,主机访问2001::1不需要经过R2;
图 5‑63 主机ping 2002::1和tracert -d 2001::1
第十六、如图 5‑64 通过netsh interface ipv6 show ne查看FE80::3所示。
图 5‑64 通过netsh interface ipv6 show ne查看FE80::3
总结
- 无论是路由器还是主机,路由若使用全球可聚合单播地址作为下一跳则重定向不会生效;
- 故动态路由协议使用链路本地地址交互路由信息,且下一跳地址均为链路本地地址;
- 静态路由条目若使用全球可聚合单播地址作为下一跳,则需要避免次优路径问题,否则重定向功能无法生效。
参考文献:
《红茶三杯笔记》
《非常网管IPv6网络部署实战》
《Cisco IPv6网络实现技术》
《H3C网络学院:IPv6技术》
《HCIE路由交换学习指南》
《路由技术IPv6版 [张国清 编著] 2014年版》
《Yealab_IPv6实验手册》
《迈普技术配置手册 》