IPv6街坊发现协定
NDP(Neighbor Discovery Protocol,街坊发现协定)是IPv6的一个要害协定,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协定,并对它们作了改良。作为IPv6的基础性协定,NDP还提供了前缀发现、街坊不可达检测、反复地址监测、地址主动配置等性能。
1.地址解析:地址解析是一种确定目标节点的链路层地址的办法。NDP中的地址解析性能不仅代替了原IPv4中的ARP,同时还用街坊不可达检测(NUD)办法来维持街坊节点之间的可达性状态信息。
2.无状态地址配置:NDP中特有的地址主动配置机制,包含一些列相干性能,如路由器发现、接口ID主动生成、反复地址监测等。通过无状态主动配置机制,链路上的节点能够主动取得IPv6寰球单播地址。
a)路由器发现:路由器与其余相连的链路上公布网络参数信息,主机捕捉此信息后,能够取得寰球单播IPv6地址前缀、默认路由、链路参数(链路MTU)等信息。
b)接口ID主动生成:主机依据EUI-64标准或其余形式为接口主动生成接口标识符。
c)反复地址监测(DAD):依据前缀信息生成或手动配置IPv6地址后,为保障该地址的唯一性,在其能够应用之前,主机须要测验它是否已被链路上的其余节点所应用。
d)前缀从新编址:当网络前缀变动时,路由器在与其相连的链路上公布新的网络参数信息,主机捕捉这些新信息后,重新配置前缀、链路MTU等地址相干信息。
3.路由重定向:当在本地链路上存在一个更好的达到目标网络的路由器时,路由器须要通告节点来进行相应配置扭转。
NDP定义了5种ICMPv6报文类型,包含RS、RA、NS、NA和Redirect报文,如表所示。
ICMPv6报文类型
IPv6地址解析
地址解析在报文转发过程中具备至关重要的作用。当一个节点须要失去同一条链路上另外一个节点的链路层地址时,须要进行地址解析。IPv6应用NDP实现了这个性能,且有所加强。IPv6的地址解析过程包含两局部:一部分解析目标IP地址所对应的链路层地址;另一部分是街坊可达性状态的保护过程,即街坊不可达检测。
1、地址解析
与IPv4的ARP相比,IPv6地址解析技术工作在OSI参考模型的网络层,与链路层协定无关。这一特点的好处如下:
(1)增强了地址解析协定与底层链路的独立性。对每一种链路层协定都应用雷同的地址解析,无须再为每一种链路层协定定义一个新的地址解析协定。
(2)加强了安全性。在第三层实现地址解析能够利用三层规范的平安认证机制来避免ARP攻打和ARP坑骗。
(3)减小了报文流传范畴。IPv6的地址解析利用三层组播寻址限度了报文的流传范畴,可节俭网络带宽。
在IPv6中,NDP通过在节点间交互NS和NA报文实现IPv6地址到链路层地址的解析,而后通过解析后失去的链路层地址和IPv6等地址信息来建设相应的街坊缓存表项。
如下图2-10所示,NodeA的链路层地址为00E0-FC00-0001,全局地址为1::1:A;NodeB的链路层地址为00E0-FC00-0002,全局地址为1::2:B。当NodeA要发送数据报文到NodeB时,须要NDP实现地址解析过程。
(1)NodeA发送一个NS报文到链路上,目标IPv6地址为NodeB对应的被申请节点组播地址(FF02::1:FF02:B),选项字段中携带了NodeA的链路层地址00E0-FC00-0001。
(2)NodeB接管到该NS报文后,因为报文的目标地址FF02::1::FF02:B是NodeB的被申请节点组播地址,所以NodeB会解决该报文;同时,依据NS报文中的源地址和源链路层地址选项更新本人的街坊缓存表项。
(3)NodeB发送一个NA报文来应答NS,同时在音讯的指标链路层地址选项中携带本人的链路层地址00E0-FC00-0002。
(4)NodeA接管到NA报文后,依据报文中携带的NodeB链路层地址,创立一个到指标节点NodeB的街坊缓存表项。
图2-10 地址解析
通过交互,NodeA和NodeB就取得了对方的链路层地址,建设起了达到对方的街坊缓存表项,从而能够互相通信。
当一个节点的链路层地址产生扭转时,将以所有节点组播地址FF02::1为目标地址发送NA报文,告诉链路上的其余节点更新街坊缓存表项。
2.街坊不可达检测(NUD)
NUD(Neighbor Unreachable Detection,街坊不可达检测)是节点确定街坊可达性的过程。街坊不可达检测机制通过街坊可达性状态机来形容街坊的可达性。
街坊可达性状态机保留在街坊缓存表中,共有如下6种状态:
(1)INCOMPLETE(未实现状态):示意正在解析地址,但街坊链路层地址尚未确定。
(2)REACHABLE(可达状态):示意地址解析胜利,该街坊可达。
(3)STALE(生效状态):示意可达工夫耗尽,未确定街坊是否可达。
(4)DELAY(提早状态):示意未确定街坊是否可达。DELAY状态不是一个稳固的状态,而是一个延时期待状态。
(5)PROBE(探测状态):节点会向处于PROBE状态的街坊继续发送NS报文。
(6)EMPTY(闲暇状态):示意节点上没有相干邻接点的街坊缓存表项。
图2-11 街坊状态机
图中实线箭头示意由NS/NA报文交互导致的状态变动,各状态间的互相转换如下:
① 在EMPTY状态时,如果有报文要发送给邻接节点,则在本地街坊缓存表建设该邻接节点的表项,并将该表项置于INCOMPLETE状态,同时向邻接节点以组播形式发送NS报文。
② 节点收到街坊回应的单播NA报文后,将处于INCOMPLETE状态的街坊缓存表项转化为REACHABLE状态。如果地址解析失败(收回的组播NS超时),则删除该表项。
③ 处于REACHABLE状态的表项,如果在REACHABLE_TIME工夫内没有收到对于该街坊的"可达性证实信息",则进入STALE状态。此外,如果该节点收到街坊节点收回的非S置位NA报文,并且链路层地址有变动,相干表项会进入STALE状态。
④ 处于STALE状态的表项,当有报文发往该街坊时,这个报文会利用缓存的链路层地址进行封装,并使该表项进入DELAY状态,期待收到"可达性证实信息"。
⑤ 进入DELAY状态后,如果DELAY_FIRST_PROBE_TIME工夫之内还未收到对于该街坊的"可达性证实信息",则该表项进入PROBE状态。
⑥ 在PROBE状态时,节点会周期性地用NS报文来探测街坊的可达性,探测最大工夫距离为RETRANS_TIMER,在最多尝试MAX_ UNICAST_SOLICIT次后,如果仍未收到街坊回应的NA报文,则认为该街坊已不可达,该表项将被删除。
NodeA上,NodeB的表项处于STALE状态。此时若NodeA有报文发往NodeB,且没有下层协定可能提供到NodeB的"可达性证实信息"时,则NodeA须要从新验证到NodeB的可达性。
NUD过程与地址解析过程的次要不同之处在于以下两点:
(1)NUD的NS报文的目标MAC是目标节点的MAC地址;目标IPv6地址为NodeB的单播地址,而不是被申请节点组播地址。
(2)NA报文中的S标记须置位,示意是可达性确认报文,即这个NA报文是专门响应NS报文的。
无状态地址主动配置
IPv6同时定义了无状态和有状态地址主动配置机制。有状态地址主动配置应用DHCPv6来给主机动态分配IPv6地址,无状态地址主动配置通过NDP来实现。在无状态地址主动配置中,主机通过接管链路上的路由器收回的RA音讯,联合接口的标识符而生成一个寰球单播地址。
1.路由器发现
路由器发现是指主机定位本地链路上的路由器和确定其配置信息的过程,次要蕴含以下3方面内容:
(1)路由器发现(Router Discovery):主机发现街坊路由器及抉择某一个路由器作为默认网关的过程。
(2)前缀发现(Prefix Discovery):主机发现本地链路上的一组IPv6前缀,生成前缀列表。该列表用于主机的地址主动配置和on-link判断。
(3)参数发现(Parameter Discovery):主机发现相干操作参数的过程,如MTU、报文的默认跳数限度、地址调配形式等信息。
2.反复地址检测
DAD(Duplicate Address Detection,反复地址检测)是节点确定行将应用的地址是否在链路上惟一的过程。所有的IPv6单播地址,包含主动配置或手动配置的单播地址,在节点应用之前必须要通过反复地址检测。
DAD机制通过NS和NA报文实现。节点会发送NS报文,其源地址为未指定地址,目标地址为接口配置的IPv6地址。在NS报文发送到链路上后,如果在规定工夫内没有收到应答的NA报文,则认为这个单播地址在链路上是惟一的,能够调配给接口;反之,如果收到应答的NA报文,则表明这个地址曾经被其余节点所应用,不能配置到接口。
3.前缀从新编址
前缀从新编址(Prefix Renumbering)容许网络从以前的前缀安稳地过渡到新的前缀,用于提供对用户通明的网络从新编址能力。路由器通过RA报文中的优先工夫和无效工夫参数来实现前缀从新编址。
(1)优先工夫(Preferred Lifetime):无状态主动配置失去的地址放弃优先选择状态的工夫。
(2)无效工夫(Valid Lifetime):地址放弃无效状态的工夫。
对于一个地址或前缀,优先工夫小于或等于无效工夫。当地址的优先工夫到期时,该地址不能被用来建设新连贯,然而在无效工夫内,该地址还能用来放弃以前建设的连贯。
在从新编址时,站点内的路由器会持续通告以后前缀,然而无效工夫和优先工夫将被减小到靠近于0;同时路由器开始通告新的前缀。这样,在每个链路上至多有两个前缀共存,RA音讯中包含一个旧的和一个新的IPv6前缀信息。
4.无状态地址主动配置过程
NDP的无状态主动配置蕴含两个阶段:链路本地地址的配置和寰球单播地址的配置。当一个接口启用时,主机会首先依据本地前缀FE80::/64和EUI-64接口标识符,为该接口生成一个链路本地地址,如果在后续的DAD中产生地址抵触,则必须对该接口手动配置本地链路地址,否则该接口将不可用。
须要阐明的是,一个链路本地地址的优先工夫和无效工夫是有限的,永远不超时。
对于主机上寰球单播地址的配置步骤如下:
① 主机节点NodeA在配置好链路本地地址后,发送RS报文,申请路由器的前缀信息。
② 路由器收到RS报文后,发送单播RA报文,携带用于无状态地址主动配置的前缀信息,同时路由器也会周期性地发送组播RA报文。
③ NodeA收到RA报文后,依据前缀信息和配置信息生成一个长期的寰球单播地址。同时启动DAD,发送NS报文验证长期地址的唯一性,此时该地址处于长期状态。
④ 链路上的其余节点收到DAD的NS报文后,如果没有用户应用该地址,则抛弃报文,否则产生应答NS的NA报文。
⑤ NodeA如果没有收到DAD的NA报文,阐明地址是全局惟一的,则用该长期地址初始化接口,此时地址进入无效状态。
地址主动配置实现后,路由器能够主动进行NUD,周期性地发送NS报文,探测该地址是否可达。
路由器重定向
在重定向过程中,路由器通过发送重定向报文来告诉链路上的报文发送节点,在同一链路上存在一个更优的转发数据报文的路由器。接管到该音讯的节点据此批改其本地路由表项。路由器仅为单播数据流发送重定向报文,而重定向报文也仅以单播模式发送到始发主机,并且只会被始发节点解决。
如图2-12所示,NodeA的默认路由器为RTA,当初NodeA想发送数据报文到NodeB,路由器重定向机制须要通过以下过程:
(1)NodeA首先传送第一个数据报文到它的默认路由器RTA,当该报文通过RTB达到NodeB后,RTA晓得RTB是链路上转发报文的更好抉择。
(2)RTA向始发报文的NodeA发送一个ICMPv6重定向报文,指标地址中含有RTB的IPv6地址,报文选项字段的指标链路层地址中含有RTB的链路层地址。
(3)NodeA获悉RTB是到NodeB的更好门路后,批改本人的目标缓存表,当再发送到NodeB的报文时优先发送到RTB,重定向实现。