linux 中 socket 文件是什么?和 socket 编程有什么关系?和 TCP/IP 协议栈又有什么关系?

news/2025/12/9 0:02:01/文章来源:https://www.cnblogs.com/heyongshen/p/19323999

linux 中 socket 文件是什么?和 socket 编程有什么关系?和 TCP/IP 协议栈又有什么关系?

要理解 linux 中的 socket 文件,以及什么是socket 编程,首先需要知道两个知识点:

1、什么是进程,进程名又是什么?

2、进程之间是如何通信的?



问题1:什么是进程,以及进程名是什么

进程是一个过程,简单理解就是将存放到外部存储(硬盘)上的内容加载到内部存储(内存中),然后经 CPU 的处理来完成某个操作,这个完整的过程就叫做进程。

linux 中常说的进程名其实就是指启动进程的可执行文件的名称。例如:我再终端执行 sleep 100;也可以理解为我启动了一个 sleep 进程,这个进程名就叫作 sleep 100;



问题2:进程之间是如何通信的

进程间通信方式很多,比如管道、共享内存、消息队列等,这里讨论的是通过 TCP/IP 协议栈 的通信方式。

从 TCP/IP 五层模型上理解,进程位于应用层,假设 A进程 要和 B进程 通信,按照网络中的封装和解封装来说。A进程产生的数据报文会先经过传输层、网络层、数据链路层封装,然后通过物理层以比特流(0和1)的形式传递给进程B。

进程B要收到这个数据,在物理层收到后,经数据链路层、网络层、传输层一路解包,然后根据特定的应用层协议指定的格式来解析数据,从而就得到了A发送的数据。

所以即使是同一个主机上的两个进程通信,也需要经过TCP/IP协议栈(这个就是主机实现数据链路层、网络层、传输层相关功能的内置程序)处理,也就是两个进程之间通信,双方都要开放一个端口来实现端到端传输。



所以为了优化同一个主机上不同进程之间的通信,也就有了 socket 文件

在 Linux 中,如果两个进程使用 TCP socket(使用 TCP 协议的 socket 编程) 通信,即使位于同一台主机,也要经过传输层和网络层,传输层使用端口标识上层应用层的进程,网络层使用IP地址来寻址,也就是找到和哪个主机通信。所以传统通信模式下,需要知道对方的:IP + 端口

但是同一个主机上的不同进程间通信,大家都是在同一个主机上的,数据还要通过TCP/IP五层模型,还要经过TCP/IP协议栈来处理,效率不高,所以就出现了 socket 文件。

linux 中 socket 文件的文件类似为s,有了 socket 文件后,同一主机上的socket 文件通信就不走协议栈了,而是将 socket 文件作为通信地址,以前是需要 IP+端口 才能找到对方,现在直接通过 socket 文件就找到对方了。

这种方式因为减少了协议栈封装/解包,而且服务端还不用暴露端口了,就更高效、更快、更安全。



知道了 socket 文件,那什么是 socket 编程?

socket 是操作系统在 TCP/IP 协议栈之上提供的一组通信接口,它屏蔽了网络协议处理的底层细节,应用程序不需要实现 TCP、UDP、IP 等协议,只需要通过 socket API 函数就可以使用网络通信功能。

例如:开发一个服务需要监听 8080 端口,只需要调用 socke提供的接口即可,无需自己实现 TCP 连接建立、重传机制、ACK、拥塞控制,以及网络层寻址等复杂逻辑。



什么是 TCP/IP 协议栈,和 TCP socket 有啥关系?

TCP/IP 协议栈是集成在操作系统内核中的程序代码,作用就是实现网络层、传输层等相关的网络协议(协议栈就是 TCP/IP 协议的具体实现)。例如:TCP 如何三次握手建立连接,IP数据包如何分片、IP如何寻址等。

因为 TCP/IP 协议栈本身就是由操作系统内核实现的,所以一台主机其内部包含完整的 TCP/IP 协议栈。

TCP socket 就是访问 TCP/IP 的接口,因为进程都是用编程语言写的程序嘛,程序的编写者会调用 socket API 来实现网络通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/993739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能座舱的下一站:从“车内大屏”到“全域协同” - 智慧园区

就在10年前,车里能有一块彩色屏幕,就足以被称作“高科技”了。时至今日,智能座舱已然成为新能源汽车比拼的核心战场。然而,行业的竞争似乎走入了一个怪圈:比谁的屏幕更多、更大、更炫。当我们冷静下来思考,智能座…

硬件电子知识(基础篇)

电子元器件 电阻:核心功能:通过自身特性限制电流流动,实现电压分配,消耗电能 具体功能: 限流:LED串联电阻防止电流过大烧毁 分压:模拟电路中拆分电压信号(如传感器输出分压采样) 负载:替代实际负载进行电路调…

每日的小开心

今天课堂上的团队战意外拿到第二名,因为前面的队冒险主义失误了,我们保守主义难得不是第三名,可以多一些课堂分!还有宿舍一起打边炉,可能是我们最后一次了,毕业以后可能很难有时间聚一聚。 今天还吃了个大瓜

揭秘业务逻辑滥用:API安全中“利用游戏规则”的攻击手法

本文深入探讨了API安全中的业务逻辑滥用攻击。它解释了攻击者如何利用API的预期功能逻辑而非技术漏洞,通过绕过支付步骤、操控数据等方式实施攻击,并介绍了Wallarm平台如何通过行为异常检测和规范执行等高级技术进行…

揭秘业务逻辑滥用:API安全中“利用游戏规则”的攻击手法

本文深入探讨了API安全中的业务逻辑滥用攻击。它解释了攻击者如何利用API的预期功能逻辑而非技术漏洞,通过绕过支付步骤、操控数据等方式实施攻击,并介绍了Wallarm平台如何通过行为异常检测和规范执行等高级技术进行…

放弃原容器建立新容器,保存留数据卷且映射

一.以mysql容器为例子1.sudo mkdir -p /home/mysql_data #创建新文件夹2.sudo chown -R 999:999 /home/mysql_data # 将目录所有权设为MySQL容器内使用的用户(通常是999:999) 将 /home/mysql_data 目录及其内部所有…

CommonUI-学习记录

UE官方教程 CommonUI重要特点Common UI 本质上来说就是把UI当成栈,你可以push不同的widget到不同的栈上面。然后栈本身又会存到栈里面,显示最上层的栈元素所包含的元素The Viewport is the base for all input routi…

银行反欺诈day1

1.银行反欺诈系统都运行在那些场景? 区分为实时交易监控和事后分析场景类型 具体场景 风险特征实时交易拦截 网银/手机银行转账POS刷卡消费ATM取现第三方支付(如支付宝/微信快捷支付)开放银行API调用(如代扣) 毫秒…

2025年数控折弯机模具选购参考

在当前钣金加工行业,客户对数控折弯机模具的采购决策日益聚焦于高性价比与价格透明化。随着市场竞争加剧和终端用户成本控制意识增强,模具供应商不仅需提供稳定可靠的品质,还需在价格策略上展现清晰、合理且具竞争力…

Hikvision 考勤机数据提取(3)

同样使用 HTTPDigestAuth import json import binascii import base64 import hashlib import time import requests import argparse import uuid import xml.etree.ElementTree as ET from datetime import datetime…

Hikvision 考勤机数据提取(3)

同样使用 HTTPDigestAuth import json import binascii import base64 import hashlib import time import requests import argparse import uuid import xml.etree.ElementTree as ET from datetime import datetime…

12306爬取基本车次信息(需下载chromedriver)

from selenium import webdriver from selenium.webdriver.common.by import By import re import time import csv import pandas as pd import sys from selenium.webdriver.chrome.service import Service from sel…

微信小程序渗透测试

https://mp.weixin.qq.com/s/hTEjuNHF-k8053nejSZ1Jw

Day14-20251208

本文摘要:介绍了使用IDEA生成JavaDoc文档的详细步骤,包括设置作用域、输出目录、语言编码等参数 列举了常用JavaDoc标签,分为基础信息类、功能说明类和状态标识类三大类 讲解了Java流程控制中的Scanner对象使用,比…

从纯数学到应用AI科学的职业转变

本文讲述了Giovanni Paolini从纯数学研究转向在某中心担任应用科学家的历程,其工作涉及计算机视觉、自然语言处理等机器学习技术,并探讨了数学背景对AI研究的独特价值。从纯数学家到某中心应用科学家 Giovanni Paoli…

Flask集成MCP的AI Agent

基于Flask开发集成MCP Client和MCP Server的Ai Agent.前言 近年来,大量新兴的 AI 相关第三方库都提供了异步接口,有些甚至出于性能考虑仅支持异步调用,例如 MCP SDK。伴随着 Python 异步编程的发展,FastAPI 等框架…

threadDay01

#include <iostream> #include <thread> #include <condition_variable> #include <queue> #include <mutex>std::queue<int> g_queue; std::condition_variable g_cv; std::mute…

大数据数仓设计:分层架构与维度建模 - Binge

引言 大数据数据仓库(数仓)是企业数据管理的核心,用于高效存储、处理和分析海量数据。基于Hive的设计结合了分层架构和维度建模,能提升数据查询性能、可维护性和业务价值。下面我将逐步介绍分层架构的原理、维度建…

2025年折弯机上下模实力厂家推荐榜

近年来,随着智能制造在钣金加工领域的深度渗透,折弯机上下模产品正经历显著的价格结构优化。一方面,高精度、长寿命模具的制造成本因自动化产线普及而逐步降低;另一方面,用户在采购决策中愈发重视“性能与价格比”…

遇到的前端ts语法问题记录 - wuzx

遇到的前端ts语法问题记录const cities = ref([]); //List转指定字段为数组const getRoomList = async () => { const res = await listRoom(roomData);    roomList.value = res.rows; const arr_names = room…