TCP的連接建立(三次握手)

    TCP是面向連接的協議。運輸連接是用來傳送TCP報文的。TCP運輸連接的家裏和釋放是每一次面向連接的通信中必不可少的過程。因此,運輸連接就有三個階段,即:連接建立、數據傳輸和連接釋放。

    TCP位於傳輸層,提供可靠的字節流服務。

所謂字節流服務(Byte Stream Service)是指,爲了方便傳輸,將大塊數據分割成以報文段(segment)爲單位的數據包進行管理,而可靠的傳輸服務是指,能夠把數據準確可靠的傳給對方。一言以蔽之,TCP協議爲了更容易傳送大數據才把數據分割,而且TCP協議能夠確認數據最終是否發送達到對方。

    爲了準確無誤地將數據送給對方,TCP協議採用三次握手(three-way handshaking)策略。用TCP協議把數據包發送出去後,TCP不會對傳輸後的情況置之不理,它一定會向對方確認是否成功送達。握手過程中採用TCP的標誌(flag)—-SYN(synchronize)和ACK(acknowledgement)
這裏寫圖片描述
請注意:發送端A主動打開連接,而B是被動打開連接。
三次握手傳送的內容:

  • 第一次

        第一次握手:建立連接時,客戶端A向服務端B發送請求報文段,這時首部中的同步位SYN =1,同時選擇一個初始序號seq= x.TCP規定SYN=1報文段不能攜帶數據,但是要消耗一個序號。這時,TCP客戶進程進入SYN-SENT(同步已發送)狀態,等待服務器確認。

  • 第二次

        第二次握手:服務器收到請求報文後,如同意連接,則向A發送確認,同時自己也發送一個確認報文段,確認報文段中SYN和ACK都置1,確認號ack = x+1,同時自己也爲自己選擇一個初始序號seq =y。注意,這個報文段也不能攜帶數據,但同樣要消耗掉一個序號。這時TCP服務器進程進入SYN-RCVD(同步收到)狀態。

  • 第三次

        第三次握手:客戶端A收到B的確認後,還要向B給出確認報文段。確認報文段的ACK=1,確認號ack =y+1,而自己的序號seq=x+1.此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。

    完成三次握手,客戶端與服務器開始傳送數據。

爲什麼客戶端A還要發送一次確認呢?主要是爲了防止已失效的連接請求報文段突然又傳送到了服務端B,因而產生錯誤。

發佈了77 篇原創文章 · 獲贊 114 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章