National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 13

IPv6

位址寫法與縮寫、前綴、自動設定與雙堆疊
Interaction 25 minute(s)

Learning Objectives

  • 說明 IPv6 位址的長度與寫法:8 組、每組 16 位元的十六進位數字,用冒號分隔
  • 依規則縮寫與展開 IPv6 位址(省略前導零、:: 只能用一次),寫出標準的最短寫法
  • 從位址與前綴長度分出網路前綴與介面識別碼,說明為什麼主機所在的網段用 /64
  • 判斷位址類型:全域單播、鏈路本地、唯一本地、多播、迴路,並說明 IPv6 沒有廣播
  • 說明 SLAAC 怎麼自動產生位址、EUI-64 的步驟與隱私問題,以及雙堆疊與轉換機制

為什麼需要 IPv6

上一課看到 IPv4 靠私有位址與 NAT 撐過位址不足,但也付出了代價:點對點連線困難、來源位址失真、路由器要維護轉換表。 IPv6(Internet Protocol version 6,目前的規格是 RFC 8200)的位址是 128 位元,最多 2128 個,大約 3.4×1038。 這個數字大到每一台設備都可以有自己的公有位址,不需要靠 NAT 共用。

IPv4 IPv6
位址長度 32 位元 128 位元
寫法 十進位,點分隔:192.0.2.10 十六進位,冒號分隔:2001:db8::10
一個網段的大小 依遮罩,常見 /24(254 台主機) 主機所在的網段幾乎一律用 /64
廣播 有 沒有,改用多播
自動設定 主要靠 DHCP 可以不靠伺服器,自己產生位址(SLAAC),也可以用 DHCPv6
找鄰居的 MAC ARP 鄰居探索(NDP,用 ICMPv6 訊息)

IPv6 不是 IPv4 的新版本號而已,兩者的封包格式不相容:只支援 IPv4 的設備看不懂 IPv6 封包。所以兩者會長期並存,這一課最後會講怎麼並存。

這一課的範例位址都在 2001:db8::/32 裡,這一段保留給文件與書籍使用(RFC 3849),不會分配給任何人,就像 IPv4 的 192.0.2.0/24。 2024 年的 RFC 9637 又多保留了一段更大的 3fff::/20,同樣只用在文件裡。

位址的寫法與縮寫規則

128 位元分成 8 組,每組 16 位元,每組寫成 4 個十六進位數字,用冒號隔開:

2001:0db8:0000:0000:0000:ff00:0042:8329

這樣太長,所以有兩條縮寫規則:

規則 說明 例子
一、省略前導零 每組開頭的 0 可以省略,但每組至少留一個數字 0db8 → db8、0042 → 42、0000 → 0
二、用 :: 代替連續的全 0 組 連續一組以上的 0 可以換成 :: 2001:db8:0:0:0:ff00:42:8329 → 2001:db8::ff00:42:8329

:: 在一個位址裡只能用一次。 展開時,:: 代表「補上剛好讓總數變成 8 組的 0」;如果出現兩次,就不知道各補幾組。 例如 2001:db8::1::5 可能是 2001:db8:0:1:0:0:0:5,也可能是 2001:db8:0:0:0:1:0:5,所以是錯的寫法。

同一個位址可以有好幾種合法的縮寫,為了讓大家寫出一樣的結果(方便搜尋、比對紀錄),RFC 5952 建議一種標準寫法:

  1. 前導零一定要省略
  2. :: 用在最長的一段連續 0;一樣長時用第一段
  3. 只有一組 0 時寫 0,不要用 ::
  4. 英文字母一律小寫
位址(完整) 標準寫法 說明
2001:0db8:0000:0000:0000:0000:0000:0001 2001:db8::1 連續 6 組 0
2001:0db8:0000:0001:0000:0000:0000:0001 2001:db8:0:1::1 第 3 組只有一組 0 寫 0;第 5~7 組換成 ::
2001:0db8:0000:0000:0001:0000:0000:0001 2001:db8::1:0:0:1 兩段都是 2 組,用第一段
0000:0000:0000:0000:0000:0000:0000:0001 ::1 迴路位址

展開時反過來做:先數已經寫出來幾組,:: 補上缺的組數,每組再補成 4 個數字。

互動練習:縮寫與展開

輸入任何寫法的 IPv6 位址,按「分析」:工具會畫出 8 組、標出整組是 0 的地方,並一步一步做縮寫。寫錯時會說明哪裡錯。

小測驗:IPv6 的寫法

1.

下列哪一個是合法的 IPv6 位址寫法?

2.

2001:0db8:0000:00a0:0000:0000:0000:0010 的標準寫法是?

3.

fe80::1 的 :: 代表幾組 0?

第 1 次作答

前綴、/64 與位址類型

IPv6 和 IPv4 的 CIDR 一樣用前綴長度表示網路的部分,例如 2001:db8:acad:1::25/64: 前 64 位元 2001:db8:acad:1 是網路前綴,後 64 位元 ::25 是介面識別碼(interface ID,相當於 IPv4 的主機部分)。

主機所在的網段幾乎一律用 /64。 一個 /64 有 264 個位址,用不完也沒關係;固定 64 位元的介面識別碼,主機才能自己產生位址(後面的 SLAAC)。 所以 IPv6 不需要像 IPv4 那樣精打細算遮罩:電信業者通常分給一個單位或家庭一整段(常見 /48 或 /56),單位內再切成很多個 /64。

分到的前綴 可以切出幾個 /64
/48 216=65,536 個
/56 28=256 個
/64 1 個

IPv6 的位址類型由開頭的位元決定(位址架構定義在 RFC 4291):

類型 前綴 開頭看起來像 用途
全域單播 2000::/3 2xxx、3xxx 網際網路上唯一、可以路由,相當於 IPv4 的公有位址
鏈路本地 fe80::/10 fe80 只在同一個網段有效,路由器不轉送;每個介面都會自動有一個,鄰居探索、路由器之間的通訊都用它
唯一本地(ULA) fc00::/7 fdxx 組織內部使用,不在網際網路上路由(RFC 4193),角色類似 IPv4 的私有位址
多播 ff00::/8 ffxx 送給一群介面
迴路 ::1/128 ::1 自己,同 127.0.0.1
未指定 ::/128 :: 還沒有位址時當作來源

IPv6 沒有廣播。 IPv4 用廣播做的事(例如 ARP 問「誰是某某位址」)改用多播:只送給可能有關的那一群,不必打擾網段上的每一台。 常見的多播位址:ff02::1 是這個網段上的所有節點、ff02::2 是所有路由器。

一個 IPv6 介面通常同時有好幾個位址:一個鏈路本地位址,加上一個或多個全域單播位址,另外還加入幾個多播群組。這和 IPv4 一個介面通常一個位址很不一樣。

SLAAC 與 EUI-64:自己產生位址

IPv6 的主機可以不靠 DHCP 伺服器,自己產生位址,叫做無狀態位址自動設定(SLAAC,stateless address autoconfiguration,RFC 4862):

  1. 介面啟用後,先用 fe80::/64 加上自己的介面識別碼,產生鏈路本地位址
  2. 確認網段上沒有別人用同一個位址(重複位址偵測,DAD)
  3. 向 ff02::2(所有路由器)送出路由器請求;路由器回覆路由器通告(RA),裡面有這個網段的前綴(例如 2001:db8:acad:1::/64)與預設閘道
  4. 用「前綴+自己的介面識別碼」組成全域單播位址,同樣先做重複位址偵測再使用

介面識別碼怎麼來?早期常用 EUI-64:從網路卡 48 位元的 MAC 位址變出 64 位元。

步驟 例子(MAC 00:1a:2b:3c:4d:5e)
1. 從中間分成兩半 00:1a:2b | 3c:4d:5e
2. 中間插入 ff:fe 00:1a:2b:ff:fe:3c:4d:5e
3. 第一個位元組的第 7 個位元(U/L 位元)反轉 00=0000 0000 → 0000 0010=02
4. 寫成 4 組,接在 /64 前綴後面 2001:db8:acad:1:21a:2bff:fe3c:4d5e

問題是:MAC 位址是固定的,用它產生的介面識別碼到哪個網路都一樣,網站只要看位址的後半段就能認出「又是這台設備」,追蹤使用者。 所以現在的作業系統大多改用不含 MAC、看起來隨機的介面識別碼:RFC 8064 建議穩定使用的位址不要內嵌 MAC,RFC 8981 再定義定期更換的臨時位址,用來主動連出。 看到位址中間有 ff:fe,就很可能是 EUI-64 產生的。

SLAAC 只給位址與閘道。需要集中管理、記錄誰用了哪個位址時,網路也可以改用 DHCPv6,或 SLAAC 搭配 DHCPv6 提供 DNS 等其他設定(RA 裡也可以直接帶 DNS 伺服器的資訊)。

互動練習:前綴、EUI-64 與位址類型

三個工具:前綴(標出網路前綴與介面識別碼)、EUI-64(一步一步從 MAC 產生介面識別碼)、類型判斷。每個都可以改輸入再按「分析」。

小測驗:前綴、類型與自動設定

1.

fe80::1a2b:3cff:fe4d:5e6f 是哪一種位址?

2.

IPv4 用廣播做的事,在 IPv6 改用什麼?

3.

電信業者分給實驗室 2001:db8:acad::/48。實驗室最多可以切出幾個 /64 網段?

4.

主機透過 SLAAC 產生全域單播位址時,前綴從哪裡來?

第 1 次作答

雙堆疊與轉換:IPv4 和 IPv6 怎麼共存

IPv4 和 IPv6 的封包互不相容,網際網路不可能在某一天全部切換。實際的做法有三類:

做法 怎麼做 什麼時候用
雙堆疊(dual stack) 設備同時有 IPv4 和 IPv6 位址,兩套協定一起跑;對方兩種都有時優先用 IPv6 最常見;現在多數作業系統、手機與大型網站都支援
通道(tunneling) 把 IPv6 封包裝在 IPv4 封包裡,穿過只支援 IPv4 的網路(或反過來) 中間某一段還不支援時的過渡做法
轉換(translation) 在邊界的設備把 IPv6 封包改寫成 IPv4(例如常見的 NAT64,搭配 DNS64 產生對應的位址) 只有 IPv6 的網路要連到只有 IPv4 的服務,例如部分行動網路

雙堆疊時,DNS 會同時查名稱的 A 記錄(IPv4 位址)與 AAAA 記錄(IPv6 位址),第 18 課會再談 DNS 的記錄類型。 瀏覽器拿到兩種位址時,通常同時嘗試、優先使用 IPv6,失敗時很快改用 IPv4,使用者不會感覺到差別。

改用 IPv6 時也要注意:每台設備都有公有位址、沒有 NAT 擋在前面,能不能從外面連進來完全由防火牆決定,所以 IPv6 的防火牆規則和 IPv4 一樣重要,不能只設定了 IPv4 那一套。

重點整理

  • IPv6 位址 128 位元,寫成 8 組、每組 4 個十六進位數字,用冒號分隔;範例與文件用 2001:db8::/32。
  • 縮寫:每組省略前導零、連續的全 0 組換成 ::(只能用一次);標準寫法用最長(同長取第一段)的一段 0、單獨一組 0 寫 0、字母小寫。
  • 前綴長度分出網路前綴與介面識別碼;主機所在的網段用 /64,單位常分到 /48 或 /56 再切。
  • 類型:全域單播 2000::/3、鏈路本地 fe80::/10、唯一本地 fc00::/7、多播 ff00::/8、迴路 ::1;沒有廣播。
  • SLAAC:從路由器通告拿前綴,自己產生介面識別碼;EUI-64 由 MAC 插入 ff:fe、反轉第 7 個位元,但會洩漏 MAC,現在多改用隨機的介面識別碼。
  • IPv4 與 IPv6 透過雙堆疊、通道與轉換長期並存。

下一課回到診斷工具:ICMP,以及由下往上找出網路問題的排錯流程。

這一課完成了!
Next lesson:ICMP 與網路診斷
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。