使用Wireshark抓包分析TCP协议
wireshark數據包詳細欄每個字段對應的分層。
1、分層介紹
1.1、數據鏈路層
我們點開這個字段,從該字段中可以看到相鄰兩個設備的MAC地址
1.2、網絡層
本層主要負責將TCP層傳輸下來的數據加上目標地址和源地址。
1.3、傳輸層
這一層用到了TCP協議
tcp包頭
每個字段對應的TCP包頭
2、TCP握手過程分析
TCP三次握手示意圖
第一次握手:客戶端向服務器發送一個SYN段(表示發起連接請求),并且包含客戶端的一個初始序列號seq=0
第二次握手:服務端返回一個ACK(對客戶端連接請求的應答)+SYN(表示服務端發起連接請求),并且包含服務端的一個初始序列號seq=0,同時返回一個確認號ack=1
第三次握手:客戶端給服務端返回一個ACK(對服務端連接請求的應答),并更新自己的序列號seq=1,返回一個確認號ack=1
Wireshark分析握手過程
這是我發起連接請求后抓到的數據包
第一次握手:
可以看到,客戶端發起一個SYN請求,初始序列號為0
?
?第二次握手
服務端返回SYN+ACK,并且包含服務端的一個初始序列號seq=0,同時返回一個確認號ack=1
?
?第三次握手
客戶端返回一個ACK,并且返回一個確認號ack=1,并且將自己的序列號seq更新為1
?到此,TCP三次握手就結束了。客戶端與服務端之間已經成功建立起連接。
3、TCP數據傳輸過程分析
????????我們常說TCP是可靠性的傳輸協議,那么它是如何實現可靠性的數據傳輸呢,就是通過序列號和確認應答提高可靠性。
? ? ? ? 我們從客戶端往服務端發送了兩次數據,第一次發送了一個字符串"hello",第二次發送了一個字符串"word"。首先客戶端發送“hello”時,初始序列號seq為1,服務端接收到數據后,會給一個應答,表示我已經收到了消息,并且這個應答號ack = seq + “接收到的數據長度”,客戶端再繼續發送時,序列號更新為服務端的應答號的值。
? ? ? ? 下面我們就抓包看下這個過程。
? ? ? ? 客戶端分別向服務器發送了兩次消息,第一次發送了一個字符串“hello”,第二次發送了字符串"word"。
? ? ? ? 我先從客戶端往服務器發送一個字符串 "hello",我們可以看下,大小為6個字節。
? ? ? ? 可以看下初始序列號seq為1
? ? ? ? ?然后看下服務器返回了什么,服務器作了一個應答ack=7,表示接受到了客戶端的信息
再看下第二次發送字符串"word"的情況,序列號seq更新為上一次服務端的應答號ack,變為7
?看下服務端的應答,確認號ack為12
?4、TCP四次揮手分析
? ? ? ? TCP四次揮手示意圖
?第一次揮手:客戶端發起一個FIN,表示客戶端希望斷開連接。
?第二次揮手:服務端返回一個ACK,表示對客戶端斷開請求的應答。
?第三次揮手:服務端發起一個FIN,表示服務端希望斷開連接。
?第四次揮手:客戶端返回一個ACK,表示對服務端斷開請求的應答。
?????????理論上揮手是需要四次的,但抓包分析時,只抓到了三次揮手過程,第二次握手和第三次握手合并為一次了。
?第一次揮手
????????客戶端發起一個FIN請求(表示客戶端希望斷開連接),序列號seq=12,應答號ack=23。注意這里的應答是上一次數據通信過程中的應答。
第二次,第三次揮手
????????服務端返回一個ACK(表示對客戶端斷開請求的應答) + FIN(表示服務端希望發起斷開請求),應答號ack=13,序列號seq=23
?第四次揮手
?????????客戶端返回一個ACK(表示對服務端斷開請求的應答),應答號ack=24,序列號seq=13
總結
以上是生活随笔為你收集整理的使用Wireshark抓包分析TCP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB--数字图像处理 频域图像
- 下一篇: geetest极验空间推理验证码破解与研