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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章