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

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

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

tcp報(bào)文段首部的結(jié)構(gòu)分析

汽車電子技術(shù) ? 來源: 物聯(lián)網(wǎng)IoT開發(fā) ? 作者:杰杰mcu ? 2023-02-14 10:32 ? 次閱讀

TCP報(bào)文段首部結(jié)構(gòu)

TCP雖然是面向字節(jié)流的,但TCP傳送的數(shù)據(jù)單元卻是報(bào)文段。

TCP報(bào)文段如APR報(bào)文、IP數(shù)據(jù)報(bào)一樣,也是由首部數(shù)據(jù)區(qū)域組成,TCP首部內(nèi)容很豐富,各個(gè)字段都有特定的含義,一般來說TCP首部只有20個(gè)字節(jié),TCP報(bào)文段首部的前20個(gè)字節(jié)是固定的,后面有4N字節(jié)是根據(jù)需要而增加的選項(xiàng)字段(N是整數(shù))。因此TCP首部的最小長度是20字節(jié)。

LwIP中,TCP首部采用一個(gè)名字叫tcp_hdr的結(jié)構(gòu)體進(jìn)行描述,此處用PACK_STRUCT_BEGIN與PACK_STRUCT_END宏定義禁止編譯器對(duì)齊,因?yàn)樵?code>tcp首部中存在某些字段是以1字節(jié)對(duì)齊的。

1PACK_STRUCT_BEGIN
 2struct tcp_hdr {
 3  PACK_STRUCT_FIELD(u16_t src);     /* 源端口 */
 4  PACK_STRUCT_FIELD(u16_t dest);    /* 目的端口 */
 5  PACK_STRUCT_FIELD(u32_t seqno);   /* 序號(hào) */
 6  PACK_STRUCT_FIELD(u32_t ackno);   /* 確認(rèn)序號(hào) */
 7  PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags);  /* 首部長度+保留位+標(biāo)志位 */
 8  PACK_STRUCT_FIELD(u16_t wnd);     /* 窗口大小 */
 9  PACK_STRUCT_FIELD(u16_t chksum);  /* 校驗(yàn)和 */  
10  PACK_STRUCT_FIELD(u16_t urgp);    /* 緊急指針 */
11} PACK_STRUCT_STRUCT;
12PACK_STRUCT_END

圖片

TCP報(bào)文段首部(圖片來源《計(jì)算機(jī)網(wǎng)絡(luò)》-謝希仁)

首部固定部分各字段的意義如下:* 每個(gè)TCP報(bào)文段都包含源主機(jī)目標(biāo)主機(jī)的端口號(hào),各占2個(gè)字節(jié),用于尋找發(fā)送端和接收端應(yīng)用線程,這兩個(gè)值加上I P首部中的源I P地址和目標(biāo)I P地址就能確定唯一一個(gè)TCP連接。

  • 序號(hào)字段占4字節(jié),序號(hào)范圍是[0,4294967295],序號(hào)增加到4284967295后,下一個(gè)序號(hào)就又回到0,主要是用來標(biāo)識(shí)從TCP發(fā)送端TCP接收端發(fā)送的數(shù)據(jù)字節(jié)流,它的值表示在這個(gè)報(bào)文段中的第一個(gè)數(shù)據(jù)字節(jié)所處位置嗎,根據(jù)接收到的數(shù)據(jù)區(qū)域長度,就能計(jì)算出報(bào)文最后一個(gè)數(shù)據(jù)所處的序號(hào),因?yàn)?code>TCP會(huì)對(duì)發(fā)送或者接收的數(shù)據(jù)進(jìn)行編號(hào)(按字節(jié)流的形式),那么使用序號(hào)對(duì)每個(gè)字節(jié)進(jìn)行計(jì)數(shù),就能很輕易管理這些數(shù)據(jù)。TCP報(bào)文段的初始序列號(hào)(ISN)是隨機(jī)的,可能是0~4294967295之間的任意值.
  • 既然TCP給每個(gè)傳輸?shù)淖止?jié)都了編號(hào),那么確認(rèn)序號(hào)就包含接收端所期望收到的下一個(gè)序號(hào),因此,確認(rèn)序號(hào)應(yīng)當(dāng)是上次已成功收到數(shù)據(jù)的最后一個(gè)字節(jié)序號(hào)加 1。當(dāng)然,只有ACK標(biāo)志為 1時(shí)確認(rèn)序號(hào)字段才有效,TCP為應(yīng)用層提供全雙工服務(wù),這意味數(shù)據(jù)能在兩個(gè)方向上獨(dú)立地進(jìn)行傳輸,因此確認(rèn)序號(hào)通常會(huì)與反向數(shù)據(jù)(即接收端傳輸給發(fā)送端的數(shù)據(jù))封裝在同一個(gè)報(bào)文中(即捎帶),所以連接的每一端都必須保持每個(gè)方向上的傳輸數(shù)據(jù)序號(hào)準(zhǔn)確性。
  • 首部長度字段占據(jù)4bit空間(或者稱數(shù)據(jù)偏移字段),它指出了TCP報(bào)文段首部長度,以字節(jié)為單位,最大能記錄15*4=60字節(jié)的首部長度,因此,TCP報(bào)文段首部最大長度為60字節(jié)。在首部長度字段后接下來有6bit空間是保留未用的。
  • TCP報(bào)文段首部的標(biāo)志字段
  • URG:首部中的緊急指針字段標(biāo)志,如果是1表示緊急指針字段有效。
  • ACK:首部中的確認(rèn)序號(hào)字段標(biāo)志,如果是1表示確認(rèn)序號(hào)字段有效。
  • PSH:該字段置1表示接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層。
  • RST:重新建立TCP連接。
  • SYN:握手,發(fā)起連接。
  • FIN:結(jié)束連接。
  • TCP的流量控制由連接的每一端通過聲明的窗口大小來提供,窗口大小為字節(jié)數(shù),起始于確認(rèn)序號(hào)字段指明的值,這個(gè)值是接收端正期望接收的數(shù)據(jù)序號(hào),發(fā)送方根據(jù)窗口大小調(diào)整發(fā)送數(shù)據(jù),以實(shí)現(xiàn)流量控制。窗口大小是一個(gè)占據(jù)16 bit空間的字段,因而窗口最大為 65535字節(jié),當(dāng)接收方告訴發(fā)送方一個(gè)大小為0的窗口時(shí),將完全阻止發(fā)送方的數(shù)據(jù)發(fā)送。
  • 只有當(dāng)URG標(biāo)志置1時(shí)緊急指針才有效,緊急指針是一個(gè)正的偏移量,和序號(hào)字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。簡單來說,本TCP報(bào)文段的緊急數(shù)據(jù)在報(bào)文段數(shù)據(jù)區(qū)域中,從序號(hào)字段開始,偏移緊急指針的值結(jié)束。

抓包分析

使用wireshark抓包工具分析:

圖片

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

    關(guān)注

    8

    文章

    1337

    瀏覽量

    78863
  • 字節(jié)
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    13683
  • apr
    apr
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    6457
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 計(jì)算機(jī)通信與網(wǎng)絡(luò):3.8TCP報(bào)文段首部結(jié)構(gòu)

    TCP計(jì)算機(jī)基礎(chǔ)
    Mr_haohao
    發(fā)布于 :2022年10月31日 04:12:15

    [5.3.1]--5.3TCP報(bào)文段首部格式

    計(jì)算機(jī)網(wǎng)絡(luò)
    jf_75936199
    發(fā)布于 :2023年03月14日 21:36:34

    SYN Flood攻擊的原理是什么?如何實(shí)現(xiàn)呢

    隨便設(shè)置,但盡量不要太小。校驗(yàn)和檢驗(yàn)的范圍包括首部和數(shù)據(jù)兩部分,在計(jì)算校驗(yàn)和時(shí),要在 TCP 報(bào)文段前面加上 12 字節(jié)的偽首部。 偽首部
    發(fā)表于 07-19 14:40

    LWIP TCP報(bào)文基礎(chǔ)知識(shí)及其LWIP中TCP協(xié)議的實(shí)現(xiàn)

    首部只有 20 個(gè)字節(jié),具體見上圖。在 LwIP 中,報(bào)文段首部采用一個(gè)名字叫 tcp_hdr 的結(jié)構(gòu)體進(jìn)行描述。PACK_STRUCT_
    發(fā)表于 10-18 14:54

    無線鏈路的TCP性能問題及其改善

    介紹了無線鏈路上的TCP性能問題和相關(guān)的工作。提出了一種改進(jìn)從移動(dòng)主機(jī)到固定網(wǎng)絡(luò)方向TCP性能的方案,在基站處設(shè)置TCP代理來監(jiān)視在無線鏈路上丟失的TCP
    發(fā)表于 02-27 16:08 ?28次下載

    icmp報(bào)文和ip報(bào)文分析

    . ICMP允許主機(jī)或路由報(bào)告差錯(cuò)情況和提供有關(guān)異常情況。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,但I(xiàn)CMP不是高層協(xié)議,而是IP層的協(xié)議。通常ICMP報(bào)文被IP層或更高層協(xié)議(TCP或UDP)使用。一些ICMP報(bào)文把差錯(cuò)
    發(fā)表于 11-03 09:09 ?9824次閱讀
    icmp<b class='flag-5'>報(bào)文</b>和ip<b class='flag-5'>報(bào)文</b><b class='flag-5'>分析</b>

    tcp報(bào)文格式詳解

    TCP(Transmission ControProtocol)傳輸控制協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。TCP報(bào)文TCP層傳輸?shù)臄?shù)據(jù)單元,也稱為
    發(fā)表于 12-08 11:11 ?3.2w次閱讀
    <b class='flag-5'>tcp</b><b class='flag-5'>報(bào)文</b>格式詳解

    基于網(wǎng)絡(luò)編碼的TCP協(xié)議傳輸系統(tǒng)

    方對(duì)原始TCP報(bào)文段編碼,在接收方解碼,并針對(duì)網(wǎng)絡(luò)實(shí)時(shí)丟失率調(diào)整編碼報(bào)文段的發(fā)送冗余,以達(dá)到向TCP層掩蓋丟失的目的;同時(shí)加入處理器共享技術(shù),該技術(shù)旨在用一個(gè)合適的初始速率來代替
    的頭像 發(fā)表于 02-20 07:48 ?4983次閱讀
    基于網(wǎng)絡(luò)編碼的<b class='flag-5'>TCP</b>協(xié)議傳輸系統(tǒng)

    tcp數(shù)據(jù)包接口封裝的介紹

    TCP報(bào)文格式 TCP協(xié)議有著自己的數(shù)據(jù)包格式,這里把TCP的數(shù)據(jù)包稱為報(bào)文段(segment),TCP
    的頭像 發(fā)表于 03-22 09:39 ?3343次閱讀
    <b class='flag-5'>tcp</b>數(shù)據(jù)包接口封裝的介紹

    淺析C++基礎(chǔ)語法之計(jì)算機(jī)網(wǎng)絡(luò)中傳輸層(TCP&amp;UDP)

    ③可靠交互 ④全雙工通信 ⑤面向字節(jié)流 TCP 如何保證可靠傳輸: ①確認(rèn)和超時(shí)重傳 ②數(shù)據(jù)合理分片和排序 ③流量控制 ④擁塞控制 ⑤數(shù)據(jù)校驗(yàn) TCP 報(bào)文結(jié)構(gòu)
    的頭像 發(fā)表于 10-26 10:07 ?1371次閱讀
    淺析C++基礎(chǔ)語法之計(jì)算機(jī)網(wǎng)絡(luò)中傳輸層(<b class='flag-5'>TCP</b>&amp;UDP)

    詳解TCP報(bào)文的頭部結(jié)構(gòu)

    和兩個(gè)端口號(hào)。一個(gè)TCP連接通常分為三個(gè)階段:連接、數(shù)據(jù)傳輸、退出(關(guān)閉)。通過三次握手建立一個(gè)鏈接,通過四次揮手來關(guān)閉一個(gè)連接。當(dāng)一個(gè)連接被建立或被終止時(shí),交換的報(bào)文段只包含TCP頭部,而沒有數(shù)據(jù)。
    的頭像 發(fā)表于 05-05 15:08 ?6548次閱讀

    如何解釋TCP報(bào)文的內(nèi)容

    TCP協(xié)議有著自己的數(shù)據(jù)包格式,這里把TCP的數(shù)據(jù)包稱為報(bào)文段(segment),TCP報(bào)文段封裝在IP數(shù)據(jù)報(bào)中發(fā)送,
    的頭像 發(fā)表于 08-31 09:12 ?2577次閱讀

    TCP是如何實(shí)現(xiàn)可靠傳輸 HTTP與HTTPS的區(qū)別

    數(shù)據(jù)偏移(占4字位):數(shù)據(jù)部分的起始位置離報(bào)文段起始位置的距離,就是報(bào)文首部的長度,單位是4字節(jié),所以4位能表示最大值是十進(jìn)制的15,就是15 x 4字節(jié) = 60字節(jié),TCP報(bào)文首部
    發(fā)表于 11-21 21:38 ?782次閱讀

    TCP和UDP分別是什么 TCP和UDP協(xié)議各有什么特點(diǎn)

    TCP 四次揮手的最后一步,客戶端進(jìn)入 TIME_WAIT 狀態(tài),需要等待一段時(shí)間再進(jìn)入 CLOSED 狀態(tài)。等待時(shí)間通常是兩個(gè)最大報(bào)文段生命周期,即 2MSL,這是為了確保服務(wù)器端能夠收到客戶端發(fā)送的最后一個(gè) ACK 報(bào)文
    的頭像 發(fā)表于 08-09 12:34 ?4168次閱讀

    基于TCP應(yīng)用層協(xié)議

    ; 我們把攜帶RST標(biāo)識(shí)的稱為復(fù)位報(bào)文段 SYN: 請(qǐng)求建立連接; 我們把攜帶SYN標(biāo)識(shí)的稱為同步報(bào)文段 FIN: 通知對(duì)方, 本端要關(guān)閉了, 我們稱攜
    的頭像 發(fā)表于 11-11 11:23 ?852次閱讀
    基于<b class='flag-5'>TCP</b>應(yīng)用層協(xié)議