0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TCP三次握手詳解

冬至子 ? 來源:清菡軟件測(cè)試 ? 作者:清菡軟件測(cè)試 ? 2023-07-10 17:14 ? 次閱讀

一、舉個(gè)例子

圖片

圖片來自網(wǎng)絡(luò)

類比兩個(gè)人初認(rèn)識(shí)的一個(gè)過程。比如一個(gè)男生初次認(rèn)識(shí)一個(gè)女生,男生第一次看到這個(gè)女生就一見鐘情,想要認(rèn)識(shí)女生。

男生給女生發(fā)了個(gè)求交往的消息,“我想要跟你做朋友,可不可以?”給這個(gè)求交往的消息打上標(biāo)簽,比如愛心,代表這個(gè)是求交往的消息。

女生回復(fù)“我收到你的消息(對(duì)收到消息的確認(rèn))。我同意跟你做朋友試試看。”這個(gè)是女生的態(tài)度。在男生發(fā)完求交往后的一個(gè)確認(rèn)消息以及女生同意交往的消息。

這個(gè)是消息內(nèi)容以及消息性質(zhì)。男生收到女生的消息很開心,再次確認(rèn)下我確實(shí)收到了你的確認(rèn)消息。也知道了女生同意試試看的態(tài)度。

這樣的一個(gè)交互之后,確認(rèn)消息的一個(gè)再次確認(rèn)消息。

結(jié)果:確認(rèn)關(guān)系了,可以正式交往了。后面再發(fā)送的消息就是他們作為男女朋友之后發(fā)的消息內(nèi)容了。

二、TCP三次握手詳解

1.TCP頭部的重要字段

圖片

圖片來自網(wǎng)絡(luò)

tcp三次握手跟這個(gè)過程就特別像。 現(xiàn)在是個(gè)客戶端,這邊是個(gè)百度服務(wù)器。這個(gè)客戶端想像百度服務(wù)器去取頁面、資源。首先要發(fā)起個(gè)tcp的鏈接請(qǐng)求。

首先要發(fā)一條請(qǐng)求鏈接的消息。請(qǐng)求鏈接的消息里面要包括一些什么內(nèi)容呢?這個(gè)需要再去詳細(xì)的看下tcp頭部了。

圖片

圖片來自網(wǎng)絡(luò)

要重視的是序號(hào)、確認(rèn)號(hào)、6個(gè)標(biāo)志位。

序號(hào):就是tcp數(shù)據(jù)包標(biāo)的編號(hào)。tcp數(shù)據(jù)包過大,tcp數(shù)據(jù)會(huì)在網(wǎng)絡(luò)中進(jìn)行分段。

太大了在網(wǎng)絡(luò)中是無法傳輸?shù)?,分成一小段一小段進(jìn)行傳輸。

分段,到達(dá)目的主機(jī)后進(jìn)行重組。比如分成了10段,每段要按順序重組,才能組成原來一樣的數(shù)據(jù)包。如果順序錯(cuò)了,數(shù)據(jù)包也不一樣了。

所以這個(gè)時(shí)候要對(duì)它進(jìn)行一個(gè)編號(hào),比如分成10段,分別是1,2,3,4....10,重組的時(shí)候,收到1的時(shí)候必須等2,收到2的時(shí)候必須等3,這個(gè)數(shù)據(jù)包依次過來依次重組,這樣保證數(shù)據(jù)能夠正確的組合起來。這個(gè)就是序號(hào)的作用。

確認(rèn)號(hào):就是確認(rèn)的一個(gè)序號(hào)。當(dāng)客戶端向服務(wù)器發(fā)起了一個(gè)鏈接的時(shí)候,客戶端會(huì)發(fā)起一個(gè)鏈接請(qǐng)求,客戶端發(fā)完鏈接請(qǐng)求之后,希望服務(wù)器能夠給一些回應(yīng)。

比如男生給女生發(fā)請(qǐng)求交往的消息,內(nèi)心很忐忑的希望女生也能夠回一個(gè)確認(rèn)消息。確認(rèn)消息里面會(huì)帶一個(gè)編號(hào)。這個(gè)編號(hào)就是這里說的確認(rèn)號(hào)。

確認(rèn)號(hào)存在于確認(rèn)消息里面的。確認(rèn)號(hào)是怎么編號(hào)的呢?序號(hào)是為了給數(shù)據(jù)包分段的時(shí)候?yàn)榱朔奖憬o后面進(jìn)行完整的數(shù)據(jù)重組。

確認(rèn)號(hào)和序號(hào)有什么關(guān)系?確認(rèn)號(hào)是依據(jù)序號(hào)來編得。

一個(gè)數(shù)據(jù)包發(fā)送過去,它的序號(hào)的編號(hào)是1。發(fā)到服務(wù)器那邊,服務(wù)器進(jìn)行了一個(gè)回應(yīng),回應(yīng)包也就是確認(rèn)包里面有確認(rèn)號(hào)。ack表示確認(rèn)號(hào)。

確認(rèn)號(hào)是上一個(gè)收到的包的序號(hào)加上1。表示服務(wù)器期望收到你的下一個(gè)包的序號(hào)。

6個(gè)標(biāo)志位(狀態(tài)控制碼):目前只需要掌握4個(gè),包括ACK(確認(rèn)位)、RST(重置)、SYN、FIN。

標(biāo)志位--信號(hào)燈,1--亮,0--滅。表示數(shù)據(jù)包的類型。標(biāo)志位就是表示數(shù)據(jù)包的類型。

2.四個(gè)標(biāo)志位

ACK(確認(rèn)位)。=1,表示這個(gè)消息是一個(gè)確認(rèn)消息。

什么是確認(rèn)消息?男生給女生發(fā)了一個(gè)求交往的消息,女生禮貌性的回了一個(gè)確認(rèn)消息。這個(gè)就是一個(gè)確認(rèn)消息,ACK這個(gè)標(biāo)志位就會(huì)被置成1。

客戶端收到,就會(huì)認(rèn)識(shí)這個(gè)包是個(gè)確認(rèn)消息。

RST(重置):=1,表示這個(gè)消息釋放鏈接。TCP鏈接出現(xiàn)了錯(cuò)誤--主機(jī)服務(wù)器崩潰,斷開鏈接,請(qǐng)重新建立鏈接。

SYN:同步,=1,表示這個(gè)消息是:1.一個(gè)發(fā)起鏈接的消息。男生向女生發(fā)起的第一個(gè)求交往的消息,就是一個(gè)發(fā)起鏈接的消息。

2.確認(rèn)接受鏈接的消息。

如果我這個(gè)消息是一個(gè)確認(rèn)接受鏈接的消息,服務(wù)器這邊 收到客戶端一個(gè)發(fā)起鏈接的消息,然后我同意它發(fā)起鏈接,所以要進(jìn)行一個(gè)確認(rèn)。

這兩種情況都需要把SYN位置成1。

FIN:終止。=1,表示發(fā)送報(bào)文結(jié)束了完畢,釋放這個(gè)鏈接。

RST是出現(xiàn)錯(cuò)誤,不得不釋放鏈接,而FIN是用完了這個(gè)鏈接,用完了之后自然要釋放這個(gè)鏈接。FIN被置位了就表示TCP四次揮手要開始了。

不管是客戶端還是服務(wù)器收到tcp的報(bào)文,檢查標(biāo)記號(hào),標(biāo)記位是什么狀態(tài),表示當(dāng)前的報(bào)文是一個(gè)什么樣的類型。

3.TCP三次握手

圖片

圖片來自網(wǎng)絡(luò)

客戶端要向服務(wù)器端發(fā)送一個(gè)請(qǐng)求鏈接的消息。標(biāo)志位SYN=1,表示一個(gè)發(fā)起鏈接的消息時(shí),這個(gè)SYN位一定置成1。

每個(gè)包都有一個(gè)序號(hào),所以序號(hào)用seq來表示,seq=j,表示當(dāng)前的序號(hào)是j。

是一個(gè)SYN包,是我要向服務(wù)器發(fā)起一個(gè)鏈接請(qǐng)求。這個(gè)是客戶端向服務(wù)器發(fā)起的第一個(gè)數(shù)據(jù)包。也是三次握手的第一次握手。

服務(wù)器收到了客戶端的包,服務(wù)器給客戶端回的消息是一個(gè)確認(rèn)消息。

標(biāo)志位:ACK位置1,表示它是一個(gè)確認(rèn)消息。SYN位置1,客戶端發(fā)起鏈接,服務(wù)器確認(rèn)接受鏈接的消息。

ack(確認(rèn)號(hào)):根據(jù)序號(hào)來進(jìn)行表示的,序號(hào)是1,確認(rèn)號(hào)是1+1,表示服務(wù)器期望收到的下一個(gè)包的序號(hào)。所以確認(rèn)號(hào)是j+1。

表示收到了序?yàn)閖的這個(gè)包,并且希望得到下一個(gè)包的序號(hào)是j+1。

這個(gè)包,自己的序號(hào)是seq=k。

客戶端收到服務(wù)器的確認(rèn)消息,需要再次給它發(fā)送一個(gè)確認(rèn)消息。

這個(gè)確認(rèn)消息里面,標(biāo)志位里面:ACK肯定置1。也不是發(fā)起請(qǐng)求的一個(gè)消息,也不是確認(rèn)接受請(qǐng)求的一個(gè)消息,所以SYN這個(gè)位置是不會(huì)被置位的。

ack(確認(rèn)號(hào))=k+1

收到序號(hào)為k的這個(gè)包,并且進(jìn)行一個(gè)確認(rèn),期待下一個(gè)包的序號(hào)是k+1,到此為止就是tcp三次握手的一個(gè)完整過程。

后續(xù)才是這個(gè)基礎(chǔ)上的數(shù)據(jù)發(fā)送報(bào)文。

必須要建立這個(gè)三次握手的基礎(chǔ)上才有后續(xù)的數(shù)據(jù)發(fā)送報(bào)文。

四、總結(jié)

服務(wù)器和客戶端在握手中的狀態(tài) :首先,三次握手之前,客戶端和服務(wù)器端都是處于關(guān)閉狀態(tài)。

然后客戶端發(fā)起了第一個(gè)SYN包,想要去跟服務(wù)器建立鏈接。

發(fā)完SYN包之后就變成syn_sent狀態(tài),就是把syn發(fā)完了的狀態(tài)。服務(wù)器在收到syn包之前變成監(jiān)聽狀態(tài)。

開始聽下誰會(huì)給我發(fā)送消息。收到客戶端的syn包之后,變成syn_Revd的狀態(tài)。

回了一個(gè)syn,ack??蛻舳耸盏絪yn,ack之后變成建立鏈接的狀態(tài),它認(rèn)為我收到之后,我這個(gè)鏈接就已經(jīng)建立好了。并且我給它發(fā)送了一個(gè)ack包,服務(wù)器收到ack包后也建立鏈接了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16039

    瀏覽量

    176722
  • SYN
    SYN
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8193
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    490

    瀏覽量

    27438
  • RST
    RST
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    7373
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4192
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    講一講的TCP三次握手和四揮手

    如果你學(xué)過網(wǎng)絡(luò)基礎(chǔ)知識(shí),那么你一定對(duì)TCP三次握手不陌生。今天我想用通俗的話來給大家講一講TCP三次握手
    的頭像 發(fā)表于 02-03 10:43 ?2642次閱讀
    講一講的<b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>揮手

    TCP協(xié)議連接的三次握手

    通過三次握手,客戶端與服務(wù)端能夠確保彼此的網(wǎng)絡(luò)連接是可用的。客戶端發(fā)起的SYN報(bào)文和服務(wù)端返回的SYN+ACK報(bào)文都包含了對(duì)方的初始序列號(hào)和通信能力信息,通過互相確認(rèn)這些信息,雙方確認(rèn)彼此的能力和正確性。
    的頭像 發(fā)表于 02-03 16:44 ?1264次閱讀
    <b class='flag-5'>TCP</b>協(xié)議連接的<b class='flag-5'>三次</b><b class='flag-5'>握手</b>

    三次握手,四揮手你懂嗎

    程序員面試被問到“三次握手,四揮手”怎么辦?
    發(fā)表于 04-08 07:23

    TCP三次握手的過程描述

    本文檔主要描述TCP三次握手的過程,一個(gè)完整的三次握手也就是 請(qǐng)求---應(yīng)答---再次確認(rèn)
    發(fā)表于 03-02 15:37 ?8次下載

    tcp協(xié)議三次握手詳細(xì)過程

    TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接:第一握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seq
    發(fā)表于 12-08 11:53 ?9873次閱讀
    <b class='flag-5'>tcp</b>協(xié)議<b class='flag-5'>三次</b><b class='flag-5'>握手</b>詳細(xì)過程

    大神告訴你TCP建立連接為什么是三次握手

    所謂三次握手(Three-Way Handshake)即建立TCP連接,是指建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)端總共發(fā)送3個(gè)包以確認(rèn)連接的建立。在socket編程中,這一過程由客戶
    的頭像 發(fā)表于 04-16 11:43 ?1w次閱讀
    大神告訴你<b class='flag-5'>TCP</b>建立連接為什么是<b class='flag-5'>三次</b><b class='flag-5'>握手</b>

    TCP三次握手過程及四揮手過程說明

    三次握手 置位概念:根據(jù) TCP 的包頭字段,存在 3 個(gè)重要的標(biāo)識(shí) ACK、SYN、FIN ACK:表示驗(yàn)證字段 SYN:位數(shù)置 1,表示建立 TCP 連接 FIN:位數(shù)置 1,表示
    的頭像 發(fā)表于 03-01 12:00 ?4161次閱讀

    TCP三次握手和四揮手以及11種狀態(tài)資料下載

    電子發(fā)燒友網(wǎng)為你提供TCP三次握手和四揮手以及11種狀態(tài)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可
    發(fā)表于 04-15 08:41 ?2次下載
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>和四<b class='flag-5'>次</b>揮手以及11種狀態(tài)資料下載

    TCP三次握手和四揮手過程中的異常情況

    TCP 三次握手和四揮手過程中,途中某一步的報(bào)文丟失了,會(huì)發(fā)生什么?
    的頭像 發(fā)表于 09-05 10:23 ?1181次閱讀

    如何使用WireShark進(jìn)行TCP三次握手

    WireShark是一種非常方便的網(wǎng)絡(luò)抓包工具,下面演示,使用WireShark來抓取TCP三次握手過程。
    的頭像 發(fā)表于 11-01 09:50 ?2066次閱讀

    通過WireShark抓取TCP三次握手過程分享

    客戶端收到服務(wù)器的響應(yīng)后,就會(huì)回復(fù)一個(gè)序列號(hào)為Seq = c+1, 確認(rèn)號(hào)為Ack = s+1的ACK數(shù)據(jù)包給服務(wù)器,三次握手完成。
    發(fā)表于 11-01 09:49 ?2186次閱讀

    TCP建立連接概述及三次握手、四揮手的流程

    具備上述四個(gè)條件后A獲取B的信息是有要求的,根本上的要求是數(shù)據(jù)信道可靠,就是平時(shí)所說的可靠連接,那么如何保證連接的可靠性呢,TCP協(xié)議就是靠確認(rèn)應(yīng)答機(jī)制、超時(shí)重傳機(jī)制等保證連接可靠性的,接下來就通過TCP協(xié)議的三次
    的頭像 發(fā)表于 03-23 15:57 ?1016次閱讀
    <b class='flag-5'>TCP</b>建立連接概述及<b class='flag-5'>三次</b><b class='flag-5'>握手</b>、四<b class='flag-5'>次</b>揮手的流程

    TCP三次握手的理論知識(shí)

    關(guān)于TCP三次握手的理論知識(shí),往上一搜一大片,本文就跳過理論,直接上手。Let’s go。 準(zhǔn)備知識(shí) 抓一個(gè)TCP三次
    的頭像 發(fā)表于 11-09 11:27 ?700次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>三次</b><b class='flag-5'>握手</b>的理論知識(shí)

    說說TCP三次握手的過程?為什么是三次而不是兩、四?

    說說TCP三次握手的過程?為什么是三次而不是兩、四? T
    的頭像 發(fā)表于 02-04 11:03 ?526次閱讀

    簡(jiǎn)述TCP協(xié)議的三次握手機(jī)制

    TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。它主要用于在IP網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)傳輸。TCP協(xié)議的三次握手
    的頭像 發(fā)表于 08-16 10:57 ?360次閱讀