TCP報文格式
源埠和目的埠:都是16個位元,分別表示傳送方和接收方的埠號。埠號和IP地址構成套接字(socket)地址的主要內容。源端和目的端的套接字合起來唯一地表示一條連線。網路應用程式在通訊時直接向套接字傳送和接收資料。
序列號和確認號:都是32位的無符號整數,可以表示0-4G(232)位元組的範圍。其中,序列號表示資料部分第一個位元組的序列號,而確認號表示該資料報的接收者希望對方傳送的下一個位元組的序號(即序號小於確認號的資料都已正確地被接收)。
頭長度(HLEN):表示TCP報文頭的長度。長度以32-bit為單位來計算。所以如果選項部分的長度不是4個位元組的整數倍,則要加上填充(padding)。
保留域:緊接在頭長度欄位後有6個位元,應該把它設定為0。
再後則是6個標誌位。標誌位特定的含義:
URG(urgent)為緊急資料標誌。如果它為1,則表示本資料報中包含緊急資料。此時緊急資料指
針表示的值有效。它表示在緊急資料之後的第一個位元組的偏侈值(即緊急資料的總長度)。
ACK(acknowledge)為確認標誌位。如果ACK為1,則表示報文中的確認號是有效的。否則,報文
中的確認號無效,接收端可以忽略它。
PSH(push)標誌位。被置位後,要求傳送方的TCP協議軟體馬上傳送該資料報,接收方在收到資料後也應該立即上交給應用程式,即使其接收緩衝區尚未填滿。
RST(reset)標誌位。用來複位一條連線。RST標誌置位的報文稱為復位報文。一般情況下,如果TCP收到的一個報文明顯不是屬於該主機上的任何個連線,則向遠端傳送一個復位報文。
SYN(synchronous)標誌位。用來建立連線,讓連線雙方同步序列號。如果SYN=1而ACK=0,則表示該資料報為連線請求,如SYN=1而ACK=1則表示是接受連線。
FIN(finish)標誌位。表示傳送方已經沒有資料要傳輸了,希望釋放連線。
視窗(window)欄位。視窗表示的是從被確認的位元組開始,傳送方最多可以連續傳送的位元組的個數。接收方透過設定該視窗值的大小,可以調節源端傳送資料的速度,從而實現流控。
校驗和(checksum)域。是TCP協議提供的一種檢錯機制。與我們在前面的章節中學過的UDP協議類似,在計算校驗和時不僅要計算TCP報文自身(報文頭和資料),還要增加一些額外的資訊內容 – 12個位元組的“偽包頭”。
TCP報文格式
源埠和目的埠:都是16個位元,分別表示傳送方和接收方的埠號。埠號和IP地址構成套接字(socket)地址的主要內容。源端和目的端的套接字合起來唯一地表示一條連線。網路應用程式在通訊時直接向套接字傳送和接收資料。
序列號和確認號:都是32位的無符號整數,可以表示0-4G(232)位元組的範圍。其中,序列號表示資料部分第一個位元組的序列號,而確認號表示該資料報的接收者希望對方傳送的下一個位元組的序號(即序號小於確認號的資料都已正確地被接收)。
頭長度(HLEN):表示TCP報文頭的長度。長度以32-bit為單位來計算。所以如果選項部分的長度不是4個位元組的整數倍,則要加上填充(padding)。
保留域:緊接在頭長度欄位後有6個位元,應該把它設定為0。
再後則是6個標誌位。標誌位特定的含義:
URG(urgent)為緊急資料標誌。如果它為1,則表示本資料報中包含緊急資料。此時緊急資料指
針表示的值有效。它表示在緊急資料之後的第一個位元組的偏侈值(即緊急資料的總長度)。
ACK(acknowledge)為確認標誌位。如果ACK為1,則表示報文中的確認號是有效的。否則,報文
中的確認號無效,接收端可以忽略它。
PSH(push)標誌位。被置位後,要求傳送方的TCP協議軟體馬上傳送該資料報,接收方在收到資料後也應該立即上交給應用程式,即使其接收緩衝區尚未填滿。
RST(reset)標誌位。用來複位一條連線。RST標誌置位的報文稱為復位報文。一般情況下,如果TCP收到的一個報文明顯不是屬於該主機上的任何個連線,則向遠端傳送一個復位報文。
SYN(synchronous)標誌位。用來建立連線,讓連線雙方同步序列號。如果SYN=1而ACK=0,則表示該資料報為連線請求,如SYN=1而ACK=1則表示是接受連線。
FIN(finish)標誌位。表示傳送方已經沒有資料要傳輸了,希望釋放連線。
視窗(window)欄位。視窗表示的是從被確認的位元組開始,傳送方最多可以連續傳送的位元組的個數。接收方透過設定該視窗值的大小,可以調節源端傳送資料的速度,從而實現流控。
校驗和(checksum)域。是TCP協議提供的一種檢錯機制。與我們在前面的章節中學過的UDP協議類似,在計算校驗和時不僅要計算TCP報文自身(報文頭和資料),還要增加一些額外的資訊內容 – 12個位元組的“偽包頭”。