TCP頭部

TCP頭部字段詳解

1. 源端口和目的端口(各16位)

  • 功能:標識發送和接收應用程序

  • 范圍:0-65535(0-1023為知名端口)

  • 技術細節

    • 客戶端通常使用臨時端口(1024-65535)

    • 服務端使用固定端口(如HTTP=80, HTTPS=443)

    • 支持端口復用(SO_REUSEPORT選項)

// Linux內核端口選擇算法 (net/ipv4/inet_connection_sock.c)
int inet_csk_get_port(struct sock *sk, unsigned short snum) {// ... 實現端口自動選擇和沖突處理
}

2. 序列號(32位)

  • 功能:標識發送的數據字節流

  • 初始序列號(ISN):基于時鐘的隨機算法(RFC 6528)

    • 防止序列號預測攻擊

    • 避免舊連接的報文干擾

  • 內核實現

    // Linux ISN生成算法 (net/ipv4/tcp_ipv4.c)
    u32 secure_tcp_seq(__be32 saddr, __be32 daddr,__be16 sport, __be16 dport) {// 使用SipHash加密算法生成
    }
  • 回繞處理:當序列號達到2^32-1時回繞到0

3. 確認號(32位)

  • 功能:期望收到的下一個字節的序列號

  • 累積確認機制:確認號N表示所有小于N的字節已收到

  • 選擇性確認(SACK):通過TCP選項實現非連續確認

4. 數據偏移(4位)

  • 功能:指定TCP頭部長度(以4字節為單位)

  • 計算:頭部長度 = 數據偏移 × 4

  • 范圍:5(最小20字節)到15(最大60字節)

5. 保留位(4位)

  • 必須置0,為未來協議擴展保留

  • 實際使用中可能被實驗性協議使用(需IANA批準)

6. 控制標志(9位)

標志位名稱功能應用場景
URG緊急指針指示緊急數據處理Telnet中斷命令
ACK確認確認號字段有效所有數據傳輸
PSH推送要求立即交付數據實時交互應用
RST重置立即終止連接端口掃描防御
SYN同步建立連接同步序列號三次握手
FIN結束發送方完成數據發送四次揮手

標志組合示例

  • SYN+ACK:連接建立響應

  • FIN+ACK:正常連接終止

  • PSH+ACK:即時數據傳輸

7. 窗口大小(16位)

  • 功能:接收方通告的可用緩沖區大小

  • 流量控制機制:動態調整發送速率

  • 窗口縮放選項:通過選項擴展窗口大小(最高1GB)

    // Linux內核窗口縮放處理 (net/ipv4/tcp_input.c)
    void tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb) {// ... 處理窗口縮放選項
    }

  • 零窗口探測:當窗口為0時發送探測報文

8. 校驗和(16位)


10. 選項字段(可變長度)

選項結構:
+--------+--------+--------+--------+
| Kind   | Length | Data...         |
+--------+--------+--------+--------+

核心選項詳解:

  • 覆蓋范圍:TCP頭部+數據+偽頭部

  • 偽頭部結構

    0      7 8     15 16    23 24    31
    +--------+--------+--------+--------+
    |          source address           |
    +--------+--------+--------+--------+
    |        destination address        |
    +--------+--------+--------+--------+
    |  zero  |  PTCL  |    TCP length   |
    +--------+--------+--------+--------+
  • 計算算法

    uint16_t tcp_checksum(const void *buff, size_t len, in_addr_t src_addr, in_addr_t dest_addr) {uint32_t sum = 0;const uint16_t *ptr = buff;// 偽頭部計算struct pseudo_header psh = {src_addr, dest_addr, htons(IPPROTO_TCP), htons(len)};sum = calculate(&psh, sizeof(psh));// 數據計算while (len > 1) {sum += *ptr++;len -= 2;}if (len > 0) sum += (*ptr) & htons(0xFF00);// 折疊進位sum = (sum >> 16) + (sum & 0xFFFF);sum += (sum >> 16);return (uint16_t)(~sum);
    }

    9. 緊急指針(16位)

  • 功能:當URG=1時,指示緊急數據結束位置

  • 計算:緊急數據結束 = 序列號 + 緊急指針

  • 實際應用:SSH/Telnet的中斷命令(Ctrl+C)

Kind名稱長度功能
0選項結束1選項列表結束
1無操作1選項填充
2最大報文段4協商MSS(通常1460)
3窗口擴大因子3窗口縮放(2^14倍)
4選擇性確認2啟用SACK功能
5SACK塊可變非連續接收的數據塊
8時間戳10RTT測量和PAWS保護
28用戶超時4連接超時設置
29認證可變TCP-AO安全認證

超時重傳為例,假設客戶端(Client)向服務器(Server)發送數據包,但未收到ACK確認。

    場景步驟:

    Client發送數據包(初始傳輸)

    • TCP頭部包含選項字段(如時間戳):
      數據偏移 = 8(頭部總長32字節 = 8 × 4)
      選項字段:時間戳(Timestamp)值 = T1
      序列號(Seq) = 100
      數據 = "Hello"
      
    • 數據包結構:
      | 20字節固定頭部 | 12字節選項(時間戳) | 數據 "Hello" |
      

    Server未收到該包(可能因網絡擁塞丟失):

    • Client在重傳超時(RTO)?后未收到ACK,觸發重傳。

    Client重傳數據包

    數據偏移 = 8(長度不變)
    選項字段:時間戳值 = T2(T2 > T1)
    序列號(Seq)仍為 100(相同數據)
    數據 = "Hello"(不變)
    

    關鍵點分析:

    • 選項長度一致性:重傳時數據偏移值仍為8,表明頭部長度未變(選項字段仍存在)。
    • 選項內容變化:時間戳更新(T1 → T2),幫助計算RTT(往返時間)和重傳延遲。
    • 接收方處理:Server通過數據偏移=8跳過32字節頭部,直接解析數據"Hello"。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/92501.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/92501.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/92501.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    LinkedList與鏈表(單向)(Java實現)

    引入鏈表結構:在ArrayList任意位置插入或者刪除元素時,就需要將后序元素整體往前或者往后 搬移,時間復雜度為O(n),效率比較低,因此ArrayList不適合做任意位置插入和刪除比較多的場景。因此:java集合中又引入…

    網絡--VLAN技術

    目錄 VLAN實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 1、實驗準備 2. VLAN 3. DHCP 自動分配 4、 全網可達驗證 四、實驗步驟 (一)交換機配置- VLAN 創建與接口劃分 (二)路由器配置(R1&#xff0c…

    網絡基礎17--設備虛擬化

    一、傳統MSTPVRRP的不足傳統MSTPVRRP設計:規劃復雜:需要詳細規劃VRRP多實例的Master歸屬、MSTP的VLAN和生成樹實例歸屬,以及IP網段。收斂速度慢:故障恢復速度一般在秒級,VRRP收斂時間至少需要3秒,故障恢復速…

    深入解析Hadoop資源隔離機制:Cgroups、容器限制與OOM Killer防御策略

    Hadoop資源隔離機制概述在分布式計算環境中,資源隔離是保障多任務并行執行穩定性的關鍵技術。Hadoop作為主流的大數據處理框架,其資源管理能力直接影響集群的吞吐量和任務成功率。隨著YARN架構的引入,Hadoop實現了計算資源與存儲資源的解耦&a…

    static 關鍵字的 特殊性

    static 關鍵字的 “特殊性” 主要體現在其與類、對象的綁定關系,以及由此帶來的一些反常規規則,具體如下:生命周期與內存位置特殊靜態成員(變量 / 方法)隨類加載而創建,隨類卸載而銷毀,生命周期…

    win10系統Apache以 FastCGI方式運行PHP

    文件下載及官方網站 VC運行庫Latest下載頁:Latest supported Visual C Redistributable downloads | Microsoft Learnapache httpd官網:Welcome! - The Apache HTTP Server Project下載頁:Apache VS17 binaries and modules downloadphp官網:PHP: Hypertext Preprocessor下載頁…

    MCP與企業數據集成:ERP、CRM、數據倉庫的統一接入

    MCP與企業數據集成:ERP、CRM、數據倉庫的統一接入 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都是我…

    【milvus檢索】milvus檢索召回率

    Milvus中兩種核心查詢方式:暴力搜索(Brute-force Search) 和 近似最近鄰搜索(Approximate Nearest Neighbor, ANN)。 逐一計算相似度:這是暴力搜索,能保證100%找到最相似的向量,但速…

    docker Neo4j

    Day 1 :Docker Desktop 基礎熟悉 運行官方 hello-world 測試: docker -run hello-world 運行 Nginx 體驗容器暴露端口: docker run -d -p 8080:80 nginx -d --detach 以 分離模式 運行容器 -p --publish 設置 宿主機與容器的端口映射。…

    Win10_Qt6_C++_YOLO推理 -(1)MingW-opencv編譯

    先上效果圖: 因為是一個為了嘗試跑通的demo,美觀、功能都先忽略哈。 一、環境 庫版本下載鏈接備注cmakecmake-4.1.0-rc2-windows-x86_64.msihttps://cmake.org/download/make x86_64-15.1.0-release-posix-seh-ucrt-rt_v12-rev0.7zhttps://github.com/…

    day060-zabbix監控各種客戶端

    文章目錄0. 老男孩思想-一個人的背書1. zabbix各種客戶端1.1 Windows Server監控1.2 網絡設備監控1.3 java應用監控1.4 前端監控java程序故障2. 相關項監控3. 思維導圖0. 老男孩思想-一個人的背書 學歷、能力、態度、特長、人品、口碑(身邊的人、領導) …

    OpenCV 官翻 2 - 圖像處理

    文章目錄色彩空間轉換目標色彩空間轉換目標追蹤如何確定要追蹤的HSV值?練習圖像的幾何變換目標變換縮放翻譯旋轉仿射變換透視變換其他資源圖像閾值處理目標簡單閾值化自適應閾值化大津二值化法Otsu二值化算法原理其他資源練習圖像平滑處理目標二維卷積(圖…

    動態路由協議基礎

    一、動態路由協議簡介2.動態路由協議的基本功能二、動態路由協議分類對比項距離矢量(如 RIP)鏈路狀態(如 OSPF)信息來源只聽直接鄰居說收集全網鏈路狀態,自己建 “地圖”計算邏輯鄰居給的距離 1,簡單累加用…

    netstat -tunlp | grep的作用

    ??一、命令整體結構解析??命令由兩部分通過管道符 |連接:netstat -tunlp:核心網絡狀態統計命令,輸出指定類型的網絡連接信息;grep:文本搜索工具,用于過濾 netstat的輸出結果,僅保留符合特定…

    教育數字化革命:低代碼破局與未來展望

    當下,教育領域正經歷前所未有的深刻變革——教育數字化轉型。這并非簡單的技術疊加,而是從教育理念到模式的全方位重塑,已成為推動教育高質量發展、助力我國邁向教育強國的核心驅動力。數字技術正以前所未有的速度和力度,全方位重…

    云服務器磁盤IO性能優化的測試與配置方法

    云服務器磁盤IO性能優化的測試與配置方法在云計算環境中,磁盤IO性能直接影響著應用程序的響應速度和系統整體穩定性。本文將深入解析云服務器磁盤IO性能優化的關鍵技術路徑,從測試方法論到配置調整方案,幫助運維人員突破存儲瓶頸。我們將重點…

    Python Day22 - 復習日

    浙大疏錦行 Pythonday22 本周學習內容主要是有關降維的一些內容以及基本的數組操作: 數組的常見操作以及shape聚類算法的選擇以及常用評估指標、聚類后的結果分析特征篩選方法:方差篩選、lasso等SVD進行降維常見的降維算法:LDA、PCA等

    飛算JavaAI文字需求描述功能:高效驅動項目開發的智能解決方案

    在數字化開發浪潮中,如何將模糊的需求快速轉化為具體的開發指令,是提升項目效率的關鍵環節。飛算JavaAI推出的文字需求描述功能,以自然語言交互為核心,為開發者和項目管理者提供了一套高效、精準的需求轉化與項目管理方案&#xf…

    探索自然語言處理NLP的Python世界

    文本預處理:數據清洗與標準化 在自然語言處理(NLP)的旅程中,文本預處理是至關重要的第一步。原始文本數據往往包含噪聲、不一致性以及各種格式問題,直接影響后續模型的性能。文本預處理旨在將文本轉化為統一、規范的格…

    ECMAScript(簡稱 ES)和 JavaScript 的關系

    ECMAScript(簡稱ES)和JavaScript的關系常常令人困惑。簡單來說:ECMAScript是標準,JavaScript是實現。以下從多個維度詳細解析它們的區別與聯系: 一、定義與核心關系ECMAScript 標準化規范:由ECMA國際&#…