乾貨分享|網絡情緣之TCP的握手和分手

最近給學員們複習接口測試的時候,有人找到一個面試的時候被問到的問題:“請說明TCP的三次握手。”然後有人笑着回答說:“就是問女朋友‘約嗎’?”女朋友說:“約”,然後再說:“走吧”,這樣的過程。看到這個回答,有點好像理解了,但又不知道理解什麼了的感覺,所以今天我們就來聊一下TCP協議相關的內容吧,希望對大家以後做接口測試有所幫助。


不知道大家有沒有寄大件物品的經歷,比如寄一張牀,小明同學肯定有(小明是誰?我也不知道)。有一天小明要給老家寄一張大牀,於是去了物流公司,找到客服小MM諮詢。小MM問:“你住哪,要把東西寄到哪裏去?”於是小明趕緊說了自己的情況:“我住長沙五一新幹線1430,寄到湖南省長沙縣某某村222號”

小MM繼續問:“這個村有很多個收快遞的點,你要放到哪個點呢?”小明想了一下:“放到標有80的快遞點,他們會有人來拿的。”

小MM說:“我現在還不知道那個地方是不是營業,我先幫你確定一下。”於是她叫了一個小弟說:“你給長沙縣某某村去送個信,說我們要給他們發個快遞,看他們還營業嘛或者有空沒有”小弟聽完就出去了。(不要問爲什麼不打電話,因爲劇情需要)一個小時後,小弟回來了,說:“他們營業的,有空。”小MM說:“你再跑一趟,告訴他我們知道了,我們就要給他們送個物品過去了。”小弟又出去跑了一趟,小明覺得這個小MM是有點消遣人,讓人家跑三趟,小MM做出解釋:“我們要建立一個可靠的連接通道,不跑三趟怎麼證明我們雙方收件發件沒有問題呢。我們要保證你的東西能寄到的話就一定要這麼做,自己琢磨琢磨就知道了。”看到這裏大家應該差不多知道TCP建立連接的三次握手是怎麼回事了 。

新夢想幹貨分享

圖一:wireshark抓取的數據包

第一次握手:192.168.1.105發送位碼syn=1數據包到119.75.219.45,119.75.219.45由SYN=1知道192.168.1.105要求建立聯機;

第二次握手:119.75.219.45收到請求後要確認聯機信息,向192.168.1.105發送ack , v發送syn=1,ack=1的確認包;

第三次握手:192.168.1.105收到後檢查位碼ack是否爲1,若正確,192.168.1.105會再發ack=1,119.75.219.45收到後確認seq=seq+1,ack=1則連接建立成功。

新夢想幹貨分享
圖二、三次握手

小明的牀經過很多次快遞後,終於把所有的零部件都送出去了。這時小MM說:“都發過去了,可以跟那邊不聯繫了。”於是把之前的小弟叫來說:“跟那邊說一下,該發的包都發送完了。”過了一會,小弟回來說:“他們知道了,有事情會跟我們聯繫的。”過了一會,又有一個小弟過來說:“我們那邊已經沒有事情了,今天的事情結束了,我們會等待半小時,如果你們沒有事情了,半個小時後,就不聯繫了。”小MM很開心說:“那你帶個結束確認信過去,我們也等半小時,如果他們沒有事情,今天就結束了。”小明說:“你們這結束連接也還挺麻煩的。”小MM說:“那是自然,萬一有什麼臨時事情發生呢,這叫四次分手。”

TCP結束連接需要進行四次對話,雙方確保沒有數據要發送了,才能斷開連接。

新夢想幹貨分享

圖三:wireshark抓取四次揮手的數據包

第一次揮手:客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。

第二次揮手:服務器B收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1,和SYN一樣,一個FIN將佔用一個序號。

第三次揮手:服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。

第四次揮手:客戶端A發回ACK報文確認,並將確認序號設置爲收到序號加1。

在這裏插入圖片描述

圖四、TCP數據傳輸的過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章