日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP的三次握手建立连接和四次握手释放连接

發(fā)布時間:2024/4/11 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP的三次握手建立连接和四次握手释放连接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、socket中TCP的三次握手建立連接詳解

我們知道tcp建立連接要進行“三次握手”,即交換三個分組。大致流程如下:

  • 客戶端向服務(wù)器發(fā)送一個SYN J
  • 服務(wù)器向客戶端響應(yīng)一個SYN K,并對SYN J進行確認(rèn)ACK J+1
  • 客戶端再想服務(wù)器發(fā)一個確認(rèn)ACK K+1

只有就完了三次握手,但是這個三次握手發(fā)生在socket的那幾個函數(shù)中呢?請看下圖:

圖1、socket中發(fā)送的TCP三次握手

從圖中可以看出,當(dāng)客戶端調(diào)用connect時,觸發(fā)了連接請求,向服務(wù)器發(fā)送了SYN J包,這時connect進入阻塞狀態(tài);服務(wù)器監(jiān)聽到連接請求,即收到SYN J包,調(diào)用accept函數(shù)接收請求向客戶端發(fā)送SYN K ,ACK J+1,這時accept進入阻塞狀態(tài);客戶端收到服務(wù)器的SYN K ,ACK J+1之后,這時connect返回,并對SYN K進行確認(rèn);服務(wù)器收到ACK K+1時,accept返回,至此三次握手完畢,連接建立。

總結(jié):客戶端的connect在三次握手的第二個次返回,而服務(wù)器端的accept在三次握手的第三次返回。

2、socket中TCP的四次握手釋放連接詳解

上面介紹了socket中TCP的三次握手建立過程,及其涉及的socket函數(shù)?,F(xiàn)在我們介紹socket中的四次握手釋放連接的過程,請看下圖:

圖2、socket中發(fā)送的TCP四次握手

圖示過程如下:

  • 某個應(yīng)用進程首先調(diào)用close主動關(guān)閉連接,這時TCP發(fā)送一個FIN M;
  • 另一端接收到FIN M之后,執(zhí)行被動關(guān)閉,對這個FIN進行確認(rèn)。它的接收也作為文件結(jié)束符傳遞給應(yīng)用進程,因為FIN的接收意味著應(yīng)用進程在相應(yīng)的連接上再也接收不到額外數(shù)據(jù);
  • 一段時間之后,接收到文件結(jié)束符的應(yīng)用進程調(diào)用close關(guān)閉它的socket。這導(dǎo)致它的TCP也發(fā)送一個FIN N;
  • 接收到這個FIN的源發(fā)送端TCP對它進行確認(rèn)。

這樣每個方向上都有一個FIN和ACK。

=======================================================================================================

TCP的狀態(tài) (SYN, FIN, ACK, PSH, RST, URG)

在TCP層,有個FLAGS字段,這個字段有以下幾個標(biāo)識:SYN, FIN, ACK, PSH, RST, URG.

其中,對于我們?nèi)粘5姆治鲇杏玫木褪乔懊娴奈鍌€字段。

?它們的含義是:

SYN表示建立連接,

FIN表示關(guān)閉連接,

ACK表示響應(yīng),

PSH表示有 DATA數(shù)據(jù)傳輸,

RST表示連接重置。

?其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接之后的響應(yīng),

?如果只是單個的一個SYN,它表示的只是建立連接。

TCP的幾次握手就是通過這樣的ACK表現(xiàn)出來的。

?但SYN與FIN是不會同時為1的,因為前者表示的是建立連接,而后者表示的是斷開連接。

RST一般是在FIN之后才會出現(xiàn)為1的情況,表示的是連接重置。

?一般地,當(dāng)出現(xiàn)FIN包或RST包時,我們便認(rèn)為客戶端與服務(wù)器端斷開了連接;而當(dāng)出現(xiàn)SYN和SYN+ACK包時,我們認(rèn)為客戶端與服務(wù)器建立了一個連接。

PSH為1的情況,一般只出現(xiàn)在 DATA內(nèi)容不為0的包中,也就是說PSH為1表示的是有真正的TCP數(shù)據(jù)包內(nèi)容被傳遞。

TCP的連接建立和連接關(guān)閉,都是通過請求-響應(yīng)的模式完成的。

?概念補充-TCP三次握手:

TCP(Transmission Control Protocol)傳輸控制協(xié)議

TCP是主機對主機層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個連接:

?位碼即tcp標(biāo)志位,有6種標(biāo)示:SYN(synchronous建立聯(lián)機) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認(rèn)號碼)

第一次握手:主機A發(fā)送位碼為syn=1,隨機產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器,主機B由SYN=1知道,A要求建立聯(lián)機;

?第二次握手:主機B收到請求后要確認(rèn)聯(lián)機信息,向A發(fā)送ack number=(主機A的seq+1),syn=1,ack=1,隨機產(chǎn)生seq=7654321的包;

?第三次握手:主機A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發(fā)送ack number=(主機B的seq+1),ack=1,主機B收到后確認(rèn)seq值與ack=1則連接建立成功。

?完成三次握手,主機A與主機B開始傳送數(shù)據(jù)。

?

?在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個連接。 ?第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn); ?第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器進入SYN_RECV狀態(tài);

?第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進入ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù).

總結(jié)

以上是生活随笔為你收集整理的TCP的三次握手建立连接和四次握手释放连接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。