溫馨提示×

溫馨提示×

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

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

TCP/IP狀態(tài)機(jī)

發(fā)布時(shí)間:2020-06-03 12:23:54 來源:網(wǎng)絡(luò) 閱讀:316 作者:知識(shí)邊界 欄目:系統(tǒng)運(yùn)維

TCP/IP?狀態(tài)機(jī)

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

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

它們的含義是:

SYN表示建立連接,

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

ACK表示響應(yīng),

PSH表示有 DATA數(shù)據(jù)傳輸(有真正的TCP數(shù)據(jù)包內(nèi)容被傳遞)

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

TCP/IP狀態(tài)機(jī)

三次握手主要是要初始化Sequence Number 的初始值。也就是上圖中的 a 和 b。這個(gè)號(hào)在以后的數(shù)據(jù)通信中,在client端按發(fā)送順序遞增,在server端按遞增順序重新組織,以保證應(yīng)用層接收到的數(shù)據(jù)不會(huì)因?yàn)榫W(wǎng)絡(luò)問題亂序。


建立一個(gè)穩(wěn)定的雙向連接,最少需要3次通信

以張三給李四打電話為例?
打電話?
張三:喂,李四聽得到么【seq=0】??
李四: 嗯,我聽到你說話了【ack=seq+1】,你能聽到我么【seq=0】??
張三:我能聽到你【ack=seq+1】


TCP/IP狀態(tài)機(jī)

1、雙方可以同時(shí)主動(dòng)關(guān)閉,也可以由一方主動(dòng)關(guān)閉帶動(dòng)另一方被動(dòng)關(guān)閉只不過,通常以一方主動(dòng)另一方被動(dòng)舉例(如圖,client主動(dòng)server被動(dòng)),所以看上去是所謂的4次揮手。如果兩邊同時(shí)主動(dòng)斷連接,那么雙方都會(huì)進(jìn)入CLOSING狀態(tài),然后到達(dá)TIME_WAIT狀態(tài),最后超時(shí)轉(zhuǎn)到CLOSED狀態(tài)


2、為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次握手呢?

TCP是全雙工的,每個(gè)方向都需要單獨(dú)關(guān)閉(即發(fā)送一個(gè)FIN),發(fā)一個(gè)FIN之后意味著一個(gè)方向沒有數(shù)據(jù)流動(dòng),但是可以收。
這是因?yàn)榉?wù)端的LISTEN狀態(tài)下的SOCKET當(dāng)收到SYN報(bào)文的連接請求后,它可以把ACK和SYN(ACK起應(yīng)答作用,而SYN起同步作用)放在一個(gè)報(bào)文里來發(fā)送。但關(guān)閉連接時(shí),當(dāng)收到對方的FIN報(bào)文通知時(shí),它僅僅表示對方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對方了,所以你可能未必會(huì)馬上會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對方之后,再發(fā)送FIN報(bào)文給對方來表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開發(fā)送的。


以張三給李四掛電話為例

張三:我要掛電話了【FIN。seq=x】

李四:好的【ack。seq=x+1】

李四:我也掛了【fin,seq=b,ack=X+1】?

張三:好的【ack,seq=b+1】


三次握手分析?

HTTP 協(xié)議就是建立在TCP鏈接上的

我們通過訪問一個(gè)網(wǎng)頁。 使用wireshark分析TCP三次握手建立連接的過程,
Wireshark的過濾規(guī)則,只顯示我們需要的數(shù)據(jù)

(ip.src==10.108.15.43 and ip.dst==10.108.16.3) or (ip.src==10.108.16.3 and ip.dst==10.108.15.43)

TCP/IP狀態(tài)機(jī)

1、seq=0(每發(fā)一次包seq的值加1)
2、ack=接收到的seq+1

TCP/IP狀態(tài)機(jī)

TCP/IP狀態(tài)機(jī)

TCP流:

TCP/IP狀態(tài)機(jī)

四次揮手:

TCP/IP狀態(tài)機(jī)

TCP/IP狀態(tài)機(jī)

1、TCP協(xié)議規(guī)定通過發(fā)送一個(gè)FIN段(FIN被置位)來發(fā)起關(guān)閉操作,同時(shí)FIN報(bào)文段還包含著對最近收到的數(shù)據(jù)進(jìn)行ACK。

2、接收端對FIN進(jìn)行確認(rèn),發(fā)送ACK=k+1給發(fā)送端

3、接收端將連接關(guān)閉發(fā)送給上層應(yīng)用程序,由應(yīng)用程序發(fā)起連接關(guān)閉操作。此時(shí)接收端由被動(dòng)關(guān)閉連接壯成主動(dòng),并發(fā)送FIN報(bào)文段給發(fā)送端。報(bào)文的序列號(hào)為L(這里也可看出上一步驟中發(fā)送ACK序列號(hào)一樣,因?yàn)锳CK不占用序列號(hào),

所以這里的FIN的序列號(hào)也為L)。

4、發(fā)送端接收到FIN后,發(fā)送回ACK給接收端后,TCP連接終止。如果FIN丟失,發(fā)送FIN的那端需要重新發(fā)送FIN,直到接收到ACK為止。

相對于的狀態(tài)機(jī)

TCP/IP狀態(tài)機(jī)

12種狀態(tài)機(jī):

TCP/IP狀態(tài)機(jī)

歡迎學(xué)習(xí):TCP的狀態(tài)機(jī)與重傳機(jī)制


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

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

AI