相信大家總是能聽到TCP、UDP沾歪,還有TCP三次握手漂彤,之前都是看的書上的理論,今天來用Wireshark抓一個tcp三次握手灾搏。
在平時的開發(fā)中挫望,如果是一般的Http或者Https請求,我們直接在Windows上使用Fiddler狂窑、Mac上使用Charles來抓包即可媳板。當然,使用Wireshark也可以抓取http泉哈、https請求蛉幸,不過一般使用Wireshark來抓TCP請求。
官方下載地址:https://www.wireshark.org/download.html
首先丛晦,來看下wireshark界面
這里選擇Wi-Fi就能抓到本機所有的請求了奕纫,我這里是wifi,如果是直接連網(wǎng)線烫沙,看到的就是本地連接了若锁。這個很簡單,你試一下就能知道了斧吐。
然后就能看到各種網(wǎng)絡請求了,包括應用層協(xié)議和傳輸層協(xié)議仲器。
因為數(shù)據(jù)傳輸記錄太多了煤率,那么就一定需要過濾器功能了。上面的過濾器欄中支持以下幾種表達式:
表達式規(guī)則
- 協(xié)議過濾
比如tcp乏冀,只顯示TCP協(xié)議蝶糯。http,就是只顯示HTTP協(xié)議。注意辆沦,這里是區(qū)分大小寫的昼捍。 - IP 地址過濾
比如 ip.src ==192.168.1.102 顯示源地址為192.168.1.102,
ip.dst==192.168.1.102, 目標地址為192.168.1.102 - 端口過濾
tcp.port ==80, 端口為80的
tcp.srcport == 80, 只顯示TCP協(xié)議的愿端口為80的肢扯。 - Http模式過濾
http.request.method=="GET", 只顯示HTTP GET方法的妒茬。 - 邏輯運算符為 AND/ OR
點擊任意一個記錄,下面會顯示該記錄的封包詳細信息
- Frame: 物理層的數(shù)據(jù)幀概況
- Ethernet II: 數(shù)據(jù)鏈路層以太網(wǎng)幀頭部信息蔚晨,這里就可以看到本機mac地址以及目標mac地址了
- Internet Protocol Version 4: 互聯(lián)網(wǎng)層IP包頭部信息乍钻,這里可以看到本機以及目標ip地址
- Transmission Control Protocol: 傳輸層T的數(shù)據(jù)段頭部信息肛循,此處是TCP,這里能看到TCP的數(shù)據(jù)包了银择,下面會講到多糠。
- Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協(xié)議
關于互聯(lián)網(wǎng)通信協(xié)議浩考,推薦阮一峰的“互聯(lián)網(wǎng)協(xié)議入門”夹孔,寫的真好。http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
下面看下TCP報文頭部格式:
再來對比看一下Wireshark抓的TCP包析孽,終于從理論到實踐了搭伤。大學期間看了很多遍TCP報文頭都記不住。重點關注一下Sequence number 和 Acknowledgment number 以及Flags绿淋。
現(xiàn)在進入我們的重點闷畸,TCP三次握手,這個歷史性的握手
我們先訪問一個http請求“http://www.cnblogs.com/tankxiao”吞滞,注意這里不是https哦佑菩,關于https我后面再講。
我們找到我們請求的http地址裁赠,注意看Stream index = 2殿漠,這個index等下可以追蹤到這次http建立之前的tcp三次握手過程。
我們鼠標右鍵這個http請求佩捞,F(xiàn)ollow-TCP Stream绞幌,就可以看到此次tcp建立連接的歷史性握手了。
上面的地址欄過濾"tcp.stream eq 2"中的2就是上面的Stream index一忱。
咱么首先看下TCP三次握手經(jīng)典圖
大學時看過很多遍這個圖莲蜘,卻記不住到底啥意思,就是因為太抽象了帘营,抽象到只能死記硬背票渠,今天通過wireshark一看就明白了。
下面來分步解析一下三次握手過程芬迄,主要關注三個參數(shù)问顷,分別是Flags、Sequence number禀梳、Acknowledgment number杜窄。
第一次握手
Flags:SYN
Sequence number:0
Acknowledgment number:0
第二次握手
Flags:SYN,ACK
Sequence number:0
Acknowledgment number:1
第三次握手
Flags:ACK
Sequence number:1
Acknowledgment number:1
總結:TCP三次握手過程
- 客戶端發(fā)送SYN標志和序列號Seq來向服務器發(fā)起連接
- 服務端收到請求,向客戶端發(fā)送ACK表示確認算途,確認號是接收到的序列號+1塞耕。同時發(fā)送SYN標志位以及自己的序列號給客戶端發(fā)起連接
- 客戶端再發(fā)送ACK標志給服務端表示確認,其中確認號是服務端發(fā)送過來的序列號+1
參考博客:https://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html