Neighbor Discovery 简介

IPv6 Neighbor Discovery(简称ND)提供机制来解决邻近nodes之间相互作用的下列问题:
Router Discovery  Hosts如何查寻到连接在link上的router
Prefix Discovery  Hosts如何得知哪些prefix是属于link上可直接传送的地址?(Nodes利用prefix是否为on-link来决定直接传送封包或透过router传送封包到目的地。)
Parameter Discovery  Nodes如何得悉link的相关参数(例如:link MTU)或者internet参数(例如:Hop Limit值)。
Address Autoconfiguration  提供机制来允许hosts对每个interface自动配置参数。例如:IPv6地址、on-link prefixlink MTU等。
Address resolution  如何从邻近nodesIPv6地址解析到其link层地址。
Next-hop determination  如何将欲传送的封包的目的地对应到next-hop地址? 对于非邻近(off-link)目的地址,Next-hop地址是router的地址。对于邻近的(on-link)目的地址,next-hop地址就是目的地址本身。
Neighbor Unreachability Detection  如何侦测邻近的nodes的可达性?对于不可达的nodes,可尝试用地址解析机制来确认是否还可达。此外,如果link上有2个以上的routers,还可以透过更换default router来解决邻近router不可达问题。
Duplicate Address Detection  node如何确定它欲使用的地址是否已经被邻近的其它node使用了?(可避免地址冲突)
Redirect(重新导向 link上有2个以上routers时,Router如何告知host使用更佳的next-hop (即另外的router)将封包送达特定的目的地址?

ND利用 ICMPv6 讯息结构并且定义新的ICMPv6 type 133137分别来解决邻近nodes间相互作用的问题 ND messages包含 ICMPv6 表头,以及零到多个 ND options,如下所示:

ND 包括 5 messages
u  Router Solicitation(路由器请求,简称RS  hostrouter发出请求的message。当hostinterface被启动时,host可以发送RS message要求router立即发布RA message,不用等待router下次自发性发布RA message的时间。
u  Router Advertisement(路由器公告,简称RA  router将周期性发布RA message。当host发出RS message时,router也会立即发送RA messageRA message包含on-linkoff-linkprefixhop limit,和link MTU等。 host发出RS message而回应的RA亦称为Solicited RA message(经由请求后才发送的RA信息)。Router周期性发布的RA亦称为Unsolicited RA message(非经由请求发送的RA信息)。
u  Neighbor Solicitation(邻居请求,简称NS  用来解析邻近nodeslink层地址,也可检测邻近nodes是否还reachable,还可用来做Duplicate Address DetectionDAD)检测。
u  Neighbor Advertisement(邻居公告,简称NA  NA主要包含发送者的link层地址,用来响应NS message 此外,当link层地址发生变化时,node会马上发布NA来通知所有的nodes 。回应NSNA 亦称为Solicited NA message,非因回应NS而发送的NA亦称为Unsolicited NA message
u  Redirect(重新导向)  Router用来告知host使用路径更佳的next-hop将封包送达特定的目的地址。

在具有群播能力的link上,每个router周期性地发布multicast RA message来宣告它的可用性。host发出RS message时,连接在同一个link上的所有routers会立即回应RA messageHosts藉由收到的RA messages,建立一个称为default router list的列表。当host发现目前的default router不可达(unreachable)或不可用时(router可能宣布不再当router或者routerlifetime已经到期),可利用default router list找到其它可用的router后,更换可用的default router
Routers适度地频发RA message,足以让hosts在几分钟内得知这些router的存在。至于如何侦测router已经发生故障,可透过Neighbor Unreachability Detection算法来检测。
RA message包含零到多个prefix,每个prefix包括个别的on-linkautonomous flags,用来指定此prefix的用途。Hosts利用on-link flag值为1prefix,建立一个列表称为prefix list。发送封包时用prefix list决定直接送到目的地或者透过router转送。Autonomous flag用来告知host是否使用此prefix自建GlobalUnique Local Address
RA message同时可选择性地包含Internet参数(例如:hop limit用来告知hosts发送封包时所使用的hop limit值),以及link参数(例如:link MTU)。这有利于集中管理关键参数,这类参数可以预先设置在router再透过RA message传播到所有的hosts
Node透过发送NS message要求目标透过NA message来响应它的link层地址。NSIP 目标地址为目标的Solicited-node multicast address,响应的NA messageIP目标地址为NS message的来源地址。
NS message也可检测邻近nodes是否还reachable,还可用来做Duplicate Address DetectionDAD)检测。
除了处理上述的一般性问题,ND还可以处理以下几种情况:
u  Link-layer address change  node发现它的link-layer address已经更改,可以主动发送几个unsolicited NA封包来告知所有邻近nodes实时更正其neighbor cachelink-layer address。请注意,此机制只能提升性能的效率,但并非是可靠的方法(发送的NA封包有可能掉失)。尽管Neighbor Unreachability Detection算法在侦测link-layer address更改的时间延迟稍长,但可保证可靠性。(此2种方法同时使用,可兼顾效率和可靠性)
u  Inbound load balancing  node可能会在一个interface上配置多个link-layer addresses,这样的话可将单一interface模拟成多个interfaces
有些nodes也有可能利用多个interfaces连接到同一个link,将接收的封包均衡分送到不同的interfaceND允许router1link上连接多个interfaces来分散接收封包。其做法如下:
Router可在发送RA封包时不携带其link-layer address,如此将迫使邻近nodes发送NS message来解析routerlink-layer address。而Router可依据不同nodesNS信息来回应不同的link-layer address,而达到load balancing的功能。
u  Anycast addresses  一组提供相同服务的nodes利用anycast地址来识别,并且在同一个link上的多个nodes可以配置相同的anycast地址。Link上的nodes借着接收多个包含相同的Target域值的NA message,可以用来处理anycast地址。这些用来处理anycast地址的NA信息的Override flag皆设为0,这样就不会覆盖其它的NA messagesLink上的nodes可以根据特定的规则来决定使用哪个NA信息里的Target Link-layer Address
u  Proxy advertisements  node A愿意代理某个未连接到linknode B接收封包时,node A可以代替node B发送Override域值为0NA message来达到代理接收封包功能(此NA messageTarget Link-layer Address option值为node Alink-layer address)。Mobile IPv6mobile node不在home link时,Home Agent将使用Proxy advertisement机制来代理接收mobile node的封包,并且将封包转送到mobile node。(相关的操作机制,请参考Mobile IPv6章节“拦截发送到MN的数据封包”)

Neighbor Discovery Options

ND message 包括零到多个options。其中有些options可以在同一个message中出现多次。ND option格式为Type-Length-Value





Type 字段表示ND option的类型:
Type
Option Name
Source Document
1
Source Link-Layer Address
RFC 4861 (Neighbor Discovery for IPv6)
2
Target Link-Layer Address
3
Prefix Information
4
Redirected Header
5
MTU
7
Advertisement Interval
RFC 6275 (Mobile IPv6)
8
Home Agent Information
24
Route Information
RFC 4191 (Default Router Preferences and More-Specific Routes)
Length  表示8 bytes区块中整个option的长度(即包括typelength字段)。所有 ND option必须以8 bytes为界。

Source Link-Layer Address Option







Source Link-Layer Address optiontype 1)表示ND message发送者的link层地址。它包含在NSRS以及RA messages中。当ND message的来源地址为未指定地址 (::) 时,则不包含 Source Link-Layer Address 选项。
其它的ND messages如果包含此option,接收端必须忽略其内容。

Target Link-Layer Address Option







Target Link-Layer Addresstype 2 选项表示Targetlink层地址。 Target可能是欲解析的邻居地址或封包重新导向的地址。Target Link-Layer Address option包含在NA以及Redirect messages中。
其它的ND messages如果包含此option,接收端必须忽略其内容。

Prefix Information Option

Prefix Information option仅在RA message中传送,主要用来指定自动配置地址的prefix和相关讯息。其它的ND messages若包含此option,接收封包的host必须忽略此option内容。在1RA message中,可有多个Prefix Information options














Type  此域值为3
Length  此域值固定为4(整个option长度为32 bytes)。
Prefix Length  表示组成地址前缀的Prefix字段中的前导有效bits数。 Prefix Length 域值范围0128。通常Prefix 使用在subnet ID,所以此域值通常都是64
On-link flag  当设为1时,表示此prefix组成的地址为on-link。请注意,当设为0时,并不表示此prefix组成的地址为off-link。也就是说: 如果之前此prefix已经被设成on-link,在其Valid Lifetime到期之前, host不能把On-link flag字段设为0prefix视为off-link
On-link flag值为0时,不可视为此prefix组成的地址为off-link。其原因之一是当link上配置2台以上的routers时,为了便于管理on-link prefix。譬如:当某个prefixoff-link变成on-link时,只要在其中一台router变更设定就可完成网络设置。当一个link上同时配置多台routers时,为了简化网络管理上的设置或者减少网络设置上的不一致性所造成的冲突,On-link flag值为0时,代表“不指定其内容” 的意思。如此可降低每台routerOn-link flag设置值的不同而发生冲突。事实上,其它某些域值为零时也可能代表“不指定其内容”。譬如:RA信息的Cur Hop Limit域值。
此外,router需有能力去侦测当与其它router之间的RA信息内容发生不一致时,应该发送系统讯息告知系统管理者。譬如: Valid LifetimePreferred Lifetime等。细节请参考章节“Router - 检查RA信息内容的一致性 

Autonomous flag  当设为1时, 表示host可用此prefix自行配置IPv6地址。可能是globalULA地址。
Router Address Flag  flag定义在RFC 6275Mobile IPv6”。 对一般不支持Mobile IPv6nodes而言,此字段视为保留且忽略其内容。Mobile IPv6章节里将详细介绍其用途。
Reserved1  6 bits长度字段,其值设为0
Valid Lifetime  表示用此prefix自动配置的地址的有效时间(秒数)。该字段大小为32 bitsValid Lifetime字段也表示此prefix可用来决定on-link地址的有效时间 (秒数),当此有效时间到期时则视为off-linkValid Lifetime 字段设为0xFFFFFFFF,代表时间为无限长。
Preferred Lifetime  表示用此prefix自动配置的地址处于preferred(偏好)状态的时间(秒数)。 该字段大小为32 bits 此域值不可大于Valid Lifetime域值。Preferred Lifetime 字段设为0xFFFFFFFF,代表时间为无限长。
Reserved2  32 bits字段,其值设为0
Prefix  IPv6地址或IPv6地址的subnet ID。用于表示subnet ID时,Prefix Length域值通常都是64Router不可发送属于link-local地址的prefix,接收封包的host必须忽略属于link-local地址的prefix 另外,RFC 6275 Mobile IPv6”中定义: Router Address Flag字段设为1时,此Prefix字段代表发送此封包的router(即Home Agent)的IPv6地址。 Mobile IPv6章节里将详细介绍其相关功能。

Redirected Header Option

Redirected Header option只限于在Redirect message中传送。它如果出现在别的ND messages中,接收封包的host必须忽略此option内容。





Type  此域值为4
Length  此字段的值为整个选项中的8字节区块的数量。
Reserved   48 bits长度字段,其值设为0
Portion of redirected packet  包含引起router发送Redirect message的原始封包内容或部分内容。整个Redirect message长度不可大于1280 bytes

MTU Option

MTU option用来表示link上的 IPv6 MTU。通常,当linkMTU必须由router来统一指定MTU值时,RA message才需要使用此选项(譬如:当link是由bridge连接到不同的link,则应该使用最小的link MTU值)。 MTU option出现时,Host应该采用此MTU值。 MTU option只限于在 RA message中传送,MTU option如果出现在别的ND messages中,接收封包的host必须忽略此option内容。







Type   此域值为5
Length   此域值为1(整个选项有8bytes)。
Reserved   16 bits字段,其值设为0
MTU  表示接收到RA messagehost应该使用的 IPv6 MTU

Route Information Option

ND提供router利用Redirect message来纠正host将封包传送到更佳的邻近router。然而,Redirect message仅限于将封包传送到连接在同一个linkrouters 对于配置多个interfaces且分别连接到不同linkhostRedirect message无法纠正host将封包往其它interface传送。
Route Information option告知host将特定的路由加入routing table中,其主要目的是弥补Redirect message功能上的限制。
虽然Route Information option也可用于纠正同一个interface的封包传送,但是此做法不仅不如Redirect message有效率,且徒增网络管理者配置路由的困扰,甚至造成路由错乱的险境。所以建议Route Information option仅用于纠正host将封包往其它interface传送,不该用来取代Redirect message的功能。












Type  此域值固定为 24
Length  代表整个option的长度,以8 bytes为单位。此域值决定Prefix字段的长度, 必须为1 23 取决于Prefix Length域值。 Prefix Length域值大于64,则Length域值必须是3。若Prefix Length域值大于0 Length域值必须是23 Prefix Length域值等于0 Length域值可为123
Prefix Length  Prefix的有效的前导bits的个数。范围为0128
Reserved1  3 bits字段。设为0
Preference  当多个routers发送同样的路由时,host可利用此域值来决定选择路由的先后顺序。此字段长度为2 bits:二进制01(高),00(中),11(低)。如果此域值为10 (保留),此option必须被忽略。
Reserved2  3 bits字段。设为0
Route Lifetime  以秒为单位,表示此路由的有效时间。值为0xFFFFFFFF则代表无限期。
Prefix  变动长度的字段,包含一个IP地址或prefix。此字段长度可为064128 bits,取决于Length域值。如果Length域值为1,则Prefix字段长度为0。如果Length域值为2,则Prefix字段长度为64。如果Length域值为,则Prefix字段长度为128 不在Prefix Length域值范围内的bits,必须设为0
Route Information option定义在RFC 4191 它只限于在 RA messages 中传送。同一个RA message中,可包括零到17Route Information optionsHost处理Route Information option的方式如下:
²  如果收到的routelifetime0,而且此route存在于routing table,则将此route数据从routing table中移除。
²  如果收到的routelifetime大于0 而且此route存在于routing table,则更新对应的lifetimepreference值。
²  如果收到的routelifetime大于0 而且此route不存在于routing table,则添加此route数据到routing table


Neighbor Discovery Message Format

Router Solicitation Message

Hostsinterface启动时,会立即发送RS message,促使router立即回应RA message






Type  此域值为133
Code  此域值为0
Checksum  此域值为ICMPv6的检查值。
Reserved  此域值设为 0
有效的options
-          Source Link-Layer Address option  发送端的link层地址。如果IPv6表头的来源地址为“(::)”,不可包含此option
IP层表头:
-          Source Address  发送端的IPv6地址,或者(::)
-          Destination Address  此域值为all-routers multicast address,即FF02::2
-      Hop Limit  固定设为255

ND设计者为了更有效杜绝黑客从别的网段攻击其它网段的ND机制,特别要求所有的ND messagesHop Limit必须设为255。尤其是RARS信息,接收端必须检查该域值,如果不是255则丢弃此ND message封包。(所有从别的网段入侵的ND messages会被路径上转送封包的routerHop Limit栏值减1,所以从外部入侵的ND messagesHop Limit域值不可能为255
    



Router Advertisement Message

Router定期发送RA message,或者用来回应hostRS请求。







Type  此域值为134
Code  此域值为0
Checksum  此域值为ICMPv6的检查值。
Cur Hop Limit  指定在丢弃IPv6封包前可传送的最大链接数的默认值。值为0代表router没指定此字段的默认值,host需自行设定。
Managed Address Configuration flag  当设为1表示收到此RA messagehost必须使用DHCPv6来进行参数自动配置。如果M flag设为1,则可忽略O flag的设定值,因为DHCPv6将传回所有可用的配置讯息。
Other Stateful Configuration flag  当设为1表示收到此 RA messagehost必须使用DHCPv6来自动配置其它参数。
Home Agent Flag  表示发送RArouter是否支持Home Agent功能。对一般不支持Mobile IPv6node,此字段视为保留且忽略其内容。 Mobile IPv6章节里将对此字段做介绍。
Prf Default Router Preference  在同一个link上每个router被用来当default router的优先级值。Host利用这个域值来决定default router。当目前的default router不可用时可更换下一个可用的default router 设定值:01(高),00(中)和11(低)。如果router的有效寿命为0,此域值必须设为00,且接收端忽略其值。如果值为10(保留),则接受端必须视其值为00
Reserved  其值设为 0且接收端忽略其内容。
Router Lifetime  default router的有效寿命。此字段以秒为单位,最大值为65535秒。值为0代表该router不能当default router host不能把它加入default router list里。此字段仅表示该router能当default router的有效时间,即使此域值为0RA的其它域值都是有效的。
Reachable Time  此时间的单位为毫秒,它代表当某个node被确认为可达之后的有效可达时间。Neighbor Unreachability Detection Algorithm会用到这个设定值。此字段如果设为0,代表router不指定这个值,由host自行设定。
Retrans Timer  此时间的单位为毫秒,它代表重送NS message的间隔时间。Neighbor Unreachability Detection Algorithm会用到这个设定值。此字段如果设为0,代表router不指定这个值,由host自行设定。
有效的options:
-     Source Link-Layer Address  一般情况下,router发送RA message时会把自己的link层地址填入Source Link-Layer Address option字段。但当router启动跨多个link层地址的load sharing(负载分担)功能时,可能省略这个option
-     MTU  当需要router统一指定MTU值时,router会传送此option
-     Prefix Information  stateless 自动配置地址下,指明prefix是否为on-link,也指明是否可用它来自动配置IPv6地址。RA message应该包括所有属于on-link Prefix Information options,否则配备2个以上interfaceshost可能因误判on-linkprefixoff-link,而将封包送到往不正确的interface
-     Route Information  通知hosts添加指定的路由到routing table
-     Advertisement Interval option  告知hosts每隔多久router会定期发送NA message。具有mobile能力的host可利用此option更有效率地侦测是否已经脱离目前连结到的router的有效范围。Mobile IPv6章节将对此option做详细介绍。
-     Home Agent Information option  每个Home agent用来公告自己的优先级及有效寿命。具有mobile能力的host可选择合适的home agent。当目前的Home agent已经不可用时,可更换Home agentMobile IPv6章节将对此option做详细介绍。
IP层表头:
-      Source Address  必须是发送端的link-local地址。
-      Destination Address  Solicited RA设为接收到的RS message的来源地址。 Unsolicited RA则设为all-nodes multicast address(即FF02::1)。
-      Hop Limit 固定设为255

Neighbor Solicitation Message

Nodes发送目的地为solicited-node multicast addressNS,同时包含自己的link层地址,来解析目标的link层地址。此外,在Neighbor Unreachability Detection程序里,nodes会发送unicast NS(目的地址为unicast)来侦测目标的可达性。









Type  此域值为135
Code   此域值为0
Checksum  CMPv6检查值。
Reserved  其值设为0
Target Address  请求解析地址的目标IP地址,不可为multicast address
有效的options:
-     Source Link-Layer Address  发送端的link层地址。如果IP层的来源地址为(::),则不可包含此option
IP层表头
-      Source Address  发送端的link-local地址。如果是用于DADDuplicate Address Detection)侦测,则该域值为(::)
-      Destination Address  用于解析目标的link层地址时,此字段为目标地址映像的solicited-node multicast address。此外,Neighbor Unreachability Detection程序里会发送unicast NS封包来侦测目标的可达性,此时IP表头的目的地址为unicast address
-      Hop Limit 固定设为255

Neighbor Advertisement Message

Nodes发送NA来回应其它nodesNS请求。另外,当interfacelink层地址发生变化时,node会主动发送unsolicited NA来通知所有的nodes更新对应的Neighbor cacheMAC地址。









Type   此域值为136
Code  此域值为0
Checksum  ICMPv6检查值。
Router flag  表示NA发送者是否为router router不再扮演router角色时,会把R flag0Hosts会参考此值将此routerdefault router list中删除。
Solicited flag  当设为1时,表示传送NA message是为了响应NS message。其它情况皆设为0
Override flag  interfacelink层地址发生变化时,node藉由发送all-node multicast address为目的地址,并将Override flag设为1,公告自己的link层地址已经变更。所有的node会检查自己的neighbor cache是否有相同的Target Address域值,有的话将对应的link层地址更新为Target link-layer address option的设定值。
Reserved  29 bits字段长度,其值设为 0
Target Address  表示被公告的地址。此字段不可设为multicast address
有效的options
-     Target Link-Layer Address  Target Address字段的link层地址。一般NA message都会包含这个option。当响应unicast NS message时,可以省略这个option,因为unicast NS的发送者已经知道对方的link层地址才能发送unicast NS封包。Neighbor Unreachability Detection程序里会发送unicast NS封包来侦测目标的可达性。
IP层表头
-      Source Address  发送端的link-local地址。
-      Destination Address  对于Solicited NA message,一般此字段设为接收到NS message时的来源地址。但是,如果接收到的NS message的来源地址为(::),则设Destination Addressall-node multicast address。发送Unsolicited NA message时,固定设为all-node multicast address
-      Hop Limit 固定设为255

Redirect Message

Redirect message细分2个功能:
u  Router藉由发送Redirect message,通知原始封包的来源host在同一个link上有一个更佳的router可转送封包到目的地。
u  router发布的RA message未能包含所有的on-link prefix时,host可能误以为目的地为off-link address,会将封包传送到router。此时router可利用Redirect message告知来源host更正目的地为on-link address












Type   此域值为137
Code  此域值为0
Checksum  ICMPv6检查值。
Reserved   其值设为0
Target Address  转送原始封包的更佳router地址。或者当原始封包的目的地为on-link地址时, Target Address域值会设成Destination Address的域值。借着两个字段的设定值相同来告知原始封包的来源host将目标地址更正为on-link address。(会发生这种情况,可能是因为router发布的RA message没包括所有的on-link prefix讯息。)
Destination Address  原始封包的目的地址。来源host收到Redirect message后,会将目的地址为Destination Address域值的封包往IPv6地址为Target Address域值的router发送。
有效的options
-     Target Link-Layer Address  Target Address字段的link层地址。如果发送Redirect messagerouter已经知道targetlink层地址,就会包含这个option。原始封包的来源host可直接引用此link层地址,不需要再发送NS message来解析targetlink层地址。
-     Redirected Header  引起router发送Redirect message的原始封包内容或部分内容(整个Redirect message大小不可超过1280 bytes)。
IP层表头
-      Source Address  必须是发送端的link-local地址。
-      Destination Address  引起router发送Redirect message的原始封包的来源地址。
-      Hop Limit  固定设为255

评论

此博客中的热门博文

IPv6 簡介以及地址介紹

DHCPv6 简介

Multicast Listener Discovery (MLD) 简介

MLDv2 简介

Mobile IPv6 简介

ICMPv6

IP Security 簡介