(一)tcp/ip三次握手原理:
建立連線協議(三次握手)
(1)客戶端向伺服器端傳送連線請求包syn(syn=j),等待伺服器回應;
(2)伺服器端收到客戶端連線請求包syn(syn=j)後,將客戶端的請求包syn(syn=j)放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端;
1.向客戶端傳送確認自己收到其連線請求的確認包ack(ack=j+1),向客戶端表明已知道了其連線請求
2.向客戶端傳送連線詢問請求包syn(syn=k),詢問客戶端是否已經準備好建立連線,進行資料通訊;
(3) 客戶端收到伺服器的ack(ack=j+1)和syn(syn=k)包後,知道了伺服器同意建立連線,此時需要傳送連線已建立的訊息給伺服器;
向伺服器傳送連線建立的確認包ack(ack=k+1),回應伺服器的syn(syn=k)告訴伺服器,我們之間已經建立了連線,可以進行資料通訊。
為什麼不能只兩次握手?
有了三次握手的詳細步驟,就可以分析為什麼需要三次握手而不是兩次握手了。
三次握手的目的:消除舊有連線請求的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/ip釋放連線需四次揮手
先看圖,直觀的了解下:
需四次揮手原因:由於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 IP三次握手 四次揮手
一 tcp ip三次握手原理 建立連線協議 三次握手 1 客戶端向伺服器端傳送連線請求包syn syn j 等待伺服器回應 2 伺服器端收到客戶端連線請求包syn syn j 後,將客戶端的請求包syn syn j 放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端 1.向客戶端傳送確認自己收...
TCP IP三次握手 四次揮手
我們在使用網際網路和別的 進行通訊的時候,都要依賴tcp ip協議。甚至有時候網不太好,瀏覽器會顯示當前狀態 正在與某某 握手.當網路狀態很好的時候,就會一閃而過。本文將詳細總結筆者在學習三次握手四次揮手時的各個狀態以及過程。首先,狀態圖如下。初始時,客戶端和服務端都是closed狀態。這時,客戶端...
TCP IP三次握手四次揮手
tcp三次握手 所謂握手,也就是建立連線,三次過程。三次握手旨在連線到服務端的指定埠,進行通訊。建立乙個tcp連線,需要向客戶端和服務端傳送三個包。其中包含同步序列號和確認號以及tcp視窗大小的資訊交換。一般觸發握手在socket中都是connect 函式觸發的 第一次握手 客戶端傳送tcp請求,s...