1. 漫畫開場
漫畫文字版(畫面及對白)
| 格 | 畫面 | 對白 |
|---|---|---|
| 1 | 伺服器大廈 192.0.2.80 門口有信箱 53、80、443;小比把信投進 443 號。 |
字幕:「一部伺服器同時提供很多服務,每個服務有自己的信箱號碼,叫 Port(連接埠)。」 小比:「網頁要加密?那就是 443 號信箱!」 |
| 2 | 阿麥和伺服器之間的三個對話框:SYN、SYN-ACK、ACK(確認)。 | 字幕:「TCP(傳輸控制協定)送資料前,要先握三次手。」 阿麥:「你好,可以開始嗎?」 伺服器:「你好,收到,可以!」 阿麥:「好,開始吧!」 |
| 3 | 三個小比背著 1、2、3 號出發,2 號遺失;伺服器舉牌「收到 1,請再送 2!」;新的 2 號出發。 | 字幕:「TCP 會為每份資料編號;有遺失,就重送。」 小比:「2 號不見了?沒問題,我再跑一次!」 |
| 4 | 阿麥在視像通話,一疊明信片飛出,其中一張掉了。 | 字幕:「UDP(用戶資料包協定)不握手、不重送,快就是一切。」 阿麥:「少了一格畫面不要緊,繼續傾!」 |
2. 重點概念
一部電腦同時運行很多程式。Port(連接埠)就是同一部裝置上區分不同服務的號碼,好像大廈內的信箱號碼:IP Address(網絡位址)找到大廈,Port 找到信箱。
送資料有兩種方法:
- TCP(傳輸控制協定):先握手,資料編號,遺失就重送,保證完整、按次序送達,好像掛號信。
- UDP(用戶資料包協定):不握手,直接送出,快但不保證送達,好像明信片。
3. 看深一點
Port(連接埠):大廈內的信箱
IP Address 只能把封包送到哪一部裝置。但伺服器 192.0.2.80 可能同時是網頁伺服器和 DNS(網域名稱系統)伺服器,封包應該交給哪個程式?這要看 Port。
Port 是一個 16 位元的號碼,由 0 至 65535。常見的有:
| Port | 服務 | 用 TCP 還是 UDP |
|---|---|---|
| 53 | DNS(網域名稱系統) | 主要用 UDP |
| 67、68 | DHCP(動態主機設定協定) | UDP |
| 80 | HTTP(超文本傳輸協定),沒有加密的網頁 | TCP |
| 443 | HTTPS(加密網頁傳輸協定) | TCP(新一代的 HTTP/3 用 UDP) |
IP Address 加上 Port,就準確說明了「哪部裝置的哪個服務」,寫法是用冒號連起來,例如 192.0.2.80:443。
第 7 課說
example.com的伺服器用192.0.2.80,尾數 80 剛好和網頁的 Port 80 一樣,方便你記住。不過兩者是不同的東西:一個是 IP Address 的一部分,一個是 Port。
寄件人也有 Port
不只伺服器有 Port,你的裝置也有。阿麥打開 example.com 時:
| IP Address | Port | |
|---|---|---|
| 寄件人(阿麥) | 192.168.1.10 |
50000(系統臨時選的) |
| 收件人(伺服器) | 192.0.2.80 |
443 |
伺服器的 Port 是固定的,大家都知道網頁在 443;阿麥的 Port 是系統臨時選的,通常在 49152 至 65535 之間。回信時,伺服器就寄回 192.168.1.10:50000,阿麥的電腦就知道要交給哪一個瀏覽器分頁。
這就是第 8 課 NAT(網絡位址轉換)記錄簿裡那些 Port 號碼的來源。
圖解:左邊是伺服器大廈 192.0.2.80,門口的信箱就是 Port;右邊比較 TCP(掛號信)和 UDP(明信片)的特點。
TCP 第一步:Three-way Handshake(三次握手)
TCP 送資料前,雙方要先建立一條「連線」,確定大家都準備好。這要三個步驟,叫 Three-way Handshake(三次握手):
| 步驟 | 名稱 | 誰說 | 意思 |
|---|---|---|---|
| 1 | SYN | 阿麥 → 伺服器 | 「你好,我想開始,我的編號由這裡起。」 |
| 2 | SYN-ACK | 伺服器 → 阿麥 | 「你好,收到你的編號,我的編號由這裡起。」 |
| 3 | ACK | 阿麥 → 伺服器 | 「收到,開始吧!」 |
三步完成後,雙方才開始送真正的資料。對話完畢後,雙方再用 FIN 訊息說「再見」,關閉連線。
TCP 怎樣做到「保證送達」?
- 編號:TCP 為每份資料編上 Sequence Number(序號)。
- 確認:收件人收到後,會回覆 ACK(確認),意思是「我已收到這裡為止,請送下一份」。
- 重送:寄件人等了一會仍然收不到 ACK,就知道資料可能遺失,會重新送出。
- 排次序:封包可能走不同的路、不按次序到達,收件人會按編號砌回正確次序,才交給程式。
所以,用 TCP 的程式不用擔心資料遺失或次序錯亂,TCP 已經處理好。
圖解:上半部是三次握手 SYN、SYN-ACK、ACK;下半部是送資料:2 號遺失,收件人不斷回覆「請送 2」,寄件人於是重送 2 號。
UDP:送了就算
UDP 沒有握手、沒有編號確認、也不會重送。它只在資料外面加一個很小的 Header(標頭),寫上 Port 號碼,就送出去。這個 Header 只有 8 個 Byte(位元組),TCP 最少要 20 個 Byte。
聽起來好像很「求其」,但有些情況,快比完整重要:
- 視像通話、網上遊戲:少了一格畫面,下一格很快就到;如果停下來等重送,畫面反而會卡住。
- DNS 查詢:問題和答案都很短,一來一回就完成,不值得先握三次手;真的收不到答案,程式自己再問一次就可以了。
- DHCP:裝置還沒有 IP Address,不能好好建立連線。
兩者比較
| TCP(傳輸控制協定) | UDP(用戶資料包協定) | |
|---|---|---|
| 比喻 | 掛號信 | 明信片 |
| 先建立連線 | 要,三次握手 | 不用 |
| 保證送達 | 會,遺失會重送 | 不保證 |
| 保證次序 | 會 | 不保證 |
| Header 大小 | 最少 20 Byte | 8 Byte |
| 速度 | 較慢,要等確認 | 較快 |
| 常見用途 | 網頁、電郵、傳送檔案、即時通訊訊息 | 視像通話、網上遊戲、DNS、DHCP |
回到引子問題:傳訊息時,一個字也不能少,所以用 TCP;視像通話時,順暢比完美重要,所以多數用 UDP。至於在網上看影片,很多平台用 TCP,也有些用建立在 UDP 之上的新技術,各有取捨。
4. 動手試試
任務一:看看電腦正在用的 Port
在電腦上打開「命令提示字元」(Windows)或「終端機」(macOS),先用瀏覽器開幾個網站,然後輸入:
netstat -an
你會見到很多行,每行代表一個對話。找一找結尾是 :443 或 .443 的那些行,它們就是你正在連接的 HTTPS 網站。旁邊的 ESTABLISHED 表示 TCP 已經握完手、連線已建立。
看不懂全部內容也不要緊,能找到 443 就已經很好。
小互動
TCP 三次握手的次序
把 TCP 建立連線的三個步驟排好次序。
- SYN-ACK:伺服器回覆「你好,收到,可以!」
- ACK:阿麥回覆「好,開始吧!」
- SYN:阿麥說「你好,可以開始嗎?」
小互動
TCP 還是 UDP?
以下六種用途,最適合用哪一種?
-
1下載一個手機程式
-
2和朋友視像通話
-
3寄一封電郵
-
4玩多人網上射擊遊戲
-
5查詢 example.com 的 IP Address
-
6在網上銀行轉帳
全部分對了!要完整、按次序就用 TCP;要快、少了一點也不要緊就用 UDP。
5. 比喻的極限
- 掛號信不是真的「一定」送到。 如果網線斷了,TCP 也送不到;它的保證是「送到的資料一定完整、按次序」,送不到時會通知程式出錯。
- 明信片也不一定會掉。 大部分 UDP 封包其實都能順利到達,只是 UDP 本身不負責檢查和重送。
- 握手不只是打招呼。 三次握手時,雙方會交換起始的 Sequence Number 等資料,為之後的確認和重送做準備。
- UDP 之上可以自己加功能。 有些新技術(例如 HTTP/3 用的 QUIC)建立在 UDP 之上,再自己做編號和重送,兼顧速度與可靠。
- Port 號碼沒有「必須」。 443 是慣例,伺服器也可以用其他 Port 提供網頁,只是瀏覽器預設會找 443。
6. 小測驗
7. 重點筆記
- Port(連接埠)是 0 至 65535 的號碼,用來分辨同一部裝置上的不同服務;IP Address 加 Port 寫成
192.0.2.80:443。 - 常見 Port:53 是 DNS,80 是 HTTP,443 是 HTTPS;你的裝置則臨時選一個 Port 作寄件人。
- TCP(傳輸控制協定)先用 Three-way Handshake(SYN、SYN-ACK、ACK)建立連線,再用編號、確認和重送保證資料完整、按次序。
- UDP(用戶資料包協定)不握手、不重送,Header 只有 8 Byte,適合要快的用途。
- 要完整用 TCP,要快用 UDP。
下一站
你已經認識了全部角色和他們的工作。最後一課,我們把所有東西連起來:由你按下 Enter,到網頁出現,中間到底發生了什麼?