1. 程式人生 > >TCP 三次握手的意義

TCP 三次握手的意義

# 概述 在網路的傳輸層協議中, 存在著兩大悍將: `TCP` 和 `UDP` . 從前, 我傻傻的以為自己對他們雖談不上精通, 但還是知道的, 但是, 我錯了, 我被自己問住了, 我傻了. 啥也不是. # UDP (這裡為了介紹簡單, 就不提資料在傳輸過程中的失真(糾錯碼)等情況了. 簡單介紹一下, `TCP`才是今天的主角) UDP 就是, 我把資料發給你了, 我不管你有沒有收到, 反正我發出去了, 任性. 就比如我要給我的女神表白, 但是我又不好意思, 所以我託我的好兄弟馬六幫我給女神帶句話, 但是這個馬六也臉皮薄, 他又找週三轉達, 就這樣雖然歷經波折, 但最後還是順利的將話帶到了女神那裡. 在這個過程中我做了什麼? 我只是將訊息送出去了, 僅此而已. 最後我滿心歡喜的等待著女神的回覆, 可能換回一句: 我們還是做朋友吧. 但還有一種可能, 那就是最終根本就沒有送到女神那裡, 中間轉到週三的時候, 他因為自己的事情, 把這事給忘了, 可憐的我還苦苦的等... `UDP` 雖然省事, 高效, 但是卻不可靠. 因為我僅僅是發出去了, 但是我不確定你有沒有收到. 不可靠有什麼問題麼? 上面就是個例子. 再比如, 咱倆聊天, 我給你發了一段話: `123456`, 結果中間4丟了, 你收到的資訊是: `12356`. 這種還好, 如果快過年了, 我發給你這樣一段話: `明天把你的豬宰了吧`, 哎, 中間 `的豬` 丟了, 那估計免不了一番腥風血雨. 那如此不可靠的`UDP`協議, 有什麼用呢? 還真有, 雖然不可靠, 但是他快啊. 在一些對資料的可靠性要求不高, 但是實時性很強的地方就有了用武之地, 比如視訊電話(我也不知道底層是不是 UDP, 舉個例子), 打視訊電話的時候, 視訊要保證其連續性, 而且中間如果丟了一幀也不會有什麼影響. 但是在大多數場景下, 資料的可靠性還是要有保證的, 你從網上下載一個程式的安裝包, 如果中間丟了一個位元組的資料, 那可能就導致一個200mb 的檔案廢了, 根本不能執行. # TCP 為了保證傳輸資料的可靠性, `TCP` 誕生了. 還記得剛才我給女神表白的時候, 問題出在哪裡嗎? 沒錯, 就是因為我到最後苦苦等待, 結果她悲劇的沒有收到我的心意, 傷心. 怎麼辦呢? 這次我想通了, 求人不如求己, 我要鼓起勇氣, 我到她面前當面告訴她, 即使我多了一個朋友(沒辦法, 咱就喜歡交朋友), 也好過她收不到訊息的好. 這下可靠了, 我確信她收到了. 區別在哪裡? 不是我到他面前, 而是不管她是否願意, 至少給爺們回句話吧. 沒錯, 就是回句話. ![image-20200612230118536](data:image/png;base64,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) 如果有這樣一種機制, 每次我發出去的資料, 如果對方收到了, 就給我回句話, 告訴我收到了, 那訊息就變得可靠了. 我發出去的所有訊息, 都可以確信對方已經收到了. * 如果資料中間丟了, 對方沒有收到怎麼辦? 沒有等到對方回覆, 我就重新發一遍就好啦. * 如果對方的回覆丟了, 沒有收到回覆怎麼辦? 處理方式同上, 對方收到重複資料, 把重複的資料包丟棄再回復一條就好啦. 一個來自靈魂的提問, 現在的資料傳送可靠嗎? 我覺得是不可靠的, 現在僅僅能夠保證一個數據包, 我百分百的確信對方已經收到了. 那什麼樣的連線才是可靠的呢? 我要發你100個數據包, 那這100個數據包你每一個都要能夠收到, 並且要按照順序將他們再拼裝起來, 我覺得這樣的連線才能稱得上可靠. 這裡面涉及到了兩個概念, `確保收到` 和 `順序`. 確保收到我們已經做到了, 如何保證包的順序呢? 我把要發的資料排排隊, 一個一個發就行了? 天真, 如果有包1在網路中某個地方喝了杯茶, 睡了一覺, 結果接收方先收到了包2後收到包1, 順序就亂了. 保證順序的方式其實很簡單, 在每一個包上, 都加上一個序號, 接收方按照序號從小到大把收到的包組裝起來就好了. 經過改造, 現在已經基本能夠保證傳輸的可靠性了, 到這裡, 有沒有發現什麼? 現在和`TCP`的區別就是少了`三次握手`和`四次揮手`(不僅僅是). 那`三次握手`的意義何在? # 三次握手意義何在 今天在接收了身邊大神的一些思想之後, 我還是沒有太明白. 不過現在, 我貌似明白了些什麼. 要想知道三次握手有什麼用, 就需要知道三次握手都做了什麼事情. **1. 確保對方能夠正常接收資料, 測試連線** 還是上面的例子, 我去女神面前表白, 但不湊巧, 女神正在午休, 我站著旁邊傻傻的表白, 還是沒有用. 所以, 在開始之前, 我要先確保女神能夠聽到我說的話, 我得把她叫醒, 莊重的告訴她. 而這, 就是握手的意義. **2.建立系統開銷** 在傳送 UDP 包的時候, 因為其不可靠性, 所以基本不會用其傳送很大的檔案, 因為將較大的資料拆分後發出, 中間丟了幾個資料包就尷尬了. 而且 UDP 也不能夠保證包的順序, 還是一樣的原因. 但是 TCP 就不一樣了, 它是可靠的啊, 你可以將多個數據包分開發給我, 到我這裡, 我再把他們按順序排列好就行了. 而這個按順序排列的操作就需要專門開闢記憶體空間來儲存收到的資料包了, 當握手成功後, 我就會為你留下用於儲存資料包的記憶體空間及其他一些系統資源. 而如果沒有三次握手呢? 客戶端傳送的資料包, 可能因為某些原因(比如路不好走), 在網路中待的久了一些, 客戶端因為沒有收到回覆, 已經放棄連線了, 但這時候, 伺服器收到了這個資料包, 開闢系統資源, 返回確認包, 然後就沒有然後了. 客戶端已經放棄了, 根本不搭理你的回覆. 系統的相關資源就白白浪費了. **3. 測試超時時間** 上面說了, 當我長時間沒有收到你的回覆時, 我就認為你沒有收到我發出的資料, 那我就需要重新發送了. 那這個*長時間*是多久呢? 可以在握手期間進行測試, 測量請求包的往返時間,並依此計算重傳的超時時間. **4.安全性** 這個確實是我沒有想到的. 因為 TCP 會將資料拆分後傳送, 為了保證資料的有序, 就要給每個資料包進行編號. 然後接收方根據編號的順序對收到的包進行重組, 保證了資料的有序. 如果只是簡單的123456, 那大家都知道了, 我黑客小黑, 也給你發一個編號為1的資料包, 不就把你真實的資料包給偷偷替換了麼? 為了防止序列號被猜到, 就要讓每次傳送資料的序列號不同, 在進行握手的時候會對資料的初始序列號進行交換. 客戶端第一次傳送握手資訊的時候, 會連著自己的初始序列號一起發過去, 伺服器收到之後, 返回第二個握手資訊的時候, 除了返回握手確認, 也會連著自己的初始序列號一起發回來. 這在一定程度上保證了資料的安全傳輸. 當然這種防護措施很弱. 這個隨機的序列號其實還有另外一個作用, 我覺得這才是它最主要的作用. 如果我們上一次連線的其中一個數據包3, 在網路中傲遊了一會, 連線已經斷開了, 我們又開始了新的一次資料連線, 這個時候我收到了資料包3, 就會導致生成了錯誤的資料序列, 而隨機序列號則避免了這個問題, # 四次揮手的意義 `三次握手`確實是有些作用, 那`四次揮手`有什麼用呢? **1.釋放系統資源** 在三次握手的時候, 為了接收資料並進行序列重組, 開闢了一些系統資源, 當資料傳送完了, 就不用一直佔著了, 早些釋放, 留給別人. 額, 應該還有其他作用吧... # 總結 綜上, 你說如果沒有`握手`和`揮手`的過程, 能不能實現一個可靠的連線呢? 可以, 只不過會有問題. 個人簡單將握手的作用總結為以下幾點: 1. 為了對資料進行順序重組, 勢必需要開闢系統資源. 如果沒有握手的過程, 所有的請求, 都要佔用資源. 而沒有揮手的過程, 這些資源就不能及時釋放. 2. 為了資料的高效傳輸, 選用一個合理的超時重傳時間是十分有必要的. 時間短了, 會導致頻繁重傳, 浪費網路資源. 時間長了, 就會導致整體的資料傳輸時間變長. 3. 為了保證對方能夠正常接收資料, 否則對方關機了, 我總不能在這一直超時重傳吧. 4. 為了保證多次連線的資料包不會引發資料錯誤. 通過隨機的序列號, 保證了兩次連線的資料包不會互相