傳輸層(transport layer)
想像網路層可以把一封信送到某棟大樓(一台主機,用它的 IP 位址命名),但大樓裡有很多住戶——一個瀏覽器、一個收信程式、三個遊戲視窗——同時在收發訊息。必須有人讀出每封信上的「公寓號碼」,把它交給正確的住戶,並把每封要寄出的信塞進大樓的郵件投遞口。這份工作屬於傳輸層。它下面的各層在機器之間搬運位元組;傳輸層則把這種主機對主機的傳遞,變成程式真正能用的「行程對行程」通訊。
具體來說,傳輸層執行於端系統(你的筆電、一台伺服器),而不是中間的路由器。它接過應用程式的訊息,標上來源連接埠(source port)與目的連接埠(destination port),讓資料能在兩端被導向正確的程式,視需要再加上可靠性與排序,然後把結果當成一個區段(segment)交給網路層。在網際網路上有兩個哲學相反的主要傳輸協定:UDP,一層很薄、盡力而為的包裝,只加上連接埠與檢查碼;以及 TCP,它在不可靠的網路之上,用確認、序號與重送建立起可靠、依序的位元組串流。
為什麼重要:這是你的程式真正對話的那一層。當程式碼開啟一個通訊端、送出一個 HTTP 請求、或串流影片時,用的就是傳輸層的服務。這裡的一個關鍵觀念是端對端原則(end-to-end principle)——可靠性與排序這類功能放在端主機,而不是烤進網路核心,這也是網際網路能讓中間保持簡單、卻又能成長得如此龐大的原因之一。要注意:傳輸層處理的是傳遞與多工,不是保密:TCP 本身不加密任何東西,那是它上面的 TLS 的工作。
你開了兩個瀏覽器分頁連到同一個新聞網站。你的機器和伺服器用的是同一對 IP 位址,但兩個頁面卻不會混在一起——傳輸層給每段對話不同的來源連接埠,因此回應會被解多工回正確的分頁。
同樣兩台主機、兩段對話:連接埠把它們分開。
傳輸層只存在於端主機;中間的路由器通常只讀 IP(網路層)標頭。因此像 TCP 可靠性這類傳輸層功能,是兩端之間的約定,而非網路所提供的服務。