【大白话系列】图解TCP三次握手【使用wireshark工具抓包分析TCP三次交互流程】
文章目錄
- 1.首先準備好抓包工具wireshark
- 2.準備一段簡單的socket程序
- 3.打開wireshark工具進行抓包
- 4.舉例了解一下TCP報文段中的ACK和Seq的含義
- 5.流程分析
- 6.為什么要進行三處握手?
1.首先準備好抓包工具wireshark
wirewhark官網(wǎng)下載地址:wirewhark官網(wǎng)下載地址:wirewhark官網(wǎng)下載地址:https://www.wireshark.org/
2.準備一段簡單的socket程序
🏆(1)服務(wù)端程序如下
public void server06() throws IOException {try {serverSocket = new ServerSocket(8080);serverSocket.accept();Thread.sleep(Integer.MAX_VALUE);} catch (InterruptedException e) {e.printStackTrace();} finally {serverSocket.close();}}🏆(2)客戶端程序如下
public void client06() throws IOException {try {socket = new Socket("127.0.0.1", 8080);clientOutputStream = socket.getOutputStream();clientOutputStream.write(new byte[]{'1', '2', '3', '4', '5', '6'});} finally {clientOutputStream.close();socket.close();}}3.打開wireshark工具進行抓包
因為我這個是本地程序測試,所以對本地回環(huán)/回調(diào)接口進行抓包,也就是上圖中的loopback
此時在8080端口沒有抓取到任何數(shù)據(jù),因為此時我們的程序還未啟動此時在8080端口沒有抓取到任何數(shù)據(jù),因為此時我們的程序還未啟動此時在8080端口沒有抓取到任何數(shù)據(jù),因為此時我們的程序還未啟動
先啟動服務(wù)端小程序,然后再啟動客戶端小程序
此時再去看wireshark窗口,就會發(fā)現(xiàn)抓取了很多包此時再去看wireshark窗口,就會發(fā)現(xiàn)抓取了很多包此時再去看wireshark窗口,就會發(fā)現(xiàn)抓取了很多包
前三行就是所謂的三次握手的流程前三行就是所謂的三次握手的流程前三行就是所謂的三次握手的流程
4.舉例了解一下TCP報文段中的ACK和Seq的含義
Seq(序號):簡單了說序號就是該報文段首字節(jié)的字節(jié)流編號。比如,A主機向B主機發(fā)送一個大小為500000字節(jié)的數(shù)據(jù)流(報文),最大報文段長度(MSS)為1000字節(jié),所以要為該數(shù)據(jù)流(報文)構(gòu)建500個報文段,所以第一個報文段的seq(序號)就是0,第二個報文段的分配序號為1000,第三個2000,以此類推…
ACK(確認序號):它的意思是期望下一次對方發(fā)送給我以ACK為起始字節(jié)的數(shù)據(jù)。比如說,B主機發(fā)送給A主機一個報文段(范圍為0~1000的所有字節(jié));此時A主機打算發(fā)送一個報文段給B,它的目的是期望B主機給它發(fā)送1001及以后的數(shù)據(jù),那么此時A->B報文段中的ACK=1001
5.流程分析
第一次握手:
首先客戶端向服務(wù)端發(fā)送SYN標(biāo)志,目的是告訴服務(wù)器我想與你建立連接(此時len = 0代表沒有數(shù)據(jù)發(fā)送)
第二次握手:
第二次發(fā)送了SYN和ACK標(biāo)志位。ACK = 1表示服務(wù)端期待下一次客戶端發(fā)送給我的序號(seq)是1,seq=0也很好理解,這兩次都沒發(fā)送數(shù)據(jù)肯定是0呀(如果你看完了第4步seq和ack的例子應(yīng)該很好理解)
第三次握手:
- 此時的Seq=1應(yīng)該好理解,因為上一次服務(wù)端發(fā)送給我的ACK=1(期待我發(fā)送1及其以后的數(shù)據(jù)給它),由于len=0,所以本次也不發(fā)送任何數(shù)據(jù),三處握手不傳輸任何核心數(shù)據(jù)。
- 此時ACK=1就是我期待服務(wù)端下一次發(fā)送給我的起始字節(jié)序號。
到這里三次握手就結(jié)束了,此外你可以看看三次握手之后的傳輸數(shù)據(jù)流程
相信應(yīng)該比較容易理解(我代碼中write了6個字節(jié))
注意客戶端的59712端口是系統(tǒng)分配的,我沒有進行顯示bind
6.為什么要進行三處握手?
其實這是因為無論是客戶端還是服務(wù)端都無法確認對方能到接收到它的信息。最重要的原因還是防止已經(jīng)失效的報文段突然又被服務(wù)端接收
總結(jié)
以上是生活随笔為你收集整理的【大白话系列】图解TCP三次握手【使用wireshark工具抓包分析TCP三次交互流程】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【大白话系列】带你进入网络的世界【都说计
- 下一篇: 《JVM系列》深入浅出类加载机制中<in