src port:源端口,2個字節,是一個大於1023的16位數字,由基於TCP應用程序的用戶進程隨機選擇網絡
dst port:目的端口,2個字節,指明接收者所用的端口號,通常由應用程序來指定ide
Sequence number:順序號,4個字節,用來標識從 TCP 源端向 TCP 目的端發送的數據字節流,它表示在這個報文段中的第一個數據字節的順序號。若是將字節流看做在兩個應用程序間的單向流動,則 TCP 用順序號對每一個字節進行計數。序號是 32bit 的無符號數,序號到達 (2^32) - 1 後又從 0 開始。當創建一個新的鏈接時, SYN 標誌變 1 ,順序號字段包含由這個主機選擇的該鏈接的初始順序號 ISN ( Initial Sequence Number )3d
Acknowledgement number:確認號,4個字節,包含發送確認的一端所指望收到的下一個順序號。所以,確認序號應當是上次已成功收到數據字節順序號加 1 。只有 ACK 標誌爲 1 時確認序號字段纔有效指針
Offset:報頭長度,4位,給出報頭中 32bit 字的數目。須要這個值是由於任選字段的長度是可變的。這個字段佔 4bit , 即TCP 最多有 60(15*4) 字節的首部code
Resrvd:保留區域,6位,保留給未來使用,目前必須置爲 0 blog
Control Flags(6位)控制位包括進程
**URG**:爲 1 表示緊急指針有效,爲 0 則忽略緊急指針值 **ACK**:爲 1 表示確認號有效,爲 0 表示報文中不包含確認信息,忽略確認號字段 **PSH**:爲 1 表示是帶有 PUSH 標誌的數據,指示接收方應該儘快將這個報文段交給應用層而不用等待緩衝區裝滿 **RST**:用於復位因爲主機崩潰或其餘緣由而出現錯誤的鏈接。它還能夠用於拒絕非法的報文段和拒絕鏈接請求。通常狀況下,若是收到一個 RST 爲 1 的報文,那麼必定發生了某些問題 **SYN**:同步序號,爲 1 表示鏈接請求,用於創建鏈接和使順序號同步( synchronize ) **FIN**:用於釋放鏈接,爲 1 表示發送方已經沒有數據發送了,即關閉本方數據流
Window Size:窗口大小,2個字節,表示從確認號開始,本報文的源方能夠接收的字節數,即源方接收窗口大小。窗口大小是一個 16bit 字段,於是窗口大小最大爲 65535(2^16 - 1)同步
Checksum:校驗和,2個字節,對整個的 TCP 報文段(包括 TCP 頭部和 TCP 數據),以 16 位字進行計算所得。這是一個強制性的字段,要求由發送端計算和存儲,並由接收端進行驗證it
Urgent Pointer:緊急指針,2個字節,是一個正的偏移量,和順序號字段中的值相加表示緊急數據最後一個字節的序號。 TCP 的緊急方式是發送端向另外一端發送緊急數據的一種方式。 只有當URG 標誌置 1 時緊急指針纔有效io
Option and Pad:選項和填充,n*4字節,常見的可選字段是最長報文大小 MSS(Maximum Segment Size) 。每一個鏈接方一般都在通訊的第一個報文段(爲創建鏈接而設置 SYN 標誌的那個段)中指明這個選項,它指明本端所能接收的最大長度的報文段。選項長度不必定是 32 位字的整數倍,因此要加填充位,使得報頭長度成爲整字數
Data:數據,不定長度,爲上層協議封裝好的數據
指明本身指望對方發送TCP報文段時那個數據字段的長度。好比:1460字節。數據字段的長度加上TCP首部的長度纔等於整個TCP報文段的長度。MSS不宜設的太大也不宜設的過小。若選擇過小,極端狀況下,TCP報文段只含有1字節數據,在IP層傳輸的數據報的開銷至少有40字節(包括TCP報文段的首部和IP數據報的首部)。這樣,網絡的利用率就不會超過1/41。若TCP報文段很是長,那麼在IP層傳輸時就有可能要分解成多個短數據報片。在終點要把收到的各個短數據報片裝配成原來的TCP報文段。當傳輸出錯時還要進行重傳,這些也都會使開銷增大。所以MSS應儘量大,只要在IP層傳輸時不須要再分片就行。在鏈接創建過程當中,雙方都把本身可以支持的MSS寫入這一字段。MSS只出如今SYN報文中。即:MSS出如今SYN=1的報文段中
MTU和MSS值的關係:MTU=MSS+IP Header+TCPHeader通訊雙方最終的MSS值=較小MTU-IP Header-TCP Header