1. 程式人生 > >TCP協議以及其報頭結構分析

TCP協議以及其報頭結構分析

簡介

TCP協議是TCP/IP協議族中的一個重要協議,與IP協議相比,TCP協議更靠近應用層,屬於傳輸層協議,因此在應用程式中具有更強的可操作性。一些重要的socket選項都和TCP協議相關。

TCP協議的特點

傳輸層的主要協議有兩個:TCP和UDP,總的來說TCP協議相對於UDP協議的特點是:面向連線,位元組流和可靠性。

1.使用TCP協議通訊的雙方必須先建立連線,然後才能開始資料的讀寫。
2.雙方都必須為該連線分配必要的核心資源,以管理連線的狀態和連線上的資料傳輸。
3.TCP為全雙工,即雙方資料讀寫可以通過一個連線進行,所以完成資料交換之後,通訊雙方都必須斷開連線以釋放系統資源。
4.TCP協議的連線用於一對一的通訊,而UDP則適用於廣播或者多播通訊。
5.TCP傳輸是可靠的,因為TCP協議採用傳送應答機制,即傳送端傳送的每個TCP報文都必須得到接收方的應答,才認為這個TCP報文段傳輸成功。其次TCP協議採用超時重傳機制,傳送端在傳送出一個TCP報文段之後啟動定時器,如果在定時時間內未收到應答,他將重發該報文段。

TCP報頭結構

TCP報頭

·16位埠號:告知主機該報文段是來自哪裡(源埠)以及傳給哪個上層協議或應用程式(目的埠)。
·32位序號:一次TCP通訊過程中的一個傳輸方向上的位元組流的每個位元組的編號。假設主機A和主機B進行TCP通訊,A傳送給B的第一個TCP報文段中,序號值被系統初始化為某個隨機ISN(初始序號值)。那麼在該傳輸方向上,後續的TCP報文段中序號值將被系統設定成ISN加上該報文段所攜帶資料的第一個位元組在整個位元組流中的偏移。
·32位確認號:用作對另一個傳送來的TCP報文段的響應。其值是收到的TCP報文段的序號值加1.假設主機A和主機B進行TCP通訊,那麼A傳送出的TCP報文段不僅攜帶自己的序號,而且包含對主機B傳送來的TCP報文段的確認號。反之,B發出的TCP報文段也同時攜帶自己的序號和對A傳送來的報文段的確認號。
·4位頭部長度:標識該TCP頭部有多少個32bit(4位元組),四位最大表示15,所以TCP報頭最長是60位元組。
·6位標誌位
URG:表示緊急指標是否有效。
ACK:表示確認號是否有效。我們稱攜帶ACK標誌的TCP報文段為確認報文段。
PSH:提示接收端應用程式應該立即從TCP接受緩衝區中讀走資料,為接受後續資料騰出空間,如果不將接收到的資料讀走,它們就會一直停留在TCP報文段。
RST:表示要求對方重新建立連線。我們稱攜帶RST標誌的TCP報文段為復位報文段。
SYN:表示請求建立一個新連線。稱攜帶SYN標誌位的TCP報文段為同步報文段。
FIN:表示通知對方本端要關閉連線了。稱攜帶FIN標誌的TCP報文段為結束報文段。
·16位視窗大小:這是TCP流量控制的一個手段。這裡的視窗指的是接受通告的視窗。告訴對方本端的TCP接收緩衝區還能容納多少位元組的資料,這樣就對方就可以控制傳送資料的速度。
·16位校驗和:由傳送端填充,接收端對TCP報文端執行CRC演算法以檢驗TCP報文段在傳輸過程中是否損壞(檢驗部分包括報頭和資料部分)。
·16位緊急指標:為一個正的偏移量。它的序號欄位的值相加表示最後一個緊急資料的下一個位元組的序號。即緊急指標相對於當前序號的偏移。
·剩下40位元組為選項欄位。

使用tcpdump抓包檢視

使用和telnet與主機建立連線,並用tcpdump抓包檢視包內資訊,得到下圖。
TCP抓取TCP包
第一個包tcpdump輸出Flag[S],表示該TCP報文段包含SYN標誌位,因此它是一個同步報文段,表示請求一個新連線。第二個包Flag裡為R則表示復位,中斷該連線。如果TCP報文段包含其他標誌,則tcpdump也會將該標誌的首字母顯示在“Flags”後的中括號中。
seq是序號值,因為這是整個通訊過程中的第一個TCP報文段,所以他沒有針對這個報文段的確認值ack。而第二個包為復位連線,所以seq置零。ack表示確認收到剛才發來的包,並給它加一。
win是接收通告視窗的大小。因為這是一個同步報文段,所以win值反映的是實際的接收通告視窗大小。第二個包中斷了連線,所以視窗也置零
options裡的內容則是TCP的選項欄位。
length為TCP報文段資料部分的長度,因為應用層的資料交換,所以為0。