arp协议也叫什么协议(NDP协议作用解析)
邻居发现协议NDP(Neighbor Discovery Protocol)是ipv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器 发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
(1)地址解析:取代IPv4中的ARP
Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS(ICMP 135)报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。 同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B 的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。 这样就完成了一个地址解析的过程。
1 当PC1想访问PC2时,会查找自己的ipv6 neighbor表
2 如果ipv6 neighbor表里没有此邻居,则会以组播(使用PC2的ipv6 地址计算出来的被请求节点组播地址为目标地址)的方式往外发送 NS报文(携带有自己的mac地址)
3 因为PC2是属于这个组的,所以PC2会处理这个NS报文,解析NS报文发现PC1要请求自己的MAC地址。
4 PC2以单播的方式发送NA消息,携带了自己的MAC地址
(2)重复地址检测:探测是否有其它的节点使用了该地址
1 当PC1配置一个IPv6地址时,不会立即生效,是一个试验地址。
2 PC1会使用一个源为::/128目的地址为这个地址对应的被请求节点组播地址的NS消息(会携带target IP)进行重复地址检测
3 如果网络中有人发送NA(目的地址为FF02::1)响应这个NS消息, 则认为这个地址已经有人使用,这个地址将不会生效
4 如果在一段时间内没人响应这个NS消息,则认为这个地址是没有冲突的
(3)路由器发现:路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。
路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
1 路由器通告RA(Router Advertisement)报文: 每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
2 路由器请求RS(Router Solicitation)报文: 很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Tpye字段值为 133。
(4)重定向:当网关设备发现报文从其它网关设备转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备
1 Host A需要和Host B通信,Host A的默认网关设备是Router A, 当Host A发送报文给Host B时报文会被送到Router A
2 Router A接收到Host A发送的报文以后会发现实际上Host A直接发送给Router B更好,它将发送一个重定向报文给主机A。 其中报文中更好的路径下一跳地址为Router B,Destination Address为Host B
3 Host A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往Host B的报文就直接发送给Router B
注意:路由器收到重定向报文时,不会进行重定向
当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:
a)报文的目的地址不是一个组播地址。
b)报文并非通过路由转发给设备。
c)经过路由计算后,路由的下一跳出接口是接收报文的接口。
d)设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
e)设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。
(5)Path MTU 在IPv4中,报文如果过大,必须要分片进行发送,所以在每个节点发送 报文之前,设备都会根据发送接口的最大传输单元MTU(Maximum Transmission Unit)来对报文进行分片。
但是在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对 IPv6报文进行分片,报文的分片将在源节点进行。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将其丢弃;同时将转发接口的MTU值通过ICMPv6报文的“Packet Too Big” 消息发给源端主机,源端主机以该值重新发送IPv6报文,这样带来了额外流量开销。PMTU发现协议可以动态发现整条传输路径上各链路的MTU值,减少由于重传带来的额外流量开销。
PMTU协议是通过ICMPv6的Packet Too Big报文来完成的。 首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将 PMTU的假设值更改为新收到的MTU值继续发送报文。如此反复,直到报文到达目的地之后,源节点就能知道到达目的地的PMTU了。
(6)跟踪邻居状态
通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
5 种邻居状态,分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。
下面以 A、B 两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设 A、B 之前从未通信),说明邻居状态迁移的过程。
1)A 先发送 NS 报文,并生成缓存条目,此时,邻居状态为 Incomplete。
2)若 B 回复 NA 报文,则邻居状态由 Incomplete 变为 Reachable,否则固定时间后邻居状态由 Incomplete 变为 Empty,即删除表项。
3)经过邻居可达时间,邻居状态由 Reachable 变为 Stale,即未知是否可达。
4)如果在 Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
5)在 Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送 NS 请求。
6)在经过一段固定时间后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable。
7)在 Probe状态,A每隔一定时间间隔发送单播NS,发送固定次数后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。
扩展问题:EUI-64是怎么生成地址的?
IEEE EUI-64规范是将接口的MAC地址转换为IPv6接口标识的过程。
MAC地址的前24位为公司标识,后24位为扩展标识符。从高位数,第7位是0表示了MAC地址本地唯一。
第一步将FFFE插入MAC地址的公司标识和扩展标识符之间。
第二步将从高位数,第7位的0改为1表示此接口标识全球唯一。
例如:MAC地址:000E-0C82-C4D4;转换后:020E:0CFF:FE82:C4D4。
这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。但是使用这种方式最大的缺点:是任何人都可以通过二层MAC地址推算出三层IPv6地址。
扩展问题:RS、RA的目的地址
RS FF02::2 RA FF02::1
扩展问题:被请求节点组播如何生成?组播MAC?
被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。一个接口无论配了多少个IPV6,请求节点组播地址一样。仅需加入一个组。
IPv4组播MAC地址的高24位为0x01005E,第25位为0,低23位为IPv4组播地址的低23位。VRRP4的组播IP:224.0.0.18 组播Mac:0100-5e00-0012
IPV6组播MAC地址的前16位固定为0x3333,将组播IPV6地址的后32位直接映射到组播MAC地址的后32位VRRP6的组播IP:FF02::12组播Mac:3333-0000-0012
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com