IPv6的本地联网地址计算方法详解

IPv6的世界里,若是DHCP6和SLACC这两位大佬都为没有为可怜的网卡分配IP地址,也没有人为网卡设置静态的IP地址,系统就会为网卡计算一个IPv6的网址来。这样的网址只能在本地使用,不得路由,因此,被称为“link-local address”,译做“本地联网地址”。html

其方法是在特殊的网段fe80::/64内,利用网卡的MAC地址拼凑一个64位的地址,放在fe80::/64后,组成一个128位的本地联网地址。bash

本地的主机之间可使用这个地址通讯。首先,咱们来看一看这个地址如何计算。网络

第1步:找到网卡的MAC地址

# nmcli con show
# nmcli con show eth0


第2步:将MAC地址转换成二进制

oschina.net就有在线转换工具:https://tool.oschina.net/hexconvert/app

好比说,找到的16进制的MAC地址是:00:11:22:aa:bb:cc,去掉中间间隔的冒号后,提交转换成2进制获得一个长度为37位的字串:ssh

1000100100010101010101011101111001100

第3步:将第7位进行0-1互换

将37位的字串补齐为48位,获得以下字串:工具

000000000001000100100010101010101011101111001100

蓝色为补齐的数字。将第7位数字进行0-1互换,即若是是0,就换成1;若是是1,就换成0。因而获得以下48位字串,其中紫色的那个1就是互换的结果:spa

000000100001000100100010101010101011101111001100

第4步:再转换成16进制

将上一步获得的48位字串再转换成16进制数字,获得以下结果:.net

获得的结果是:21122aabbcc3d

第5步:插入ff:fe

在上述结果的中间位置插入ff:fe。21122aabbcc,原来是MAC地址,是12位,现在只剩下11位,须要加0补全,因而获得的结果是:021122aabbcc。再将ff:fe插到中间位置,再写成4个字符一组的模式,以下:code

0211:22ff:feaa:bbcc

第6步:加上前面64位

在前面加上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/

相关文章
相关标签/搜索