電腦通訊中經常需要同時處理多件事。以 Microsoft 遠端桌面協定(Remote Desktop Protocol, RDP)為例:使用者可能一邊移動滑鼠游標、一邊打字、一邊傳檔案到遠端電腦,同時顯示畫面與音訊的變化也正被傳回使用者端。

圖表 3-15:遠端桌面協定的資料需求
多工#
如果顯示更新必須等一個 10 分鐘的音訊檔傳完才能進行,這種複雜的資料傳輸不會帶來良好的使用體驗。一個變通做法是對遠端電腦開多條連線,但那會消耗更多資源。因此許多協定改用多工(multiplexing),讓多條連線共用同一條底層網路連線。
多工定義了一套內部通道(channel)機制,讓單一連線能承載多種類型的流量:它把大型傳輸分片成較小的區塊,再把這些區塊合併進單一連線。

圖表 3-16:經過多工的 RDP 資料
分析協定時,你可能需要先解多工(demultiplex)這些通道,才能把原始資料還原出來。看到交錯出現、彼此無關的資料時,先想想是不是多工,而不是急著逐位元組解讀。
分片#
有些網路協定會限制可傳輸的資料類型,以及每個資料封包的大小上限——這在協定分層時特別常見。
例如 Ethernet 定義流量框架的最大長度為 1500 個八位元組,而在其上執行 IP 就會出問題,因為 IP 封包最大可達 65536 位元組。
分片(fragmentation)就是為了解決這個問題而設計:當應用程式或作業系統知道下一層無法處理整個封包時,這套機制讓網路堆疊把大型封包轉換成較小的片段。
多工與分片常被一起提及,但目的不同:多工是為了「共用一條連線」,分片是為了「遷就下層的大小限制」。多工在實作上會用到分片,但兩者要解的問題不一樣。