1. 故事
按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。
序幕:溫習一下
第 1 步/共 12 步
Private IP 出不了門
家中裝置用 Private IP(私人位址),例如 192.168.1.10。全世界無數個家庭都用同樣的位址,所以互聯網上的 Router 不會轉送寄往 192.168.x.x 的封包。家中只有一個 Public IP(公共位址):我對外的 203.0.113.1。
動畫文字版(全部步驟)
- 序幕:溫習一下
- Private IP 出不了門 路路:家中裝置用 Private IP(私人位址),例如
192.168.1.10。全世界無數個家庭都用同樣的位址,所以互聯網上的 Router 不會轉送寄往192.168.x.x的封包。家中只有一個 Public IP(公共位址):我對外的203.0.113.1。- 詳細內容:第 8 課「誰給我位址?DHCP 與 NAT」
- 第一幕:大家一起出門
- 阿麥出發 小比:阿麥打開
example.com。我的寄件人是192.168.1.10:50000,收件人是192.0.2.80:443。這樣出門,回覆就找不到路回來了! - 管理處改寫寄件人 路路:讓我來!我把寄件人改成自己的
203.0.113.1,連 Port(連接埠)也改成40001,再記在 NAT Table(NAT 表)。這叫 NAT(網絡位址轉換)。- NAT Table:
192.168.1.10:50000↔203.0.113.1:40001
- 電視同時上網 路路:電視也在同一時間連接
example.com,它剛好也用 Port50000。沒關係,我把它改成203.0.113.1:40002。一個 Public IP,靠不同的 Port 分辨不同的裝置。- NAT Table:
192.168.1.10:50000↔203.0.113.1:40001192.168.1.11:50000↔203.0.113.1:40002- 連 Port 一起改寫,叫 PAT(連接埠位址轉換)
- 回信轉交正確的住戶 路路:伺服器的回覆寄到
203.0.113.1:40001。我查 NAT Table:40001屬於阿麥!於是把收件人改回192.168.1.10:50000,交給阿麥。 - 不明來歷的信,不收 路路:有一個封包寄到
203.0.113.1:40005,可是 NAT Table 內沒有這個記錄,我不知道要交給誰,只好丟棄。這是 NAT 的副作用,但它不是真正的保安。- 真正的把關,要靠 Firewall(防火牆)(小故事 19)
- 第二幕:由外面連回家
- 阿麥在咖啡店 阿麥:我在咖啡店,想看看家中桌面電腦的相片伺服器(
192.168.1.12:8080)。我只知道家中的 Public IP,於是連接203.0.113.1:8080。- 咖啡店 Router 也做 NAT:寄件人
192.168.0.23變成198.51.100.1
- 咖啡店 Router 也做 NAT:寄件人
- 路路不知道交給誰 路路:這個封包不是回覆,NAT Table 內沒有記錄。家中有三部裝置,我不知道
8080要交給誰,只好丟棄。 - 設定 Port Forwarding 阿麥:回到家,我在路路的設定頁加一條規則:「寄到
8080的 TCP 封包,交給192.168.1.12:8080。」這叫 Port Forwarding(連接埠轉發),好像通知管理處代我轉交某個信箱的信。 - 連回家了! 小比:阿麥再試一次。路路按規則把收件人改成
192.168.1.12:8080,交給桌面電腦。相片伺服器的回覆,也沿原路回到咖啡店! - 開了一道門,要小心 路路:Port Forwarding 等於在大廈外牆開了一道門,全世界都可以來敲
8080。只開真正需要的 Port,用強密碼,保持軟件更新;更安全的方法是用 VPN(虛擬私人網絡),小故事 18 再講。 - 總結:大廈管理處 路路:出去時,NAT 把寄件人改成 Public IP,並用 NAT Table 記住誰是誰;回來時查表轉交。外面的人要主動連回家,就要設定 Port Forwarding。第二部分到此完結,下一站:傳輸與服務!
2. 問題在哪裡
家中的阿麥、電視和桌面電腦,用的都是 Private IP(私人位址),即只在家中 LAN(區域網絡)內使用的位址,例如 192.168.1.10。
全世界無數個家庭都在用 192.168.1.10。如果小比背著這個寄件人出門,伺服器的回覆應該寄去哪一家?沒有人知道。所以互聯網上的 Router(路由器)根本不會轉送寄往 192.168.x.x 的封包。
可是,ISP(互聯網服務供應商)通常只給每個家庭一個 Public IP(公共位址),即在互聯網上可以被直接找到的位址。這裡是路路對外的 203.0.113.1。
於是出現兩個問題:
- 全家幾部裝置,怎樣共用一個 Public IP 出門,而回信又不會送錯人?
- 阿麥身在外面,想連回家中某一部電腦,路路又怎樣知道要交給誰?
3. 網絡怎樣解決
想像一座大廈。住戶寄信時,管理處把寄件人改成「大廈地址 + 一個信箱號碼」,並在簿上記下「這個信箱號碼屬於哪一戶」。回信寄到大廈,管理處一查簿就知道交給誰。
這就是 NAT(網絡位址轉換):Router 把 Private IP 改寫成自己的 Public IP,並記在 NAT Table(NAT 表)。家用 Router 連 Port(連接埠)號碼也一起改寫,嚴格來說叫 PAT(連接埠位址轉換)。
外面的人要主動找某一戶,就要預先通知管理處:「寄到這個信箱的信,交給某某。」這叫 Port Forwarding(連接埠轉發)。
4. 看深一點
出門時:改寫寄件人
阿麥打開 example.com,伺服器位址是 192.0.2.80,網頁用 Port 443。(留意:192 開頭不一定是 Private,只有 192.168 開頭才是。)
| 位置 | 寄件人 | 收件人 |
|---|---|---|
| 家中(路路之前) | 192.168.1.10:50000 |
192.0.2.80:443 |
| 互聯網(路路之後) | 203.0.113.1:40001 |
192.0.2.80:443 |
路路只改寫寄件人;收件人全程不變。50000 是阿麥的電腦臨時選的 Port,叫 Ephemeral Port(臨時連接埠)。
路路的 NAT Table
電視剛好在同一時間連接同一個伺服器,也用了 Port 50000。路路就替它選另一個對外 Port:
| 內部(Private) | 對外(Public) | 遠端伺服器 |
|---|---|---|
192.168.1.10:50000 |
203.0.113.1:40001 |
192.0.2.80:443 |
192.168.1.11:50000 |
203.0.113.1:40002 |
192.0.2.80:443 |
一個 Public IP 有 65,535 個 Port 可用,所以一家人同時開幾百個連線也不成問題。
回來時:查表改寫收件人
伺服器的回覆寄到 203.0.113.1:40001。路路查表,找到 40001 屬於阿麥,就把收件人改回 192.168.1.10:50000,再交給阿麥。
記錄不是永久的:連線結束,或者一段時間沒有使用,路路就會把它刪除。
查不到記錄的封包
一個寄到 203.0.113.1:40005 的封包,NAT Table 內沒有記錄,也沒有 Port Forwarding 規則。路路不知道交給誰,只好丟棄。
這令外面的人較難直接找到家中裝置,但 NAT 本身不是保安設計。真正按規則把關的,是 Firewall(防火牆),小故事 19 會詳細介紹。
Port Forwarding:預先寫好的轉交指示
阿麥在咖啡店(192.168.0.23),想連回家中桌面電腦的相片伺服器 192.168.1.12:8080。咖啡店 Router 也會做 NAT,所以封包出門時寄件人變成 198.51.100.1。
封包寄到 203.0.113.1:8080,但這不是回覆,NAT Table 內沒有記錄。於是阿麥回家後,在路路的設定頁加了一條 TCP(傳輸控制協定)規則:
| 通訊協定 | 對外 Port | 內部位址 | 內部 Port |
|---|---|---|---|
| TCP | 8080 |
192.168.1.12 |
8080 |
之後,寄到 203.0.113.1:8080 的 TCP 封包,路路都會把收件人改成 192.168.1.12:8080,交給桌面電腦。回覆則按記錄沿原路回到咖啡店。
開門的代價
Port Forwarding 等於在外牆開了一道門,互聯網上任何人都可以來敲 8080。所以:
- 只開真正需要的 Port,不用時就刪除規則。
- 伺服器要用強密碼,軟件要保持更新。
- 更安全的方法是用 VPN(虛擬私人網絡),即先經加密隧道「回到」家中 LAN,才連接裝置。小故事 18 會講。
5. 動手試試
任務:找出你家的轉交指示
- 在手機或電腦查看自己的 IP Address(網絡位址),通常是
192.168.開頭的 Private IP。 - 再用搜尋器搜尋「我的 IP」,看看互聯網看到的 Public IP。兩個位址不同,就是因為 Router 做了 NAT。
- 如果家長同意,登入家中 Router 的設定頁(位址通常印在 Router 底部),找找「Port Forwarding」或「虛擬伺服器」一頁。裡面有沒有你不認識的規則?
- 只看不改。有疑問,請先問家中負責管理網絡的人。
小互動
NAT 的出入次序
阿麥打開 example.com。把以下五個步驟排好次序。
- example.com 回覆寄到 203.0.113.1:40001
- 阿麥送出封包:由 192.168.1.10:50000 寄往 192.0.2.80:443
- 阿麥收到回覆
- 路路改寫寄件人為 203.0.113.1:40001,並記入 NAT Table
- 路路查 NAT Table,把收件人改回 192.168.1.10:50000
6. 比喻的極限
- 管理處不只改地址。 路路改寫位址後,還要重新計算 IP 和 TCP 標頭裡的檢查碼,否則對方會以為封包損壞了。
- 對外 Port 不一定是 40001。 動畫為了容易記,用了
40001、40002;真實的 Router 會自己選號碼,有時甚至保留原本的50000,只在撞號時才改。 - 大廈不只一層管理處。 有些 ISP 位址不夠,會在自己的網絡內再做一次 NAT,叫 CGNAT(電訊商級 NAT)。這時你的 Router 對外位址也不是真正的 Public IP,Port Forwarding 也可能無法生效。
- NAT 不是保安。 管理處丟棄不明來歷的信,只是因為不知道交給誰,並不是在檢查信件是否危險。
- IPv6 通常不需要管理處。 IPv6 位址多到用不完,每部裝置都可以有自己的 Public 位址,所以一般不用 NAT,改由 Firewall 決定誰可以進來。
7. 小測驗
8. 重點筆記
- 家中裝置用 Private IP,全家只有一個 Public IP;NAT(網絡位址轉換)讓大家共用它出門。
- 出門時,路路把寄件人改成
203.0.113.1加一個對外 Port,並記入 NAT Table;回來時查表,把收件人改回原本的裝置。 - 連 Port 一起改寫叫 PAT(連接埠位址轉換),靠不同的對外 Port 分辨不同裝置。
- NAT Table 內沒有記錄的封包會被丟棄;外面要主動連回家,就要設定 Port Forwarding(連接埠轉發)。
- Port Forwarding 等於開了一道門,只開需要的 Port;NAT 不是 Firewall。
延伸閱讀
第二部分「走出 LAN」到此完結:小比已經學會找路、交換情報,還懂得經大廈管理處出入。第三部分開始講傳輸與服務。一張相片被切成很多個小比上路,萬一其中一個走失了,怎麼辦?下一個故事,TCP 會教你怎樣用 Sequence Number(序號)和 ACK(確認)確保每一份都平安到達。