第六章邻节点发现||||||||||||||||||||||||||||▍6.1邻节点发现的概述▉▍6.2邻节点发现报文格式▉▍6.3邻节点发现的选项▉…6.3.1源和目标的链路层地址选项…6.3.2前缀信息选项…6.3.3重定向报头选项…6.3.4MTU选项…6.3.5路由信息选项▍6.4邻节点发现的报文▉…6.4.1路由器请求…6.4.2路由器公告…6.4.3邻节点请求…6.4.4邻节点公告…6.4.5重定向…6.4.6邻接点发现报文和选项小结▍6.5邻节点发现的过程▉…6.5.1概念主机数据结构…6.5.2地址解析…6.5.3邻节点不可达性检测…6.5.4重复地址检测…6.5.5路由器发现…6.5.6重定向功能▍6.6主机发送算法▉▍6.7IPv4和v6的ND报文比较▉6.1邻节点发现(ND)概述||||||||||||||||||||||||||||IPv6中的ND用于确定邻节点之间的关系,它取代了IPv4中使用的地址解析协议(ARP)、以及ICMP中的路由器发现和重定向报文,还提供了额外的功能。▍IPv6中的ND包括以下内容:●路由器发现●前缀发现●参数发现●地址自动配置●地址解析●次跳选择●邻节点不可达检测●重复地址检测●重定向功能▍不同主体使用ND的不同操作节点使用ND主机使用ND路由器使用ND解析某个IPv6数据包发往的邻节点的链路层地址发现邻节点路由器通告自己的存在、主机配置参数、路由以及链路上的前缀确定邻节点的链路层地址发生改变的时间自动配置地址、地址前缀、路由以及其他配置参数提醒主机用于向特定目标转发数据报的更好次跳地址确定邻节点是否可达6.2邻节点发现报文的格式||||||||||||||||||||||||||||上一章节说到,邻节点发现是一个系列的5种ICMPv6报文,ND使用与ICMPv6相同的结构,并占用了ICMPv6的133到137的类型字段。ND报文由ND报文报头(包含ICMPv6报头和ND报文特定数据)和零或多个ND选项组成。IPv6报头下一报头=58(ICMPv6)邻节点发现报文报头(IPv6报头和ND特定数据)邻节点发现报文选项邻节点发现报文●路由器请求报文(ICMPv6类型133)●路由器公告报文(ICMPv6类型134)●邻节点请求报文(ICMPv6类型135)●邻节点公告报文(ICMPv6类型136)●重定向报文(ICMPv6类型137)ND报文选项提供了额外信息用于表示MAC地址链路上的网络前缀链路上的MTU信息重定向数据移动信息和特定的路由||||||||||||||||||||||||||||6.3邻节点发现的选项ND选项采用类型-长度-值(TLV)格式。如右图。其中长度字段表示整个选项的8字节块的块数,长度不定的值字段包含了选项的数据。其中8位的类型字段表示ND选项的类型。下表列举了多个RFC文档定义的ND选项类型:|||||||||||||||||||||||||||||||||||类型用于ND选项的TLV格式长度值…类型选项名称源文档1源链路层地址RFC4861(IPv6的邻接点发现)2目标链路层地址RFC48613前缀信息RFC48614重定向报头RFC48615MTURFC48617公告间隔RFC3775(移动IPv6)8本地代理信息RFC377524路由信息RFC4191(默认路由器优先级和更多特定路由器)||||||||||||||||||||||||||||6.3.1源和目标的链路层地址选项▌源链路层地址选项表示ND报文发送方的链路层地址。邻节点请求、路由器请求和路由器公告报文中都有该选项。当ND报文的源地址是未指定地址(::)时,不会包含该选项。▌目标链路层地址选项用于表示IPv6包应发送到的邻节点的链路层地址。邻节点公告和重定向报文中包含该选项。||||||||||||||||||||||||||||||||||类型=1长度链路层地址…图1源链路层地址选项||||||||||||||||||||||||||||||||||类型=2长度链路层地址…图2目标链路层地址选项源链路层地址选项和目标链路层选项的格式相同。前者类型为1,后者为2。长度字段意义同TLV。链路层地址字段的长度可变,包含源或目标的链路层地址。IPv6定义的每个链路层都必须指明源和目标链路层选项中的链路层地址的格式化方式。||||||||||||||||||||||||||||6.3.2前缀信息选项前缀信息选项在路由器公告报文中发送,用于表示地址前缀和地址自动配置的信息。一个路由器公告报文可以有多个前缀信息选项,以表示多个地址前缀。下图是前缀信息选项的结构:|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||类型=3长度=4(整个选项共4*8即个字节)前缀长度链路上标志自治标志路由器地址标志站点前缀标志保留字段1有效生存期选用生存期保留字段2站点前缀长度前缀||||||||||||||||||||||||||||6.3.2前缀信息选项●前缀长度-表示地址前缀中的前缀字段的先导位位数。8字节。可取0~128,为识别子网通常设为64。●链路上标志-值为1时表示前缀所指示的地址存在于收到路由器公告报文的链路上,值为0表示不在●自治标志-值为1时表示前缀用于创建一个自治(无状态)地址,值为0时表示前缀不作这个用途。●路由器标志-该标志是RFC3775为移动IPv6定义的。●站点前缀标签-值为1时表示由前缀字段定义的站点前缀和站点前缀长度字段用于更新站点前缀表。站点前缀表是由主机维护的,当全球地址匹配了站点前缀,就优先选用站点本地地址。●保留1、2-保留1、2是为了将来使用所保留的字段,并且设置为0。●有效生存期-表示地址保持有效的秒数,这个地址是基于包含的前缀并使用无状态地址配置。字段长度是32位。有效生存期也表示了所包含的前缀对于链路上确定过程的有效秒数。字段全1表示无限长。●选用生存期-表示地址保持选用状态的的秒数,这个地址基于包含的前缀并使用无状态地址配置。有效的无状态自动配置地址总是处于选用或弃用状态。选用生存期到期时地址从选用变为弃用。●站点前缀长度-表示前缀字段中用于定义站点前缀的先导数位。只有当站点前缀标签为1时才有意义。●前缀-表示了用无状态自动配置生成的IPv6地址的前缀。前缀长度字段和前缀字段的组合形成了唯一前缀,再加上接口标识就创建了IPv6地址。||||||||||||||||||||||||||||6.3.3重定向报头选项重定向报头是在重定向报文中发送的,它用于表示造成路由器发送重定向报文的IPv6数据包。根据最初发送的IPv6数据包的长度,可以包括全部或部分重定向IPv6数据包。下图为重定向报头选项的结构:…||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||类型=4长度保留的重定向数据包部分●保留保留的字段是为将来使用所保留的48位字段,并设置为0●重定向数据包部分初始的数据包中被包括进去的只是数据包的先导部分,因此整个报文长度不会超过1280字节。||||||||||||||||||||||||||||6.3.4MTU选项MTU选项是在路由器公告报文中发送的,用于表示链路的IPv6MTU。当链路的IPv6MTU未知或者由于转换的或混合介质桥接的配置而需要配置时,通常会使用该选项。MTU选项会覆盖接口硬件报告的IPv6MTU。下图为MTU选项的结构:||||||||||||||||||||||||||||||||||||||||||||||||类型=5长度=1保留的MTU●MTU该字段表示路由器向链路上所有主机在路由器公告报文中报告的IPv6MTU。在桥接或2层交换的环境中,同一个链路上可能存在不同的链路层技术,不同的技术会有不同的链路层MTU。该如何解决这个混合介质的问题呢?||||||||||||||||||||||||||||6.3.4MTU选项下图显示了转换配置,MTU选项在其中用于解决混合介质的问题。主机A主机B以太网交换机以太网交换机IPv6路由器分布式光纤接口主机A和B协商进行TCP连接,各自报告的TCP段的最大长度是4312(FDDIIpv6的MTU是4352,减去40字节的IPv6报头)。但是,开始传输后,交换机会默默丢弃A、B之间传送的大于1500字节的数据包。有了MTU,子网路由器会向链路上的所有主机报告IPv6MTU是1500。然后A和B调整MTU,传输的TCP不再被丢弃。||||||||||||||||||||||||||||6.3.5路由信息选项路由信息选项在路由器公告报文中发送,用于表示接收主机添加到本地路由表的单个路由。下图显示了路由信息选项的结构。类型=24长度前缀长度保留1优先级保留2路由生存期前缀|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||●优先级表示由公告路由发送时此路由的优先级。如果有多个路由器通过路由信息选项公告相同的前缀,则可以配置这些路由,让它们以不同的优先级公告路由。有效值为01(高)、00(中)和11(低)。●路由生存期表示前缀能够用于决定路由的时间。设置为0xFFFFFFFF时表示无限的路由生存期。●前缀长度表示对路由有用的前缀字段中的前导位位数。8位。有效值是0~128。●长度长度字段的值取决于路由的前缀长度和前缀字段的对应长度。如果前缀长度为是0(无前缀字段),则长度字段的值为1;如果前缀长度0且65,则前缀字段的长度是64位,长度字段的值为2;如果前缀长度大于64,则前缀字段的长度是128位,长度字段的值为3。●前缀前缀字段表示路由前缀。此字段的长度可以是0位、64位或者128位。||||||||||||||||||||||||||||6.4邻接点发现报文所有的IPv6ND功能都使用以下报文完成:●路由器请求报文●路由器公告报文●邻节点请求报文●邻节点公告报文●重定向报文||||||||||||||||||||||||||||6.4.1路由器请求报文路由器请求报文由IPv6主机发送,用于发现链路上的IPv6路由器。主机会发送一个多播路由器请求报文以促使IPv6立刻响应,而不是等待非请求的路由器公告报文。下图为路由器请求报文的结构:||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||….=0=133类型代码ICMPv6校验和保留源链路层地址选项当该选项存在时,此字段包含发送方的链路层地址,接收路由器凭此确定单播主机1、假如本地网是以太网,那么路由器请求报文的以太网报头可如下设置:▌源地址:发送方的MAC地址▌目标地址:33-33-00-00-00-022、在路由器请求报文的IPv6报头中可如下设置:▌源地址:或者是分配好的链路本地地址或者是未指定地址(::)▌目标地址:链路本地范围的所有路由多播地址(FF02::2)3、将跳限制设置为255||||||||||||||||||