溫馨提示×

溫馨提示×

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

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

TCP數(shù)據(jù)報(bào)構(gòu)造以及三次握手(圖解)

發(fā)布時(shí)間:2020-07-27 21:41:24 來源:網(wǎng)絡(luò) 閱讀:750 作者:yuw2017 欄目:網(wǎng)絡(luò)安全

TCP(Transmission Control Protocol,傳輸掌握協(xié)定)是一種面向銜接的、牢靠的、基于字撙節(jié)的通訊協(xié)定,數(shù)據(jù)在傳輸前要樹立銜接,傳輸終了后還要斷開銜接。
客戶端在收發(fā)數(shù)據(jù)前要運(yùn)用 connect() 函數(shù)和效勞器樹立銜接。樹立銜接的目標(biāo)是包管IP地址、端口、物理鏈路等準(zhǔn)確無誤,為數(shù)據(jù)的傳輸開拓通道。
TCP樹立銜接時(shí)要傳輸三個(gè)數(shù)據(jù)包,俗稱三次握手(Three-way Handshaking)。可以抽象的比方為下面的對話:

  • [Shake 1] 套接字A:“你好,套接字B,我這里無數(shù)據(jù)要傳送給你,樹立銜接吧?!?/p>

  • [Shake 2] 套接字B:“好的,我這邊已預(yù)備停當(dāng)?!?/p>

  • [Shake 3] 套接字A:“感謝你受理我的懇求。”

TCP數(shù)據(jù)報(bào)構(gòu)造

我們先來看一下TCP數(shù)據(jù)報(bào)的構(gòu)造:
TCP數(shù)據(jù)報(bào)構(gòu)造以及三次握手(圖解)
帶暗影的幾個(gè)字段需求重點(diǎn)闡明一下:
1) 序號:Seq(Sequence Number)序號占32位,用來標(biāo)識從盤算機(jī)A發(fā)送到盤算機(jī)B的數(shù)據(jù)包的序號,盤算機(jī)發(fā)送數(shù)據(jù)時(shí)對此停止標(biāo)志。
2) 確認(rèn)號:Ack(Acknowledge Number)確認(rèn)號占32位,客戶端和效勞器端都可以發(fā)送,Ack = Seq + 1。
3) 標(biāo)記位:每一個(gè)標(biāo)記位占用1Bit,共有6個(gè),辨別為 URG、ACK、PSH、RST、SYN、FIN,詳細(xì)寄義如下:

  • URG:緊迫指針(urgent pointer)無效。

  • ACK:確認(rèn)序號無效。

  • PSH:接納方應(yīng)當(dāng)盡快將這個(gè)報(bào)文交給使用層。

  • RST:重置銜接。

  • SYN:樹立一個(gè)新銜接。

  • FIN:斷開一個(gè)銜接。

對英文字母縮寫的總結(jié):Seq 是 Sequence 的縮寫,表現(xiàn)序列;Ack(ACK) 是 Acknowledge 的縮寫,表現(xiàn)確認(rèn);SYN 是 Synchronous 的縮寫,情愿是“同步的”,這里表現(xiàn)樹立同步銜接;FIN 是 Finish 的縮寫,表現(xiàn)完成。

銜接的樹立(三次握手)

運(yùn)用 connect() 樹立銜接時(shí),客戶端和效勞器端會互相發(fā)送三個(gè)數(shù)據(jù)包,請看下圖:
TCP數(shù)據(jù)報(bào)構(gòu)造以及三次握手(圖解)
客戶端挪用 socket() 函數(shù)創(chuàng)立套接字后,由于沒有樹立銜接,所以套接字處于CLOSED形態(tài);效勞器端挪用 listen() 函數(shù)后,套接字進(jìn)入LISTEN形態(tài),開端監(jiān)聽客戶端懇求。
這個(gè)時(shí)分,客戶端開端提議懇求:
1) 當(dāng)客戶端挪用 connect() 函數(shù)后,TCP協(xié)定會組建一個(gè)數(shù)據(jù)包,并設(shè)置 SYN 標(biāo)記位,表現(xiàn)該數(shù)據(jù)包是用來樹立同步銜接的。同時(shí)生成一個(gè)隨機(jī)數(shù)字 1000,填充“序號(Seq)”字段,表現(xiàn)該數(shù)據(jù)包的序號。完成這些任務(wù),開端向效勞器端發(fā)送數(shù)據(jù)包,客戶端就進(jìn)入了SYN-SEND形態(tài)。
2) 效勞器端收到數(shù)據(jù)包,檢測到曾經(jīng)設(shè)置了 SYN 標(biāo)記位,就曉得這是客戶端發(fā)來的樹立銜接的“懇求包”。效勞器端也會組建一個(gè)數(shù)據(jù)包,并設(shè)置 SYN 和 ACK 標(biāo)記位,SYN 表現(xiàn)該數(shù)據(jù)包用來樹立銜接,ACK 用來確認(rèn)收到了方才客戶端發(fā)送的數(shù)據(jù)包。
效勞器生成一個(gè)隨機(jī)數(shù) 2000,填充“序號(Seq)”字段。2000 和客戶端數(shù)據(jù)包沒有關(guān)系。
效勞器將客戶端數(shù)據(jù)包序號(1000)加1,失掉1001,并用這個(gè)數(shù)字填充“確認(rèn)號(Ack)”字段。
效勞器將數(shù)據(jù)包收回,進(jìn)入SYN-RECV形態(tài)。
3) 客戶端收到數(shù)據(jù)包,檢測到曾經(jīng)設(shè)置了 SYN 和 ACK 標(biāo)記位,就曉得這是效勞器發(fā)來的“確認(rèn)包”??蛻舳藭z測“確認(rèn)號(Ack)”字段,看它的值能否為 1000+1,假如是就闡明銜接樹立勝利。
接下來,客戶端會持續(xù)組建數(shù)據(jù)包,并設(shè)置 ACK 標(biāo)記位,表現(xiàn)客戶正直確接納了效勞器發(fā)來的“確認(rèn)包”。同時(shí),將方才效勞器發(fā)來的數(shù)據(jù)包序號(2000)加1,失掉 2001,并用這個(gè)數(shù)字來填充“確認(rèn)號(Ack)”字段。
客戶端將數(shù)據(jù)包收回,進(jìn)入ESTABLISED形態(tài),表現(xiàn)銜接曾經(jīng)勝利樹立。
4) 效勞器端收到數(shù)據(jù)包,檢測到曾經(jīng)設(shè)置了 ACK 標(biāo)記位,就曉得這是客戶端發(fā)來的“確認(rèn)包”。效勞器會檢測“確認(rèn)號(Ack)”字段,看它的值能否為 2000+1,假如是就闡明銜接樹立勝利,效勞器進(jìn)入ESTABLISED形態(tài)。
至此,客戶端和效勞器都進(jìn)入了ESTABLISED形態(tài),銜接樹立勝利,接下來就可以收發(fā)數(shù)據(jù)了。

最初的闡明

三次握手的癥結(jié)是要確認(rèn)對方收到了本人的數(shù)據(jù)包,這個(gè)目的就是經(jīng)過“確認(rèn)號(Ack)”字段完成的。盤算時(shí)機(jī)記載下本人發(fā)送的數(shù)據(jù)包序號 Seq,待收到對方的數(shù)據(jù)包后,檢測“確認(rèn)號(Ack)”字段,看Ack = Seq + 1能否成立,假如成立闡明對樸直確收到了本人的數(shù)據(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