从Wireshark看TCP连接的建立与关闭
TCP是一種面向連接、可靠的協(xié)議。TCP連接的建立與斷開,都是需要經(jīng)過通信雙方的協(xié)商。用一句話概括就是:三次握手say hello(建立連接);四次握手say goodbye(斷開連接)。要了解TCP連接的建立與斷開,就不得不需要了解TCP頭的內(nèi)容。然而,TCP頭及其復(fù)雜,概括而言,我們需要了解以下內(nèi)容:
Sequence Number(Seq):序號。表示一個TCP片段,用于保證數(shù)據(jù)沒有丟失
Acknowledgment Number(Ack):確認號。用于表示希望從對方得到的下一個數(shù)據(jù)包的序號。舉例來說A發(fā)送了一個數(shù)據(jù)包給B,Ack = 1000;那么就表示A希望從B那接收到的下一個數(shù)據(jù)包的序號為1000。也就是說,B應(yīng)該發(fā)送一個數(shù)據(jù)包給A,Seq = 1000。后面會有更詳細的例子
Flags:標志。用于標記TCP數(shù)據(jù)包的類型。TCP連接的建立與斷開,會用到以下標記:SYN,ACK,FIN
- SYN = Synchronize sequence numbers
- ACK = Acknowledgment
- FIN = Finish
三次握手的示意圖如下:
使用Wireshark捕獲TCP三次握手的過程,從下圖我們也能很清楚的知道Seq以及Ack變化的過程:
- Client -> Server: Seq = 3691127924(X) (Flags = SYN)
- Server -> Client: Seq = 233779340(Y), Ack = 3691127925(X+1) (Flags = SYN&ACK)
- Client -> Server: Seq = 3691127925(X+1), 233779341(Y+1) (Flags = SYN&ACK)
四次握手的示意圖如下:
使用Wireshark捕獲TCP四次次握手的過程,從下圖我們也能很清楚的知道Seq以及Ack變化的過程:
- Client -> Server: Seq = 822643295(X), Ack = 2079380537(Y) (Flags = FIN&ACK)
- Server -> Client: Seq = 2079380537(Y), Ack = 822643296(X+1) (Flags = ACK)
- Server -> Client: Seq = 2079380537(Y), Ack = 822643296(X+1) (Flags = FIN&ACK)
- Client -> Server: Seq = 822643296(X+1), Ack = 2079380537(Y+1) (Flags = ACK)
上述的Wireshark并不是我在實踐中捕獲的數(shù)據(jù)包,而是《Wireshark數(shù)據(jù)包分析實戰(zhàn)》這本書中附帶的數(shù)據(jù)包文件。在我實際的抓包分析中,捕獲的四次握手的過程似乎有些不一樣(只有三次握手就斷開連接了,希望通過后續(xù)學(xué)習(xí)能解開這個疑惑)
三次握手:
四次握手:
轉(zhuǎn)載于:https://www.cnblogs.com/jonathanlin/p/4282582.html
總結(jié)
以上是生活随笔為你收集整理的从Wireshark看TCP连接的建立与关闭的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Android(1)—Mono For
- 下一篇: GeoPoint与LocationDat
