全部課程
發(fā)布時間: 2019-12-19 15:05:26
IPv6的世界里,如果DHCP6和SLACC這兩位大佬都為沒有為可憐的網(wǎng)卡分配IP地址,也沒有人為網(wǎng)卡設(shè)置靜態(tài)的IP地址,系統(tǒng)就會為網(wǎng)卡計算一個IPv6的網(wǎng)址來。這樣的網(wǎng)址只能在本地使用,不得路由,所以,被稱為“l(fā)ink-local address”,譯作“本地聯(lián)網(wǎng)地址”。
其方法是在特殊的網(wǎng)段fe80::/64內(nèi),利用網(wǎng)卡的MAC地址拼湊一個64位的地址,放在fe80::/64后,組成一個128位的本地聯(lián)網(wǎng)地址。

本地的主機之間可以使用這個地址通信。首先,我們來看一看這個地址如何計算。
第1步:找到網(wǎng)卡的MAC地址
# nmcli con show
# nmcli con show eth0
第2步:將MAC地址轉(zhuǎn)換成二進制
oschina.net就有在線轉(zhuǎn)換工具:https://tool.oschina.net/hexconvert/
比如說,找到的16進制的MAC地址是:00:11:22:aa:bb:cc,去掉中間間隔的冒號后,提交轉(zhuǎn)換成2進制得到一個長度為37位的字串:
1000100100010101010101011101111001100

第3步:將第7位進行0-1互換
將37位的字串補齊為48位,得到如下字串:
000000000001000100100010101010101011101111001100
藍色為補齊的數(shù)字。將第7位數(shù)字進行0-1互換,即如果是0,就換成1;如果是1,就換成0。于是得到如下48位字串,其中紫色的那個1就是互換的結(jié)果:
000000100001000100100010101010101011101111001100
第4步:再轉(zhuǎn)換成16進制
將上一步得到的48位字串再轉(zhuǎn)換成16進制數(shù)字,得到如下結(jié)果:

得到的結(jié)果是:21122aabbcc
第5步:插入ff:fe
在上述結(jié)果的中間位置插入ff:fe。21122aabbcc,原來是MAC地址,是12位,如今只剩下11位,需要加0補全,于是得到的結(jié)果是:021122aabbcc。再將ff:fe插到中間位置,再寫成4個字符一組的模式,如下:
0211:22ff:feaa:bbcc
第6步:加上前面64位
在前面加上64位地址:fe80::/64得到的地址就是IPv6本地鏈接地址,可以用來在本地網(wǎng)絡(luò)中通信,即:
fe80::211:22ff:feaa:bbcc
如果要與這個IPv6地址通信,需要帶上其網(wǎng)卡的連接id(connection id),也就是使用nmcli con show看到的那個id,如下圖所示:

所上圖所示,nmcli con show的界面上,第一列的NAME就是connection id。使用nmcli con show eth0,看到的詳細情況中,這個eth0又被稱為"連接id"。在這一點上,nmcli處理的不好,同一屬性,兩種查法中,卻使用了不同的名字,讓人費解。好了,現(xiàn)在就來試試這個計算出來的IPv6本地聯(lián)網(wǎng)地址吧!
# 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/