news 2026/6/7 17:07:33

揭秘 Socket 缓冲区与数据封装

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
揭秘 Socket 缓冲区与数据封装

一、 两个“替身”:监听与通信描述符的内核差异

虽然lfd(监听) 和cfd(通信) 都是文件描述符,它们在内核里对应的缓冲区功能却大相径庭。

1. 监听描述符 (Listening FD)

  • 读缓冲区用来存“人”的。当有客户端发起连接(完成三次握手)时,内核会把这个连接请求放进读缓冲区队列里。
    • accept()的本质,就是从这个读缓冲区里取出一个连接请求。
    • 如果读缓冲区为空,accept()就会阻塞(发呆)。
  • 写缓冲区基本不用。内核主要用它来自动回复三次握手中的握手包,应用层不需要关心。

2. 通信描述符 (Communication FD)

  • 读缓冲区用来存“信”的。对方发来的数据(如 “Hello”)会先存在这里。
    • read()的本质,就是从这个读缓冲区里把数据拷贝到你的程序变量里。
  • 写缓冲区用来存“草稿”的
    • write()的本质,就是把你的数据拷贝到这个写缓冲区里。只要拷贝完成,write()就返回成功,此时数据可能还在本机,并没有发出去!

二、 数据的“奇幻漂流”:Write 与 Read 的真相

很多初学者认为write就是直接把数据发给对方,这是错的。

真实流程

  1. 发送方调用write(fd, "hello")
  2. 数据从用户空间拷贝到内核写缓冲区
  3. write函数返回(任务结束)。
  4. 操作系统内核在后台悄悄地把写缓冲区的数据打包,通过网卡发出去。
  5. 数据经过互联网到达接收方的网卡。
  6. 接收方内核把数据拆包,放入内核读缓冲区
  7. 接收方调用read(fd, buf),数据从内核读缓冲区拷贝到用户空间。

结论:程序员其实是在操作“缓冲区”,而不是直接操作“网络”。


三、 数据的“穿衣与脱衣”:封装与解封装

数据在网络上传输,就像寄快递,需要一层层打包。

  1. 应用层(你写的代码):只有核心数据"Hello"
  2. 传输层(TCP/UDP):加上TCP头(源端口、目的端口等)。
  3. 网络层(IP):加上IP头(源IP、目的IP等)。
  4. 链路层(以太网):加上帧头/帧尾(MAC地址)。

当数据到达目的地后,会进行反向的解封装(脱衣),最后你的read()函数读到的,又是最纯净的"Hello"。这一过程完全由系统自动完成。


四、 代码实战:验证缓冲区的存在

为了证明write只是把数据写进缓冲区(而不是等对方收到才返回),我们设计一个实验:

  • 服务器:故意偷懒,连上后睡 5 秒再读数据。
  • 客户端:连上后立刻发送数据。

预测:如果write是直连对方的,客户端应该会卡住 5 秒。如果write只是写缓冲区,客户端应该立刻打印发送成功,尽管服务器还没读。

1. 慢吞吞的服务器 (slow_server.c)

#include<stdio.h>#include<unistd.h>#include
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 21:50:16

AI万能分类器对比评测:与传统分类算法效果对比

AI万能分类器对比评测&#xff1a;与传统分类算法效果对比 1. 选型背景与评测目标 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;文本分类是构建智能客服、舆情监控、内容推荐等系统的核心任务。传统分类方法依赖大量标注数据和模型训练流程&#xff0c;开发周…

作者头像 李华
网站建设 2026/6/6 20:57:25

PyNifly:Blender中革命性的游戏模组开发解决方案

PyNifly&#xff1a;Blender中革命性的游戏模组开发解决方案 【免费下载链接】PyNifly Export/Import tools between Blender and the Nif format, using Bodyslide/Outfit Studios Nifly layer. Supports Skyrim LE, Skyrim SE, Fallout 4, Fallout New Vegas, Fallout 76, an…

作者头像 李华
网站建设 2026/6/5 23:53:50

GoldHEN作弊管理器终极指南:零基础玩转PS4游戏修改

GoldHEN作弊管理器终极指南&#xff1a;零基础玩转PS4游戏修改 【免费下载链接】GoldHEN_Cheat_Manager GoldHEN Cheats Manager 项目地址: https://gitcode.com/gh_mirrors/go/GoldHEN_Cheat_Manager 还在为复杂的游戏修改而烦恼吗&#xff1f;GoldHEN作弊管理器为你带…

作者头像 李华
网站建设 2026/5/30 16:17:12

RISC-V在DCS系统中的集成方案:项目应用解析

RISC-V 如何重塑工业控制&#xff1f;一个化工厂 DCS 改造项目的实战解析 在一座大型化工厂的中央控制室内&#xff0c;几十个反应釜正按照预设工艺平稳运行。操作员轻点鼠标&#xff0c;某条产线的温度曲线便实时跃然屏上——这看似寻常的一幕背后&#xff0c;却隐藏着一场悄然…

作者头像 李华
网站建设 2026/6/3 17:02:11

Windows效率革命:Flow Launcher全方位操作指南

Windows效率革命&#xff1a;Flow Launcher全方位操作指南 【免费下载链接】Flow.Launcher :mag: Quick file search & app launcher for Windows with community-made plugins 项目地址: https://gitcode.com/GitHub_Trending/fl/Flow.Launcher 在数字化工作环境中…

作者头像 李华
网站建设 2026/6/5 23:55:07

如何用语音控制桌面?UI-TARS智能助手带你体验未来交互

如何用语音控制桌面&#xff1f;UI-TARS智能助手带你体验未来交互 【免费下载链接】UI-TARS-desktop A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language. 项目地址: https://gitcode.com/Gi…

作者头像 李华