分層堆疊與 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:2057
  • MAC 位址(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 位址。傳送過程如下:

  1. 節點 A 的作業系統網路堆疊把應用層與傳輸層資料封裝起來,建立一個 IP 封包,來源位址 192.1.1.101、目的位址 192.1.1.50
  2. 此時作業系統想把 IP 資料封成 Ethernet 訊框,卻可能還不知道目標節點的 MAC 位址。它會用位址解析協定(Address Resolution Protocol, ARP) 向網路上所有節點廣播請求,詢問該目的 IP 對應的 MAC 位址。
  3. 收到 ARP 回應後,節點 A 建立訊框,把來源位址設為本機 MAC 00-11-22-33-44-55、目的位址設為 66-77-88-99-AA-BB,將訊框送上網路,由交換器接收。
  4. 交換器把訊框轉送給目的節點;目的節點拆開 IP 封包、確認目的 IP 相符後,取出 IP 酬載資料往上層傳,交給等待中的應用程式。

記住這條「封裝—ARP 解析—送訊框—拆封」的流水線。之後做封包擷取時,你在工具裡看到的每一層標頭,都能對應回這裡的某個步驟。