IPv6邻居发现协议 | 您所在的位置:网站首页 › 无法获取ipv6地址是什么原因造成的 › IPv6邻居发现协议 |
目录 IPv6邻居发现协议 - NDP概述 NDP使用ICMPv6的相关报文 地址解析 地址解析报文 地址解析过程(1) 地址解析过程(2) 邻居状态跟踪 邻居状态种类 邻居状态变化 重复地址检测DAD DAD过程 路由器发现概述 路由器发现 路由器发现-路由器周期发送RA IPv6地址无状态自动配置概述 RS报文 RA报文 其他参数 重定向报文 重定向过程(和ipv4机制相同) IPv6邻居发现协议 - NDP概述NDP(Neighbor Discovery Protocol,邻居发现协议)在RFC2462及RFC4861中定义。NDP实现了IPv6中诸多重要机制 在IPv4中,可以通过ARP由IP地址解析到链路层地址,ARP协议工作在OSI模型第二层,在IPv6邻居发现协议中使用了ICMPv6报文,在OSI第三层完成地址解析 IPv6地址解析不在使用ARP,也不再使用广播方式地址解析在OSI第三层完成,针对不同的链路层协议可采用相同的地址解析协议通过ICMPv6(类型135的NS以及类型136的NA报文)实现地址解析NS报文发送使用组播方式发送,报文的目标IPv6地址为被请求IPv6地址对应的“被请求节点组播地址” 报文的目的MAC为组播MAC采用组播方式发送NS消息相比于广播的方式更加高效,也减少对其他节点的影响和对二层网络的性能压力 地址解析报文地址解析过程中使用了两种ICMPv6报文:邻居请求(Neighbor Solicitation)和邻居通告(Neighbor Advertisement)。 邻居请求 (Neighbor Solicitation,NS) Type=135,Code=0。Target Address 是需要解析的IPv6地址,因此该处不准出现组播地址。邻居通告 (Neighbor Advertisement,NA) Type=136,Code=0R标志(Router flag)表示发送者是否为路由器,如果1则表示是;S标志(Solicited flag)表示发送邻居通告是否是响应某个邻居请求,如果1则表示是(0 例如路由器或PC重启后主动发送RA邻居通告,类似免费arp);O标志(Overide flag)表示邻居通告中的消息是否覆盖已有的条目信息,如果1则表示是;Target Address 表示所携带的链路层地址对应的IPv6地址。 地址解析过程(1)有了NS和NA两种报文,两台主机如何获取对方的链路层地址呢? 上一篇文章中说到过被请求节点组播地址和组播MAC地址是如何得到的 IPv6协议报文、地址分类 IPv6不想IPv4那样使用ARP表来缓存IP域MAC地址映射,而是维护一个IPv6邻居表 华为数通设备上则使用display ipv6 neighbors命令来查看IPv6邻居表 windows系统可用netsh interface ipv6 show neighbors查看缓存的IPv6邻居 邻居状态跟踪 邻居状态种类实际通讯过程中,不仅仅是地址解析那么简单,而是维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。 邻居状态有五种 incomplete未完成,邻居请求已经发送到目标节点的请求组播地址,但没有收到邻居的通告reachable可达,收到确认,不需在发包确认stale陈旧,收到上一次可达性确认后超过了30sdelay延迟,在stale状态后发送过一个报文,并且在5s内美欧可达性确认Probe探查,每个1s重传邻居请求来主动请求可达性确认 邻居状态变化例子:节点A要访问节点B,A的缓存中无B的条目,下图是邻居状态机的变化 邻居状态的迁移是比较复杂的,下面以A、B两个节点之间相互通讯过程的A节点的邻居状态变化,假设A、B两个节点之前没有任何通讯 1、A先发送NS,并生成邻居缓存条目,状态变为Incomplete 2、若B回复NA,则incomplete->reachable,否则10s后incomplete->empty,既即删除条目 3、经过reachable time 30s,条目状态reachable->stale 4、或者在reachable状态,收到B的非请求NA,切链路层地址不同,则马上->stale 5、在Stale状态,若A要向B发送数据,则Stale->delay同时发送NS请求 6、在Delay_First_Probe_time(默认5s)后,delay->probe,若期间有NA应答,则刷新表项delay->reachable 7.在Probe状态,每隔RetransTimes(默认1s)发送单播NS,发送MAX_UNICAST_SOLICIT(默认3)个后再等RestransTimes,有应答则——>reachable,没有应答则进入empty,即删除表项 IPv6的邻居维护关系确保,再发起通讯之前,邻居是可达到,IPv4的ARP无法做到,ARP表项仅仅通过老化表项来实现 重复地址检测DADDAD机制 重复地址检测确保网络中无两个相同的单播地址所有单播地址都需要做DAD使用NS(特殊NS)和NA(特殊NA)完成DAD交互过程一个地址在通过DAD地址重复检测之前称为“tentative地址”试验性地址,接口还暂时不能使用这个实验性地址进行正常的IPv6单播通讯,但是会加入和该地址所对应的solicited-Node组播组。DAD重复地址检测:节点向该Tentative地址所在的Solicited-Node(被请求节点组播地址)组播发送一个NS(特殊NS)原地址是::,如果收到某个其他站点回应的NA,就证明改地址已被网络使用。节点不能使用该tentative地址通讯。接口在启用任何一个单播IPv6地址前都需要进行DAD,包括link-local地址。 DAD过程在上图中,R2已经是在线的设备,该设备使用如图的地址,现在为R1新配置IPv6的地址2001::FFFF/64,改地址立即进入tentative状态,此时地址不可用,除非该地址通过DAD检测 1、R1向链路上以组播的方式发送一个NS报文,该IPv6的源地址为" : : ",目的地址为要进行DAD检测的2001::FFFF对应的被请求节点组播地址,也就是FF02::1:FF00:FFFF,这个NS里包含着要做DAD检测的目标地址2001::FFFF 2、链路上的节点都会收到这个组播NS的报文,没有配置2001::FFFF的节点由于没有加入该地址对应的被请求节点组播组,因此在收到这个NS的报文默默丢弃,R2接口配置了2001::FFFF地址,接口会加入到组播组FF02::1:FF00:FFFF,而此刻收到的报文是该地址为目的地址,因此他会解析该报文,他发现对方进行DAD的目标地址与自己本地接口地址想同,于是立即回送一个NA报文,该报文的目的地址是FF02::1,也就是组播地址,同时在报文内部写入原地址2001::FFFF,以及自己接口的mac地址 3、当R1收到这个NA后,他就知道2001::FFFF在链路上已经有人再使用了,会将改地址标记为Duplicate(重复的),该地址不能用于通信 路由器发现功能是IPv6地址自动配置功能的基础,主要通过两种报文实现 RA(router Advertisement,路由器通告)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,可以定时(200-600s)以组播的方式发送RA报文,RA报文中会带有网络前缀信息,以及一些标志位信息。RA的type字段值为134,可以一次携带多个前缀RS(Router Solicitation,路由器请求)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文,RS的type字段为133路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数 IPv6地址支持无状态自动配置,即主机通过路由器发送RA报文获取网络前缀信息,然后之际自己生成地址的接口标识部分,并自动配置IPv6地址。 路由器发现-路由器周期发送RA链路上的路由器会定期约250s发送RA(Router Advertisement)消息 主机接口初始化时发RS消息,路由器回应RA 注:回复的RA可以直接单播给请求的主机,也可以选择多播到所有节点 1、当存在以下情况时忽略RA发送的前缀: RA报文选项中的“auto”未置位。//前缀里面的Auto位。前缀与已有地址前缀重复(包括link-local地址)。//RA前缀和本地地址前缀冲突。RA报文选项中的“preferred lifetime”时间大于 “ valid lifetime ”//优先时间大于可用时间前缀长度与接口ID长度之和不等于128位。//一般要求接口ID64位,前缀64位(两者匹配)2、除以上情况外,主机获得前缀同时也获得一些相关时间参数: “preferred lifetime”=主动通信的有效时间。“ valid lifetime ”=原有通讯的有效时间。3、主机会周期性(约250s)的收到RA报文,并据此报文来更新自己的时间参数。 重定向报文 当网关路由器知道更好的转发路径时,会以重定向报文的方式告知主机重定向报文的结构如下: |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |