TCP三次握手原理

2022-06-16 07:00:12 字數 2122 閱讀 7380

本文主要講述的是

1、tcp協議三次握手原理,以及為什麼要三次握手,兩次握手帶來的不利後果。

2、tcp協議四次揮手原理,為什麼要四次揮手。

tcp協議三次握手原理:

首先,給張,建立tcp三次握手的直觀印象。

!(
(1)syn:同步序號

(2)ack:應答回覆

(3)rst:復位連線,消除舊有的同步序號

(4)psh:盡可能的將資料送往接收程序

(5)fin:傳送方完成資料傳送

(6)urg

從圖中,可以看出三次握手的基本步驟是:

第一次握手:客戶端向伺服器端傳送連線請求包syn(syn=j),等待伺服器回應;

第二次握手:伺服器端收到客戶端連線請求包syn(syn=j)後,將客戶端的請求包syn(syn=j)放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端;

(1)向客戶端傳送確認自己收到其連線請求的確認包ack(ack=j+1),向客戶端表明已知道了其連線請求

(2)向客戶端傳送連線詢問請求包syn(syn=k),詢問客戶端是否已經準備好建立連線,進行資料通訊;

即在第二次握手時伺服器向客戶端傳送ack(ack=j+1)和syn(syn=k)包,此時伺服器進入syn_recv狀態。

第三次握手:客戶端收到伺服器的ack(ack=j+1)和syn(syn=k)包後,知道了伺服器同意建立連線,此時需要傳送連線已建立的訊息給伺服器;

向伺服器傳送連線建立的確認包ack(ack=k+1),回應伺服器的syn(syn=k)告訴伺服器,我們之間已經建立了連線,可以進行資料通訊。

ack(ack=k+1)包傳送完畢,伺服器收到後,此時伺服器與客戶端進入established狀態,開始進行資料傳送。

為什麼不能只兩次握手?

有了三次握手的詳細步驟,就可以分析為什麼需要三次握手而不是兩次握手了。

三次握手的目的:消除舊有連線請求的syn訊息對新連線的干擾,同步連線雙方的序列號和確認號並交換tcp 視窗大小資訊。

設想:如果只有兩次握手,那麼第二次握手後伺服器只向客戶端傳送ack包,此時客戶端與伺服器端建立連線。在這種握手規則下:

假設:如果傳送網路阻塞,由於tcp/ip協議定時重傳機制,b向a傳送了兩次syn請求,分別是x1和x2,且因為阻塞原因,導致x1連線請求和x2連線請求的tcp視窗大小和資料報文長度不一致,如果最終x1達到a,x2丟失,此時a同b建立了x1的連線,這個時候,因為ab已經連線,b無法知道是請求x1還是請求x2同b連線,如果b預設是最近的請求x2同a建立了連線,此時b開始向a傳送資料,資料報文長度為x2定義的長度,視窗大小為x2定義的大小,而a建立的連線是x1,其資料報長度大小為x1,tcp視窗大小為x1定義,這就會導致a處理資料時出錯。

很顯然,如果a接收到b的請求後,a向b傳送syn請求y3(y3的視窗大小和資料報長度等資訊為x1所定義),確認了連線建立的視窗大小和資料報長度為x1所定義,a再次確認回答建立x1連線,然後開始相互傳送資料,那麼就不會導致資料處理出錯了。

tcp協議釋放連線需四次揮手

先看圖,直觀的了解下:

需四次揮手原因:由於tcp的半關閉特性,tcp連線時雙全工(即資料在兩個方向上能同時傳遞),因此,每個方向必須單獨的進行關閉。這個原則就是:當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向上的連線。當一端收到乙個fin後,它必須通知應用層另一端已經終止了那個方向的資料傳送。即收到乙個fin意味著在這一方向上沒有資料流動了。

目的:保證伺服器與客戶端都能完全的接受對方傳送的資料。

假設客戶機a向伺服器b請求釋放tcp/ip連線,則:

第一次揮手:主機a向主機b傳送fin包;a告訴b,我(a)傳送給你(b)的資料大小是n,我傳送完畢,請求斷開a->b的連線。

第二次揮手:主機b收到了a傳送的fin包,並向主機a傳送ack包;b回答a,是的,我總共收到了你發給我n大小的資料,a->b的連線關閉。

第三次揮手:主機b向主機a傳送fin包;b告訴a,我(b)傳送給你(a)的資料大小是m,我傳送完畢,請求斷開b->a的連線。

第四次揮手:主機a收到了b傳送的fin包,並向主機b傳送ack包;a回答b,是的,我收到了你傳送給我的m大小的資料,b->a的連線關閉。

tcp三次握手 TCP 三次握手總結

tcp特點概述 tcp segment structure 段結構 step2 server host receives syn,replie with syn ack segment 答覆syn ack報文段 step3 client receives synack,replies with ac...

TCP 三次握手

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

TCP三次握手

1.伺服器準備好接受外來連線。passive open 被動開啟 需呼叫 socket bind listen 函式來完成。2.客戶端通過呼叫 connect 主動開啟 active open 這使得客戶 tcp傳送乙個 syn 表示同步 分節,這個分節告訴伺服器,客戶端將在待建立的連線中傳送的資料...