闲谈IPv6-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路由来确保连通性。

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

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值