標籤:
TCP報文段的首部格式概述
TCP報文段首部的前20個位元組是固定的,因此TCP首部的最小長度是20位元組。
源連接埠和目標連接埠
各佔2個位元組,分別寫入源連接埠號碼和目的連接埠號碼。
序號
佔4個位元組,表示本報文段所發送資料的第一個位元組的編號。在TCP串連中所傳送的位元組流的每一個位元組都會按順序編號。由於序號由32位表示,所以每2^32個位元組,就會出現序號迴繞,再次從 0 開始。
確認號
佔4個位元組,是期望收到對方寫一個報文段的第一個資料位元組的序號。若確認號=N,則表明:到序號N-1為止的所有資料都已正確收到。
資料位移(TCP首部長度)
佔4位,它指出TCP報文段的資料起始處距離TCP報文段的起始處有多遠。這個欄位實際上是指出TCP報文段的首部長度,由於4位位元能夠表示的最大十進位數字是15,因此資料位移的最大值是60位元組,這也是TCP首部的最大長度。
緊急URG控制位
當URG=1時,表明緊急指標欄位有效。它告訴系統此報文中有緊急資料,應儘快傳送,而不要按原來的排隊順序來傳送。當URG置1時,發送方TCP就把緊急資料插入到本報文段資料的最前面,而在緊急資料後面的資料仍是普通資料。這時要與首部中的緊急指標欄位配合使用。
確認ACK控制位
僅當ACK=1時,確認號欄位才有效,TCP規定,在串連建立後的所有傳送的報文段都必須要ACK置1。
推送PSH控制位
發送方TCP把PSH置1,並立即建立一個報文段發送出去。接收方TCP收到PSH=1的報文段,就儘快地交付接收應用進程,而不再等到整個緩衝都填滿了後再向上交付。
複位RST控制位
當RST=1時,表明TCP串連中出現了嚴重差錯,必須釋放串連,然後再重建立立運輸串連。
同步SYN控制位
在串連建立時用來同步序號,當SYN=1而ACK=0時,表明這是一個串連請求報文段。對方若同意建立串連,則應在響應的報文段中使SYN=1和ACK=1。因此,SYN置為1就表示這是一個串連請求或串連接受請求。
終止FIN控制位
用來釋放一個串連。當FIN=1時,表明此段報文段的發送發的資料已經發送完畢,並要求釋放運輸串連。
視窗
佔2個位元組。視窗指的是發送本報文段的接受視窗。視窗值告訴對方:從本報文段首部中的確認好算起,接收方目前允許對方發送的資料量。視窗值作為接收方法讓發送方設定其發送視窗的依據。視窗欄位明確指出了現在允許對方發送的資料量。視窗值是經常動態變化的。
緊急指標
佔2個位元組。指出本報文段中緊急資料的位元組數。
選項
長度可變,最長可達40位元組。當沒有使用“選項”時,TCP的首部長度是20位元組。
選項部分的應用:
- 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隔開。
電腦網路(8)-----TCP報文段的首部格式