邻居发现协议:neighbor discovery protocol(NS)
- 在ICMPv6中定义新的消息类型,实现地址解析,重复地址检测,跟踪邻居状态、路由器发现、重定向等功能。
133、134:主要实现路由器发现功能,包括发现网关、前缀,任何ipv6的路由器以及交换机都能提供此功能。
135、136:主要实现地址解析、重复地址检测(DAD)功能,其实也就是代替了ipv4中ARP(广播)的功能
注:ND代表邻居发现
ipv6地址发现技术
通过NS和NA报文实现ARP、DAD(重复地址检测)功能
- NS:neighbor solicitation,邻居请求,类似于ipv4中的ARP请求报文
- NA:neighbor advertisement,邻居通告,类似于ipv4中的ARP应答报文
上图的命令可以查看neighbor,使用ping命令ping一个地址之后会将改地址加到neighbor中来
再看一下neighbor:1和2都有了
STALE和REACH是怎么来的?
stale:当设备处于reachable状态后30s内,如果没有收到其他报文,则邻居状态进入stale状态,表示“陈旧”。如果设备不需要向该邻居发送数据,则此状态会一直持续下去,要注意的是,stale状态是这些状态中唯一可以稳定持续存在的状态。
reachable: reachable状态则是已经收到了NA响应报文(30s内)
注意下面的命令,用来列出当前网卡信息???
可以看出2018::2和2018::a都存在:
现在要清空这些邻居的表,要怎么做?
reset ipv6 neighbors all
这个时候再看邻居表就已经是空的了:
这个时候ping 2018::1 这个地址还能得到回复:这就类似于ARP请求的请求与回复,下图中已标出:
可以看出,2018::1和2018::a分别问了彼此在哪里,也就是分别向对方发送了一个请求,这样他们就有了彼此的mac地址。
下图可以看出,他们已经有了对方的Mac地址:
不管谁问谁,路由器能看出这个效果???下图中的路由器接口配了一个2018::A
这个时候他会加入一个特殊的组,请求节点组播组地址:
当路由器配完以后,会自动加入所有(所持有的?)节点这个组FF02::1,所有路由器这个组FF02::2,但是还有一个特殊的组,请求节点组播组:FF02::1:FF00:A
- solicited node:请求节点,开头=FF02::1:FF00/104,加上单播地址最后24位
可以看到前面的单播地址为2018::A,所以,请求节点组播组的最后16位为A。
这个时候再配一个最后24位为1234的单播地址,那么同样会加入一个1234结尾的请求节点组播组地址。
分析:当A想要获取1的mac地址时,1如果在线,自然会加入请求节点组,A可以向1对应的组播组地址发请求,此时若1在线就必然能收到,也就会回应该请求。
再次分析上次抓的包:2018::a的请求2018::1的Mac地址,那么2018::1必然会加入ff02::1:ff00:1这个请求节点组,此时1必然会收到a的包,收到包之后必然会有回应,回复的时候1已经知道a的Mac地址,就是单播了,(这里的单播是说类似于ipv4的单播)1问a的时候也是同样的道理。
ipv6就是用这种方法巧妙地完成了广播的功能。下面是通信流程图:可以看出首次发送的包中目标地址是B这个单播地址的请求节点组的地址。
类似于ARP,有一个免费ARP的功能,也就是自己向自己发送请求,可以实现地址冲突检测的功能。
看下面这张图,A配的地址为FC00::1,B也为FC00::1,我们可以看到A地址前边有一个“tentative address”,意为实验性的地址,A会发送一个包,目标组播组地址其实就是自己的组播组地址,如果有人回复的话,就说明地址重复了。自己问自己的这种方式简称为DAD。
这个时候做个实验,下图中的路由器和PC配了同样的地址会怎么样呢?
将路由器的地址修改为::2,先把之前的删掉2018::A删掉,在配置为2018::2(不然的话配不上),
回车以后,抓包查看:
可以看到,它以空地址发送了一个请求到2的组播组地址,询问2有没有mac地址,如果没有回复的话是没有问题的,说明没有地址冲突。
【本文为学习笔记,仅供参考,未完待续...】
但是我们可以看到是有回复的:
重新演示一遍:
右击AR1进行抓包,然后配置ar1的接口0/0/0为2018::A:
再来看一下抓包结果,蓝色那行其实就是在询问a的地址有没有重复,可以看出现在是没有回复的,当然,没有回复就对了,说明是没有重复的。
此时我们查看这个地址,其实已经生效了。
在没有得到确认之前,我们每配一个地址,它都会发送一个NS,确认有没有地址重复,如果没有重复的话地址后边会有tentative标识。
现在修改PC的地址为A:
现在我们再去看抓包工具,是没有提示的,这是因为配置PC的时候。PC是不会发NS请求的。如果是配置的路由器的话是会有NS请求,并且会回应提示地址冲突:
现在演示一下,先演示不冲突的地址:
配左右两边路由器为不同的地址:
此时是能ping通的,毕竟二者是直连的嘛:
但是一旦二者地址配置为冲突的地址的话,是会有提示的,此时打开ar2的抓包工具,修改ar2的地址与ar1的地址相同(需要先删掉之前配置的地址):
删掉之前配置的地址
然后配置成与右边一样的地址:
回车之后抓包:可以看到,先发了一个NS,紧接着有一个回应,代表地址冲突了,也就是这个地址不能使用。
可以看到,地址后边有一个DUPLICATE标识,这个就是DAD检测,会有一个间断性的重复检测的时间,类似于ARP的功能,是默认开启的,当然这个可以关闭,NS和NA也是默认开启的,但是是无法关闭的。
现在把地址修改回来,就可以了:
可以看到现在标识已经是TENTATIVE了。
以上是关于ipv6的NS和NA的功能,主要任务是代替ipv4中的ARP,需要关注的点在于,配置时会往哪里发包,组播地址类型中有一个请求节点地址,这个地址在单播地址配完以后,不需要做什么操作,其会自动加入某一个组,单播地址只使用到后24位,这种方式也会有冲突的可能性,但是24位冲突的几率几乎可以忽略不计。
文章来源:https://www.toymoban.com/news/detail-494919.html
总的来说一句话:NS和NA代替了ARP的功能。文章来源地址https://www.toymoban.com/news/detail-494919.html
到了这里,关于ipv6-冲突检测(NS和NA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!