為什麼要3次握手和4次揮手
阿新 • • 發佈:2018-12-26
TCP的3次握手和4次揮手很好理解,但如果問一句,你思考過為什麼需要這麼複雜的步驟嗎?
還是來回顧下這兩個操作,首先明確下TCP是全雙工通訊(2個方向能同時通訊)
(1)3次握手
這裡我用男生和女生聊天的例子來解釋
男生:在幹嘛(第1次握手) | |
刷微博 | :女生(第2次握手) |
男生:哦(第3次握手) | |
男生:xxxxx(開始傳輸局) | |
xxxxxxxx | :女生 |
客戶端傳送連線請求(第1次握手),服務端返回收到了該請求的確認(第2次握手)
客戶端傳送收到了服務端確認的確認(第3次握手),3次握手之後連線建立完成
問題來了,為什麼要3次?2次握手為什麼不行?
其實2次握手可以完成連線的建立,但會帶來資源浪費的問題
客戶端 (第2次傳送請求)------------>(第1次傳送請求)--------------> 服務端
假設通訊道路堵塞,第1次的請求未能在限定時間內收到服務端的請求,可能堵塞也可能丟失,於是傳送第2次請求
堵塞結束後,2次的請求自然建立了2個TCP連線,但問題是,第1個連線已經被客戶端放棄了(因為之前的超時客戶端不會在
這個連線上傳輸資料),而服務端開啟了2個連線。此時只有第2個連線是有用的,第1個連線自然就造成了資源的浪費。
(2)4次揮手
男生:拜拜(第1次揮手) | |
哦 | :女生(第2次揮手) |
xxxxxx | :女生(第3次揮手) |
男生:哦(第4次揮手) |
這裡第3次揮手是因為服務端可能存在為傳輸完的資料
這裡服務端在第3次揮手完之後關閉服務端向客戶端的連線,第4次揮手後客戶端向服務端的連線關閉
所以,為什麼要4次揮手?
因為TCP的連線只能由客戶端開始放棄,服務端只能被動接受,客戶端放棄連線後
服務端的資料可能沒傳輸完,所以需要4次揮手才能確保全雙工通訊的關閉。