wireshark 分析TCP協議

✎﹏ℳ๓₯無痕發表於2020-11-23

wireshark 分析tcp協議

1.實驗環境

1.manjaro-gnome-20.1.2
2.wireshark-3.4.0
3.VMware-16.0.0
4.ubuntu16.04 (虛擬機器192.168.146.100 NAT模式 服務端)
5.ubuntu16.04 (虛擬機器192.168.146.101 NAT模式 客戶端)
6.python3.8

2.實驗原始碼

server.py

執行於192.168.146.100

import socket
server = socket.socket()
server.bind(('0.0.0.0', 7777))
server.listen(5)
print('開始服務')
while True:
    conn, addr = server.accept()
    print('a new connect from ', addr)
    conn.sendall(bytes('hello,world!', encoding='utf-8'))
    conn.close()

client.py

執行於192.168.146.101

import socket
client = socket.socket()
client.connect(('192.168.146.100', 7777))
data = client.recv(1024)
client.close()
print(data.decode('utf-8'))

3.wireshare分析

三次握手,一次傳輸資料,四次揮手。
在這裡插入圖片描述
TCP Flags欄位

SYN表示建立連線
FIN表示關閉連線
ACK表示響應
PSH表示有 DATA資料傳輸
RST表示連線重置

TCP Seq 欄位

TCP 協議為每個包編號(sequence number,簡稱 SEQ),以便接收的一方按照順序還原。萬一發生丟包,也可以知道丟失的是哪一個包。

TCP ACK欄位

ACK 攜帶兩個資訊。
期待要收到下一個資料包的編號
接收方的接收視窗的剩餘容量

TCP Window

接受視窗大小,這個是可變的,用來調節資料傳送速率。

IP Flags欄位

1.長度3位元。
2.該欄位第一位不使用。
3.第二位是DF(Don’t Fragment)位,DF位設為1時表明路由器不能對該上層資料包分段。如果一個上層資料包無法在不分段的情況下進行轉發,則路由器會丟棄該上層資料包並返回一個錯誤資訊。
4.第三位是MF(More Fragments)位,當路由器對一個上層資料包分段,則路由器會在除了最後一個分段的IP包的包頭中將MF位設為1。

IP Protocol欄位

8bit的協議欄位表示在IP上層承載的是什麼協議。
0x01表示ICMP協議
0x06表示TCP協議
0x11表示UDP協議等。

資料幀的Type

IP: 0x0800
ARP: 0x0806

源與目的

Ethernet:源Mac地址與目的Mac地址
IP:源ip地址與目的ip地址
TCP:源埠與目的埠

關於三次握手,四次揮手,請閱讀這篇文章

作者info
作者:DebugWuhen
原創公眾號:『DebugWuhen』,專注於記錄有趣的程式設計技術和有益的程式人生,期待你的關注。
轉載說明:務必註明來源(註明:來源於公眾號:DebugWuhen, 作者:DebugWuhen)
在這裡插入圖片描述

相關文章