闲谈IPv6-IPv6地址的scope到底是什么?_ipv6 scope

周日,大早上六点多和疯子去菜市场买了菜,顺便打了一壶糯米烧酒,回来把我的正则安哥哄睡了之后,继续思考IPv6的细节。


一台主机启动后,每一块网卡都会自动生成一个fe80打头的 链路本地地址 ,这个地址在Linux上你删都删不掉,不信你试试,在Windows是可以删掉的,但是只要你重置网卡,它就会自动生成…

这个所谓的链路本地地址到底有何怪异?


我的主机安装两块网卡,分别连接两个网络, 在系统初启的时候,两块网卡分别自动获得了两个IPv6地址:
enp0s8:fe80::fbb2:a1e:e59:15eb/64
enp0s9:fe80::ac5b:e7c6:9d00:797d/64

其中enp0s9的对端连接着另外一台机器的网卡,其网卡IP是:
eth0:fe80::ebad:9145:fe66:55cc/64

这里,enp0s9和eth0是直连的,二者可以直接ping通吗?

不能!

如果像IPv4那样理解为仅仅 二者是直连的 以及 二者是同一网段的 就可以ping通的话,那就错了。

事实上,你会发现, 全世界所有的网卡的链路本地地址都是同一个fe80::/16一个网段的! ,但是它们却不一定能彼此ping通。这是和IPv4之间的大不同。

IPv4之所以直连的同一网段的两个地址之间可以互通,完全是因为当你配置IP地址的时候,系统自动生成的 链路路由 使其可以互通,但是IPv6的所有链路本地地址都在一个网段,仅仅靠IP路由,便不足以使其互通。


IPv6地址是有严格scope限制的, 两个地址首先要被限制在自己的scope内,其次才考虑路由的连通性。

比如两个链路本地地址,必须是二层直连的,才能相互ping通。为了避免歧义,在上面的例子中,在操作上,如果你想从enp0s9这块网卡的链路本地地址ping通对端的eth0链路本地地址,那么你必须使用下面的命令:

ping6 fe80::ebad:9145:fe66:55cc%enp0s9

注意,后面的 %enp0s9 是必须的,它规定了 一条链路的维度! 否则,没有这个维度限制的话,ping6命令接下来的底层就会按照全球地址最长前缀匹配规则去寻址,全世界所有网卡,包括该主机自己的多块网卡,均拥有相同网段fe80::/16的地址,按照IPv4的规则,这实属同一网段,这会令其费解!左边也有链路路由,右边也有同样的链路路由,到底往哪走!?

有了链路scope维度的限制,链路路由又成了唯一的了,这样自然就通了。


IPv6声称自己实现了严格的地址scope,然而IPv6除了链路本地地址以及本地主机地址有着严格的scope限制之外,别的scope再也没有类似的限制了。我们知道IPv6的socpe包括host,link,site,global,但是site被废弃了,因此就再也没有了严格的限制。

不过,思想还是重要的,这是IPv6的创举,IPv4就没有类似的机制。但是IPv4模拟了scope,比如169.254这个网段的地址,就模拟了link-local链路本地地址。

总结一下:

  • IPv6的连通性首先要在自己的scope内考虑。
  • IPv6地址在自己的scope内基于IP路由来确保连通性。

浙江温州皮鞋湿,下雨进水不会胖。

原文链接: https://blog.csdn.net/dog250/article/details/88773892

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    闲谈IPv6-IPv6地址的scope到底是什么?_ipv6 scope

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/406619

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午9:58
下一篇 2023年4月26日 上午9:58

相关推荐