<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

tcp報文段首部的結構分析

汽車電子技術 ? 來源: 物聯網IoT開發 ? 作者:杰杰mcu ? 2023-02-14 10:32 ? 次閱讀

TCP報文段首部結構

TCP雖然是面向字節流的,但TCP傳送的數據單元卻是報文段。

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

LwIP中,TCP首部采用一個名字叫tcp_hdr的結構體進行描述,此處用PACK_STRUCT_BEGIN與PACK_STRUCT_END宏定義禁止編譯器對齊,因為在tcp首部中存在某些字段是以1字節對齊的。

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);   /* 序號 */
 6  PACK_STRUCT_FIELD(u32_t ackno);   /* 確認序號 */
 7  PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags);  /* 首部長度+保留位+標志位 */
 8  PACK_STRUCT_FIELD(u16_t wnd);     /* 窗口大小 */
 9  PACK_STRUCT_FIELD(u16_t chksum);  /* 校驗和 */  
10  PACK_STRUCT_FIELD(u16_t urgp);    /* 緊急指針 */
11} PACK_STRUCT_STRUCT;
12PACK_STRUCT_END

圖片

TCP報文段首部(圖片來源《計算機網絡》-謝希仁)

首部固定部分各字段的意義如下:* 每個TCP報文段都包含源主機目標主機的端口號,各占2個字節,用于尋找發送端和接收端應用線程,這兩個值加上I P首部中的源I P地址和目標I P地址就能確定唯一一個TCP連接。

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

抓包分析

使用wireshark抓包工具分析:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1282

    瀏覽量

    78445
  • 字節
    +關注

    關注

    0

    文章

    37

    瀏覽量

    13457
  • apr
    apr
    +關注

    關注

    0

    文章

    11

    瀏覽量

    6434
收藏 人收藏

    評論

    相關推薦

    #硬聲創作季 計算機通信與網絡:3.8TCP報文段首部結構

    TCP計算機基礎
    Mr_haohao
    發布于 :2022年10月31日 04:12:15

    [5.3.1]--5.3TCP報文段首部格式

    計算機網絡
    jf_75936199
    發布于 :2023年03月14日 21:36:34

    TCP報文段首部格式(1)#計算機網絡

    計算機網絡
    未來加油dz
    發布于 :2023年06月02日 20:49:45

    SYN Flood攻擊的原理是什么?如何實現呢

    隨便設置,但盡量不要太小。校驗和檢驗的范圍包括首部和數據兩部分,在計算校驗和時,要在 TCP 報文段前面加上 12 字節的偽首部。 偽首部
    發表于 07-19 14:40

    LWIP TCP報文基礎知識及其LWIP中TCP協議的實現

    首部只有 20 個字節,具體見上圖。在 LwIP 中,報文段首部采用一個名字叫 tcp_hdr 的結構體進行描述。PACK_STRUCT_
    發表于 10-18 14:54

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

    介紹了無線鏈路上的TCP性能問題和相關的工作。提出了一種改進從移動主機到固定網絡方向TCP性能的方案,在基站處設置TCP代理來監視在無線鏈路上丟失的TCP
    發表于 02-27 16:08 ?28次下載

    tcp報文格式詳解

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

    基于網絡編碼的TCP協議傳輸系統

    方對原始TCP報文段編碼,在接收方解碼,并針對網絡實時丟失率調整編碼報文段的發送冗余,以達到向TCP層掩蓋丟失的目的;同時加入處理器共享技術,該技術旨在用一個合適的初始速率來代替
    的頭像 發表于 02-20 07:48 ?4868次閱讀
    基于網絡編碼的<b class='flag-5'>TCP</b>協議傳輸系統

    tcp數據包接口封裝的介紹

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

    TCP字段介紹 TCP 數據包的大小

    的互聯網絡上提供可靠的端到端字節流而專門設計的一個傳輸協議。 TCP字段介紹 源端口和目的端口 各占2個字節,這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接。 序號(seq) 占4個字節,是本
    的頭像 發表于 08-31 16:08 ?1.1w次閱讀

    淺析C++基礎語法之計算機網絡中傳輸層(TCP&amp;UDP)

    ③可靠交互 ④全雙工通信 ⑤面向字節流 TCP 如何保證可靠傳輸: ①確認和超時重傳 ②數據合理分片和排序 ③流量控制 ④擁塞控制 ⑤數據校驗 TCP 報文結構
    的頭像 發表于 10-26 10:07 ?1265次閱讀
    淺析C++基礎語法之計算機網絡中傳輸層(<b class='flag-5'>TCP</b>&amp;UDP)

    詳解TCP報文的頭部結構

    和兩個端口號。一個TCP連接通常分為三個階段:連接、數據傳輸、退出(關閉)。通過三次握手建立一個鏈接,通過四次揮手來關閉一個連接。當一個連接被建立或被終止時,交換的報文段只包含TCP頭部,而沒有數據。
    的頭像 發表于 05-05 15:08 ?5994次閱讀

    如何解釋TCP報文的內容

    TCP協議有著自己的數據包格式,這里把TCP的數據包稱為報文段(segment),TCP報文段封裝在IP數據報中發送,
    的頭像 發表于 08-31 09:12 ?2220次閱讀

    TCP是如何實現可靠傳輸 HTTP與HTTPS的區別

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

    基于TCP應用層協議

    ; 我們把攜帶RST標識的稱為復位報文段 SYN: 請求建立連接; 我們把攜帶SYN標識的稱為同步報文段 FIN: 通知對方, 本端要關閉了, 我們稱攜
    的頭像 發表于 11-11 11:23 ?616次閱讀
    基于<b class='flag-5'>TCP</b>應用層協議
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>