RPC系列协议--rfc2461--Neighbor Discovery for IP Version 6 (IPv6)

1.摘要

本文档为IP Version 6指定了邻居发现协议。同一链路上的IPv6节点使用“邻居发现”来发现彼此的存在,确定彼此的链路层地址,找到路由器,并维护通往活动邻居的路径的可达性信息。

2.介绍

该规范为Internet协议版本6 (IPv6)定义了邻居发现(ND)协议。节点(主机和路由器)使用邻居发现来确定已知位于附加链接上的邻居的链路层地址,并快速清除已失效的缓存值。主机也使用邻居发现来找到愿意代表它们转发数据包的邻近路由器。最后,节点使用协议主动跟踪哪些邻居是可到达的,哪些不能到达,并检测更改的链路层地址。当路由器或通往路由器的路径出现故障时,主机就会主动寻找其他可用的替代路由器。

3.术语

3.1 通用

缩写 全称
IP Internet Protocol Version 6,术语IPv4和IPv6只在需要避免歧义的上下文中使用
ICMP Internet Message Control Protocol,术语ICMPv4和ICMPv6仅在必要时使用,以避免歧义
node 实现IP的一种设备
router 转发未显式寻址到自身的IP数据包的节点
host 任何不是路由器的节点
upper layer IP之上的协议层,例如传输协议(TCP和UDP),控制协议(ICMP)和路由协议(OSPF)
link 一种通信设备或媒介,节点可以在链路层进行通信
interface 节点对链接的附加
neighbors 连接到同一链接的节点
address 接口或一组接口的ip层标识符
anycast address 一组接口(通常属于不同的节点)的标识符
prefix 一种位串,由地址的一些初始位组成的前缀
link-layer address 接口的链接层标识符
on-link 分配给指定链路上接口的地址
off-link 未分配给指定链接上的任何接口的地址
longest prefix match 确定一组前缀中哪个前缀(如果有的话)覆盖目标地址的过程。如果前缀中的所有位与目标地址最左边的位匹配,则目标地址由前缀覆盖。当多个前缀覆盖一个地址时,最长的前缀是匹配的那个
reachability 到邻居的单向“前进”路径是否正常运行
packet IP报头加上有效负载
link MTU 最大传输单元
target 寻找地址解析信息的地址,或重定向时新的第一跳地址
proxy 代表另一个节点响应邻居发现查询消息的路由器
ICMP destination unreachable indication 由于[ICMPv6]中列出的原因而无法发送的数据包的原始发送方返回的错误指示
random delay 当发送信息时,为了防止多个节点同时发送信息,或者为了防止远距离周期性传输彼此同步,有时需要随机延迟传输时间
random delay seed 如果伪随机数生成器用于计算随机延迟分量,则在使用前应使用唯一种子初始化生成器

3.2 Link Types

缩写 全称
multicast 一种链路,支持在链路层向所有(即广播)或所有邻居的一个子集发送数据包的本地机制
point-to-point 恰好连接两个接口的链接,点对点链路假定具有多播能力和链路本地地址
non-broadcast multi-access (NBMA) 一个可以连接两个以上接口的链路,但它不支持原生的组播或广播(例如X.25、ATM、帧中继等)
shared media 允许在许多节点之间直接通信的链路,但附加节点的配置方式使它们不具有所有链路上目的地的完整前缀信息。也就是说,在IP层,同一链路上的节点可能不知道它们是邻居;默认情况下,它们通过路由器进行通信
variable MTU 没有定义良好的MTU的链路(例如,IEEE 802.5令牌环)。许多链路(例如以太网)都有一个由链路层协议或描述如何在链路层上运行IP的特定文档定义的标准MTU
asymmetric reachability 非自反可达性和/或非传递可达性是正常操作的一部分的链路

3.3 Addresses

缩写 全称
all-nodes multicast address 到达所有节点的链路-局部作用域地址–FF02::1
all-routers multicast address 连接到所有路由器-本地作用域地址–FF02::2
solicited-node multicast address 作为被请求的目标地址的函数计算的链路-局部作用域多播地址
link-local address 一种单播地址,具有仅限链路作用域,可用于到达邻居。路由器上的所有接口必须有一个链路-本地地址
unspecified address 一种预留地址值,表示缺少地址(例如,地址未知)

4.协议概述

该协议解决了与连接到同一链接的节点之间的交互相关的一组问题。它定义了解决下列每个问题的机制:

协议 解决问题
Router Discovery 主机如何定位位于附加链路上的路由器
Prefix Discovery 主机如何发现一组地址前缀,这些地址前缀为附加的链接定义哪些目的地是on-link
Parameter Discovery 一个节点如何学习诸如链路MTU这样的链路参数或诸如要放入输出包中的跳数限值这样的Internet参数
Address Autoconfiguration 节点如何自动为接口配置地址
Address resolution 节点如何确定链路上的目的地(例如,一个邻居)的链路层地址,只给目的地的IP地址
Next-hop determination 一种将IP目的地址映射为该目的地的通信量应发送到的邻居的IP地址的算法。下一跳可以是路由器或目的地本身
Neighbor Unreachability Detection 节点如何确定一个邻居不再是可到达的。对于用作路由器的邻居,可以尝试其他默认路由器。对于路由器和主机,地址解析可以再次执行
Duplicate Address Detection 一个节点如何确定它希望使用的地址是否已被另一个节点使用。
Redirect 路由器如何通知主机更好的第一跳节点到达特定目的地。

邻居发现定义了五种不同的ICMP包类型:一对路由器请求和路由器广告消息,一对邻居请求和邻居广告消息,以及一条重定向消息。这些信息的目的如下:

类型 作用
Router Solicitation 当接口启用时,主机可能会发出路由器请求,要求路由器立即生成路由器广告,而不是在下一个预定的时间
Router Advertisement 路由器定期或响应路由器的请求消息,公布它们的存在以及各种链接和Internet参数。路由器广告包含前缀,用于链路上的确定和/或地址配置,建议跃点限值,等等
Neighbor Solicitation 由节点发送,以确定邻居的链路层地址,或验证通过缓存的链路层地址仍然可以到达邻居。邻居请求也用于重复地址检测
Neighbor Advertisement 对邻居请求消息的响应。节点还可以发送未经请求的邻居广告来宣布链路层地址更改
Redirect 由路由器用来通知主机一个更好的目的地第一跳

在具有多路由能力的链路上,每个路由器定期多播一个路由器广告包,宣布它的可用性。主机接收来自所有路由器的路由器广告,构建默认路由器列表。路由器产生路由器广告的频率足够高,主机能在几分钟内知道它们的存在,但不够频繁,不能依靠没有广告来检测路由器故障;一个单独的邻居不可达性检测算法提供故障检测。

路由器广告包含一列前缀用于链路上的确定和/或自主地址配置;与前缀关联的标志指定特定前缀的预期用途。主机使用广告的on-link前缀来构建和维护一个列表,该列表用于决定包的目的地是on-link还是在路由器之外。请注意,目的地可以是on-link,即使它没有被任何广告的on-link前缀覆盖。在这种情况下,路由器可以发送重定向通知发送方目的地是邻居。路由器广告(和每个前缀标志)允许路由器通知主机如何执行地址自动配置。例如,路由器可以指定主机是否应该使用stateful(DHCPv6)和/或stateless(自动)地址配置。路由器广告消息还包含Internet参数,如主机在输出包中应该使用的跳数限制,以及可选的链路参数,如链路MTU。这有助于对关键参数进行集中管理,这些参数可以在路由器上设置,并自动传播到所有附加的主机。

节点通过多播一个请求目标节点返回其链接层地址的邻居请求来完成地址解析。邻居请求消息被组播到目标地址的指定节点组播地址。目标在单播邻居广告消息中返回其链接层地址。单个请求-响应数据包对足以让发起者和目标者解决彼此的链路层地址;发起者在“邻居请求”中包含它的链接层地址。

邻居请求消息也可以用来确定是否有多个节点被分配了相同的单播地址。邻居不可达性检测检测邻居的故障或到邻居的转发路径的故障。这样做需要确认发送到一个邻居的数据包确实到达了那个邻居并被它的IP层正确处理。相邻不可达性检测使用来自两个源的确认。除了解决上述一般性问题外,邻居发现还可以处理以下情况:

问题 解决方案
Link-layer address change 一个知道自己的链路层地址已经改变的节点可以多播一些(不请自来的)邻居广告数据包到所有节点,以快速更新缓存的无效链路层地址。请注意,发送未经请求的广告只是一种性能增强(例如,不可靠)。邻居不可达性检测算法确保所有节点都能可靠地发现新地址,尽管延迟可能会稍微长一些。
Inbound load balancing 具有复制接口的节点可能希望在同一链路上跨多个网络接口接收传入数据包时实现负载平衡。这样的节点具有分配给同一接口的多个链路层地址。例如,单个网络驱动程序可以将多个网络接口卡表示为具有多个链路层地址的单个逻辑接口。负载平衡是通过允许路由器从路由器广告包中忽略源链路层地址来处理的,从而迫使邻居使用邻居请求消息来了解路由器的链路层地址。然后,返回的邻居广告消息可以包含链接层地址,这些地址根据发出邀请的人而不同。
Anycast addresses Anycast地址标识提供等效服务的一组节点中的一个,可以将同一链路上的多个节点配置为识别相同的Anycast地址。邻居发现通过让节点期望接收同一目标的多个邻居通知来处理任何类型转换。所有anycast地址的广告都被标记为非覆盖广告。这将调用特定的规则来确定应该使用潜在的多个广告中的哪一个。
Proxy advertisements 如果一个路由器愿意接受不能响应邻居请求的目标地址的数据包,那么它可以发出非覆盖的邻居广告。代理广告目前还没有明确的用途,但是代理广告可以用于处理移动节点脱离链接的情况。但是,它并不是用来处理不执行此协议的节点的通用机制。

5.与IPv4对比

IPv6邻居发现协议对应于IPv4协议ARP [ARP]、ICMP路由器发现[RDISC]和ICMP重定向[ICMPv4]的组合。
与IPv4协议集相比,邻居发现协议提供了许多改进:
a.路由器发现是基本协议集的一部分;主机没有必要“窥探”路由协议。
b.路由器广告携带链路层地址;不需要额外的包交换来解析路由器的链路层地址。
c.路由器广告携带链接的前缀;不需要一个单独的机制来配置“netmask”。
d.路由器广告使地址自动配置。
e.路由器可以让主机在链路上使用MTU,确保所有节点在缺乏定义良好的MTU的链路上使用相同的MTU值。
f.地址解析的多播可以“传播”超过40亿个(2^32)多播地址,大大减少了目标之外的节点上与地址解析相关的中断。
g.重定向包含新第一跳的链路层地址;在接收重定向时不需要单独的地址解析。
h.多个前缀可以与同一个链接关联。
i.与IPv4不同,IPv6重定向的接收方假定新的下一跳是on-link。
j.邻居不可达性检测是在失效路由器、部分失效或分区链路和改变其链路层地址的节点出现时,显著提高包交付的鲁棒性的基础的一部分。
k.与ARP不同,邻居发现检测半链路故障(使用邻居不可达性检测),避免向没有双向连接的邻居发送流量。
l.与IPv4路由器发现不同,路由器广告消息不包含首选项字段。不需要使用偏好字段来处理不同“稳定性”的路由器;邻居的不可达性检测将检测死路由器并切换到工作的路由器。
m.使用链路本地地址来唯一地标识路由器(用于路由器广告和重定向消息),使得主机在站点重新编号使用新的全局前缀时能够维护路由器关联。
n.使用等于255的跳数限制欺骗邻居发现对不小心或故意发送ND消息的脱机发送者免疫。在IPv4中,脱机发送者可以发送ICMP重定向和路由器广告消息。
o.将地址解析置于ICMP层使该协议比ARP更独立于媒体

6.消息格式

6.1 Router Solicitation消息格式

主机发送路由器请求,以提示路由器快速生成路由器广告。
IP字段:

字段 作用
Source Address 分配给发送接口的IP地址,或如果没有分配给发送接口的地址,则为未指定的地址
Destination Address 所有路由器的多播地址FF02::2
Hop Limit 255
Authentication Header 如果在发送方和目标地址之间存在IP身份验证头的安全关联,则发送方应包括此头

ICMP字段:

字段 作用
Type 133
Code 0
Checksum ICMP校验和
Reserved 该字段未被使用。发送方必须将其初始化为零,接收方必须忽略它

有效的选项:

字段 作用
Source link-layer address 发送者的链接层地址

6.2 Router Advertisement消息格式

路由器定期发送路由器广告消息,或响应路由器请求。
IP字段:

字段 作用
Source Address 分配给发送此消息的接口的链路本地地址
Destination Address 路由器请求的源地址或全节点多播地址FF02::1
Hop Limit 255
Authentication Header 如果在发送方和目标地址之间存在IP身份验证头的安全关联,则发送方应包括此头

ICMP字段:

字段 作用
Type 134
Code 0
Checksum ICMP校验和
Cur Hop Limit 应该放置在传出IP数据包的IP报头的跳数字段中的默认值。值为0表示未指定(由该路由器指定)。
M “Managed address configuration”标志位。设置后,除了使用无状态(stateless)地址自动配置的地址外,主机还将使用受管理的(stateful)协议进行地址自动配置。
O “Other stateful configuration”标志位。设置后,主机使用管理(stateful)协议自动配置其他(非地址)信息。
Reserved 发送方必须将其初始化为零,接收方必须忽略它。
Router Lifetime 与默认路由器关联的生命周期,单位为秒。最大值对应18.2小时。生存期为0表示该路由器不是默认路由器,不应该出现在默认路由器列表中。该路由器的生命周期仅适用于该路由器作为默认路由器的有效性;它不适用于包含在其他消息字段或选项中的信息。需要为其信息设置时间限制的选项包括它们自己的生命期字段。
Reachable Time 在接收到可达性确认后,一个节点假定邻居可以到达的时间(以毫秒为单位)。
Retrans Timer 重新传输邻居请求信息之间的时间,以毫秒为单位。用于地址解析和邻居不可达性检测算法。

可选的选项:

字段 作用
Source link-layer address 发送路由器广告的接口的链路层地址。仅用于有地址的链接层。路由器可以省略此选项,以便在多个链路层地址之间共享入站负载。
MTU 应该在具有变量MTU(在描述如何通过特定链接类型运行IP的文档中指定)的链接上发送。可能被发送到其他链接。
Prefix Information 这些选项指定连接和/或用于地址自动配置的前缀。一个路由器应该包括它所有的连接前缀(除了连接本地前缀),这样多主机就有完整的连接目的地的连接前缀信息。如果缺乏完整的信息,多主机在向其邻居发送流量时可能无法选择正确的外向接口。

6.3 Neighbor Solicitation消息格式

节点向邻居发出请求,请求目标节点的链路层地址,同时向目标节点提供自己的链路层地址。当节点需要解析一个地址时,邻居请求是组播;当节点试图验证邻居的可达性时,是单播。
IP字段:

字段 作用
Source Address 分配给发送此消息的接口的地址
Destination Address 与目标地址对应的指定节点多播地址或目标地址
Hop Limit 255
Authentication Header 如果在发送方和目标地址之间存在IP身份验证头的安全关联,则发送方应包括此头。

ICMP字段:

字段 作用
Type 135
Code 0
Checksum ICMP校验和
Reserved 该字段未被使用。发送方必须将其初始化为零,接收方必须忽略它。
Target Address 请求目的的IP地址。它不能是一个多播地址。

可选的选项:

字段 作用
Source link-layer address 发送者的链接层地址。当源IP地址是未指定的地址时,不能包含。否则,在有地址的链接层上,必须包括此选项组播请求和应包括在单播请求。

6.4 Neighbor Advertisement消息格式

节点发送邻居广告来响应邻居的请求,并发送未经请求的邻居广告以(不可靠地)快速传播新信息。
IP字段:

字段 作用
Source Address 分配给发送广告的接口的地址。
Destination Address 对于被请求的广告,为调用的邻居请求的源地址,如果请求的源地址是未指定的地址,则为全节点多播地址。对于非请求广告,典型的是全节点多播地址。
Hop Limit 255
Authentication Header 如果在发送方和目标地址之间存在IP身份验证头的安全关联,则发送方应包括此头。

ICMP字段:

字段 作用
Type 136
Code 0
Checksum ICMP校验和
R Router标志位,当设置时,R位表示发送者是路由器。R位是由邻居不可达性检测来检测一个路由器改变到一个主机。
S Solicited标志位,当设置时,S位表示该广告是为了响应来自目标地址的邻居的请求而发送的。采用S位作为邻不可达性检测的可达性确认。不能在多播广告或非请求的单播广告中设置。
O Override标志位,当设置时,O位表示广告应该覆盖现有的缓存条目并更新缓存的链接层地址。当它未被设置时,广告将不会更新缓存的链路层地址,尽管它会更新一个不知道链路层地址的现有邻居缓存条目。它不应该被设置在主动发送地址的广告和主动发送的代理广告中。应当在其他主动请示的广告和主动请示的广告中设置。
Reserved 发送方必须将其初始化为零,接收方必须忽略它。
Target Address 对于已请求的广告,提示广告的邻居请求消息中的目标地址字段。对于未经请求的广告,其链路层地址的地址已经改变了。目标地址不能是多播地址。

可选的选项:

字段 作用
Target link-layer address 目标的链路层地址,即广告的发送者。当响应多播请求时,这个选项必须包含在有地址的链接层上。当响应单播邻居请求时,此选项应包括在内。

6.5 Redirect消息格式

路由器发送重定向数据包,通知主机到目的地的路径上有更好的第一跳节点。主机可以重定向到更好的第一跳路由器,但也可以通过重定向通知目的地实际上是邻居。后者是通过将ICMP目标地址设置为ICMP目标地址来实现的。
IP字段:

字段 作用
Source Address 分配给发送广告的接口的地址。
Destination Address 触发重定向的包的源地址。
Hop Limit 255
Authentication Header 如果在发送方和目标地址之间存在IP身份验证头的安全关联,则发送方应包括此头。

ICMP字段:

字段 作用
Type 137
Code 0
Checksum ICMP校验和
Reserved 该字段未被使用。发送方必须将其初始化为零,接收方必须忽略它。
Target Address 作为ICMP目标地址使用的更好的第一跳的IP地址。当目标是通信的实际端点时,即目标地址字段必须包含与ICMP目标地址字段相同的值。否则,目标是一个更好的第一跳路由器,目标地址必须是路由器的链路-本地地址,以便主机能够唯一地识别路由器。
Destination Address 重定向到目标的目标的IP地址。

可选的选项:

字段 作用
Target link-layer address 目标的链接层地址。应该包括(如果知道的话)。请注意,在NBMA链接上,主机可能依赖于重定向消息中的目标链路层地址选项的存在,作为决定邻居链路层地址的手段。在这种情况下,必须在重定向消息中包含该选项。
Redirected Header 在不使重定向数据包超过1280个字节的情况下,尽可能多地触发重定向发送的IP数据包。

6.6 选项格式

消息包含零个或多个选项,其中一些选项可能在同一消息中出现多次。所有选项都是以下形式:

Type Length
字段 作用
Type 选项类型的8位标识符
Length 选项的长度(包括类型和长度字段)
Option Name Type
Source Link-Layer Address 1
Target Link-Layer Address 2
Prefix Information 3
Redirected Header 4
MTU 5

6.6.1 Source/Target Link-layer Address

字段 作用
Type 1 for Source Link-layer Address,2 for Target Link-layer Address
Length 选项的长度(包括类型和长度字段)
Link-Layer Address 可变长度链路层地址

描述:源链路层地址选项包含包的发送者的链路层地址。它被用于邻居请求、路由器请求和路由器广告包。目标链路层地址选项包含目标的链路层地址。它用于邻居广告和重定向数据包。对于其他邻居发现消息,必须悄悄地忽略这些选项。

6.6.2 Prefix Information

字段 作用
Type 3
Length 4
Prefix Length 前缀中有效的前导位的数目,值的范围从0到128。
L on-link标志位。当设置时,表示此前缀可用于对链接进行确定。当未设置时,广告不声明前缀的on-link或off-link属性。例如,前缀可以用于地址配置,其中属于前缀的一些地址是on-link,而其他地址是off-link。
A autonomous address-configuration标志位。当设置时,表示该前缀可用于自主地址配置。
Reserved1 未使用的字段。发送方必须将其初始化为零,接收方必须忽略它。
Valid Lifetime 前缀在确定链路时有效的时间长度(以秒为单位,相对于数据包发送的时间)。所有1位的值(0xffffffff)表示无穷大。
Preferred Lifetime 以秒为单位的时间(相对于发送数据包的时间),通过无状态(stateless)地址自动配置从前缀生成的地址。所有1位的值(0xffffffff)表示无穷大。
Reserved2 该字段未被使用。发送方必须将其初始化为零,接收方必须忽略它。
Prefix IP地址或IP地址的前缀。前缀长度字段包含前缀中有效前导位的数量。前缀中位于前缀长度之后的位是保留的,并且必须由发送方初始化为零,而被接收方忽略。路由器不应该为链路本地前缀发送一个前缀选项,主机应该忽略这样的前缀选项。

描述:前缀信息选项为主机提供连接前缀和地址自动配置前缀。前缀信息选项出现在路由器广告包中,对于其他消息必须被静默地忽略。

6.6.3 Redirected Header

字段 作用
Type 4
Length 选项的长度
Reserved 这些字段是未使用的。发送方必须将它们初始化为零,接收方必须忽略它们。
IP header + data 原包被截断,以确保重定向消息的大小不超过1280个八位字节。

描述:重定向报头选项用于重定向消息,并包含被重定向的数据包的全部或部分。对于其他邻居发现消息,必须悄悄地忽略此选项。

6.6.4 MTU

字段 作用
Type 5
Length 1
Reserved 该字段未被使用。发送方必须将其初始化为零,接收方必须忽略它。
MTU 32位无符号整数。推荐的MTU链接。

描述:MTU选项在路由器广告消息中使用,以确保在链路MTU不知名的情况下,链路上的所有节点使用相同的MTU值。对于其他邻居发现消息,必须悄悄地忽略此选项。在将异构技术连接在一起的配置中,所支持的最大MTU可能因段而异。如果网桥不生成ICMP包太大的消息,通信节点将无法使用Path MTU来动态地确定每个邻居的适当MTU。在这种情况下,路由器使用MTU选项来指定。

温馨提示:
以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_20677327/article/details/106728955