TCP的三次握手和四次揮手

TCP建立連接需要三次握手
客戶端向服務端發送請求報文
服務端接收到請求報文發送響應報文
客戶端接收到服務端響應報文迴應收到,此時這裏可以傳遞一些消息內容了,但是注意前兩次握手是不能連帶消息傳遞
解釋一下爲什麼需要三次握手,而不是兩次
首先用戶體驗講究的是效率,響應快用戶體驗就好
第一次握手客戶端發送請求報文,瀏覽器接收此時服務端知道客戶端發送數據正常第二次握手服務端發送響應報文給客戶端,此時客戶端知道服務端接收數據正常,發送數據正常但是注意這個時候服務端並不知道客戶端是否接收數據正常
所以纔有第三次握手,客戶端發送報文給服務端,服務端才得知客戶端接收數據正常
第一次握手和第二次握手是不能傳遞數據的,但第三次可以
在這裏考慮到安全因素,因爲第一次和第二次的握手不會讓客戶端和服務端雙方都知道發送接收均正常,此時如果第一次握手就開始接收數據,假如有不法分子想搞服務器,模擬虛擬ip發送虛假請求信息,服務端就會不停的接收,會造成服務端壓力劇增,最後導致服務端宕機。
在這裏再補充一點所學的,其實服務端接收客戶端發送的數據都是在消息隊列裏,假如此時大量數據發送會造成消息隊列爆滿,會造成正常訪問的客戶端因爲消息隊列空間不足,造成丟包.

TCP斷開連接四次揮手
假如客戶端先發送斷開請求,(服務端一般不會去主動斷開吧我覺得)
客戶端發送斷開請求報文給服務端
服務端接收到斷開請求報文後會發送確認報文響應給客戶端,此時客戶端會給應用層告知客戶端請求斷開
應用層接收並關閉相應服務,接着服務端會發送連接釋放報文給客戶端
客戶端接收到服務端發來的連接釋放報文後,會對此法鬆確認報文段,然後等待2MSL關閉,服務端接收到報文後關閉
解釋一下爲什麼要等待2MSL
因爲考慮到請求的報文可能再傳輸過程中,發生發送失敗等等,這個時候客戶端會再在一段時間後再次發送,這個2MSL就是爲了防止這種事情發生;假如客戶端發送最後的報文後立即關閉,而此時報文在傳輸中丟包了,那麼服務端接收不到,就會一直保持半關閉狀態,無法關閉。
解釋一下爲什麼需要四次揮手
第一次揮手是客戶端告知服務端斷開請求併發送ACK報文
第二次揮手客戶端會響應這個請求,發送ACK報文,但此時服務端還需要告知應用層
第三次揮手是應用層關閉後服務端會告知客戶端關閉報文SYN
客戶端接收到後會發送最後一個ACK報文,然後會進入關閉狀態,但此時它需要等待2msl再完全關閉,需要確保報文能正常發過去。
【ACK報文是用來應答的,SYN是用來同步的】
【HTTP連接三次握手圖】
在這裏插入圖片描述
【HTTP斷開連接四次揮手圖】
在這裏插入圖片描述

發佈了31 篇原創文章 · 獲贊 30 · 訪問量 6516
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章