Wireshark協議分析之TCP

一:前言

TCP的最終目的是爲數據提供可靠的端到端傳輸,而且TCP能夠處理數據的順序並恢復錯誤,並且最終保證數據能夠到達目的地。

TCP被認爲是面向連接的協議。因爲它在傳輸數據之前會事先發起一個正式的連接,用來追蹤數據包的傳遞。

當傳輸要結束時,它會嘗試正式地關閉會話通道

很多普遍使用的應用層協議,都依賴於TCP和IP將數據包傳輸到最終目的地

二:TCP報頭

源端口(Source Port):用來傳輸數據包的端口

目的端口(Destination Port):數據包將要發送的端口

序號(Sequence Number):這個數字用來表示一個TCP片段,這個域用來保證數據流中的部分沒有缺失

確認號(Acknowledgement Number):這個數字是在通信中希望從另一個設備中得到的下一個數據包的序號

數據偏移(頭部長度 header Length):這個字段佔4比特 並且以4字節爲單位 最小值爲 0101(固定長度20字節 ,最常見) 最大值爲 1111 (加上選項的長度,最多40字節,總共60字節)

標誌(Flags):URG ACK PSH RST SYN FIN 都用來表示所傳輸的TCP數據包的類型

窗口(Windows Size):TCP接受者緩衝的字節大小

校驗和(Checksum):用來保證TCP頭和數據的內容在抵達目的地時的完整性

緊急指針(Urgent Ponter):如果設置了URG位,則這個域將被檢查作爲額外的指令,告訴CPU從數據包的哪裏開始讀數據

選項(Options):各種可選項,可以在TCP數據包中進行指定

三:TCP端口

所有TCP通信都會使用源端口和目的端口,這些可以在TCP頭中找到。

爲了能夠將數據傳輸到遠程服務器或設備特定應用中去,TCP數據包必須知道遠程服務所監聽的端口。如果想要試着連接其他端口,那麼這個通信肯定會失敗

源端口並不重要,可以隨機選擇。遠程服務器可以從發過來的原始數據包中得到這個端口

在進行TCP通信時,有65535個端口可供使用,關於端口的分類可以查看https://blog.csdn.net/qq_39112646/article/details/85722884

協議和端口相關聯的文件:Wireshark系統目錄下,“services”文件

四:TCP的三次握手

所有基於TCP的通信都需要從兩臺主機的握手開始,這個握手過程主要希望達到一些目的:

  • 保證傳輸主機和目的主機在線並且能進行通信
  • 讓傳輸主機確定目標主機在監聽傳輸主機試圖連接的端口
  • 允許傳輸主機向目標主機發送它的起始序列號,使得兩臺主機可以將這個會話保持有序

TCP握手分爲3個步驟

第一步:主機向服務器發送了一個TCP數據包。這個數據包除了底層協議頭之外不包含任何數據,這個數據包的TCP頭設置了SYN標誌,幷包含了在通信過程中會用到的初始序列號和最大分段大小(MSS)。

第二步:服務器對於這個數據包恢復了一個類似的設置了SYN和ACK標誌以及包含了它初始序列號的數據包

第三部:主機向服務器發送最後一個僅設置了ACK標誌的數據包

這個過程完成之後,雙方設備已經具有了開始正常通信所需要的信息

TCP數據包再稱呼上通常會被其設置的標誌所代表,比如設置了SYN標誌的TCP數據包,稱其爲SYN包。

五:TCP的四次揮手

所有的問候最終都會有一句再見,在TCP中,每一個握手和終止使得連接有始有終。TCP終止用來在兩臺設備完成通信後正常地結束連接。這個過程包含4個數據包,並且用一個FIN標誌來表名連接的終結。

第一步:在一個終止序列中,主機發送一個設置了FIN和ACK標誌的TCP數據包,告訴服務器通信完成

第二步:服務器以一個ACK數據包響應

第三步:服務器響應一個FIN/ACK數據包

第四步:主機響應一個ACK數據包,然後結束通信過程

六:TCP的重置

在理想情況下,每一個連接都會以TCP終止來正常結束。但在現實中,連接經常會突然斷掉。例如:一個潛在的攻擊者正在進行端口掃描,或者僅僅是主機配置錯誤所導致。在這些情況下,就需要使用設置了RST標誌的TCP數據包。

RST標誌用來指出連接被異常中止,或拒絕連接請求

由於192.168.100.138沒有監聽80端口,故對於192.168.100.1 發起的連接請求,192.168.100.138會告訴其通信無效,發送一個RST數據包,RST數據包包含RST和ACK標誌外,沒有任何其他的內容

RST數據包會在嘗試通信序列的開始(如上)或者在主機通信的中途,來終止通信

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