輕鬆掌握TCP三次握手 四次揮手

2021-09-11 12:20:15 字數 1977 閱讀 8018

概覽

如圖所示,客戶端中的tcp會用以下方式與伺服器中的tcp建立一條tcp連線:

第一步,客戶端的tcp首先向伺服器的tcp傳送乙個特殊的tcp報文段,該報文段不包含應用層的資料,但是報文段的首部中的乙個標誌位(即syn位元)會被置為1,因此這個特殊報文段被稱為syn報文段。客戶端會隨機選擇乙個初始序號(j)並將此序號放置於該起始的tcp syn報文段的序號欄位裡,整個報文字段會封裝在乙個ip資料報中並發給伺服器。此時,客戶端進入syn-sent狀態

第二步,一旦包含syn報文段的ip資料報到達了伺服器,伺服器就會從資料報中提取出syn報文段,為該tcp連線分配快取和變數,並向客戶端傳送允許連線的報文段(ack(j + 1)),該報文段也不包含應用層資料。與此同時伺服器也隨機選擇乙個初始序號(k)並將此序號放置於tcp報文段首部的序號欄位中,即(syn(k)),隨確認欄位ack一併傳送給客戶端。此報文字段通常被稱為synack報文段,此時伺服器進入syn-received狀態

第三步,客戶端接收到synack報文段,為該連線分配快取和變數,此時客戶端進入established狀態。客戶端向伺服器傳送另外乙個報文段,這個報文段是對伺服器的允許連線的報文段的確認(ack(k + 1)),與前兩次不同,這次報文段中可攜帶應用層資料,由於連線已經建立,syn位元被置為0。伺服器收到這個報文段後,也進入estabished狀態。 完成這三個步驟後,客戶端和伺服器的每乙個報文段中都可以攜帶應用層的資料,且syn位元都將被置為0。建立tcp連線的三個步驟也被稱為tcp三次握手。 三次握手的目的不僅在於讓通訊雙方了解乙個連線正在建立, 還在於利用資料報的選項來承載特殊的資訊,交換初始序列號。-------《tcp/ip 詳解 卷1:協議》

為什麼是三次握手?為什麼不是兩次握手?

三次握手: a---->b: [a: i'm a.]

b---->a: [b: hello a, i'm b.]

a---->b: [a: hello b, nice to meet you.] 然後愉快的py。

二次握手: a---->b: [i'm a.]

b---->a: [hello a, i'm b.]

如果a收到了「hello a,i'm b」,愉快的py; 如果a沒有收到「hello a,i'm b」,那麼while(true), 瘋狂握手。

三次握手的目的是確認a--->b, b--->a這兩個通道都是可靠的;如果只有兩次握手就無法確認b--->a的通道是否可靠。如果只需要a--->b通道可靠,那就類似於udp的需求了。

概覽連線的任何一方都可以發起關閉連線,在傳統情況下往往由客戶端來發起關閉連線,如下圖所示。

第一步:客戶端傳送fin包(包含了客戶端的序列號m),此外fin包還包含了乙個ack段用於確認對方最後一次傳送的資料。

第二步:伺服器收到客戶端傳送的fin包後,將m值+1作為響應的ack值,表明它已經成功接收到來自客戶端傳送的fin。此時,處於上層的應用程式會被告知連線的另一方發起了關閉連線的請求,這將導致應用程式發動自己的關閉操作。伺服器從被動關閉者變為主動關閉者,向客戶端傳送fin(包含了伺服器的序列號n)。

第三步:為了完成連線的關閉,客戶端發往伺服器最後的報文段中包含了乙個確認伺服器傳送的fin的ack欄位。

為什麼是四次揮手?

四次揮手: a ---> b, [a: 『我想關閉連線』]

b ---> a, [b: 『好的,我知道了,我不要收到你的東西了』]

b ---> a, [b: 『我想關閉連線』]

a ---> b, [a: 『好的,我知道了,我也不要收到你的東西了』]

主動方傳送關閉請求,被動方接受並確認請求後,被動方就無法收到主動方傳送的資料了。在前兩次揮手後,伺服器就無法收到客戶端傳送的資料了(伺服器釋放了關於客戶端的資源),但是伺服器可以給客戶端傳送資料,所以有了第三次、第四次揮手。

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...