寫在前面:本文章是針對《計算機網絡第七版》的學習筆記
TCP雖然是面向字節流的,但是TCP傳輸的數據單元卻是報文段。一個報文段可以分為首部和數據兩部分。
TCP報文段的首部的前20個字節是固定的,后面的4n字節是需要增加的選項。因此TCP首部的最小長度是20字節。
首部部分字段的意義如下:
-
源端口和目的端口:各占2個字節,分別寫入源端口號和目的端口號。TCP的分用功能也是通過端口號實現的。
-
序號:占4字節。在TCP連接中傳送的字節流中的每一個字節都按照順序編號。首部中的序號字段值則代表本報文段所發送的數據的第一個字節的序號。
-
確認號:占4字節。代表期望收到對方下一個報文段的第一個數據字節的序號。需要注意:
若確認號=N,則表明:到序號N-1為止的所有數據都已正確收到
-
數據偏移:占4位。他指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠。一般情況下為20字節,但是首部中還有不確定的選項字段。它的單位是4字節,而它的最大值是15,因此數據偏移最大值為60字節,也就是說選項不能超過40字節。
-
保留:占6位。以防后續使用。
下面是6個控制位,每個占一位:
-
緊急URG:當URG=1時,表明緊急字段有效,它告訴系統此報文中有緊急數據,應該盡快傳送。
-
確認ACK:僅當ACK=1時確認號字段才有效。
-
推送PSH:當兩個應用進程進行交互式的通信時,有時一端的應用進程希望在鍵入一個命令后立即就能收到對方的相應,這時設置PSH=1。
-
復位RST:當RST=1時,表明TCP連接中出現嚴重錯誤,必須釋放連接,再重新建立運輸連接。RST=1還可以用來拒絕一個非法的報文段或拒絕打開一個連接。
-
同步SYN:在建立連接時用來同步序號。當SYN=1,ACK=0時代表是連接請求報文段。若對方同意建立連接,則應在相應報文段中使SYN=1,ACK=1。也就是說,SYN=1代表連接請求或者連接接受報文。
-
終止FIN。用於釋放一個連接。當FIN=1時,代表此報文段的發送方的數據已發送完畢,並且請求釋放運輸連接。
控制位到這結束。
-
窗口:占2字節。窗口值告訴對方:從本報文段中的確認號算起,接收方目前允許對方發送的數據量(以字節為單位)。之所以設置這個限制,是因為接收方的數據緩存空間是有限的。總之,窗口值作為接收方讓發送方設置其窗口大小的依據。
-
檢驗和:占2字節。檢驗的范圍包括首部字段和數據字段。和UDP檢驗的方法一樣,只不過把偽首部第四個字段的17改成6.
-
緊急指針:占2字節。只有在緊急URG=1時才有效,它指出本報文段中的緊急數據的字節數。
-
選項:長度可變,最大40字節
TCP最初只規定了一種選項,即最大報文長度MSS。MSS是每一個TCP報文段中的數據字段的最大長度,而並不是整個TCP報文段的長度。