關於wireshark抓包的那點事兒網絡
三次握手session
172.18.254.177爲客戶 111.13.2.158爲服務端tcp
一、主動打開。發送SYN,協商window size 、TCP MSS seq=0 len=0 MSS=1460 win=65535最大窗口大小ide
客戶端爲syn_sentspa
服務端爲syn_recv3d
二、接收到syn。回覆syn ack seq=0 ack=1=0+1 確認本身的最大win=14480 MSS=1460rest
客戶端爲establishedorm
服務端爲syn_recvserver
三、接到到syn 回覆ack seq=1 ack=1=0+1 至此三次握手成功創建。blog
客戶端爲established
服務端爲established
四次斷開
一、主動關閉,發送fin。Seq=328
服務端狀態爲fin_wait1
客戶端狀態爲closed_wait
二、客戶端發送確認ack ack=329=328+1
服務端狀態爲fin_wait2
三、客戶端發送fin seq=133
客戶端狀態爲last_ack
服務端狀態爲time_wait
四、服務端發送ack ack=134=133+1
客戶端狀態closed
服務端狀態closed
數據包ACK=segment len+seq = 下一個要接收的數據包的seq
圖1
圖2
圖3
由圖1 數據包狀況能夠看出 359 seq=1441 segment len=1440 因此下一個回包的ack=1441+1440=2881 從圖2中能夠確認ack確實爲2881.
圖2 數據包狀況能夠看出 360 seq=349 segment len=0 因此下一個回包的ack=349+0=349,從圖3能夠確認ack確實爲349.
圖1 359 的ack=349 則圖2 350 的seq=349 ack=2881 推斷圖3 361的seq=2881 .
一條完整會話(session)指的是,相同的傳輸協議中兩個不一樣IP之間的兩個不一樣端口的互相通訊,若是IP或端口變化剛屬於不一樣的會話,其seq和ack也是相互獨立的,沒有任何關聯。
TCP segment of a reassembled PDU (TCP數據包重組的一部分)
分段的數據包的ACKnum相同,
當請求的數據包大於TCP MSS時會將數據分爲多個數據包進行傳輸。
局域網內的TCP MSS大小爲1460=1500-20(IP包頭)-20(TCP包頭)
server=124.192.132.36 client=192.168.10.111
(37八、38一、38四、387) seq=349不變,ack一直增長。說明client端一直在接收server端的數據,且一直在給client應答。
server=124.192.132.36 client=192.168.10.111
(37六、37七、379) ack=349沒有變化。seq不斷增長,說明server端一直在向client發送數據包,不用給client應答,而是等待client端的應答。
由以上能夠看出client不用對server端的每個包都作一一應答,能夠接收幾個包後統一作應答。
TCP window update (TCP 窗口更新)
TCP zero window
TCP window full
是TCP通訊中的一個狀態,它能夠發生的緣由有不少,但最終歸結於發送者傳輸數據的速度比接收者讀取的數據還快,這使得接受端的在緩衝區必須釋放一部分空間來裝發送過來的數據,而後向發送者發送Windows Update,告訴給發送者應該以多大的速度發送數據,從而使得數據傳輸與接受恢復正常。
或者一個TCP Window變爲0了, 或者接近0了, 這就會警告數據發送方沒有更多空間來接受更多數據了.文件傳輸會中止, 直到收到一個update說buffer已經清空了.
Tcp window full :服務端向客戶端發送的一種窗口警告。
Tcp zero window:客戶端向服務端發送的一種窗口警告。
Tcp keep-alive: 會話保持,通常由服務端發出。
如下是針對上圖的數據包進行分析
客戶端:192.168.10.111 服務端:42.250.12.36
131:服務端向客戶端發出tcp window full,表示沒法再接受新的數據,
132:客戶端向服務端發送tcp zero window ,表示沒有window能夠接收新數據
137:服務端向客戶端發送keep-live,保持會話,直至客戶端有足夠的window能夠再次接收數據。
138:客戶端再次向服務端發送 tcp zere window ,提示服務端目前沒有足夠的window能夠接收新數據。
139:客戶端向服務端發送 tcp window update,表示buffer已經清空。並提示服務端如今已經有足夠的window 大小爲 17280。
140:因爲收到了客戶端發送的window buffer已經清空,因此繼續發送數據。
TCP DUP ACK (重複的ACK)
表示數據段已丟失, 574是數據丟失的位置,#1 表明丟失一次。
通常狀況下,當網絡延時增大致使網絡速度變慢,是產生重複ACK的一個主要緣由。或者是服務端或者客戶端響應速度變慢或者沒沒有響應。
TCP out-of-order
因爲收到的數據包亂序,有多是網絡擁塞或者路由上存在負載分擔的狀況,致使後發送的數據包先達到。
TCP Restransmission 重傳
170號數據包是爲167號數據包作的重傳操做,因此seq ack都是同樣的,seq=2070 ack=6264
TCP previous segment not captured 以前的分段未收到
說明亂序了,未收到以前的數據包,也要進行重傳,1932的ack=83066,也就是要求server端下次發送seq=83066的包,結果 1933發送的數據包seq=85946.說明server端收到過client端發送的數據包ack=85946,則判斷以前的一個數據包未收到。在1934 對1932數據包進行重傳操做。