ipv6+ssh+java_IPv6的本地联网地址计算方法详解
IPv6的世界里,如果DHCP6和SLACC這兩位大佬都為沒有為可憐的網卡分配IP地址,也沒有人為網卡設置靜態的IP地址,系統就會為網卡計算一個IPv6的網址來。這樣的網址只能在本地使用,不得路由,所以,被稱為“link-local address”,譯作“本地聯網地址”。
其方法是在特殊的網段fe80::/64內,利用網卡的MAC地址拼湊一個64位的地址,放在fe80::/64后,組成一個128位的本地聯網地址。
本地的主機之間可以使用這個地址通信。首先,我們來看一看這個地址如何計算。
第1步:找到網卡的MAC地址
# nmcli con show
# nmcli con show eth0
第2步:將MAC地址轉換成二進制
oschina.net就有在線轉換工具:https://tool.oschina.net/hexconvert/
比如說,找到的16進制的MAC地址是:00:11:22:aa:bb:cc,去掉中間間隔的冒號后,提交轉換成2進制得到一個長度為37位的字串:
1000100100010101010101011101111001100
第3步:將第7位進行0-1互換
將37位的字串補齊為48位,得到如下字串:
000000000001000100100010101010101011101111001100
藍色為補齊的數字。將第7位數字進行0-1互換,即如果是0,就換成1;如果是1,就換成0。于是得到如下48位字串,其中紫色的那個1就是互換的結果:
000000100001000100100010101010101011101111001100
第4步:再轉換成16進制
將上一步得到的48位字串再轉換成16進制數字,得到如下結果:
得到的結果是:21122aabbcc
第5步:插入ff:fe
在上述結果的中間位置插入ff:fe。21122aabbcc,原來是MAC地址,是12位,如今只剩下11位,需要加0補全,于是得到的結果是:021122aabbcc。再將ff:fe插到中間位置,再寫成4個字符一組的模式,如下:
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/
總結
以上是生活随笔為你收集整理的ipv6+ssh+java_IPv6的本地联网地址计算方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spark-sql建表语句限制_Spar
- 下一篇: python socketserver最