TCP為什麼是三次握手,不是四次或兩次,終於理解了

2021-09-02 19:53:14 字數 1150 閱讀 8688

我很久以前就看過三次握手和四次揮手的部落格,但根本沒懂,直到最近為了面試再看,也是僅僅知道過程,至於面試中的為什麼需要三次握手,而不是四次或兩次?,網上的部落格千千萬,國內外的,我還是一直沒有理解,知道今天看了學校發的教科書上的解釋,這才理解了.

我寫下這些,僅供我自己和有緣和我有一樣想法的人看懂

網上關於三次握手和四次揮手的圖太多了,我懶得copy乙份了,就文字說一說

前兩次握手很好理解,就是傳送端先發乙個syn=1,seq=x(syn和seq等等字段自行查詢tcp首部字段詳解),表示我傳送端要和你接受端建立連線,接收端在接受到這個請求報文段時,為了表示我接收端接收到了,要給傳送端乙個表示我接收到了的訊息,傳送的是syn=1,ack=1,seq=y,ack=x+1這裡就有的說了.

我的書上說,三次握手這個比喻並不恰當,準確的說,應該是三報文握手,因為書的作者認為,這個過程其實是一次握手中進行了三次報文交換,而不是三次握手,硬要用握手來說,也是兩個人見面握住手,搖晃了三下,這也符合現實.

接著前一段說,接收端發給接收端的訊息,其實也可以分為兩段,乙個是ack=1,ack=x+1,另乙個是syn=1,seq=y,前乙個是確認報文段,是告訴傳送端,我接收到你的訊息了,後者則是同步報文段,是接收端發給傳送端的建立連線的報文,但是這兩個報文段在乙個tcp首部並不衝突,所以可以一次發過去.

再來,傳送端接收到接收端傳送的報文,知道接收端剛才接收到了自己的訊息,按理說,這個時候連線就建立了,該發資料了啊,為什麼還要再確定一次呢?

其實上面的例子已經說的很明白了,保險起見,再在具體連線裡說一下.如果是兩次連線,很可能發生上面的問題,如果有訊息在一次tcp連線完成後才到達接收端,那麼接收端以為是新的連線,就會發確認報文到接收端確認並建立連線,但傳送端可能已經關閉,即使沒關閉,在沒有到達syn-sent狀態時,也不會響應接收端的確認資訊,接收端可能就這樣等待,這在網路中就浪費了資源.

但是有了第三次報文確定就不一樣了,第三次,傳送端在此傳送確認報文包接收端,接收端接收到後,也就知道了傳送端接收到自己的確認資訊了,如果在此發生上面的問題,接收端再次接收到了滯留在網路中的資訊,傳送確認資訊給傳送端,但是當傳送端沒有理會的時候,接收端也就知道這是錯誤資訊,就不會等待,也就沒有資源浪費了.

TCP為什麼是三次握手,四次揮手

第一次握手 傳送方 接收方 第一次傳送資訊,a傳送資訊,無任何回應,只知道自己可以傳送。b接收資訊,可以判斷自己接收資訊沒有問題,對方傳送自然也沒有問題。傳送方 自己傳送 自己接收 對方傳送 對方接收。接收方 自己傳送 自己接收 對方傳送 對方接收。第二次握手 傳送方 接收方 b給a回了一條訊息,又...

TCP為什麼要三次握手,不是兩次四次

tcp為什麼要三次握手,不是兩次四次?第三次握手 革命鬥爭中的通訊故事 在革命戰爭影片中,經常會看到英勇的解放軍戰士揹著步話機在喊 長江長江,我是黃河,聽到請回答。很明顯,這是呼號為黃河的一方想找呼號為長江的另一方說事,為了保證影片的節奏,導演往往把後面的聯絡過程省略了,其實後面還有兩步,長江聽到黃...

TCP為什麼要三次握手,不是兩次四次?

第三次握手 革命鬥爭中的通訊故事 在革命戰爭影片中,經常會看到英勇的解放軍戰士揹著步話機在喊 長江長江,我是黃河,聽到請回答。很明顯,這是呼號為黃河的一方想找呼號為長江的另一方說事,為了保證影片的節奏,導演往往把後面的聯絡過程省略了,其實後面還有兩步,長江聽到黃河的呼叫後要回答 黃河黃河,我是長江,...