RFC4861 IPv6邻居发现协议2007该备忘录状态:本文档为Internet社区指定了Internet标准跟踪协议,并请求讨论和改进建议。
有关本协议的标准化状态和状态,请参阅当前版本的“互联网官方协议标准”(STD 1)。
这份备忘录的分发是不受限制的。
概述:本文档定义了IPv6邻居发现协议。
位于同一链路(子网)上IPv6节点使用邻居发现协议去发现每个节点的存在,确定每个其他节点的链路层地址,发现路由器,并管理&维护到活动邻居路径的可达性信息。
修订记录目录目录 (3)1引言 (6)2术语 (6)2.1通用术语 (6)2.2链路类型 (9)2.3地址 (10)2.4要求 (11)3协议概述 (11)3.1与IPv4的对比 (15)3.2支持的链路类型 (16)3.3保护邻居发现消息 (17)4消息格式 (18)4.1路由器请求(RS)消息格式 (18)4.2路由器通告(RA)消息格式 (19)4.3邻居查询(NS)消息格式 (21)4.4邻居通告(NA)消息格式 (22)4.5重定向(Redirect)消息格式 (24)4.6选项格式 (26)4.6.1源/目标链路层地址 (26)4.6.2前缀信息 (27)4.6.3重定向头 (28)4.6.4MTU (29)5主机概念模型 (30)5.1概念数据结构 (30)5.2概念发送算法 (31)5.3垃圾回收与超时要求 (33)6路由器和前缀发现 (33)6.1消息检查 (34)6.1.1RS消息有效性检查 (34)6.1.2RA消息有效性检查 (35)6.2路由器规范 (35)6.2.1RA配置变量 (35)6.2.2成为通告接口 (39)6.2.3RA消息内容 (39)6.2.4发送未经请求的RA (40)6.2.5停止作为通告接口 (41)6.2.6处理RS (41)6.2.7RA一致性 (42)6.2.8链路本地地址变化 (43)6.3主机规范 (44)6.3.1主机配置变量 (44)6.3.2主机变量 (44)6.3.3接口初始化 (45)6.3.4处理RA (45)6.3.5前缀和默认路由器的超时 (48)6.3.6默认路由器的选择 (48)6.3.7发送RS (48)7地址解析和邻居不可达检测 (50)7.1消息检查 (50)7.1.1NS的有效性检查 (50)7.1.2NA的有效性检查 (51)7.2地址解析 (51)7.2.1接口初始化 (52)7.2.2发送NS (52)7.2.3接收NS (53)7.2.4发送NA (54)7.2.5接收NA (54)7.2.6发送不请自来的NA(主动发送的NA) (56)7.2.7任播地址的NA (57)7.2.8代理邻居通告 (57)7.3邻居不可达检测 (58)7.3.1可达性确认 (58)7.3.2邻居缓存条目的状态 (59)7.3.3节点的行为 (60)8重定向功能 (62)8.1重定向的有效性检查 (62)8.2路由器规范 (63)8.3主机规范 (64)9扩展性–选项处理 (64)10协议常量 (66)11安全考虑 (67)11.1安全威胁分析 (67)11.2保护邻居发现消息 (68)12重新编号的注意事项 (69)13IANA考虑 (70)14参考文档 (71)14.1Normative References (71)14.2Infomative References (72)附录A 多宿主主机 (75)附录B 将来扩展 (76)附录C 可达性状态机 (77)附录D IsRouter规则总结 (80)附录E 实现问题 (81)E.1. 可达性确认 (81)附录F 自RFC2461的变更 (83)15致谢 (84)1引言本规范定义了IPv6邻居发现协议(简称为ND)。
节点(包括主机和路由器)使用邻居发现协议确定处于同一链路上的邻居的链路层地址(比如ethernet上设备节点的MAC地址),并且快速的清除变为无效的缓存信息。
主机由可以使用邻居发现协议查找相邻的、可以作为其网关为其转发封包的路由器。
最后,IPv6节点使用该协议可以主动跟踪可达或不可达的邻居,并能检测到邻居链路层地址的变化。
当路由器或到路由器的路径不可达时,主机可以主动发起寻找备用的路由器。
除非特别指出(在涵盖通过特定链接类型运行IP的文档中),本文档适用于所有的链路类型。
然而,由于邻居发现协议使用链路层组播实现它的业务功能,有可能在特定的链路类型上(比如,非广播多路接入(NBMA)链路),需要特别指定另外的协议或机制来实现这些功能(在有关通过特定链接类型进行IP操作的相应文档中)。
而本文档中描述的那些不直接依赖组播的服务,比如重定向,下一跳确定的该、邻居不可达检测等等,都应该按照本文档定义的形式提供。
如何在NBMA链路类型上支持邻居发现的细节信息在[IPv6-NBMA]描述。
另外,[IPv6-3GPP]和[IPv6-CELL]中讨论了如何基于蜂窝链路支持本协议,这些是NBMA链路的实际应用。
2术语2.1通用术语IP 本文特指IPv6,当出现需要避免混淆的上下文中时,才会使用术语IPv4和IPv6。
ICMP 本文特指ICMPv6,当出现需要避免混淆的上下文中时,才会使用术语ICMPv4和ICMPv6。
node 节点,实现IP协议的设备router 路由器,转发目的地址非自身地址的节点host 不是路由器的节点upper layer 上层,紧邻IP层之上的层。
比如像TCP和UDP之类的传输协议、像ICMP之类的控制协议、像OSPF之类的路由协议,以及通过IP“隧道”承载(即封装)的IP层或底层协议,被封装的协议可以是类似IPX、AppleTalk,设置是IP协议自身。
link 链路,用于节点在链路层上进行通信的通信设施或媒介,即紧邻IP层的下层。
例子包括以太网链路(简单的或桥接的)、PPP链路、X.25、帧中继或者是ATM网络,同样也包括IP层(或更高层)的“隧道”,比如IP over IPv4/IPv6。
interface 接口,连接到link上的部件。
neighbors 邻居,在同一链路上的节点。
address 地址,IP层的一个或一组接口的标识anycase address任播地址,一组接口(通常属于不同的节点)的标识。
发往任播地址的封包,将会被交付给该地址标识的接口中的一个(根据路由协议的距离测量“最近的”一个),详见[ADDR-ARCH]。
需要注意的是,任播地址从语法上与单播地址并无不同。
基于此,向任播地址发包的节点通常并不了解其正在使用的是任播地址。
贯彻本文档随后部分,在节点不知道单播地址实际上是任播地址的情况下,对单播地址的引用也适用于任播地址。
prefix 前缀,由地址的一定数量的初始位组成的bit串(类似IPv4子网号)。
link-layer address链路层地址,接口的链路层标识。
例子包括IEEE 802以太网链路地址。
on-link 在链路上,对off-link对应,地址属于与自身节点相同链路上的接口(即和本节点是邻居),在以下情况下,节点认为地址在链路上。
-它被链路前缀中的一个所覆盖(比如,就像前缀信息选项中的“on-flag”标志所指示的那样),或者-邻居路由器指定作为Redirect消息的目标的地址,或者-收到的邻居通告消息中包含的目标地址,或者-收到来自该地址的任何邻居发现报文的地址off-link 不在链路上,与on-link相反,未被分配给特定链路上的接口的地址。
译者注:简单来说,on-link可以理解为直连的,off-link是非直连的。
当对外发封包进行下一跳选择时,如果目的地址是on-link的,则说明是同一link路上的邻居节点,直接发送即可(即使经过了hub、交换机等,都看认为是直连的);如果未知是on-link还是off-link,则发送给默认路由器;如果是off-link 的,则说明需要发给路由器进行转发(在后两种情况下路由器可能发送Redirect,通知目的节点实际是on-link的,则后续按直连处理)longest prefix match最长前缀匹配。
一个确定多个前缀的哪个前缀覆盖了目标地址的过程。
如果前缀的所有bit位与目标地址最左侧的bit位匹配,则目标地址被该前缀覆盖。
当多个前缀都可以覆盖一个地址时,则匹配最长的那个前缀。
reachability可达性,表示通往邻居的单向“转发”路径是否能够正常工作。
进一步讲,指发往邻居的封包是否到达了邻居主机上的IP层,并且被接收到的IP层恰当的处理。
对于邻居路由器,可达性意味着节点的IP层发送的封包被正确的交付到了路由器的IP层,并且,路由器确实转发封包(即它被配置为路由器,而不是主机)。
对于主机来说,可达性意味着节点发送的IP封包被正确的交付给了主机的IP层。
packet 封包,封包由IP头+载荷组成。
link MTU 链路MTU,即链路最大传输单元,即链路上一次可以通过的以字节(八位元组octet)为单位的最大封包大小。
target 目标地址,正在被寻求地址解析信息的地址,或者是重定向时新的第一跳的地址。
proxy 代理,代替其他节点应答邻居发现查询报文的节点(译者注:对应IPv4的ARP代理功能)。
代表已经处于off-link的移动节点的路由器可以充当移动节点的代理。
ICMP destination unreachable indicationICMP目的地不可达指示(ICMPv6控制报文的一种类型),当封包由于[ICMPv6]中指定的原因无法交付时,给封包的源发送方返回的错误指示。
如果错误并未发生在封包的源节点,则生成一个ICMP错误消息;如果错误发生在封包的源节点上时,不要求IPv6实现真的创建并发送一条ICMP错误封包给源节点,而只要上层发送方可以通过合适的机制得到通知即可(比如,通过函数返回值)。
但是,请注意,在某些情况下,通过生成包含违规封包的ICMP错误消息,然后通过本地通用错误处理例程返回给上层,是很方便的。
random delay随机延迟,当外发消息时,为了防止大量节点恰好在同一时刻启动传输或者防止远程周期性传输彼此同步[SYNC],有必要延迟一个随机时间后在进行传输。
该需要一个随机分量时,节点以一种方式计算实际的延迟,计算出的延迟是由介于最小和最大值之间的均匀分布的随机值组成。
实现者必须注意确保所计算的随机分量的粒度和所用计时器的精度都足够高,以确保多个节点延迟相同时间量的概率很小。
random delay seed随机延迟种子。
如果一个伪随机数生成器用来计算随机延迟分量,则发生器应该使用一个唯一的种子进行初始化。
注意,仅仅使用接口ID作为种子是不够的,因为接口ID并不总是唯一的。