当前位置: 首页 > news >正文

什么是 Unix Socket?

Unix Socket(通常称为Unix Domain Socket,UDS)是一种仅在同一台主机内部使用的进程间通信(IPC, Inter-Process Communication)机制。它利用文件系统路径作为通信端点,通过内核在本机进程之间高效地传递数据。


一、Unix Socket 的核心概念

定义
Unix Socket 是一种基于 socket 接口、但不经过网络协议栈(如 TCP/IP)的本地通信方式,通信双方必须运行在同一台操作系统上。

本质

  • 属于 socket 家族之一(AF_UNIXAF_LOCAL

  • 通信端点不是 IP + 端口,而是文件系统中的一个路径

  • 数据在内核态直接拷贝,性能优于 TCP


二、Unix Socket 与 TCP Socket 的对比

对比项Unix SocketTCP Socket
通信范围本机进程跨主机
地址形式文件路径(如/var/run/app.sockIP + 端口
协议栈不经过 TCP/IP完整 TCP/IP
性能更高(低延迟、低开销)相对较低
安全性依赖文件权限控制依赖防火墙、认证等
是否可路由

三、Unix Socket 的工作原理

  1. 服务端

    • 创建 socket:socket(AF_UNIX, SOCK_STREAM, 0)

    • 绑定文件路径:bind("/tmp/app.sock")

    • 监听并接受连接:listen()/accept()

  2. 客户端

    • 创建 socket

    • 连接到该文件路径:connect("/tmp/app.sock")

  3. 数据传输

    • 使用read/writesend/recv

    • 数据在内核中直接在进程之间传递


四、Unix Socket 的两种主要类型

1. SOCK_STREAM(流式,类似 TCP)

  • 面向连接

  • 保证顺序、可靠传输

  • 常用于客户端/服务端模型

示例:

  • MySQL

  • Docker daemon

  • PHP-FPM

2. SOCK_DGRAM(数据报,类似 UDP)

  • 无连接

  • 消息边界保留

  • 适合简单通知、日志类通信


五、典型使用场景(工程实践)

结合你日常接触的服务器/工控场景,Unix Socket 常用于:

1. 高性能本地服务通信

  • Nginx ↔ PHP-FPM

  • Docker CLI ↔ dockerd

  • systemd ↔ 各服务进程

示例:

# php-fpm listen = /run/php/php-fpm.sock
fastcgi_pass unix:/run/php/php-fpm.sock;

2. 本地安全通信

  • 通过文件权限控制访问

srw-rw---- 1 www-data www-data app.sock
  • 非授权用户无法连接


3. 替代 TCP 的本机 RPC

  • 避免端口冲突

  • 降低系统资源消耗

  • 提升吞吐量和响应速度


六、Unix Socket 的优势与限制

优势

  • 性能高

  • 延迟低

  • 安全可控(文件权限)

  • 配置简单,无需端口管理

限制

  • 只能在本机使用

  • 依赖文件系统

  • 跨主机或容器隔离场景下受限(需 volume 挂载)


七、一个最简 C 语言示意(服务端)

int fd = socket(AF_UNIX, SOCK_STREAM, 0); struct sockaddr_un addr = {0}; addr.sun_family = AF_UNIX; strcpy(addr.sun_path, "/tmp/demo.sock"); bind(fd, (struct sockaddr*)&addr, sizeof(addr)); listen(fd, 5);

八、一句话总结

Unix Socket 是一种高效、安全、仅限本机的进程间通信机制,用文件路径代替网络地址,常用于本地服务之间的高性能通信。

http://www.jsqmd.com/news/268623/

相关文章:

  • 大模型体验神器:云端GPU开箱即用,1块钱起随时停
  • 出来年比较轻松吧,25年几乎都是5点准时下班[特殊字符] 这一年我有很多
  • 完整教程:大数据环境下如何维护模型文档:策略与实践
  • DCT-Net教学实验室:计算机视觉课程的云端实践方案
  • 企袖会KeyAction2026引爆AGI 中国AI再扬帆 - 博客万
  • AIGC辅助视觉效果设计
  • Llama3与PyTorch集成实测:云端双镜像快速切换,1小时1块低成本验证
  • PHP vs Python:如何选择?
  • 工业检测难题待解,靠谱的一键闪测仪机构有哪些 - 工业仪器权威说
  • GPEN vs GFPGAN vs CodeFormer实测对比:云端2小时搞定选型
  • 2026必备!自考论文神器TOP9:AI论文工具深度测评与推荐
  • JS vs jQuery:核心差异解析
  • 深度测评!8款AI论文软件助你搞定毕业论文
  • GESP认证C++编程真题解析 | 202312 六级
  • ISTA 6-AMAZON.COM-SIOC标准解析:包装测试的核心价值
  • 手把手教你五分钟打造属于自己的AI编程智能体!
  • 2026西安专业新生儿起名机构推荐|高端家庭专属取名服务 - 品牌2025
  • 航空行业信息网络安全现状和需求
  • 密封性测试仪技术研究与应用分析报告
  • 【人工智能】Cowork 是 Anthropic 推出的一个测试版桌面工具,专门为非开发人员设计,用于自动化文件和任务管理。
  • SpringBoot注解参数校验,给代码穿上“防弹衣”
  • 筑牢智慧职教实训底座,无人机电力巡检 AI+虚仿 创新实训室特色架构
  • 每天一个网络知识:什么是MSTP?
  • 氯离子计哪家性价比高?从上海仪电雷磁产品线看国产高性价比选择 - 品牌推荐大师1
  • 抖音团购入驻避坑指南:优选服务商合集 - 野榜数据排行
  • 预测一下,微软最终会推出一款以 Windows 为主题的 Linux 发行版
  • GESP认证C++编程真题解析 | 202312 五级
  • str与[u8]区别
  • seaweedFs集群部署
  • 基于Python的外卖配送分析与可视化系统的设计与实现