傳輸層控制協議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...