TCP報文段首部格式詳解

2021-08-20 20:48:57 字數 2538 閱讀 4000

源埠、目標埠:計算機上的程序要和其他程序通訊是要通過計算機埠的,而乙個計算機埠某個時刻只能被乙個程序占用,所以通過指定源埠和目標埠,就可以知道是哪兩個程序需要通訊。源埠、目標埠是用16位表示的,可推算計算機的埠個數為2^16個。

序列號:表示本報文段所傳送資料的第乙個位元組的編號。在tcp連線中所傳送的位元組流的每乙個位元組都會按順序編號。由於序列號由32位表示,所以每2^32個位元組,就會出現序列號迴繞,再次從 0 開始。那如何區分兩個相同序列號的不同tcp報文段就是乙個問題了,後面會有答案,暫時可以不管。

確認號:表示接收方期望收到傳送方下乙個報文段的第乙個位元組資料的編號。也就是告訴傳送發:我希望你(指傳送方)下次傳送的資料的第乙個位元組資料的編號是這個確認號。也就是告訴傳送方:我希望你(指傳送方)下次傳送給我的tcp報文段的序列號字段的值是這個確認號。

tcp首部長度:由於tcp首部包含乙個長度可變的選項部分,所以需要這麼乙個值來指定這個tcp報文段到底有多長。或者可以這麼理解:就是表示tcp報文段中資料部分在整個tcp報文段中的位置。該字段的單位是32位字,即:4個位元組。

urg:表示本報文段中傳送的資料是否包含緊急資料。urg=1,表示有緊急資料。後面的緊急指標字段只有當urg=1時才有效。

ack:表示是否前面的確認號字段是否有效。ack=1,表示有效。只有當ack=1時,前面的確認號字段才有效。tcp規定,連線建立後,ack必須為1。

psh:告訴對方收到該報文段後是否應該立即把資料推送給上層。如果為1,則表示對方應當立即把資料提交給上層,而不是快取起來。

rst:只有當rst=1時才有用。如果你收到乙個rst=1的報文,說明你與主機的連線出現了嚴重錯誤(如主機崩潰),必須釋放連線,然後再重新建立連線。或者說明你上次傳送給主機的資料有問題,主機拒絕響應。

syn:在建立連線時使用,用來同步序號。當syn=1,ack=0時,表示這是乙個請求建立連線的報文段;當syn=1,ack=1時,表示對方同意建立連線。syn=1,說明這是乙個請求建立連線或同意建立連線的報文。只有在前兩次握手中syn才置為1。

fin:標記資料是否傳送完畢。如果fin=1,就相當於告訴對方:「我的資料已經傳送完畢,你可以釋放連線了」

視窗大小:表示現在執行對方傳送的資料量。也就是告訴對方,從本報文段的確認號開始允許對方傳送的資料量。

緊急指標:標記緊急資料在資料字段中的位置。

選項部分:其最大長度可根據tcp首部長度進行推算。tcp首部長度用4位表示,那麼選項部分最長為:(2^4-1)*4-20=40位元組。

選項部分的應用

mss最大報文段長度(maxium segment size):指明資料字段的最大長度,資料字段的長度加上tcp首部的長度才等於整個tcp報文段的長度。mss值指示自己期望對方傳送tcp報文段時那個資料字段的長度。通訊雙方可以有不同的mss值。如果未填寫,預設採用536位元組。mss只出現在syn報文中。即:mss出現在syn=1的報文段中。

視窗擴**項(windows scaling):由於tcp首部的視窗大小字段長度是16位,所以其表示的最大數是65535。但是隨著時延和頻寬比較大的通訊產生(如衛星通訊),需要更大的視窗來滿足效能和吞吐率,所以產生了這個視窗擴**項。

sack選擇確認項(selective acknowledgements):用來確保只重傳缺少的報文段,而不是重傳所有報文段。比如主機a傳送報文段1、2、3,而主機b僅收到報文段1、3。那麼此時就需要使用sack選項來告訴傳送方只傳送丟失的資料。那麼又如何指明丟失了哪些報文段呢?使用sack需要兩個功能位元組。乙個表示要使用sack選項,另乙個指明這個選項占用多少位元組。描述丟失的報文段2,是通過描述它的左右邊界報文段1、3來完成的。而這個1、3實際上是表示序列號,所以描述乙個丟失的報文段需要64位即8個位元組的空間。那麼可以推算整個選項欄位最多描述(40-2)/8=4個丟失的報文段。

時間戳選項(timestamps):可以用來計算rtt(往返時間),傳送方傳送tcp報文時,把當前的時間值放入時間戳字段,接收方收到後傳送確認報文時,把這個時間戳字段的值複製到確認報文中,當傳送方收到確認報文後即可計算出rtt。也可以用來防止迴繞序號paws,也可以說可以用來區分相同序列號的不同報文。因為序列號用32為表示,每2^32個序列號就會產生迴繞,那麼使用時間戳字段就很容易區分相同序列號的不同報文。

nop(no-operation):它要求選項部分中的每種選項長度必須是4位元組的倍數,不足的則用nop填充。同時也可以用來分割不同的選項字段。如視窗擴**項和sack之間用nop隔開。

TCP首部報文段格式

最近 計算機網路 這本書看到了傳輸層的 tcp 協議,因為tcp 的全部功能都體現在它的首部中,因此覺得有必要將這些知識梳理一下。首先tcp 是面向位元組流的。這個流指的是流入到程序或從程序流出的位元組序列。面向位元組流的含義是 應用程式與 tcp 的互動是一次乙個資料塊 大小不等 但是 tcp 把...

TCP報文段的首部格式

源埠 目的埠 序號確認號 資料偏移 保留urg ackpsh rstsyn fin視窗 校驗和緊急指標 選項 長度可變 填充tcp報文段首部的前20個位元組是固定,後面有4n位元組是根據需要而增加的選項,因此tcp首部最小長度20位元組。1.源埠和目的埠 各佔2個位元組,分別寫入源埠號和目的埠號。埠...

tcp報文傳送工具 tcp報文段首部結構分析

tcp雖然是面向位元組流的,但tcp傳送的資料單元卻是報文段。tcp報文段如apr報文 ip資料報一樣,也是由首部與資料區域組成,tcp首部內容很豐富,各個欄位都有特定的含義,一般來說tcp首部只有20個位元組,tcp報文段首部的前20個位元組是固定的,後面有4n位元組是根據需要而增加的選項字段 n...