網路 傳輸層 TCP報文格式解析

2021-08-01 17:58:01 字數 4717 閱讀 9157

1、為了提供可靠的資料傳輸,tcp報文首部欄位有較多的字段,tcp報文格式如下圖:

圖2 tcp報文格式

16位源和目標埠(16位):用於多路復用/多路分解來自或送至上層應用的資料,可以這樣理解,埠用來標識同一臺計算機的不同程序。

16位源埠號(

source port

):16

位的源埠字段包含初始化通訊的埠號。源埠和

ip位址的作用是標識報文的返回位址。

16位目的埠(destination port):16位的目的埠字段定義傳輸的目的。這個埠指明接收方計算機上的應用程式介面。

32位序列號和32位確認號

這兩個欄位是tcp可靠傳輸服務的關鍵部分,序列號是該報文段首位元組的位元組流編號(tcp把資料看成是有序的位元組流,tcp隱式地對資料流的每個位元組進行編號)。這樣理解可能更直觀,當報文被分解成多個報文段時,序列號就是報文段首位元組在整個報文的偏移量。確定號指定下乙個期待的位元組

32位序列號(

sequence number):

該欄位用來標識

tcp源端裝置向目的端裝置傳送的位元組流,它表示在這個報文段中的第幾個資料位元組。序列號是乙個

32位的數。

32位確認號(acknowledge number

):tcp

使用32

位的確認號字段標識期望收到的下乙個段的第乙個位元組,並宣告此前的所有資料已經正確無誤地收到,因此,確認號應該是上次已成功收到的資料位元組序列號加

1。收到確認號的源計算機會知道特定的段已經被收到。確認號的字段只在

ack標誌被設定時才有效。

首部長度(4位)

因為選項是不定長的,這就需要標識整個首部欄位的長度(單位是32位字),即5+選項個數。4位,單位是32位字,所以首部最長是15*4=60位元組,即選項最長是40位元組(10個選項)。

保留(6位)

6位值域,必須全0,為定義新的用途而保留。

6位標誌

urg指示報文段裡存在著被傳送方的上層實體標記為」緊急」資料,當urg=1時,其後的緊急指標指示緊急資料在當前資料段中的位置(相對於當前序列號的位元組偏移量),tcp接收方必須通知上層實體。

ack

當ack=0時,表示該資料段不包含確認資訊,當ack=1時,表示該報文段包括乙個對已被成功接收報文段的確認。

psh

當psh=1時,接收方在收到資料後立即將資料交給上層,而不是直到整個緩衝區滿。

rst

用於重置乙個已經混亂的連線(如主崩潰),也可用於拒絕乙個無效的資料段或者拒絕乙個連線請求。一般而言,如果你得到的資料段被設定了rst位,那說明你這一端有問題了。

syn

用於建立連線過程,在連線請求中,syn=1和ack=0表示該資料段沒有使用捎帶的確認域,而連線應答捎帶乙個確認,即syn=1和ack=1

注:捎帶是指對客戶機到伺服器資料的確認被裝載在乙個承載伺服器到客戶機的資料報文段中。

fin

用於釋放乙個連線,表示傳送方已經沒有資料要傳輸了。此時,接收方可能繼續接收資料,好在syn和fin資料段都有序列號,從而保證了這兩種資料段以正確順序被處理。

16位視窗大小用於流控制(確保連線的任何一方都不會過快地傳送過量的分組而淹沒另一方),視窗大小指定了從被確認的位元組算起可以傳送多少個位元組。

16位校驗和

2個位元組,校驗的範圍包括首部和資料兩個部分,計算校驗和時需要在報文段前加上

12位元組的偽首部。

16位緊急指標

參考標誌欄位的urg位。

選項

選項部分是為了適合複雜網路環境和更好地服務於應用層設計的。tcp選項最長是40位元組(見下文)。

資料

無任何資料的tcp段也是合法的,通常用於確認和控制資訊。

2 、選項字段[2]

tcp選項部分很好出現在已經建立連線的會話中,只要出現在tcp連線建立階段,即三次握手。tcp選項部分實際運用有以下幾種:

(1)最大報文傳輸段(mms, maximum segment size)

用於傳送發與接收方協商最大報文段長度(僅僅是淨荷資料,不包括tcp首部字段)。tcp在三次握手中,每一方都會通告期望收到的mss(mss只出現在syn資料報中),如果一方不接受另一方的mss值,則使用預設的536位元組淨荷資料,即主機能夠接受20+536位元組的tcp報文段。

(2)視窗擴**項(window scaling)

tcp報文的視窗大小欄位佔16位,即最大值是65535,但隨著時延和頻寬比較大的通訊產生(如衛星通訊),需要更大的視窗滿足效能和吞吐率,這就是視窗擴**項存在的意義。例子見參考資料[2]。

windows scaling佔3個位元組,最後乙個位元組是移位值(shift count),即首部的視窗位數16向左移動,如移位值為14,則新的視窗最大值增大到65535*(2^14)。

視窗擴**項是在tcp建立之初進行協商,如果已實現了視窗擴大,當不再需要擴大視窗時,傳送移位值=0就可以恢復到原視窗大小,即65535。

(3)選擇確認選項(sack, selective acknowledgements)

考慮這樣情況,主機a傳送報文段12345,主機b收到135且報文無差錯,sack用來確保只重傳缺少的報文段,而不是重傳所有報文段。

sack選項需要2個功能位元組,乙個用來指明使用sack選項(sack permission),另一指明這個選項佔多少位元組。

那怎麼形容丟失的報文段2,說明2的左右邊界分別是1、3。tcp的資料報文是有字塊邊界的,而這種邊界是由序列號表示的。

最多能指明多少個位元組塊的邊界資訊呢?答案是4個。這是因為選項字段最大是40位元組,去除2個功能位元組,序列號是32位即4位元組,並且需要左右邊界,所以(40-2)/8 = 4。

(4)時間戳選項(timestamps)

時間戳選項用來計算往返時間rtt,傳送方在傳送報文段時把當前時鐘的時間值放入時間戳字段,接收方將該時間戳字段的值複製到確認報文中,當接收方收到確認報文,對比確認報文的時間戳(等於傳送方傳送報文段的時間戳)和現在的時鐘,即可算出rtt。

時間戳選項還可用於防止迴繞序號paws。序列號只有32位,每2^32個序列號就會迴繞(想想環形佇列),採用時間戳選項很容易區分相同序列號的報文段。

(5)nop(no-operation)

tcp的頭部必須是4位元組的倍數,而大多數選項不是4位元組倍數,不足的用nop填充。除此之外,nop也用於分割不同的選項資料,如視窗擴**項和sack之間使用nop隔離(下面的例項將看到這一點)。

3、urg(緊急標誌)和psh(推標誌)

urg:指示報文段裡存在著被傳送方的上層實體標記為」緊急」資料,當urg=1時,

系統此報文段中有緊急資料,應盡快傳送,而不要按原來的排隊順序來傳送,

其後的緊急指標指示緊急資料在當前資料段中的位置(相對於當前序列號的位元組偏移量,資料從第乙個位元組到指標所指的位元組就是緊急資料),緊急資料不進入

接收緩衝區直接交給上層程序,tcp接收方必須通知上層實體。

psh:

傳送方tcp把psh置1,並立即建立乙個報文端傳送出去。接收方tcp收到psh=1的報文段,

接收方在收到資料後立即將資料交給上層,而不是直到整個緩衝區滿。

tcp傳輸控制協議 報文格式

tcp傳輸控制協議 linux網路協議基礎支援 參考 1.tcp的首部 t c p資料被封裝在乙個i p資料報中 t c p首部的資料格式。如果不計任選字段,它通常是 2 0個位元組。tcp頭定義,共20個位元組 typedef struct tcp header attribute packed ...

TCP報文格式

傳輸控制協議 tcp 向上與使用者應用程式程序介面,向下與網路層協議ip介面。使用者應用程式採用首先呼叫tcp 或udp 然後將應用程式資料遞交給tcp這一方式,在ip網路上傳送資料。tcp將這些資料打包分段並呼叫ip模組向目的主機傳送每個資料段。接收方的tcp將段中的資料放入接收緩衝器,然後將段重...

TCP報文格式

tcp transmission control protocol 傳輸控制協議是一種面向連線的 可靠的 基於位元組流的傳輸層協議 tcp報文格式 源埠號 2位元組 d5 df 54751 目的埠號 2位元組 tcp報頭中的源埠號和目的埠號同ip資料報中的源ip與目的ip唯一確定一條tcp連線 序號...