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

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

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

一文詳解TCP協(xié)議

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:嵌入式攻城獅 ? 2023-04-21 12:36 ? 次閱讀

TCP協(xié)議深入

TCP通過(guò)檢驗(yàn)和、序列號(hào)、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機(jī)制實(shí)現(xiàn)可靠性傳輸

1. 序列號(hào)+確認(rèn)應(yīng)答

在TCP中,當(dāng)發(fā)送端的數(shù)據(jù)到達(dá)接收主機(jī)時(shí),接收端主機(jī)會(huì)返回一個(gè)已收到消息的通知,這個(gè)消息叫做確認(rèn)應(yīng)答(ACK); 序列號(hào)是按照順序給發(fā)送數(shù)據(jù)的每一個(gè)字節(jié)都標(biāo)上號(hào)碼的編號(hào)。 接收端查詢接收數(shù)據(jù)TCP首部中的序列號(hào)和數(shù)據(jù)的長(zhǎng)度,將自已下一步應(yīng)該接收的序號(hào)作為確認(rèn)應(yīng)答返送回去

圖片

2. 重發(fā)超時(shí)

重發(fā)超時(shí)是指在重發(fā)數(shù)據(jù)之前,等待確認(rèn)應(yīng)答到來(lái)的那個(gè)特定時(shí)間間隔,如果超過(guò)了這個(gè)時(shí)間仍未收到確認(rèn)應(yīng)答,發(fā)送端將進(jìn)行數(shù)據(jù)重發(fā)。 理想的重發(fā)超時(shí)具體時(shí)長(zhǎng)是找到一個(gè)最小時(shí)間,它能保證確認(rèn)應(yīng)答一定能在這個(gè)時(shí)間內(nèi)返回

圖片

數(shù)據(jù)也不會(huì)無(wú)限、反復(fù)地重發(fā)。 達(dá)到一定重發(fā)次數(shù)后,若仍沒有任何確認(rèn)應(yīng)答返回,就會(huì)判斷為網(wǎng)絡(luò)或?qū)Χ酥鳈C(jī)發(fā)生了異常,強(qiáng)制關(guān)閉連接,并通知應(yīng)用通訊異常強(qiáng)行終止

3. 連接管理

為了準(zhǔn)確無(wú)誤地將數(shù)據(jù)送達(dá)目標(biāo)處,TCP協(xié)議采用了 三次握手 (three-way handshaking)策略。 用TCP協(xié)議將數(shù)據(jù)包送出去后,TCP一定會(huì)向?qū)Ψ酱_認(rèn)是否成功送達(dá)。 若在握手過(guò)程中某個(gè)階段莫名中斷,TCP協(xié)議會(huì)再次以相同的順序發(fā)送相同的順序包。 而 四次揮手 (Four-Way Wavehand)即終止TCP連接,就是指斷開一個(gè)TCP連接時(shí),需要客戶端和服務(wù)端總共發(fā)送4個(gè)包以確認(rèn)連接的斷開

圖片

三次握手,即建立連接

第一次握手:客戶端發(fā)送一個(gè)帶SYN標(biāo)志的TCP報(bào)文到服務(wù)器。 這是三次握手過(guò)程中的段1

第二次握手:服務(wù)器端回應(yīng)客戶端,是三次握手中的第2個(gè)報(bào)文段,同時(shí)帶ACK標(biāo)志和SYN標(biāo)志。 它表示對(duì)剛才客戶端SYN的回應(yīng); 同時(shí)又發(fā)送SYN給客戶端,詢問(wèn)客戶端是否準(zhǔn)備好進(jìn)行數(shù)據(jù)通訊

第三次握手:客戶必須再次回應(yīng)服務(wù)器端一個(gè)ACK報(bào)文,這是報(bào)文段3

數(shù)據(jù)傳輸

客戶端發(fā)出段4,包含從序號(hào)1001開始的20個(gè)字節(jié)數(shù)據(jù)。

服務(wù)器發(fā)出段5,確認(rèn)序號(hào)為1021,對(duì)序號(hào)為1001-1020的數(shù)據(jù)表示確認(rèn)收到,同時(shí)請(qǐng)求發(fā)送序號(hào)1021開始的數(shù)據(jù),服務(wù)器在應(yīng)答的同時(shí)也向客戶端發(fā)送從序號(hào)8001開始的10個(gè)字節(jié)數(shù)據(jù),這稱為piggyback。

客戶端發(fā)出段6,對(duì)服務(wù)器發(fā)來(lái)的序號(hào)為8001-8010的數(shù)據(jù)表示確認(rèn)收到,請(qǐng)求發(fā)送序號(hào)8011開始的數(shù)據(jù)

四次揮手,即關(guān)閉連接

第一次揮手:客戶端發(fā)出段7,F(xiàn)IN位表示關(guān)閉連接的請(qǐng)求

第二次揮手:服務(wù)器發(fā)出段8,應(yīng)答客戶端的關(guān)閉連接請(qǐng)求

第三次揮手:服務(wù)器發(fā)出段9,其中也包含F(xiàn)IN位,向客戶端發(fā)送關(guān)閉連接請(qǐng)求

第四次揮手:客戶端發(fā)出段10,應(yīng)答服務(wù)器的關(guān)閉連接請(qǐng)求

下圖是一次完整的三次握手、數(shù)據(jù)傳輸以及四次揮手的wireshark抓包測(cè)試

圖片

4. 流控制

在建立TCP連接時(shí),可以確定發(fā)送數(shù)據(jù)包的單位,即最大消息長(zhǎng)度(MSS:Maximum Segment Size)。 MSS是在三次握手的時(shí)候,在兩端主機(jī)之間被計(jì)算得出的。 兩端的主機(jī)在發(fā)出建立連接的請(qǐng)求時(shí),會(huì)在TCP首部中寫入MSS選項(xiàng),告訴對(duì)方自已的接口能夠適應(yīng)的MSS大小,然后會(huì)在兩者之間選擇一個(gè)較小的值投入使用

TCP以一個(gè)段為單位,若每發(fā)一個(gè)段進(jìn)行一次確認(rèn)應(yīng)答的處理,會(huì)導(dǎo)致往返時(shí)間較長(zhǎng)通信性能較低。 為了解決該問(wèn)題,引入了窗口這個(gè)概念,使得確認(rèn)應(yīng)答不再是以每個(gè)分段,而是以更大的單位進(jìn)行確認(rèn)

窗口大小就是指無(wú)需等待確認(rèn)應(yīng)答而可以繼續(xù)發(fā)送數(shù)據(jù)的最大值。 這個(gè)機(jī)制實(shí)現(xiàn)了使用大量的緩沖區(qū),通過(guò)對(duì)多個(gè)段同時(shí)進(jìn)行確認(rèn)應(yīng)答的功能。 在收到確認(rèn)應(yīng)答的情況下,將窗口滑動(dòng)到確認(rèn)應(yīng)答中的序列號(hào)的位置,就可以順序地將多個(gè)段同時(shí)發(fā)送以提高通信性能。 這種機(jī)制也被稱為滑動(dòng)窗口控制

圖片

上圖就是一個(gè)滑動(dòng)窗口控制實(shí)例,其詳細(xì)流程見如下分析:

發(fā)送端發(fā)起連接,聲明最大段尺寸是1460,初始序號(hào)是0,窗口大小是4K,表示“我的接收緩沖區(qū)還有4K字節(jié)空閑,你發(fā)的數(shù)據(jù)不要超過(guò)4K”。 接收端應(yīng)答連接請(qǐng)求,聲明最大段尺寸是1024,初始序號(hào)是8000,窗口大小是6K。 發(fā)送端應(yīng)答,三方握手結(jié)束。

發(fā)送端發(fā)出段4-9,每個(gè)段帶1K的數(shù)據(jù),發(fā)送端根據(jù)窗口大小知道接收端的緩沖區(qū)滿了,因此停止發(fā)送數(shù)據(jù)。

接收端的應(yīng)用程序提走2K數(shù)據(jù),接收緩沖區(qū)又有了2K空閑,接收端發(fā)出段10,在應(yīng)答已收到6K數(shù)據(jù)的同時(shí)聲明窗口大小為2K。

接收端的應(yīng)用程序又提走2K數(shù)據(jù),接收緩沖區(qū)有4K空閑,接收端發(fā)出段11,重新聲明窗口大小為4K。

發(fā)送端發(fā)出段12-13,每個(gè)段帶2K數(shù)據(jù),段13同時(shí)還包含F(xiàn)IN位。

接收端應(yīng)答接收到的2K數(shù)據(jù)(6145-8192),再加上FIN位占一個(gè)序號(hào)8193,因此應(yīng)答序號(hào)是8194,連接處于半關(guān)閉狀態(tài),接收端同時(shí)聲明窗口大小為2K。

接收端的應(yīng)用程序提走2K數(shù)據(jù),接收端重新聲明窗口大小為4K。

接收端的應(yīng)用程序提走剩下的2K數(shù)據(jù),接收緩沖區(qū)全空,接收端重新聲明窗口大小為6K。

接收端的應(yīng)用程序在提走全部數(shù)據(jù)后,決定關(guān)閉連接,發(fā)出段17包含F(xiàn)IN位,發(fā)送端應(yīng)答,連接完全關(guān)閉。

下圖是一次完整的滑動(dòng)窗口控制實(shí)例的wireshark抓包分析:

開啟以socket客戶端,發(fā)送2593個(gè)字節(jié)的數(shù)據(jù)到開發(fā)板

圖片

使用wireshark抓包工具,抓取完整的收發(fā)過(guò)程

圖片

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

    關(guān)注

    9

    文章

    1794

    瀏覽量

    64412
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8959

    瀏覽量

    85085
  • 主機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    982

    瀏覽量

    35008
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1347

    瀏覽量

    78934
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    91

    瀏覽量

    12054
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TCP/IP協(xié)議包括哪些協(xié)議 詳解TCP/IP協(xié)議

    TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)際協(xié)議)是指能夠在多個(gè)不同網(wǎng)絡(luò)間實(shí)現(xiàn)信息傳輸?shù)?b class='flag-5'>協(xié)議簇。
    發(fā)表于 07-21 09:56 ?1.2w次閱讀
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>協(xié)議</b>包括哪些<b class='flag-5'>協(xié)議</b> <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b><b class='flag-5'>TCP</b>/IP<b class='flag-5'>協(xié)議</b>

    TCP-IP詳解_卷3_TCP事務(wù)協(xié)議,HTTP,NNTP

    TCP-IP詳解_卷3_TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議
    發(fā)表于 03-24 22:42 ?39次下載

    TCP-IP詳解_卷1_協(xié)議

    TCP-IP詳解_卷1_協(xié)議
    發(fā)表于 03-24 22:45 ?50次下載

    TCP/IP詳解,卷3:tcp事務(wù)協(xié)議等(pdf電子書)

    TCP/IP詳解,卷3:tcp事務(wù)協(xié)議等(pdf電子書):第三卷的內(nèi)容細(xì)節(jié)覆蓋了當(dāng)今TCP/IP編程人員和網(wǎng)絡(luò)管理員必須熟練掌握的四個(gè)基本方
    發(fā)表于 08-06 08:54 ?505次下載

    tcp ip協(xié)議詳解卷三 下載

    tcp ip協(xié)議詳解卷三:第三卷的內(nèi)容細(xì)節(jié)覆蓋了當(dāng)今TCP/IP編程人員和網(wǎng)絡(luò)管理員必須熟練掌握的四個(gè)基本方面:    T/
    發(fā)表于 05-19 11:52 ?437次下載
    <b class='flag-5'>tcp</b> ip<b class='flag-5'>協(xié)議</b><b class='flag-5'>詳解</b>卷三 下載

    tcp ip協(xié)議詳解

    tcp ip協(xié)議詳解:《TCP/IP詳解,卷1:協(xié)議
    發(fā)表于 05-19 12:02 ?712次下載

    tcp ip協(xié)議_什么是tcp ip協(xié)議

    什么是tcp ip協(xié)議,tcp ip協(xié)議詳解,深刻講述了tcp ip
    發(fā)表于 05-14 16:29 ?5986次閱讀
    <b class='flag-5'>tcp</b> ip<b class='flag-5'>協(xié)議</b>_什么是<b class='flag-5'>tcp</b> ip<b class='flag-5'>協(xié)議</b>

    TCP-IP詳解卷3:TCP事務(wù)協(xié)議,HTTP,NNTP和UNI

    TCP-IP詳解卷3:TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議,個(gè)人收集整理了很久的資料,大家根據(jù)自己情況,有選擇性的下載吧~
    發(fā)表于 10-27 14:04 ?0次下載

    TCP-IP詳解卷2_ARP:地址解析協(xié)議

    TCP-IP詳解卷2 ARP:地址解析協(xié)議,學(xué)習(xí)TCP很好的資料。歡迎下載。
    發(fā)表于 05-09 14:13 ?0次下載

    TCP:傳輸控制協(xié)議

    TCP-IP詳解卷2 TCP:傳輸控制協(xié)議,學(xué)習(xí)TCP很好的資料。歡迎下載。
    發(fā)表于 05-09 14:33 ?0次下載

    詳解TCP傳輸控制協(xié)議

    TCP(Transmission Control Protocol 傳輸控制協(xié)議)是種面向連接(連接導(dǎo)向)的、可靠的、 基于IP的傳輸層協(xié)議。
    發(fā)表于 05-25 15:38 ?1568次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b><b class='flag-5'>TCP</b>傳輸控制<b class='flag-5'>協(xié)議</b>

    TCP協(xié)議與UDP協(xié)議的區(qū)別和相同點(diǎn)有哪些 看懂TCP協(xié)議與UDP協(xié)議的優(yōu)缺點(diǎn)

    首先咱們弄清楚,TCP協(xié)議和UCP協(xié)議TCP/IP協(xié)議的聯(lián)系,很多人犯糊涂了,直都是說(shuō)
    的頭像 發(fā)表于 05-26 14:35 ?9452次閱讀
    <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>與UDP<b class='flag-5'>協(xié)議</b>的區(qū)別和相同點(diǎn)有哪些 <b class='flag-5'>一</b><b class='flag-5'>文</b>看懂<b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b>與UDP<b class='flag-5'>協(xié)議</b>的優(yōu)缺點(diǎn)

    Siemens PLC TCP協(xié)議詳解

    Siemens PLC TCP 協(xié)議詳解 說(shuō)明:藍(lán)色文字表示已經(jīng)破解部分,[紅色文字] 表示對(duì)破解部分?jǐn)?shù)字的說(shuō)明,黑色文字表示對(duì)破解部分的進(jìn)步說(shuō)明,黑色斜體加粗文字表示未破解部分
    發(fā)表于 04-17 11:46 ?3次下載
    Siemens PLC <b class='flag-5'>TCP</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>詳解</b>

    LwIP協(xié)議棧源碼詳解TCP/IP協(xié)議的實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《LwIP協(xié)議棧源碼詳解TCP/IP協(xié)議的實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 07-03 11:22 ?3次下載

    了解TCP/IP協(xié)議

    TCP/IP協(xié)議是現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)通信的基礎(chǔ),是互聯(lián)網(wǎng)及局域網(wǎng)廣泛使用的協(xié)議。TCP/IP協(xié)議
    的頭像 發(fā)表于 08-07 15:38 ?984次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>了解<b class='flag-5'>TCP</b>/IP<b class='flag-5'>協(xié)議</b>