溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TCP/IP協(xié)議中四次揮手的過程及原因是什么

發(fā)布時(shí)間:2021-11-20 09:47:59 來源:億速云 閱讀:374 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)TCP/IP協(xié)議中四次揮手的過程及原因是什么,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

四次揮手都做什么?

TCP的連接是全雙工的,所以連接的拆除需要單獨(dú)將兩個(gè)通道分別拆除,而四次揮手所做的事情就是拆除兩條通道和釋放資源。

TCP 提供了連接的一端結(jié)束他的發(fā)送后,還能接收來自另一端數(shù)據(jù)的能力,也就是所謂的半關(guān)閉。

TCP/IP協(xié)議中四次揮手的過程及原因是什么

TCP/IP詳解卷I

這里以Client作為主動(dòng)發(fā)起端,Server作為被動(dòng)關(guān)閉端。

第一步,Client主動(dòng)發(fā)起一個(gè)Req給Server,里面包含F(xiàn)IN標(biāo)識(shí)位=1,CLient的Seq序列號(hào)N,表示的是當(dāng)前Client在該連接上的當(dāng)前序列號(hào)。

第二步,Server端在收到這個(gè)含有FIN的Req消息之后,校驗(yàn)無誤之后會(huì)立馬回復(fù)ACK消息給CLient端,消息內(nèi)部包含ACK標(biāo)志位為1,同時(shí)Seq號(hào)碼是FIN的請(qǐng)求消息的Seq號(hào)+1。此時(shí)的Sever同時(shí)會(huì)主動(dòng)發(fā)個(gè)結(jié)束標(biāo)識(shí)給Server上面的應(yīng)用層程序,應(yīng)用層程序可以決定是立馬結(jié)束,還是等到服務(wù)器上面的該連接中的數(shù)據(jù)處理完了之后,在發(fā)送FIN消息給Client來關(guān)掉另外的一半連接。

第三步,Server端在處理完該連接上面的Pending住的數(shù)據(jù)之后,應(yīng)用程序會(huì)close這個(gè)連接。Client會(huì)主動(dòng)發(fā)起FIN的Req消息給Client端。消息內(nèi)部帶有,F(xiàn)IN=1的結(jié)束符標(biāo)識(shí)位,以及Server端的Seq序列號(hào)。

第四步,Client端在收到對(duì)應(yīng)的FIN消息之后,會(huì)主動(dòng)通知應(yīng)用層程序,告知這個(gè)連接現(xiàn)在需要關(guān)閉了。然后,Client會(huì)回復(fù)ACK消息給Server,以便斷開另外一個(gè)方向的通道,這個(gè)消息包含ACK=1的標(biāo)識(shí)位和FIN的REQ帶過來的Seq+1。

為什么需要四次揮手?

因?yàn)門CP是一個(gè)全雙工協(xié)議,必須單獨(dú)拆除每一條信道。4次揮手的目的是終止數(shù)據(jù)傳輸,并回收資源,此時(shí)兩個(gè)端點(diǎn)兩個(gè)方向的序列號(hào)已經(jīng)沒有了任何關(guān)系,必須等待兩方向都沒有數(shù)據(jù)傳輸時(shí)才能拆除虛鏈路,不像初始化時(shí)那么簡單,發(fā)現(xiàn)SYN標(biāo)志就初始化一個(gè)序列號(hào)并確認(rèn)SYN的序列號(hào)。因此必須單獨(dú)分別在一個(gè)方向上終止該方向的數(shù)據(jù)傳輸。

如果是三次揮手,會(huì)怎么樣?三次的話,被動(dòng)關(guān)閉端在收到FIN消息之后,需要同時(shí)回復(fù)ACK和Server端的FIN消息。如果Server端在該連接上面并沒有Pending的消息要處理,那么是可以的,如果Server端還需要等待一段時(shí)間才可以關(guān)閉另外一個(gè)方向的連接,那么這樣的三次揮手就不能滿足條件。

四次揮手的狀態(tài)轉(zhuǎn)換?

Client端:

ESTABLISHED---發(fā)送FIN給Server-->FIN_WAIT_1---接收到Server端的FIN對(duì)應(yīng)的ACK-->FIN_WAIT_2---收到Server端發(fā)送過來的FIN消息-->FIIN_WAIT--2MSL之后會(huì)進(jìn)入-->CLOSED

Server端:

ESTABLISHED---接收到Client端的FIN->CLOSED_WAIT--Server端的應(yīng)用程序關(guān)閉發(fā)送FIN--> LAST_ACK---收到Client對(duì)于FIN的ACK響應(yīng)-->FIIN_WAIT---->CLOSED

TCP/IP協(xié)議中四次揮手的過程及原因是什么

Tcp/ip詳解 卷I

其中四次揮手與Scoket函數(shù)的對(duì)應(yīng)關(guān)系如下所示:

TCP/IP協(xié)議中四次揮手的過程及原因是什么

圖片來自網(wǎng)絡(luò),如有侵權(quán)請(qǐng)告知,會(huì)及時(shí)刪除

四次揮手失敗了會(huì)怎么樣?

四次揮手里面,最經(jīng)典的場景,是Client處于TIME_WAIT之后的2MSL的時(shí)間處理。(備注:MSL是TCP報(bào)文里面最大生存時(shí)間,它是任何報(bào)文段被丟棄前在網(wǎng)絡(luò)內(nèi)的最長時(shí)間。)

設(shè)置2MSL的目的是為了處理,Server端在重傳最后一個(gè)FIN的時(shí)候,Client能夠發(fā)送最后一個(gè)ACK的時(shí)間。

這個(gè)時(shí)間段內(nèi),不管是Client端還是Server端,最好都不要重用這個(gè)TCP的端口,否則的話,可能會(huì)導(dǎo)致根據(jù)這個(gè)端口新建立的連接被錯(cuò)誤的關(guān)掉,詳細(xì)情況如下所示:

step1:Server發(fā)送給Client的最后一個(gè)FIN,Client收到了,也發(fā)了ACK給Server,但是Server并沒有收到這個(gè)ACK。step2:于是CLient復(fù)用了這個(gè)Port號(hào),于是新建了一條連接,這里假設(shè)叫newConnection。step3:Server在此過程中已經(jīng)發(fā)送了重傳的FIN給Client,Client上面剛建立完成的newConnection就會(huì)再次被關(guān)掉。

以上就是TCP/IP協(xié)議中四次揮手的過程及原因是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI