1. 程式人生 > >前端面試重點難點透析--TCP協議的三次握手和四次分手

前端面試重點難點透析--TCP協議的三次握手和四次分手

一.什麼是TCP

要了解TCP協議的三次握手和四次分手我們先來簡單介紹下TCP是什麼,TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線(連線導向)的、可靠的、 基於IP的傳輸層協議。TCP在IP報文的協議號是6。TCP是一個超級麻煩的協議,而它又是網際網路的基礎,也是每個程式設計師必備的基本功,我們知道,OSI(Open System Interconnection)一共有七層網路模型,TCP協議是其中運輸層的一個協議,下圖可以清楚看到他們之間的關聯:

 

 

 

二.TCP三次握手的含義和意義

1.三次握手的含義

TCP是面向連線的,無論哪一方向另一方傳送資料之前,都必須先在雙方之間建立一條連線。在TCP/IP協議中,TCP協議提供可靠的連線服務,連線是通過“三次握手”進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換TCP視窗大小資訊,完成了三次握手,客戶端和伺服器端就可以開始傳送資料。

2.三次握手的步驟

1.第一次握手:客戶端傳送請求建立連線,請求報文段。

2.第二次握手:伺服器收到請求,傳送同意並請求與客戶端建立連線。

3.第三次握手:客戶端收到請求,傳送同意與伺服器建立連線。

其實關於三次握手的流程涉及許多技術細節,我這裡做了簡化,最簡單的理解如下圖所示:

 

 

 

3.三次握手的意義和作用

看了上面的介紹那麼問題來了,為啥要三次握手?有什麼作用呢? 在謝希仁版《計算機網路》書中舉了一個例子解釋了這個問題:

“已失效的連線請求報文段”的產生在這樣一種情況下:client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的一個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用“三次握手”,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用“三次握手”的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。”

簡而言之,就是為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤。具體到每個握手步驟的作用,就是第一次和第二次握手為了保證服務端能夠接受到客戶端的資訊並能做出正確的應答,第二次和第三次握手為了保證客戶端能夠接收到服務端的資訊並能做出正確的應答而進行後兩次。

四.TCP四次分手的含義和意義

1.四次分手的含義

當客戶端和伺服器通過三次握手建立了TCP連線以後,當資料傳送完畢,相應的就要斷開TCP連線。那對於TCP的斷開連線,這裡就有了“四次分手”。

2.四次分手的步驟

1.第一次分手:客戶端傳送斷開請求

2.第二次分手:伺服器收到斷開請求,傳送同意斷開連線的請求

3.第三次分手:伺服器傳送請求斷開連線

4.第四次分手:客戶端收到,傳送同意斷開連線

3.四次分手的意義和作用

同理,為啥要四次分手?有什麼作用呢? TCP協議是一種面向連線的、可靠的、基於位元組流的運輸層通訊協議。TCP是全雙工模式,這就意味著,

1.當客戶端傳送斷開請求,只是表示客戶端已經沒有資料要傳送了,客戶端告訴伺服器,它的資料已經全部發送完畢了,但是,這個時候客戶端還是可以接受來自伺服器的資料(第一次分手)

2.當伺服器收到斷開請求時,表示它已經知道客戶端沒有資料傳送了併發送同意斷開連線的請求,但是伺服器還是可以傳送資料到客戶端的(第二次分手)

3.當伺服器傳送同意斷開連線的請求後,這個時候就表示伺服器也沒有資料要傳送了,就會告訴客戶端,我也沒有資料要傳送了(第三次分手)

4.當客戶端收到伺服器傳送請求斷開連線後,再去告訴服務端我已經知道你沒有資料要發給我了,同意斷開連線請求(第四次分手)

參考連結:關於TCP協議,我想你應該懂了!


作者:nightZing
連結:https://juejin.im/post/5a7efdba5188257a654cd1bc
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。