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

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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国际&#…