(1)第一次握手
客戶端向伺服器端傳送tcp報文請求建立連線,其中:
標記位為syn=1
序號為seq=x
(2)第二次握手
服務端收到資訊後知道自己與客戶端是可以連線成功的,但此時客戶端並不知道服務端是否已經接收到了它的請求,所以服務端接收到訊息後進行應答,這就是第二次握手,其中:
標記位為syn=1,ack=1
序號為seq=y
確認號為ack=x+1 (將收到的客戶端的序號seq值加1作為自己確認號ack的值)
(3)第三次握手
客戶端接收到來自伺服器端的確認收到資料的tcp報文之後,明確了從客戶端到伺服器的資料傳輸是正常的,結束syn-sent階段並返回最後一段tcp報文,這是第三次握手,其中:
標誌位為ack=1
序號為seq=x+1(將收到的伺服器端的確認號ack值作為自己序號seq的值)
確認號ack=y+1(將收到的伺服器端的序號seq值加1作為自己確認號ack的值)
在客戶端與伺服器端傳輸的tcp報文中,雙方的確認號ack和序號seq的值,都是在彼此ack和seq值的基礎上進行計算的,這樣做保證了tcp報文傳輸的連貫性。一旦出現某一方發出的tcp報文丟失,便無法繼續"握手",以此確保了"三次握手"的順利完成。
我們來假設一下,當第一次握手時客戶端發出的連線請求由於某些原因在網路節點中滯留了導致延遲,直到連線釋放的某個時間點才到達服務端,這是乙個早已失效的報文,但是此時服務端仍然認為這是客戶端的建立連線請求第一次握手,於是服務端回應了客戶端,第二次握手。==如果只有兩次握手,那麼到這裡,連線就建立了,但是此時客戶端並沒有任何資料要傳送,而服務端還在一直等待,造成很大的資源浪費。==所以需要第三次握手,只有客戶端再次回應一下,就可以避免這種情況。
第三次握手是為了防止已經失效的連線請求報文段突然又傳到服務端,因而產生錯誤。
自己總結的文章如有錯誤之處,請各位多多指教,謝謝!
TCP為什麼三次握手
tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個 syn置位的 tcp報文,其中包含連線的初始序列號 x和乙個視窗大小 表示客戶端上用來儲存從伺服器...
為什麼TCP是三次握手
tcp 三次握手 首先簡單介紹一下tcp三次握手 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack ...
TCP為什麼需要三次握手
晚上看到的面試題,tcp三次握手的印象很深,但為什麼需要3次握手,還是想不起來了。簡單而言 如果不是三次握手的話,那麼到底需要幾次握手最佳呢?2次握手,或者4次以上的握手?先看2次握手的情況 客戶端給伺服器傳送建立連線的請求,伺服器同意連線請求發回應給客戶端,連線就此建立。有問題的就是網路中經常會出...