計(jì)算機(jī)網(wǎng)絡(luò)復(fù)習(xí)

傳輸層

TCP

TCP連接管理

TCP 是面向連接的協(xié)議。每一個(gè) TCP 連接有三個(gè)階段:連接建立、數(shù)據(jù)傳送、連接釋放。

每一條 TCP 連接有兩個(gè)端點(diǎn)。TCP 連接到端口叫做套接字(socket)插口。端口拼接到 IP 地址即構(gòu)成了套接字。

每一條 TCP 連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定

主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶機(jī),而被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫做服務(wù)器

TCP連接的建立

連接經(jīng)歷三個(gè)步驟,通常稱為“三次握手”

?



?

第一步:

客戶機(jī)的 TCP 首先向服務(wù)器的 TCP 發(fā)送一個(gè)連接請(qǐng)求報(bào)文段。這個(gè)特殊的報(bào)文段不含應(yīng)用層數(shù)據(jù),其中首部中的 SYN 標(biāo)志位被置為 1。

另外,客戶機(jī)會(huì)隨機(jī)選擇一個(gè)起始序號(hào) seq=x (連接請(qǐng)求報(bào)文不攜帶數(shù)據(jù),但要消耗一個(gè)序號(hào))

?
第二步:

服務(wù)器的 TCP 收到連接請(qǐng)求報(bào)文段后,如同意建立連接,就向客戶機(jī)發(fā)回確認(rèn),并為該 TCP 連接分配 TCP 緩存和變量

在確認(rèn)報(bào)文中,SYN 和 ACK 位都被置為1,確認(rèn)號(hào)字段的值為 x+1,并且服務(wù)器隨機(jī)隨機(jī)產(chǎn)生起始序號(hào) seq=y(確認(rèn)報(bào)文不攜帶數(shù)據(jù),但要消耗一個(gè)序號(hào))。確認(rèn)報(bào)文段同樣不包含應(yīng)用層數(shù)據(jù)。

?
第三步:

當(dāng)客戶機(jī)收到確認(rèn)報(bào)文段后,還要向服務(wù)器給出確認(rèn),并且也要給該連接分配緩存和變量。

這個(gè)報(bào)文段的 ACK 標(biāo)志位被置為1,序號(hào)字段為 x+1,確認(rèn)號(hào)字段 ack=y+1。該報(bào)文段可以攜帶數(shù)據(jù),如果不攜帶數(shù)據(jù)則不消耗序號(hào)。

以上三步以后,TCP 連接就建立了,接下來就可以傳送應(yīng)用層數(shù)據(jù)。TCP 提供的是雙全工通信,因此通信雙方的應(yīng)用進(jìn)程在任何時(shí)候都能發(fā)送數(shù)據(jù)。

另外,因?yàn)榉?wù)端的資源是在完成第二次握手時(shí)分配的,而客戶端的資源是在完成第三次握手時(shí)分配的,這就使得服務(wù)器易于受到 SYN 洪泛攻擊。


?

TCP連接的釋放

TCP連接的釋放通常稱為“四次揮手”,參與 TCP 連接的兩個(gè)進(jìn)程中的任何一個(gè)都能終止該連接。

?



?

第一步:

客戶機(jī)打算關(guān)閉連接,就像其 TCP 發(fā)送一個(gè)連接釋放的報(bào)文段,并停止發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉 TCP連接,該報(bào)文段的 FIN 標(biāo)志位被置為1,seq=u,它等于前面已傳送過的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)+1(FIN 報(bào)文段即使不攜帶數(shù)據(jù)也要消耗掉一個(gè)序號(hào))

TCP 是雙全工的,即可以想象成是一條 TCP 連接上有兩條數(shù)據(jù)通路。當(dāng)發(fā)送 FIN 報(bào)文時(shí),發(fā)送 FIN 的一端就不能再發(fā)送數(shù)據(jù),也就關(guān)閉了其中一條數(shù)據(jù)通路,但對(duì)方還可以發(fā)送數(shù)據(jù)。

?
第二步:

服務(wù)器收到連接釋放報(bào)文段后即發(fā)出確認(rèn),確認(rèn)號(hào)是 ack=u+1,而這個(gè)報(bào)文段自己的序號(hào)是 v ,等于它前面已傳送的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1。

此時(shí),從客戶機(jī)到服務(wù)器這個(gè)方向的連接就釋放了,TCP 連接處于半關(guān)閉狀態(tài)。但服務(wù)器若發(fā)送數(shù)據(jù),客戶機(jī)仍要接收,即從服務(wù)器到客戶機(jī)這個(gè)方向的連接并未關(guān)閉。

?
第三步:

若服務(wù)器已經(jīng)沒有向客戶機(jī)發(fā)送的數(shù)據(jù),就通知 TCP 釋放連接,此時(shí)其發(fā)出 FIN=1 的連接釋放報(bào)文段。

?
第四步:

客戶機(jī)收到連接釋放報(bào)文段后,必須發(fā)出確認(rèn)。在確認(rèn)報(bào)文段中,ACK 字段被置為1,確認(rèn)號(hào) ack=w+1,序號(hào) seq=u+1。

此時(shí) TCP 連接還沒有釋放掉,必須經(jīng)過時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間 2MSL 后,A 才進(jìn)入到連接關(guān)閉狀態(tài)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容