IPv6的世界里,若是DHCP6和SLACC这两位大佬都为没有为可怜的网卡分配IP地址,也没有人为网卡设置静态的IP地址,系统就会为网卡计算一个IPv6的网址来。这样的网址只能在本地使用,不得路由,因此,被称为“link-local address”,译做“本地联网地址”。html
其方法是在特殊的网段fe80::/64内,利用网卡的MAC地址拼凑一个64位的地址,放在fe80::/64后,组成一个128位的本地联网地址。bash
本地的主机之间可使用这个地址通讯。首先,咱们来看一看这个地址如何计算。网络
# nmcli con show # nmcli con show eth0
oschina.net就有在线转换工具:https://tool.oschina.net/hexconvert/app
好比说,找到的16进制的MAC地址是:00:11:22:aa:bb:cc,去掉中间间隔的冒号后,提交转换成2进制获得一个长度为37位的字串:ssh
将37位的字串补齐为48位,获得以下字串:工具
蓝色为补齐的数字。将第7位数字进行0-1互换,即若是是0,就换成1;若是是1,就换成0。因而获得以下48位字串,其中紫色的那个1就是互换的结果:spa
将上一步获得的48位字串再转换成16进制数字,获得以下结果:.net
获得的结果是:21122aabbcc3d
在上述结果的中间位置插入ff:fe。21122aabbcc,原来是MAC地址,是12位,现在只剩下11位,须要加0补全,因而获得的结果是:021122aabbcc。再将ff:fe插到中间位置,再写成4个字符一组的模式,以下:code
0211:22ff:feaa:bbcc
在前面加上64位地址:fe80::/64获得的地址就是IPv6本地连接地址,能够用来在本地网络中通讯,即:
fe80::211:22ff:feaa:bbcc
若是要与这个IPv6地址通讯,须要带上其网卡的链接id(connection id),也就是使用nmcli con show看到的那个id,以下图所示:
所上图所示,nmcli con show的界面上,第一列的NAME就是connection id。使用nmcli con show eth0,看到的详细状况中,这个eth0又被称为"链接id"。在这一点上,nmcli处理的很差,同一属性,两种查法中,却使用了不一样的名字,让人费解。好了,如今就来试试这个计算出来的IPv6本地联网地址吧!
# ping6 fe80::211:22ff:feaa:bbcc%eth0 # ssh root@fe80::211:22ff:feaa:bbcc%eth0
参考:
https://tools.ietf.org/html/rfc4291#appendix-A
https://tool.oschina.net/hexconvert/