news 2026/4/18 4:40:59

揭秘 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/4/15 17:53:29

零样本分类标签设计:如何定义有效类别?

零样本分类标签设计&#xff1a;如何定义有效类别&#xff1f; 1. 引言&#xff1a;AI 万能分类器的兴起与挑战 随着自然语言处理技术的不断演进&#xff0c;传统文本分类方法依赖大量标注数据进行模型训练的模式正逐渐被更灵活、高效的方案所替代。在这一背景下&#xff0c;…

作者头像 李华
网站建设 2026/4/15 17:48:04

零样本分类技术解析:StructBERT的预训练优势

零样本分类技术解析&#xff1a;StructBERT的预训练优势 1. 引言&#xff1a;AI 万能分类器的时代来临 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;文本分类一直是核心任务之一。传统方法依赖大量标注数据进行监督学习&#xff0c;但在实际业务中&#xff0c…

作者头像 李华
网站建设 2026/4/16 21:45:07

ResNet18部署案例:教育场景中的物体识别应用

ResNet18部署案例&#xff1a;教育场景中的物体识别应用 1. 引言&#xff1a;通用物体识别在教育场景的价值 随着人工智能技术的普及&#xff0c;通用物体识别正逐步融入教育信息化体系。从智能教学辅助到学生自主探究项目&#xff0c;图像分类能力为课堂带来了全新的互动方式…

作者头像 李华
网站建设 2026/4/16 16:05:45

Mod Engine 2终极指南:5分钟打造专属魂类游戏世界

Mod Engine 2终极指南&#xff1a;5分钟打造专属魂类游戏世界 【免费下载链接】ModEngine2 Runtime injection library for modding Souls games. WIP 项目地址: https://gitcode.com/gh_mirrors/mo/ModEngine2 还在为游戏体验单一而烦恼吗&#xff1f;想要在《艾尔登法…

作者头像 李华
网站建设 2026/4/15 17:54:08

DIY Layout Creator:高效电路设计工具完全指南

DIY Layout Creator&#xff1a;高效电路设计工具完全指南 【免费下载链接】diy-layout-creator multi platform circuit layout and schematic drawing tool 项目地址: https://gitcode.com/gh_mirrors/di/diy-layout-creator 还在为复杂的电路设计软件而头疼吗&#x…

作者头像 李华
网站建设 2026/4/15 17:54:49

AI万能分类器案例分享:电商评论情感分析实战

AI万能分类器案例分享&#xff1a;电商评论情感分析实战 1. 引言&#xff1a;AI万能分类器的现实价值 在电商平台日益激烈的竞争中&#xff0c;用户评论是宝贵的反馈资源。然而&#xff0c;面对每天成千上万条文本评论&#xff0c;人工分类效率低下、成本高昂。传统的机器学习…

作者头像 李华