TCP協議

AH20發表於2024-10-15

TCP報文段

img

  1. 源埠和目的埠。各佔2B。分別表示傳送方和接收方使用的埠號。
  2. 序號。佔4B,範圍為0~\(2^{32}-1\),共\(2^{32}\)個序號。TCP連線中傳送的位元組流中的每個位元組都要按順序編號,序號欄位值指的是本報文段所傳送的資料的第一個位元組的序號。例如,一報文段的序號欄位值是301,而攜帶的資料共有100B,表明本報文段的資料的最後一個位元組的序號是400,因此下一個報文段的資料序號應從401開始。
  3. 確認號。佔4B,是期望收到對方下一個報文段的第一個資料位元組的序號。若確認號為N,則表明到序號N-1為止的所有資料都已正確收到。例如,B正確收到了A傳送過來的一個報文段,其序號欄位是501,而資料長度是200B(序號501~700),這表明B正確收到了A傳送的到序號 700為止的資料。因此B期望收到A的下一個資料序號是701,於是B在傳送給A的確認報文段中把確認號置為701。
  4. 資料偏移(即首部長度)。佔4位,這裡不是IP 資料包分片的那個資料偏移,而是表示首部長度(首部中還有長度不確定的選項欄位),它指出 TCP 報文段的資料起始處距離TCP報文段的起始處有多遠。“資料偏移”的單位是32位(以4B為計算單位)。因為4位二進位制數能表示的最大值為15,所以 TCP首部的最大長度為60B。
  5. 保留。佔6位,保留為今後使用,但目前應置為0。
  6. 緊急位 URG。當URG=1時,表明緊急指標欄位有效。它告訴系統此報文段中有緊急資料,應儘快傳送(相當於高優先順序的資料)。緊急資料被插入到報文段資料的最前面,而在緊急資料後面的資料仍是普通資料,因此要與首部中的緊急指標欄位配合使用。
  7. 確認位 ACK。僅當 ACK=1時確認號欄位才有效。當ACK=0時,確認號無效。TCP規定,在連線建立後所有傳送的報文段都必須把 ACK置1。
  8. 推送位 PSH(Push)。兩個應用程序進行互動式通訊時,都希望在鍵入一個命令後立即就能收到對方的響應,此時傳送方TCP把PSH置1,接收方TCP收到 PSH=1的報文段後,就儘快交付給接收應用程序,而不再等到整個快取都填滿了後再向上交付。
  9. 復位位RST(Reset)。當RST=1時,表示 TCP連線中出現嚴重差錯(如主機崩潰等),必須釋放連線,然後重新建立傳輸連線。此外,它還可用於拒絕一個非法的報文段。
  10. 同步位SYN。當SYN=1時表示這是一個連線請求或連線接受報文。當SYN=1,ACK=0時,表明這是一個連線請求報文,若對方同意建立連線,則應在響應報文中使用SYN=1,ACK=1。
  11. 終止位 FIN(Finish)。用來釋放一個連線。當FIN=1時,表明此報文段的傳送方的資料已傳送完畢,並要求釋放傳輸連線。
  12. 視窗。佔2B,範圍為0~\(2^{16}-1\)。視窗值告訴對方,從本報文段首部中的確認號算起,接收方目前允許對方傳送的資料量(以位元組為單位)。接收方的資料快取空間是有限的,因此視窗值作為接收方讓傳送方設定其傳送視窗的依據。例如,設確認號是701,視窗欄位是1000。這表明,從701號算起,傳送此報文段的一方還有接收1000位元組資料(位元組序號為701~1700)的接收快取空間。
  13. 檢驗和。佔 2B。檢驗和欄位檢驗的範圍包括首部和資料兩部分。在計算檢驗和時,和UDP一樣,要在TCP報文段的前面加上12B的偽首部(只需將UDP偽首部的協議欄位的17改成6. UDP長度欄位改成TCP長度,其他的和UDP一樣)。
  14. 緊急指標。佔2B。緊急指標僅在URG=1時才有意義,它指出本報文段中的緊急資料的位元組數(緊急資料在報文段資料的最前面)。也就是說,使視窗為零也可以傳送緊急資料。
  15. 選項。長度可變,最長可達40B。當不使用選項時,TCP首部長度是20B。TCP最初只規定了一種選項,即最大報文段長度(Maximum Segment Size, MSS)。MSS是TCP報文段中的資料欄位的最大長度(注意僅僅是資料欄位)。
  16. 填充。這是為了使整個首部長度是4B的整數倍。

相關文章