在面某圖的時候,面試管問我 三次握手能不能變為兩次,我說不行 並解釋了三次握手的過程,然後試圖用這個過程來體現三次握手缺一次都不行。
我:三次握手中第一次握手是客戶端給伺服器傳送syn報文,請求鏈結;在伺服器收到客戶端請求之後給客戶端回應,回應時傳送自己的syn報文,帶上ack 報文,這也就是第二次握手;然後,客戶端給伺服器傳送ack報文回應,三次握手完成,連線建立。如果是兩次握手,也就是沒有第三次 客戶端給伺服器傳送ack保溫這個過程,則 伺服器會不確定客戶端在傳送了請求報文syn 之後,是否還想要再去建立連線,另外,第三次握手也是客戶端給伺服器通知自己已經做好連線準備,請求伺服器做好連線準備(其實我這裡說的是有問題的)
面試官:我(伺服器)在給你恢復之後(傳送syn報文 和ack報文)之後我就做好準備了呀
我:那如果你(伺服器)傳送了報文之後,我(客戶端)突然不想連線你了,我也不說話也不回你訊息,那你是等待(阻塞)還是怎麼辦?~~~~這時我還在試圖用這個思路去說服他。但是面試官就認為按照我的說法第三次握手這個過程是不必要的
然後,這個問題就相當於在面試的時候掛了
後來看一些資料,資料上很簡潔的就解釋了三次握手不能變成兩次握手的原因:
第一次握手和第二次握手是為了證明 客戶端的傳送和接受功能正常;
第二次握手和第三次握手是為了證明 伺服器的傳送和接受功能正常;
因為tcp 協議是面向連線的可靠的流式服務,所以他要保證伺服器端和客戶端雙方的收發功能正常,這樣才能保證雙發能夠可靠的傳輸資料。
這種解釋直中要害,不會在表述上和面試官產生異議,也不會讓面試官覺得回答的不準確。所以分享出來
面試 網路 TCP的三次握手
tcp運輸連線的建立和釋放是每一次面向連線的通訊中必不可少的過程。運輸連線有三個階段 連線建立 資料傳送和連線釋放。tcp的連線建立可以簡稱為 三次握手 three way handshake 1 a b 嗨!我想跟你通訊 2 b a 嗨!可以啊 3 a b 嗨!我要給你傳資料了 then 資料傳送...
TCP三次握手 四次揮手(面試)
第一次握手 客戶端傳送第乙個包,其中syn標誌位為1,ack 0,傳送順序號sequence x 隨機int 客戶端進入syn傳送狀態,等待伺服器確認。第二次握手 伺服器收到這個包後傳送第二個包,其中包syn ack標誌位為1,傳送順序號seq y 隨機int 接收順序號ack x 1,此時伺服器進...
C 面試寶典 TCP三次握手的作用
如果只有兩次握手,當客戶端的syn請求連線在網路管道中阻塞,客戶端沒有接收到ack報文,就會重新傳送syn,由於沒有第三次握手,伺服器不清楚客戶端是否收到了自己傳送的建立連線的ack確認訊號,所以每收到乙個syn就只能主動建立乙個連線,這會造成什麼情況呢?如果客戶端的syn阻塞了,重 送多次syn報...