Linux – IPv6 link-local address

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 – http://benjr.tw/10651 或是 RA (Router Advertisemen) – http://benjr.tw/94906 ,通常至少會有兩組 IPv6 位址.

  1. 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
  2. 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 要怎麼轉換呢!!

    1. 首先 MAC Address 的第五位元組與第四位元組插入 FF:FE
    2. 原 MAC Address 第6位元組的第二個 bit 從原來的 “0”轉成 “1”,所以 00 -> 02
    3. 前面再填入 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
    ipv6_mac

    要注意一下的是 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
沒有解決問題,試試搜尋本站其他內容

6 thoughts on “Linux – IPv6 link-local address

  1. 將此行
    1. 首先 MAC Address 的第四位元組與第五位元組插入 FF:FE

    改為
    1. 首先 MAC Address 的第五位元組與第四位元組插入 FF:FE

    左右方向會比較清楚。

    或是如引用連結的
    將十六進位值 0xFF-FE 插入乙太網路 MAC 位址的中間,也就是原先第三位元組與第四位元組中間。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料