- 博客(107)
- 收藏
- 关注
原创 【Linux网络】多路转接poll
摘要:本文介绍了I/O多路复用机制poll的作用与实现原理,重点分析了poll相较于select的优势,包括参数不重置、无文件描述符数量限制等特性。文章通过代码示例展示了如何使用poll改写select服务器,包括初始化pollfd数组、事件派发逻辑以及连接管理器的实现。poll通过分离events和revents字段,解决了select的参数重置问题,并支持更高并发连接数,适用于服务器程序高效管理多路I/O的场景。
2025-12-22 12:36:35
545
21
原创 远程控制软件使用体验分享:2025年个人实测记录
本文分享了2025年七款主流远程控制软件的实测体验,包括ToDesk、向日葵、RayLink等。根据实测结果,ToDesk适合日常办公,向日葵配套硬件丰富,RayLink画质出众,网易UU远程优化游戏体验,RustDesk支持自建服务器,AnyDesk轻量快速,TeamViewer稳定但限制较多。文章从连接速度、画质表现、功能特点等方面对比分析,并针对办公、设计、游戏等不同场景给出选型建议,强调备用方案和数据安全的重要性,为个人用户选择远程控制工具提供实用参考。
2025-12-18 13:09:29
554
9
原创 【Linux网络】多路转接select
本文详细介绍了select函数的核心定位和用法。select是一种I/O多路复用机制,用于监控多个文件描述符的状态变化,当任意文件描述符就绪时通知应用程序。文章解析了select函数的参数和返回值,并通过位图机制说明用户与内核的交互流程。最后,通过改写基于TCP的EchoServer示例,展示了如何使用select处理监听套接字的读事件就绪(新连接到达)。理解select有助于掌握更高效的I/O多路复用技术如epoll。
2025-12-16 21:59:00
601
29
原创 【Linux网络】五种IO模型与非阻塞IO
摘要:五种I/O模型及其核心概念 本文通过钓鱼的生动比喻,系统阐述了五种I/O模型的核心差异。I/O操作本质包含"等待"和"拷贝"两个阶段,其中等待时间往往占据主要比重。阻塞I/O(专注等待)、非阻塞I/O(轮询检查)、信号驱动I/O(事件通知)、多路复用(批量监控)和异步I/O(全权委托)分别对应不同的效率优化策略。特别强调同步I/O与异步I/O的关键区别在于用户进程是否参与I/O过程,而阻塞/非阻塞则关注等待时的线程状态。多路复用技术(如select)通过单次系统
2025-12-12 19:59:24
1738
34
原创 【Linux网络】数据链路层
以太网(Ethernet)”代表的是一整套通信技术规范,用于指导设备在局域网(LAN)中如何互相通信。这就像普通话是一种“语言标准”,来自不同地方的人只要都说普通话,就能交流。因此,你可以用以太网标准组建家庭网络、公司网络,甚至数据中心网络,它们都是不同的“具体网络”,但都遵循以太网标准。数据链路层(如:帧格式、MAC地址、链路访问控制等)部分物理层内容(如:网线种类、接口、拓扑结构、速率等)换句话说,以太网 = 一套规则,而不是一个实际存在的网络。以太网的核心工作机制:CSMA/CD。
2025-12-05 17:47:23
1608
35
原创 【Linux网络】网络层IP协议
文章摘要: 本文深入解析了TCP/IP协议栈中传输层(TCP)与网络层(IP)的协作机制。IP层负责数据包的寻址和路由(主机到主机),提供“尽力而为”的传输;TCP层通过连接管理、重传等机制确保可靠性(进程到进程)。IP协议通过子网划分实现高效路由,其头部包含版本、分片控制、TTL等关键字段,而子网划分通过分层设计(如“网络号+主机号”)优化路由效率,减少广播域。路由的本质是跨子网转发数据,运营商通过规划网络结构实现目标主机的快速定位。
2025-12-02 17:59:45
1076
44
原创 【Linux网络】传输层协议TCP——一文彻底搞定TCP协议
TCP协议是一种面向连接的可靠传输协议,其核心机制包括确认应答、序列号、流量控制等。TCP报文头包含源/目的端口、序列号、确认号、控制标志等关键字段,通过数据偏移字段实现报头与有效载荷的分离。TCP通过确认应答机制确保历史消息的可靠性,但无法保证最新消息的100%可靠。典型通信过程中,发送方发送带序列号的数据报文,接收方返回确认序号(Ack=Seq+1)进行应答。TCP利用序列号和确认机制实现数据排序、去重和可靠传输,并通过窗口大小进行流量控制。
2025-11-24 09:00:00
1385
47
原创 【Linux网络】传输层协议UDP
摘要 本文主要介绍了计算机网络传输层的核心概念和UDP协议。传输层负责进程间通信,通过端口号标识不同应用。端口号分为知名端口(0-1023)和动态端口(1024-65535)。文章探讨了进程与端口绑定的两个关键问题:一个进程可绑定多个端口,但一个端口通常只能被一个进程绑定,除非使用特殊技术(如SO_REUSEADDR)。 UDP协议采用8字节固定首部,包含源/目的端口、长度和校验和字段。其核心特点是:无连接、不可靠传输和面向数据报。UDP无真正发送缓冲区,数据直接交给网络层;接收缓冲区则暂存到达的数据包,若
2025-11-17 09:00:00
2389
48
原创 【Linux网络】HTTP明文传输不安全?HTTPS协议来解决
HTTPS是在HTTP基础上引入SSL/TLS加密层实现的安全通信协议。文章首先介绍了HTTPS的基本概念和特点,包括加密传输和身份验证。然后重点讲解了加密的必要性,通过"运营商劫持"案例说明明文传输的风险。文章详细对比了对称加密(DES、AES等)和非对称加密(RSA)的区别,解释了数据摘要和数字签名的原理。最后分析了单独使用对称或非对称加密的局限性,为后续HTTPS混合加密机制的讲解做铺垫。全文通过技术原理与实例相结合的方式,系统阐述了HTTPS保护网络通信安全的核心机制。
2025-11-13 21:03:21
1039
43
原创 【Linux网络】应用层协议HTTP
HTTP协议摘要(150字) HTTP(超文本传输协议)是互联网核心应用层协议,定义了客户端与服务器通信规则。其发展历经多个版本:HTTP/0.9(1991)仅支持GET方法;HTTP/1.0(1996)引入头部和多种内容类型;HTTP/1.1(1999)通过持久连接提升性能;HTTP/2(2015)采用二进制分帧和多路复用优化传输;HTTP/3(2022)基于QUIC协议解决TCP队头阻塞。核心特点包括无状态、请求/响应模型和明文传输(HTTPS实现加密)。URL作为资源定位标识,包含协议、主机、路径等组
2025-11-08 19:33:10
1923
49
原创 【Linux网络】进程间关系与守护进程
本文介绍了如何使服务器进程在关闭终端后持续运行的关键概念。首先解释了进程组的概念,指出进程组是一个或多个进程的集合,组长进程的PID与PGID相同。接着阐述了会话的概念,会话包含多个进程组,会话ID(SID)即会话首进程的PID。重点说明了如何通过setsid()创建新会话,使进程脱离终端控制。最后讨论了控制终端的作用及其与会话、进程组的关系,包括前台/后台进程组的区别,以及终端信号的处理机制。这些知识为构建后台持续运行的服务器进程奠定了基础,解决了XShell关闭导致服务中断的问题。
2025-10-29 23:46:18
969
60
原创 【Linux网络】定制协议
本文实现了一个基于自定义协议的网络计算器,通过JSON序列化/反序列化结构化数据。主要步骤包括:1) 定义Request/Response结构体封装计算请求和结果;2) 使用JSONCPP实现数据的序列化和反序列化;3) 设计协议处理粘包问题,采用"长度\r\nJSON数据\r\n"的格式封装报文;4) 实现协议解析功能,确保完整报文的提取。该方案解决了TCP流式协议中的粘包问题,为网络通信提供了可靠的数据传输框架。
2025-10-25 22:45:46
1307
50
原创 【Linux网络】应用层自定义协议
本文介绍了应用层网络通信中的关键概念和技术要点。首先阐述了应用层协议的本质是程序间通信的格式约定,重点讲解了结构化数据的序列化与反序列化过程,对比了JSON、XML、Protocol Buffers等常见方案的优缺点。其次通过网络计算器案例,说明了自定义协议的设计思路。文章还深入分析了TCP全双工通信的原理,指出其基于独立的发送/接收缓冲区实现双向传输。最后详细介绍了Jsoncpp库的使用方法,包括JSON数据的序列化与反序列化操作,并提供了具体代码示例。全文围绕网络通信中的数据格式转换和传输机制展开,为理
2025-10-22 19:54:14
1144
50
原创 【Linux网络】封装Socket
文章摘要:本文介绍了如何使用模板方法模式封装Socket编程,通过抽象基类定义网络编程的核心系统调用为纯虚函数,并实现TCP/UDP服务的模板方法。具体子类TcpSocket继承基类,封装了socket创建、绑定、监听等操作,通过多态机制调用基类模板方法完成网络服务搭建。代码示例展示了如何将系统调用封装为面向对象的形式,提高代码复用性和可维护性,为后续网络编程提供统一的接口规范。
2025-10-19 18:16:51
1306
43
原创 【Linux网络】Socket编程:TCP网络编程
本文介绍了基于TCP协议的网络编程实现,重点讲解了TCP服务器初始化的三个关键步骤:socket创建、bind绑定和listen监听。与UDP不同,TCP需要listen系统调用来建立连接队列,这是由TCP面向连接的特性决定的。文章通过代码示例展示了如何封装InetAddr类来简化地址处理,并对比了TCP和UDP在通信方式上的本质差异:TCP类似电话通话需要建立连接,而UDP则像寄送明信片无需连接。最后解释了为什么UDP不需要listen而TCP需要,为后续深入学习TCP协议打下基础。
2025-10-12 20:48:04
1294
62
原创 【Linux网络】Socket编程:UDP网络编程实现ChatServer
上篇文章我们实现了英译汉的网络字典,客服端向服务端发送英文,服务端接收数据后回调处理,将翻译后的中文再转发给客户端,这其实和EchoSever一样都是一对一的网络通信。我们也可以实现多个客户端之间进行网络通信,通过服务端将一个客户端发送的消息转发给所有客户端,这样大家都能够看到你发的消息,以此来达到一个简易聊天室的效果。所以我们服务端在处理数据时就不再是简单的进行翻译了,而是要实现一个可以路由转发的功能。
2025-09-29 20:29:18
1090
49
原创 【Linux网络】Socket编程:UDP网络编程实现DictServer
本文基于网络通信实现了一个英译汉网络字典服务。文章分为两部分:网络通信和字典类实现。在网络通信部分,通过UDP协议传输数据,并使用回调函数处理翻译请求。字典类采用哈希表存储预加载的英文-中文词对,支持从文件加载字典并处理错误格式。翻译功能通过查询哈希表实现,未找到单词时返回None;。该方案实现了基本的网络字典功能,后续可扩展为更复杂的翻译服务。
2025-09-27 14:52:38
1002
49
原创 【Linux网络】Socket编程:UDP网络编程实现Echo Server
在上篇文章中,我们已经铺垫了一些前置知识,这一篇文章我们就来实现UDP网络编程,实现一个Echo Server,就是客户端给服务端发送一条消息,服务端接收后,再转发给客户端,回显出来。
2025-09-23 20:56:18
2793
49
原创 【Linux网络】Socket编程预备
本文介绍了Socket编程前需要掌握的基础概念。首先说明IP地址标识主机唯一性,但数据最终需要交付给进程,因此引入端口号来标识进程。端口号范围划分为知名端口号(0-1023)和动态分配端口号(1024-65535)。文章解释了端口号与进程ID的区别,并通过10086客服热线的比喻帮助理解。随后介绍了socket概念,即IP+Port的组合,用于标识互联网中的唯一进程。传输层的TCP和UDP协议分别是有连接可靠传输和面向数据报的无连接协议。最后讲解了网络字节序的概念及其转换函数,确保不同主机间的数据正确传输。
2025-09-19 20:44:42
1019
45
原创 【Linux网络】网络传输基本流程
摘要:TCP/IP协议与网络通信原理 TCP/IP协议是解决远距离通信的核心方案,通过分层模型处理数据格式化、可靠性、寻址和路径选择等问题。其本质是一套标准化的“国际物流体系”,包含物理层、数据链路层(MAC地址)、网络层(IP路由)、传输层(TCP/UDP可靠性)和应用层(数据解析)。协议分层源于问题本身的层次性,各层独立解决特定问题。操作系统通过实现相同的协议栈实现跨平台通信,协议本质是双方共识的结构化数据类型。局域网(如以太网)通过MAC地址和交换机直接通信,无需路由器,类似教室内的对话机制。MAC地
2025-09-17 11:56:47
1164
38
原创 【Linux系统】单例式线程池
本文介绍了线程池的设计与实现。首先阐述了线程池的核心概念,即通过预先创建线程并复用它们来降低资源消耗、提高响应速度。随后详细讲解了固定大小线程池的具体实现,包括任务队列管理、线程同步机制(互斥锁和条件变量)以及优雅退出策略。文章还探讨了单例模式在线程池中的应用,比较了饿汉式和懒汉式实现,并采用双重检查锁定机制确保线程安全。最后分析了线程安全与可重入性的关系,以及STL容器和智能指针的线程安全性问题。通过实际代码示例展示了线程池的完整实现过程,包括任务提交、线程调度和资源释放等关键环节。
2025-09-13 18:46:28
1495
42
原创 【Linux系统】日志与策略模式
日志等级枚举(LogLevel):定义日志级别工具函数LevelToStr和核心Logger类:管理日志策略和生成日志消息内部类LogMessage:构建和输出单条日志全局对象和宏:简化用户接口。
2025-09-10 16:36:14
1503
42
原创 【C++】IO库
C++标准库通过继承家族类体系实现灵活高效的IO操作,主要包含控制台IO、文件IO和字符串IO三大类。核心设计结合模板与继承,支持char和wchar_t两种字符类型,通过basic_istream/basic_ostream等基类模板派生具体流类。流状态管理通过goodbit、eofbit等状态位实现错误处理,缓冲区机制提升IO性能。文件流支持二进制/文本模式读写,字符串流提供数据序列化功能。这种设计实现接口一致性、代码复用和扩展性,开发者可统一使用<<和>>运算符进行各种IO操作
2025-09-08 22:21:44
1188
39
原创 【Linux系统】POSIX信号量
本文对比了POSIX信号量和SystemV信号量的区别,总结了POSIX信号量的核心操作函数,并演示了如何将其应用于环形队列的生产者-消费者模型。POSIX信号量更轻量级、跨平台,支持线程和进程同步,而SystemV信号量主要用于复杂进程同步。文章详细介绍了信号量的初始化、P/V操作等核心函数,并通过环形队列示例展示了信号量如何协调生产者和消费者的同步。在多线程环境下,需要注意信号量和互斥锁的正确使用顺序:先获取信号量再加锁,以避免死锁。信号量特别适合管理可拆分资源,而互斥锁则适用于需要整体独占的资源场景。
2025-09-05 19:31:15
941
29
原创 【Linux系统】线程同步
本文介绍了多线程编程中的条件变量机制及其应用。首先分析了互斥量的局限性,即仅保证线程安全而不保证公平性,导致单线程垄断资源的问题。随后详细讲解了条件变量的工作原理和核心函数,包括pthread_cond_wait的原子性操作特性。重点阐述了生产者-消费者模型的实现,通过阻塞队列平衡生产和消费速率,并解释了条件变量必须配合互斥量使用的原因。文章还提供了条件变量的封装实现,展示了如何构建线程安全的阻塞队列,并分析了虚假唤醒等关键问题。最后通过代码示例演示了单生产单消费和多生产多消费场景下的正确同步机制。
2025-09-04 16:59:19
1072
26
原创 【Linux系统】线程互斥
本文介绍了多线程编程中的互斥量(Mutex)机制。主要内容包括:1. 共享变量访问问题:多个线程并发操作共享变量会导致数据竞争,出现不可预测的结果;2. 互斥量解决方案:通过互斥锁确保临界区代码的原子性执行,介绍了静态和动态初始化方法;3. 互斥量实现原理:基于硬件提供的原子交换指令实现;4. RAII风格的互斥锁封装:通过构造/析构函数自动管理锁的生命周期,确保异常安全。文中通过售票系统示例演示了如何使用互斥量保护共享资源,解决数据不一致问题。
2025-08-31 20:35:10
1116
31
原创 【Linux系统】线程控制
POSIX线程(pthreads)是Linux系统实现的多线程编程标准,通过glibc库提供线程管理功能。核心内容包括:线程创建(pthread_create)需指定线程函数和参数,编译时需链接-lpthread;线程终止可通过return、pthread_exit或pthread_cancel实现;资源回收通过pthread_join(可连接线程)或pthread_detach(分离线程)完成。线程管理采用"先描述后组织"策略,通过线程控制块(TCB)维护线程状态,并与内核协作实现真正
2025-08-29 23:01:08
2614
30
原创 【Linux系统】线程概念
本文深入探讨了线程的核心概念及其在Linux系统中的实现与管理。线程作为进程内的执行单元,共享进程资源但拥有独立调度上下文,其核心特性包括并发性、独立性和轻量级资源管理。文章详细分析了线程与进程的关系,指出线程是调度的基本单位而进程是资源分配的基本单位,并通过内存分页机制解释了操作系统如何高效管理物理内存。同时,文章对比了线程的优缺点,强调多线程编程在性能提升和资源利用上的优势,也指出了同步复杂性和健壮性降低等挑战。最后,通过Linux中进程与线程的资源共享与独占分析,揭示了线程作为轻量级进程的本质,并澄清
2025-08-26 18:06:41
796
28
原创 【Linux系统】进程信号:信号的处理
本文深入探讨了Linux信号处理机制及其与操作系统内核的交互。主要内容包括: 信号生命周期:从硬件/软件产生、内核保存(未决信号集)到递达处理的完整流程,涵盖默认、忽略和自定义三种处理方式。 内核实现原理:重点分析信号捕捉的八步流程,包括用户态-内核态切换、栈帧构建、sigreturn系统调用等核心机制,以及可重入函数的设计要求。 操作系统驱动模型:揭示时钟中断如何推动系统调度,通过中断向量表统一处理硬件异常、系统调用等事件,展现"中断驱动"的OS架构本质。 安全隔离机制:详细解析用户态
2025-08-23 20:28:42
1403
35
原创 【Linux系统】进程信号:信号的产生和保存
本文深入介绍了Linux系统中的信号机制,主要内容包括: 信号基本概念 信号是进程间异步通信机制,用于通知特定事件 信号处理三阶段:产生、未决和递达 信号分为普通信号(1-31)和实时信号(34-64) 信号产生方式 系统调用:kill、raise、abort等 硬件异常:如除零错误、段错误等 软件条件:如管道破裂、定时器到期等 信号保存机制 内核通过三张表管理信号: 处理动作表:定义信号处理方式 阻塞表:记录被屏蔽的信号 未决表:记录已产生但未处理的信号 信号集操作函数:sigemptyset、sigad
2025-08-21 17:39:49
1018
22
原创 【Linux系统】进程间通信:System V IPC——消息队列和信号量
本文介绍了SystemV IPC中的消息队列和信号量机制。消息队列允许进程通过内核维护的队列交换结构化消息,包含消息类型和内容,具有持久性、容量限制和权限控制特性。信号量本质是受保护的整型变量,通过PV原子操作实现资源互斥访问和进程同步,包含阻塞机制和等待队列管理。文章详细分析了两者的工作原理、内核数据结构(msqid_ds和semid_ds)和系统调用接口,并与共享内存进行对比,阐述了三者在SystemV IPC中的协同关系。最后解释了操作系统通过"先描述再组织"方式统一管理IPC资源
2025-08-18 15:59:54
1341
25
原创 【Linux系统】进程间通信:System V IPC——共享内存
共享内存:高效进程间通信机制 共享内存是SystemV IPC中最高效的进程间通信方式,允许多个进程直接访问同一块物理内存区域,消除了数据拷贝开销。 核心优势: 零拷贝通信:进程直接读写内存,无需内核中转 高性能:速度比管道快5-20倍 支持双向通信和多进程并发访问 关键实现: 通过shmget创建共享内存段 使用shmat将内存映射到进程地址空间 直接通过指针访问共享数据 需配合信号量等同步机制 注意事项: 必须手动实现进程间同步 生命周期独立于创建进程 需正确设置权限防止安全风险 共享内存适合大数据量、
2025-08-17 00:01:12
1188
20
原创 【Linux系统】进程间通信:命名管道
本文介绍了命名管道的概念及其在进程间通信中的应用。首先分析了匿名管道的局限性(仅限亲缘进程、单向通信等),进而引出命名管道的优势:通过文件系统路径实现任意进程间通信。文章详细说明了命名管道的创建方法(命令行和程序内创建)、操作规则(阻塞/非阻塞模式)以及与匿名管道的区别。重点阐述了命名管道的打开规则,包括不同模式下(O_RDONLY/O_WRONLY)结合O_NONBLOCK标志的行为差异。最后通过C++代码示例展示了如何封装命名管道类,实现无亲缘关系进程间的单向通信,包含管道创建、读写操作和资源回收的完整
2025-08-06 18:22:20
1471
29
原创 【Linux系统】进程间通信:基于匿名管道实现进程池
本文介绍了基于匿名管道实现的进程池技术。进程池通过预创建和复用进程来减少创建销毁开销,包含资源进程和管理进程两大核心组件。文章详细阐述了进程池的实现过程:1. 使用Channel类管理管道描述符和子进程PID;2. 通过ChannelManager类统一管理多个管道;3. 在ProcessPool主类中实现进程池的启动、任务分配和回收机制。实现过程中解决了父子进程间文件描述符共享导致的死锁问题,采用轮询方式实现负载均衡,并演示了三种具体任务(日志打印、下载、上传)的调度执行。测试结果显示该进程池能有效管理5
2025-08-05 08:00:00
1038
27
原创 【Linux系统】进程间通信:匿名管道
进程间通信(IPC)是操作系统实现不同进程间数据交换的关键机制。本文系统介绍了IPC的基本概念、发展历史和主要实现方式,重点分析了管道(Pipe)这一最古老的IPC机制。文章首先阐述了IPC的必要性,包括数据传输、资源共享、进程同步等核心功能。随后详细讲解了管道的本质、实现原理和内核机制,包括匿名管道的创建过程、环形缓冲区结构以及读写同步机制。通过代码示例演示了父子进程间通过管道通信的具体实现,并分析了不同读写速度场景下的管道行为。文章还从内核角度深入解析了管道的数据结构和工作原理,包括pipe_inode
2025-08-03 12:25:52
1287
21
原创 【Linux系统】库的制作与原理
文章摘要:本文系统性地介绍了程序编译链接的核心机制与技术细节。主要内容包括:1. 库的分类与使用:详细解析静态库(.a/.lib)和动态库(.so/.dll)的生成方法、链接方式及优缺点对比,说明静态库编译时嵌入而动态库运行时加载的特点。 目标文件与ELF格式:深入分析目标文件(.o)的结构与作用,阐明ELF文件的四种类型及其组成结构,包括程序头表、节头表等关键部分的定位原理。 编译链接流程:完整阐述从源代码到可执行文件的处理过程,包括预处理、编译、汇编、链接等阶段,重点讲解符号解析和地址重定位机制。 加载
2025-07-31 18:06:22
1278
19
原创 【Linux系统】Ext2文件系统 | 软硬链接
这篇文章深入解析了Linux ext2文件系统的架构设计和工作原理。主要涵盖以下内容: ext2文件系统宏观结构:采用模块化设计,将分区划分为多个块组(Block Group),每个块组包含完整的元数据和数据存储结构。 关键组件详解: 超级块(SuperBlock):存储文件系统全局信息 块组描述符表(GDT):管理块组元数据 块位图和inode位图:跟踪数据块和inode使用状态 inode表:存储文件元数据和数据块指针 数据块:实际存储文件内容 文件操作流程: 创建文件涉及inode分配、目录项注册等步
2025-07-28 16:24:19
913
22
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅