我很久以前就看過三次握手和四次揮手的部落格,但根本沒懂,直到最近為了面試再看,也是僅僅知道過程,至於面試中的為什麼需要三次握手,而不是四次或兩次?
,網上的部落格千千萬,國內外的,我還是一直沒有理解,知道今天看了學校發的教科書上的解釋,這才理解了.
我寫下這些,僅供我自己和有緣和我有一樣想法的人看懂網上關於三次握手和四次揮手的圖太多了,我懶得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為什麼要三次握手,不是兩次四次?
第三次握手 革命鬥爭中的通訊故事 在革命戰爭影片中,經常會看到英勇的解放軍戰士揹著步話機在喊 長江長江,我是黃河,聽到請回答。很明顯,這是呼號為黃河的一方想找呼號為長江的另一方說事,為了保證影片的節奏,導演往往把後面的聯絡過程省略了,其實後面還有兩步,長江聽到黃河的呼叫後要回答 黃河黃河,我是長江,...