分層堆疊與 PDU#
IPS 的每一層都建立在下一層之上,而且每一層都能把上一層的資料封裝(encapsulate) 起來,讓資料能在各層之間移動。每一層所傳輸的資料單位,稱為協定資料單元(protocol data unit, PDU)。
標頭、標尾與位址#
每一層的 PDU 都包含要傳輸的酬載(payload)資料。常見做法是在酬載前面加上一段標頭(header),裡面放著傳輸酬載所需的資訊,例如來源與目的節點的位址;有時 PDU 還會在酬載後面加上標尾(footer),放置確保正確傳輸所需的值,例如錯誤檢查資訊。

圖表 1-4:IPS 的資料封裝
不同分層對「PDU +標頭」有各自慣用的名稱,這是閱讀協定文件與封包分析工具時必須熟悉的術語:
| 分層 | 位址欄位 | 位址型態 | PDU 慣稱 |
|---|---|---|---|
| TCP(傳輸層) | 來源/目的連接埠(port) | 0–65535 | 區段(segment) |
| UDP(傳輸層) | 來源/目的連接埠 | 0–65535 | 資料報(datagram) |
| IP(網際層) | 來源/目的 IP 位址 | IPv4 32-bit/IPv6 128-bit | 封包(packet) |
| Ethernet(連結層) | 來源/目的 MAC 位址 | 64-bit | 訊框(frame) |
TCP/UDP 的連接埠讓單一節點能同時擁有多條不重複的網路連線。多數連接埠會依需要動態指派給新連線,但有些號碼有特殊約定,例如 HTTP 使用 80 埠。在多數類 Unix 系統上,可在
/etc/services檔案查到目前已指派的連接埠清單。
IPv4 與 IPv6 位址表示法
IPv4 使用 32 位元位址,通常寫成四個以點分隔的數字,例如
192.168.10.1。IPv6 使用 128 位元位址(因為 32 位元不夠現代網路使用),通常寫成以冒號分隔的十六進位數字,例如:
fe80:0000:0000:0000:897b:581e:44b0:2057連續的
0000區段可折疊成兩個冒號::,所以上面的位址也可寫成:fe80::897b:581e:44b0:2057MAC 位址(Media Access Control)通常在製造網路卡時就設定好,寫成一串以破折號或冒號分隔的十六進位數字,例如
0A-00-27-00-00-0E。
資料如何從一個節點送到另一個節點#

圖表 1-5:簡單的 Ethernet 網路
以一個含三個節點、透過交換器(switch)相連的簡單 Ethernet 網路為例:節點 A(IP 192.1.1.101)想用 IP 協定把資料送給節點 B(IP 192.1.1.50)。交換器負責在各節點間轉送 Ethernet 訊框,因為它只運作在連結層,所以本身不需要 IP 位址。傳送過程如下:
- 節點 A 的作業系統網路堆疊把應用層與傳輸層資料封裝起來,建立一個 IP 封包,來源位址
192.1.1.101、目的位址192.1.1.50。 - 此時作業系統想把 IP 資料封成 Ethernet 訊框,卻可能還不知道目標節點的 MAC 位址。它會用位址解析協定(Address Resolution Protocol, ARP) 向網路上所有節點廣播請求,詢問該目的 IP 對應的 MAC 位址。
- 收到 ARP 回應後,節點 A 建立訊框,把來源位址設為本機 MAC
00-11-22-33-44-55、目的位址設為66-77-88-99-AA-BB,將訊框送上網路,由交換器接收。 - 交換器把訊框轉送給目的節點;目的節點拆開 IP 封包、確認目的 IP 相符後,取出 IP 酬載資料往上層傳,交給等待中的應用程式。
記住這條「封裝—ARP 解析—送訊框—拆封」的流水線。之後做封包擷取時,你在工具裡看到的每一層標頭,都能對應回這裡的某個步驟。