CentOS 6 64bits
透過 ifconfig 先來看看我的 IPv6 位址.
[root@benjr Desktop]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:1A:64:22:04:83 inet6 addr: 2001:db8:0:1::100/64 Scope:Global inet6 addr: fe80::21a:64ff:fe22:483/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:36304 errors:0 dropped:0 overruns:0 frame:0 TX packets:100 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4193445 (3.9 MiB) TX bytes:12248 (11.9 KiB) Interrupt:17
IPv6 為 128 bits(位元) 包括網路位址 (Network Prefix) 與主機位址 (Interface Identifier),如果你的網路環境有 DHCPv6 – https://benjr.tw/10651 或是 RA (Router Advertisemen) – https://benjr.tw/94906 ,通常至少會有兩組 IPv6 位址.
- inet6 addr: 2001:db8:0:1::100/64 Scope:Global
- 網路位址 (Network Prefix)
2001:db8:0:1::/64 (64為 prefix ,功能類似 IPv4 的 Netmask) - 主機位址 (Host Identifier)
後面的 64 bits 就是 Host Identifier.
IPv6 環境中常用的 prefixes.
- Global – 2000::/3
- Unique local – FD00::/8
- Link local – FE80::/10
- Multicast – FF00::/8
- 網路位址 (Network Prefix)
- inet6 addr: fe80::21a:64ff:fe22:483/64 Scope:Link
這一組為 link-local Address ,只要網卡有啟動 IPv6 功能就會有 link-local address.Link-Local 的格式為 1111 1110 10 (Bit) 開頭,然後連續 54 個 0 (總共 64 bits) 再加上 Interface Identifier (64 bits),其 Identifier Address 是依據 EUI-64 (Extended Unique Identifier 64) 的方式將 MAC Address 做轉換,轉換方式如下.- MAC Address – 00:1A:64:22:04:83
- link-local address – fe80::21a:64ff:fe22:483
IPV6 長度為 128bits 而 MAC 長度為 48bits 要怎麼轉換呢!!
- 首先 MAC Address 的第五位元組與第四位元組插入 FF:FE
- 原 MAC Address 第6位元組的第二個 bit 從原來的 “0”轉成 “1”,所以 00 -> 02
- 前面再填入 fe80:0000:0000:0000
fe80:0000:0000:0000:021a:64ff:fe22:0483
寫這麼多 0 一定會寫錯,所以有簡寫的規則,規則如下:- 每 32Bit 如開頭之4bit表示為0,即可省略,若32Bit全為0,則可簡寫為0
- 若連續完整之32Bit段落皆為 0000,則可全省略,簡寫為::,但以一次為限
最後簡寫成為 : fe80::21a:64ff:fe22:483
要注意一下的是 Link Local Address 無法跨越 Router 傳送至其他網段.
CentOS 7 64bits
透過 ifconfig 先來看看我的 IPv6 位址.
[root@localhost ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.17.129 netmask 255.255.255.0 broadcast 172.16.17.255 inet6 fe80::fbcb:9dff:259b:f6ea prefixlen 64 scopeid 0x20<link> inet6 2001:db8::ce27:a3d8:4c4e:6a2f prefixlen 64 scopeid 0x0<global> ether 00:0c:29:eb:f1:61 txqueuelen 1000 (Ethernet) RX packets 190 bytes 20602 (20.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 187 bytes 23691 (23.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
一樣可以看到兩組 IPv6
- inet6 fe80::fbcb:9dff:259b:f6ea prefixlen 64 scopeid 0x20<link>
- inet6 2001:db8::ce27:a3d8:4c4e:6a2f prefixlen 64 scopeid 0x0<global>
不過 Link-Local – fe80::fbcb:9dff:259b:f6ea 看起來並不是透過 EUI-64 將 MAC Address – 00:0c:29:eb:f1:61 做轉換.似乎同 Windows 下是隨機產生的.
ping6 , traceroute6
環境換到 IPv6 ,相對應工具也需要改成 ping6 , traceroute6.
[root@localhost ~]# ping6 ipv6.google.com PING ipv6.google.com(ti-in-x8b.1e100.net (2404:6800:4008:c04::8b)) 56 data bytes 64 bytes from ti-in-x8b.1e100.net (2404:6800:4008:c04::8b): icmp_seq=1 ttl=255 time=67.0 ms 64 bytes from ti-in-x8b.1e100.net (2404:6800:4008:c04::8b): icmp_seq=2 ttl=255 time=50.0 ms 64 bytes from ti-in-x8b.1e100.net (2404:6800:4008:c04::8b): icmp_seq=3 ttl=255 time=45.7 ms ^C --- ipv6.google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 45.721/54.247/67.011/9.197 ms
[root@localhost ~]# traceroute6 ipv6.google.com traceroute to ipv6.google.com (2404:6800:4008:c04::8b), 30 hops max, 80 byte packets 1 ti-in-x8b.1e100.net (2404:6800:4008:c04::8b) 176.428 ms 176.258 ms 176.193 ms
如果是要 ping Link Local address 時需要在 ping6 IPv6 後面的參數加上 network_device_name 如下:
[root@localhost ~]# ping6 fe80::21a:64ff:fe22:483%ens33
將此行
1. 首先 MAC Address 的第四位元組與第五位元組插入 FF:FE
改為
1. 首先 MAC Address 的第五位元組與第四位元組插入 FF:FE
左右方向會比較清楚。
或是如引用連結的
將十六進位值 0xFF-FE 插入乙太網路 MAC 位址的中間,也就是原先第三位元組與第四位元組中間。
謝謝你的文件說明。