TCP 區段(TCP segment)
當 TCP 有位元組要送,它不會一次擠出一個——它把位元組串流的一塊,連同一個塞滿記帳資訊的標頭打包在一起,把整包交給網路層。那一包就是 TCP 區段:它是 TCP 真正放到線路上的單位。標頭就像貨運箱上的標籤,帶著對端把內容正確歸檔、並讓對話保持同步所需的一切。
TCP 標頭(通常 20 位元組)在小小空間裡塞了很多東西。開頭是用於解多工的來源埠與目的埠。接著是 32 位元的序號(此區段第一個位元組在串流中的位置)與 32 位元的確認號(從對方預期收到的下一個位元組)。一組控制旗標標示區段的角色——SYN 開啟、ACK 確認、FIN 關閉、RST 中止等等。一個視窗欄位廣告接收端空閒的緩衝空間,用於流量控制。一個檢查碼守護整個區段不受損毀,還有放選項(如最大區段大小)的空間。標頭之後是酬載——真正的應用程式位元組,對於像純 ACK 這種純控制區段來說可能一個都沒有。
為什麼重要:區段標頭是 TCP 所有機制的居所——多工(連接埠)、排序與可靠性(序號與確認號)、連線的建立與終止(旗標)、流量控制(視窗)、完整性(檢查碼)——全都只是你能指出來的欄位。一個值得弄對的命名提醒:TCP 稱它的單位為區段(segment);網路層把它包進一個 IP 資料報;非正式時人們會說「TCP 封包」,但嚴格說,封包這個詞屬於 IP 層。
一個純確認是一個設了 ACK 旗標的區段,帶著點名「接下來想要哪個位元組」的確認號、一個視窗值、一個有效的檢查碼——以及零個酬載位元組。一個開啟連線的區段設了 SYN 旗標,帶著寄件者的初始序號。
連接埠、序號/確認號、旗標、視窗、檢查碼——然後是酬載。
TCP 的單位叫「區段」;IP 層的叫「資料報」或「封包」。標頭不帶任何加密——除非像 TLS 這樣的上層把資料加密,否則路徑上任何人都能讀到它的欄位與酬載。