- 源端口和目的端口:各占2個字節。
- 序號:4字節。0~2^31-1,指的是本報文段所發送的數據的第一個字節的序號。比如本次發送的報文從301開始,報文長度是100字節,那么下次發送的報文段序號應該就是401。
- 確認號:4字節。確認到該字節為止之前的報文都正確接收了。確認號=N,那么表明到N-1為止的所有數據都已正確接收。
- 數據偏移:4位,因為有長度不定的選項字節段,因此用數據偏移來表示TCP報文段的數據從哪里開始。前面從源端口到緊急指針是固定的20個字節,數據偏移共有4位,能表達最大的數是15,數據偏移的單位是32位,也就是4字節,因此,tcp首部長度不能超過15*4=60字節,也是意味着選項的長度不能超過40字節。
- 保留:占6位,為今后使用,目前置為0.
- 緊急URG:URG=1時,說明這個報文段是緊急數據,你應該立即上傳給應用層,比如中斷命令等。
- 確認ACK:ACK=1時,是TCP建立階段用,以及在連接簡歷后所有報文段都置1.
- 推送PSH:PSH=1時,需要快速響應的報文,接收方不等緩存填滿,直接把目前的緩存都推送上去
- 復位RST:RST=1時,表明TCP連接出現嚴重差錯,必須釋放連接,然后重新建立連接。
- 同步SYN:建立連接時用,SYN=1,ACK=0時,代表建立連接報文段,對方的響應是SYN=1,ACK=1。因此SYN=1時就代表這是一個請求連接或連接接受報文。
- 終止FIN:用來釋放連接,FIN置1時,就代表要求釋放運輸連接
- 窗口:2字節,指的是發送該報文段的接收窗口還能接受多少,告訴對方,你還能發送多少。這個是根據緩存大小和緩存內已存儲的數據大小決定的
- 校驗和:2字節。
- 緊急指針:2字節,配合URG使用,URG置1時,它指出本報文段中的緊急數據的字節數(緊急數據結束以后就是普通數據),窗口為0時也是可以發送緊急數據的
- 選項:長度可變,最大40字節。最大報文段長度(MSS)、窗口擴大、時間戳、選擇確認。