TCP IP 協議的三次握手和四次揮手

2021-10-02 13:14:23 字數 2633 閱讀 9200

傳輸層控制協議tcp簡介:

程序間通訊

(1)實際上tcp的傳送方和接收方是程序間的通訊,而單機執行緒間通訊可以用pid,而多台機器間通訊沒有pid的概念,並且單機中pid唯一,容易造成衝突。而ip能唯一標識一台主機,而tcp的傳輸層協議的source port,和destination port定義了埠號,所以造成了ip+tcp協議+埠號,能唯一確認一台主機的乙個執行緒。

(2)能夠唯一標示網路中的程序後,它們就可以利用socket進行通訊了,什麼是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的乙個抽象層,它把tcp/ip層複雜的操作抽象為幾個簡單的介面**用層呼叫已實現程序在網路中通訊。

socket通訊系統模組示意圖:

tcp報文頭

上圖中需要了解到的內容:

source port:傳送方埠號;destionation port: 接收方埠號

sequence number (seq) :順序號

acknowledgement number(ack) :確認序號,只有ack確認標誌位為1時,ack才有效,ack = seq+1

標誌位:共6個 urg、ack、psh、pst、syn、fin等

urg:緊急指標標誌

ack:確認序號標誌

psh:push標誌

pst:重置連線標誌

syn:同步序號標誌,用於建立連線過程

fin:finish標誌,用於釋放連線

一、建立tcp連線的三次握手

為了來更好的理解tcp協議的連線過程,我們假設有此場景

a和b通話

a:「聽得到嗎」

b:「我聽得到,你聽到嗎」

a:「聽得到,我們可以說話了」

。。。正常通訊內容(叭叭叭)

這樣一段對話,來確保彼此能互相接收到訊息。

對應到tcp的三次握手

一開始客戶端和服務端都為close狀態,等待一方發起建立連線過程,並且伺服器放進入監聽狀態(listen)。

第一次握手:客戶端client主動傳送連線請求資料報,client將同步標誌syn置為1,隨機產生乙個順序號seq=x,此時client為同步已傳送狀態(syn-sent),等待server確認。

第二次握手:服務端server接收到資料報,如果同意建立連線,server將syn和ack都置為1,ack=x+1(乙個syn佔乙個位元組號),隨機產生乙個順序號seq=y,此時server為同步已接收狀態(syn-rcvd)

第三次握手:client收到確認資料報後,檢驗ack是否為x+1,ack是否為1.如果校驗成功將ack置為1,ack=y+1,seq=x+1,傳送給server。

如果正確則建立連線成功,client和server都進入established狀態,完成3次握手,隨後client和server之間可以互相開始資料傳輸了。

一、終止tcp連線的四次揮手

由於tcp連線時是全雙工的,所以每個方向都是可以主動發起終止連線的。並且發起終止連線前都是established狀態

第一次揮手,client主動傳送終止連線請求資料報,並且停止傳送資料,將fin標誌位置為1,隨機產生乙個順序號seq=u,client進入fin-wait-1終止等待狀態

第二次揮手,server收到終止連線請求後,傳送乙個ack給client,將ack置為1,ack=u+1,隨機產生乙個順序號seq=v,此時server為close-wait關閉等待狀態,client進入fin-wait-2狀態。注:此時j進入半關閉狀態,client不傳送資料了,但是server還能接收到資料

第三次揮手,servert持續接收資料一段時間後,發起fin請求資料報,並將ack置為1,ack=u+1,隨機產生乙個順序號seq=w.server進入last-ack狀態

第四次揮手,clinet接收到server的終止請求fin後,確認ack為1並且ack=u+1之後,client進入time-wait狀態,接著傳送乙個ack請求給server,ack=w+1,seq=u+1.此時server進入cloes狀態

常見問題:

1.為什麼建立連線要3次握手,而斷開連線要四次揮手?

答:這是因為server在listen狀態下,在收到client的syn資料報後,可以將syn和ack一同傳送給client。

而在斷開連線時,client傳送乙個fin資料報,僅僅代表著client不再傳送資料,而server還能繼續接收資料,

所以fin請求和ack請求一般是分開傳送的,也就造成了4次揮手。

2.為什麼再第四次揮手後client沒有馬上進入close狀態,而需要等待2msl

答:(1)確保server有足夠的時間接收到ack包。如果server沒有收到ack,需要serverc重發fin包,client再發一次ack,正好2msl

(2)避免新舊連線混淆。

TCP IP協議三次握手和四次揮手

偶爾聽到同學在談論三次握手什麼的時候,我卻一點也沒印象,過了幾天才想起來時候學習一下了 概念介紹 tcp transmission control protocol 網路傳輸控制協議,是一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議,資料傳輸前建立連線的工作要經過三次握手,資料傳輸後斷開連線的...

TCP IP協議三次握手 四次揮手

tcp是一種面向連線的端到端的可靠傳輸協議。一 客戶端傳送乙個連線請求,傳送乙個隨機數x,這時客戶端的埠狀態變為syn sent狀態。二 服務端收到客戶端發起的連線請求,埠狀態變為listen狀態,服務端回覆客戶端發起的請求,把收到的隨機數x 1返回確認收到,在傳送乙個自己生成的隨機數y給客戶端。此...

TCP IP協議三次握手與四次握手釋放

我們知道tcp建立連線要進行 三次握手 即交換三個分組。大致流程如下 只有就完了三次握手,但是這個三次握手發生在socket的那幾個函式中呢?請看下圖 圖1 socket中傳送的tcp三次握手 從圖中可以看出,當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connec...