news 2026/7/12 12:20:05

网络传输原理(TCP/IP)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络传输原理(TCP/IP)

将内存中某个地址的数据通过网口发送出去,本质是数据从用户态内存→内核态内存→网卡硬件→物理链路的传递过程,同时伴随TCP/IP 协议栈的逐层封装操作系统 / 硬件的资源调度。以下按 ** 软件层(应用 + 内核)→硬件层(网卡 + 物理层)** 的顺序,拆解完整流程(以 Linux 系统下的 TCP/UDP 发送为例,这是最常见的场景)。

一、应用程序层:发起数据发送请求

  1. 数据准备:应用程序将待发送的数据存放在用户态的内存地址中(比如char buf[] = "hello"对应的内存地址)。
  2. 调用套接字 API:应用程序通过标准的网络套接字(Socket)API(如send()/sendto()/write()),向内核协议栈发起数据发送请求,传入的参数包括:
    • 套接字描述符(标识与目标主机的网络连接);
    • 数据的内存地址和长度;
    • 目标地址(IP + 端口,UDP 需显式指定,TCP 已通过三次握手建立连接)。
  3. 用户态→内核态切换:由于send()系统调用,CPU 会从用户态切换到内核态,执行内核协议栈的对应逻辑(这一步会有少量开销,是用户态与内核态的边界)。

二、内核协议栈层:数据封装与调度(核心步骤)

内核协议栈会对数据进行逐层封装,并完成传输层、网络层、链路层的逻辑处理,具体分为 6 个步骤:

1. 套接字缓冲区(Socket Buffer)处理
  • 内核不会直接读取用户态内存的数据,而是先将数据从用户态内存拷贝到内核态的套接字缓冲区(sk_buff)(这是一次关键的内存拷贝,高性能场景会用sendfile()/mmap()跳过此拷贝);
  • 若数据长度超过缓冲区阈值,会被拆分到多个缓冲区中。
2. 传输层封装(TCP/UDP)
  • UDP 协议(无连接):在数据前添加UDP 头,包含源端口、目的端口、数据长度、UDP 校验和(可由硬件卸载)。
  • TCP 协议(面向连接):
    1. 先检查连接状态(是否已完成三次握手),若未建立则返回错误;
    2. 为数据添加TCP 头,包含源端口、目的端口、序列号、确认号、窗口大小、校验和等;
    3. 执行 TCP 拥塞控制、流量控制(如滑动窗口),决定数据是否可以立即发送;
    4. 将封装后的 TCP 报文放入发送队列。
3. 网络层封装(IP)
  • 协议栈根据目标 IP 地址,通过路由表查找下一跳地址(确定出网卡);
  • 为传输层报文添加IP 头,包含源 IP、目的 IP、协议类型(TCP=6,UDP=17)、IP 长度、TTL、IP 校验和(可由硬件卸载);
  • 若封装后的 IP 报文长度超过网卡的 MTU(以太网默认 1500 字节),则执行IP 分片,将大报文拆分为多个 MTU 大小的 IP 包。
4. 链路层封装(以太网帧)
  • 根据下一跳 IP 地址,通过ARP 协议解析出对应的MAC 地址(若 ARP 缓存中无记录,会先发送 ARP 请求获取);
  • 为 IP 报文添加以太网帧头,包含目的 MAC、源 MAC、帧类型(0x0800=IPv4,0x0806=ARP);
  • 在帧尾部添加CRC 校验码(用于链路层错误检测,可由硬件生成)。
5. 内核→网卡驱动的数据传递
  • 内核将封装好的以太网帧,通过DMA(直接内存访问)机制,从内核缓冲区传递到网卡的硬件缓冲区(NIC Buffer);
    • 注:DMA 无需 CPU 参与,由网卡控制器直接访问内存,大幅提升效率。
  • 网卡驱动程序向网卡硬件发送发送指令,触发网卡开始处理数据。
6. 内核态→用户态切换
  • 数据传递完成后,内核返回发送结果(如发送的字节数),CPU 从内核态切换回用户态,应用程序继续执行后续逻辑。

三、网卡硬件层:物理层信号发送

网卡(包含 MAC 控制器和 PHY 芯片)负责将数字帧数据转换成物理层信号并发送,分为 3 个步骤:

  1. MAC 控制器处理:网卡硬件读取自身缓冲区中的以太网帧,验证 CRC 校验(若硬件生成则跳过),并按照以太网标准进行帧同步处理(添加前导码和帧起始符)。
  2. PHY 芯片处理:MAC 控制器将帧数据传递给 PHY 芯片(物理层),PHY 芯片将数字比特流转换成物理层信号
    • 有线以太网(RJ45):转换成差分电信号(如 1000BASE-T 的 4 对双绞线信号);
    • 光纤以太网:转换成光信号。
  3. 物理链路发送:PHY 芯片通过网线 / 光纤将信号发送到网络中(交换机、路由器等),最终传递到目标主机。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 9:10:58

AI落地六大黄金场景:从营销到政策驱动,附国内及出海成功案例,技术收藏必读

本文详细探讨了AI最有可能率先落地的六大场景:营销与客户运营智能化、生产流程与供应链优化、办公自动化与内部管理提效、垂直行业场景化解决方案、智能硬件与终端应用创新、政策驱动下的普惠化与生态协同。每个场景均分析了功能、实现方式及成功案例(包…

作者头像 李华
网站建设 2026/7/11 5:23:22

前端开发:提示词驱动的全链路

2025 前端开发大变局&#xff1a;从“手写代码”到“提示词驱动”的全链路革命 引言&#xff1a;前端开发的新常态 在 2025 年&#xff0c;如果你还在逐行敲入 <div> 和 handleOnClick&#xff0c;那么你可能正在掉队。前端领域已经进入了**“提示词即开发” (Prompt-a…

作者头像 李华
网站建设 2026/7/11 21:59:57

影刀RPA实战:3步搞定希音客户行为数据提取,效率飙升[特殊字符]

影刀RPA实战&#xff1a;3步搞定希音客户行为数据提取&#xff0c;效率飙升&#x1f680;每天手动整理希音数据浪费3小时&#xff1f;别让低效重复工作偷走你的创作时间&#xff01;今天分享如何用影刀RPA打造智能数据提取机器人&#xff0c;原需半天的任务现在3分钟自动完成—…

作者头像 李华
网站建设 2026/7/10 19:11:53

CTF中Web题目的常见题型及解题姿势,零基础入门到精通,收藏这篇就够了

一、基础知识类题目 考察基本的查看网页源代码、HTTP请求、修改页面元素等。 这些题很简单&#xff0c;比较难的比赛应该不会单独出&#xff0c;就算有应该也是Web的签到题。 实际做题的时候基本都是和其他更复杂的知识结合起来出现。 姿势&#xff1a;恶补基础知识就行 查…

作者头像 李华
网站建设 2026/7/11 5:51:13

测试驱动开发(TDD)的实践与思考

在敏捷开发与DevOps浪潮席卷软件工程的今天&#xff0c;测试驱动开发&#xff08;Test-Driven Development&#xff09;作为一项经典而充满争议的实践&#xff0c;始终占据着质量保障体系的核心位置。对于专业测试人员而言&#xff0c;TDD不仅是开发方法的变革&#xff0c;更是…

作者头像 李华
网站建设 2026/7/11 6:31:53

PySpark实战 - 2.2 利用Spark SQL计算总分与平均分

文章目录1. 实战概述2. 实战步骤3. 实战总结1. 实战概述 本次实战基于 Spark SQL 对 HDFS 上的学生成绩文本文件进行分析&#xff0c;通过 split 函数拆分姓名与各科成绩&#xff0c;利用嵌套查询和聚合计算&#xff0c;实现每位学生的总分与保留一位小数的平均分统计&#xf…

作者头像 李华