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/

相關文章
相關標籤/搜索