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/