總結描述TCP三次握手四次揮手

2022-09-19 15:18:09 字數 2278 閱讀 7136

三次握手是指的是建立連線的過程:首先客戶端向伺服器端傳送乙個請求,詢問是否可以傳送資料;伺服器收到請求之後,如果同意會響應乙個確認報文;客戶端收到確認報文之後,就開始傳送資料。

第一次握手:建立連線時,客戶端向伺服器傳送請求報文(syn),"我想建立連線」;

第二次握手:伺服器收到請求報文後,如同意連線,則向客戶端傳送確認報文(syn/ack),「同意建立」;

第三次握手:客戶端收到伺服器的確認後,再次向伺服器傳送確認報文,完成連線(ack);

四次揮手指的是斷開連線的過程:客戶端向伺服器傳送乙個請求,詢問是否可以斷開連線;伺服器端會響應自己當前的狀態;如果伺服器端準備好了,會向客戶端傳送乙個斷開連線的請求;如果沒有準備好,還有資料沒響應完,會等響應完再給客戶端傳送請求;最後伺服器端和客戶端斷開連線。

第一次揮手:客戶端想分手,傳送訊息(fin)給伺服器;

第二次揮手:伺服器通知客戶端已經接受的揮手請求,返回確認訊息(ack),但還沒做好分手準備;

第三次揮手:服務端已經做好分手準備,通知客戶端(fin);

第四次揮手:客戶端傳送訊息給伺服器(ack),確認分手,伺服器關閉連線

1.為什麼建立連線是三次握手而不是兩次握手或四次?

答:第三次是為了防止已經失效的連線請求報文段又突然傳到服務端,而產生錯誤。例如a傳送給b乙個連線請求,但在網路傳輸過程中突然丟失或滯留,a因為遲遲沒有接收到b的確認資訊,就接著向b傳送了一次請求,這次b正常接收,並返回給a確認報文段,a接著向b進行確認,成功後兩者就進行通訊,當通訊完成後就釋放連線了,然而這時候a之前發給b的那個訊息突然又被b接收到了,b以為a又要跟他建立連線,如果是兩次握手,當b發給a乙個確認後,由於a知道這是之前被延誤的訊息,且兩者之間的連線也已經建立過了,所以就不會理會了,但b卻認為兩者之間成功建立連線了,就等待a傳送資料,這時候就白白浪費了b的資源。如果是三次握手,當a沒有理會後,由於b沒有再次收到a確認的訊息,就會知道a並沒有打算建立連線,所以就不會進行等待。至於為什麼不是四次,因為三次完全可以成功建立連線了,使用第四次就會造成不必要的資源浪費。

2.為什麼time_wait狀態需要經過2msl(最大報文段生存時間)才能返回到close狀態?

答:雖然按道理,四個報文都傳送完畢,我們可以直接進入close狀態了,但是我們必須假象網路是不可靠的,有可以最後乙個ack丟失。所以time_wait狀態就是用來重發可能丟失的ack報文。在client傳送出最後的ack回覆,但該ack可能丟失。server如果沒有收到ack,將不斷重**送fin片段。所以client不能立即關閉,它必須確認server接收到了該ack。client會在傳送出ack之後進入到time_wait狀態。client會設定乙個計時器,等待2msl的時間。如果在該時間內再次收到fin,那麼client會重發ack並再次等待2msl。所謂的2msl是兩倍的msl(maximum segment lifetime)。msl指乙個片段在網路中最大的存活時間,2msl就是乙個傳送和乙個回覆所需的最大時間。如果直到2msl,client都沒有再次收到fin,那麼client推斷ack已經被成功接收,則結束tcp連線。

3.為什麼不能用兩次握手進行連線?

答:3次握手完成兩個重要的功能,既要雙方做好傳送資料的準備工作(雙方都知道彼此已準備好),也要允許雙方就初始序列號進行協商,這個序列號在握手過程中被傳送和確認。

現在把三次握手改成僅需要兩次握手,死鎖是可能發生的。作為例子,考慮計算機s和c之間的通訊,假定c給s傳送乙個連線請求分組,s收到了這個分組,併發 送了確認應答分組。按照兩次握手的協定,s認為連線已經成功地建立了,可以開始傳送資料分組。可是,c在s的應答分組在傳輸中被丟失的情況下,將不知道s 是否已準備好,不知道s建立什麼樣的序列號,c甚至懷疑s是否收到自己的連線請求分組。在這種情況下,c認為連線還未建立成功,將忽略s發來的任何資料分 組,只等待連線確認應答分組。而s在發出的分組超時後,重**送同樣的分組。這樣就形成了死鎖。
4.如果已經建立了連線,但是客戶端突然出現故障了怎麼辦?

tcp還設有乙個保活計時器,顯然,客戶端如果出現故障,伺服器不能一直等下去,白白浪費資源。伺服器每收到一次客戶端的請求後都會重新復位這個計時器,時間通常是設定為2小時,若兩小時還沒有收到客戶端的任何資料,伺服器就會傳送乙個探測報文段,以後每隔75秒鐘傳送一次。若一連傳送10個探測報文仍然沒反應,伺服器就認為客戶端出了故障,接著就關閉連線

TCP三次握手 四次揮手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手 四次揮手

服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...

TCP三次握手四次揮手

tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...