ipv6+ssh+java_IPv6的本地联网地址计算方法详解
IPv6的世界里,如果DHCP6和SLACC這兩位大佬都為沒(méi)有為可憐的網(wǎng)卡分配IP地址,也沒(méi)有人為網(wǎng)卡設(shè)置靜態(tài)的IP地址,系統(tǒng)就會(huì)為網(wǎng)卡計(jì)算一個(gè)IPv6的網(wǎng)址來(lái)。這樣的網(wǎng)址只能在本地使用,不得路由,所以,被稱為“l(fā)ink-local address”,譯作“本地聯(lián)網(wǎng)地址”。
其方法是在特殊的網(wǎng)段fe80::/64內(nèi),利用網(wǎng)卡的MAC地址拼湊一個(gè)64位的地址,放在fe80::/64后,組成一個(gè)128位的本地聯(lián)網(wǎng)地址。
本地的主機(jī)之間可以使用這個(gè)地址通信。首先,我們來(lái)看一看這個(gè)地址如何計(jì)算。
第1步:找到網(wǎng)卡的MAC地址
# nmcli con show
# nmcli con show eth0
第2步:將MAC地址轉(zhuǎn)換成二進(jìn)制
oschina.net就有在線轉(zhuǎn)換工具:https://tool.oschina.net/hexconvert/
比如說(shuō),找到的16進(jìn)制的MAC地址是:00:11:22:aa:bb:cc,去掉中間間隔的冒號(hào)后,提交轉(zhuǎn)換成2進(jìn)制得到一個(gè)長(zhǎng)度為37位的字串:
1000100100010101010101011101111001100
第3步:將第7位進(jìn)行0-1互換
將37位的字串補(bǔ)齊為48位,得到如下字串:
000000000001000100100010101010101011101111001100
藍(lán)色為補(bǔ)齊的數(shù)字。將第7位數(shù)字進(jìn)行0-1互換,即如果是0,就換成1;如果是1,就換成0。于是得到如下48位字串,其中紫色的那個(gè)1就是互換的結(jié)果:
000000100001000100100010101010101011101111001100
第4步:再轉(zhuǎn)換成16進(jìn)制
將上一步得到的48位字串再轉(zhuǎn)換成16進(jìn)制數(shù)字,得到如下結(jié)果:
得到的結(jié)果是:21122aabbcc
第5步:插入ff:fe
在上述結(jié)果的中間位置插入ff:fe。21122aabbcc,原來(lái)是MAC地址,是12位,如今只剩下11位,需要加0補(bǔ)全,于是得到的結(jié)果是:021122aabbcc。再將ff:fe插到中間位置,再寫成4個(gè)字符一組的模式,如下:
0211:22ff:feaa:bbcc
第6步:加上前面64位
在前面加上64位地址:fe80::/64得到的地址就是IPv6本地鏈接地址,可以用來(lái)在本地網(wǎng)絡(luò)中通信,即:
fe80::211:22ff:feaa:bbcc
如果要與這個(gè)IPv6地址通信,需要帶上其網(wǎng)卡的連接id(connection id),也就是使用nmcli con show看到的那個(gè)id,如下圖所示:
所上圖所示,nmcli con show的界面上,第一列的NAME就是connection id。使用nmcli con show eth0,看到的詳細(xì)情況中,這個(gè)eth0又被稱為"連接id"。在這一點(diǎn)上,nmcli處理的不好,同一屬性,兩種查法中,卻使用了不同的名字,讓人費(fèi)解。好了,現(xiàn)在就來(lái)試試這個(gè)計(jì)算出來(lái)的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/
總結(jié)
以上是生活随笔為你收集整理的ipv6+ssh+java_IPv6的本地联网地址计算方法详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spark-sql建表语句限制_Spar
- 下一篇: c语言中实现自动平移,c语言实现图像的旋