- 博客(55)
- 收藏
- 关注
原创 一文读懂IP协议:网段、私有IP、公网IP与分片技术
IP协议是网络通信的基石,它如同互联网世界的“通用邮政系统”。其核心使命是在复杂的网络环境中实现主机之间的逻辑通信。通过为每台设备分配唯一的IP地址,IP协议解决了网络中的寻址问题。同时,它负责将数据包从源主机经过多个路由器的转发,最终送达目标主机,这个过程被称为路由。值得注意的是,IP协议本身提供的是“尽最大努力”的无连接服务,它不保证数据包的可靠送达、顺序或完整性。
2025-12-01 09:26:30
1820
22
原创 解码TCP:如何实现可靠的数据传输
TCP是互联网核心协议之一,工作在传输层,为应用程序提供可靠的、面向连接的通信服务。TCP具备三大核心机制:1. 连接管理:在数据传输前通过“三次握手”建立稳定连接,传输结束后通过“四次挥手”妥善断开连接。2. 可靠传输:采用确认应答、超时重传、序列号等机制,保证每个数据段都能准确送达,并能处理丢包、重复和乱序问题。3. 流量控制与拥塞控制:通过滑动窗口机制调节发送速率,既避免接收方过载,也防止网络出现拥堵,从而保障整体网络的健康与稳定。TCP被广泛应用于网页浏览、文件传输等需要数据完整性的场景中。
2025-12-01 09:26:05
1854
28
原创 用户数据报协议(UDP)详解
UDP(用户数据报协议) 是一种核心的网络传输协议,与TCP相比,它以其简单性和高速性著称。它的工作方式非常简单:直接将数据打包成数据包并从源端发送到目的端,不建立连接,也不提供任何可靠性保证。这意味着它不确保数据包能否到达、是否按序到达或是否重复。正因如此,UDP的开销极小、延迟低、速度快。它非常适合那些更看重传输速度和实时性,而可以容忍少量数据丢失的应用。
2025-11-24 13:28:54
2079
21
原创 HTTP协议核心机制解析
HTTP(超文本传输协议) 是一个无状态的客户端-服务器协议。通常,由Web浏览器等客户端向服务器发起请求,服务器则返回相应的响应,如HTML页面、图片或数据。HTTP协议的核心在于其简单直观的请求/响应模型。由于其无状态的特性,每个请求都是独立的,服务器不会保留之前请求的任何信息。为了构建复杂的交互式Web应用,人们在此基础上发展出了像Cookie/Session等技术。简单来说,HTTP就像是在互联网上传递信息的“通用语言”,确保了浏览器和服务器能够相互理解,从而让我们能够浏览网页。
2025-11-24 13:26:27
1685
29
原创 自定义协议、序列化与守护进程:构建可靠后端服务
本文系统地阐述了构建稳健网络应用的三个核心实践。首先,自定义应用层协议通过定义消息格式与规则,确保了通信两端的有序交互。其次,序列化/反序列化技术将结构化数据转换为便于网络传输的字节流,是实现数据交换的关键。最后,守护进程作为后台运行的服务实体,保障了应用的持续可用性。三者相辅相成,共同构成了开发高性能、高可靠性分布式系统与服务的基础。
2025-10-27 16:40:21
2627
50
原创 Socket编程核心概念详解:IP、端口、TCP/UDP与网络字节序
本文深入解析了Socket编程的四大核心基石:IP地址负责在网络中唯一标识一台设备;端口号则在该设备上标识具体的应用程序进程。TCP和UDP是两种主要的通信协议,前者提供可靠、面向连接的传输,后者则提供高效、无连接的传输。最后,网络字节序(大端序)是不同系统间数据通信时必须遵守的统一格式规则,确保了数据的正确解读。掌握这四者,是理解和编写任何网络应用程序的基础。
2025-10-20 15:53:28
2793
48
原创 网络协议分层:解密TCP/IP五层模型
本文系统地阐述了网络通信的核心概念。协议是设备之间为完成通信而建立的共同规则和标准。TCP/IP协议族是互联网的实际通信标准,其核心功能(如封装、寻址、路由)通常作为服务集成在操作系统内核中,是OS不可或缺的组成部分。网络传输的基本流程则遵循“分层封装”与“逐层解封装”的模型,数据从应用层出发,经过传输层(如TCP段)、网络层(IP包)、网络接口层(帧)的包装,通过物理媒介传输,最终在目标设备被逆向拆解,送达目标应用程序,从而完成一次完整的通信。
2025-10-13 17:05:58
2655
57
原创 Linux之线程池
线程池是提升Linux程序性能的利器,它通过复用固定数量的线程来处理异步任务。但其核心的“生产者-消费者”模型(任务队列 + 工作线程)也潜藏着死锁风险。主要风险源于任务间的隐式依赖。当一个任务(Task A)的执行结果依赖于另一个任务(Task B)时,如果所有线程都在等待类似Task A的依赖任务完成,而Task B因线程耗尽而无法被调度执行,整个线程池就会陷入相互等待的僵局,即池-induced死锁。
2025-09-29 20:03:19
3337
48
原创 线程互斥与同步
本文核心在于阐述多线程编程中解决资源竞争与协作执行的两种基本机制:互斥(Mutex) 与 同步(Synchronization)。互斥:解决对共享资源的竞争访问问题。其核心是“独占”,通过互斥锁(Mutex) 等机制,确保一个线程在访问临界区(共享资源)时,其他线程必须等待,从而防止数据损坏。同步:解决线程间的协作执行顺序问题。当线程需要等待某个条件成立(如数据就绪)才能继续时,需使用条件变量(Condition Variable) 等机制。
2025-09-22 13:56:10
2538
43
原创 线程概念,控制
线程是程序内部的一个独立执行流,是CPU调度的基本单位。它共享进程的大部分资源(如内存),但拥有独立的运行时状态(如栈和寄存器)。线程控制主要包括其创建、执行、同步和销毁。通过互斥锁、信号量等同步机制,解决多个线程并发访问共享资源时可能引发的数据不一致问题,确保程序正确、高效地并发运行。
2025-09-15 16:44:17
2869
51
原创 并发编程的守护者:信号量与日志策略模式解析
信号量、日志与策略模式是构建稳健软件的三大支柱。信号量作为核心同步机制,通过计数器管理多线程对共享资源的访问,有效解决竞态条件,确保数据一致性。日志提供了系统运行的审计追踪,记录状态、警告与错误,是诊断问题和分析行为的关键。策略模式是一种设计模式,它将算法(如不同的日志策略或同步策略)封装成独立对象,使其能相互替换,从而提升系统的灵活性与可扩展性。三者协同工作,共同保障了程序的并发安全、可维护性与可适应变化的能力。
2025-09-08 17:16:44
2619
55
原创 深入Linux内核:IPC资源管理揭秘
在现代操作系统中,进程间通信(IPC, Inter-Process Communication)是实现多进程协同工作的基石。System V IPC 机制是Unix/Linux内核中一套经典且强大的进程间通信工具,主要包括消息队列(Message Queues)、信号量(Semaphores) 和共享内存(Shared Memory)。本文旨在对消息队列和信号量的核心概念进行阐述,并深入剖析内核统一管理这些IPC资源的机制。
2025-09-01 19:25:35
2477
57
原创 信号处理的核心机制:从保存、处理到可重入性与volatile
信号处理就像是程序在执行过程中随时可能被一个“紧急电话”打断。本文系统讲解了处理这个“电话”的全过程:系统如何“保持”这个电话不丢(信号保存),接听后如何“响应”(信号处理)。重点在于,因为这个“电话”随时会来,所以你的响应动作必须格外小心,不能使用那些会被“中途打断”就会出错的函数(可重入函数),并且要用一种特殊方式(volatile)来标记共享数据,防止编译器优化导致“看不到”最新的数据变化。掌握这些是写出稳定、不被信号打断搞崩溃的程序的关键。
2025-08-25 23:00:56
1527
41
原创 程序的“烽火台”:信号的产生与传递
本文深入探讨了操作系统(以Linux为例)中信号(Signal)的产生机制。信号是一种异步通信机制,用于通知进程发生了某种事件。本文系统性地阐述了信号产生的四大主要来源:1)由用户终端通过特殊按键(如Ctrl+C)产生;2)由内核在检测到系统异常(如段错误、除零)时产生;3)由进程通过kill()或raise()系统调用主动产生;4)由软件条件(如定时器 alarm)触发产生。文章旨在通过对信号产生原理的剖析,为读者理解进程间通信和异常处理机制奠定坚实的基础。
2025-08-25 21:33:52
1531
29
原创 通信方式:命名管道
本文深入探讨了Linux/Unix系统中两种主流的进程间通信(IPC)机制:命名管道(FIFO) 与共享内存(Shared Memory)。命名管道作为一种基于流的通信通道,遵循严格的“先入先出”顺序,为进程提供了稳定、有序的数据传输方式,但其通信效率受限于内核缓冲区的拷贝操作,相比之下,共享内存通过映射同一块物理内存至多个进程的地址空间,实现了数据的零拷贝直接访问,从而提供了无与伦比的通信速度。
2025-08-19 21:01:09
1743
23
原创 进程通信:进程池的实现
文章详细阐述了进程池的经典架构,包括主进程(Master)/工作进程(Worker) 的分工协作模式、同时,本文重点分析了实现进程池的关键技术挑战,特别是进程间通信(IPC) 的高效实现方案。
2025-08-19 20:57:27
1287
21
原创 从ELF到进程间通信:剖析Linux程序的加载与交互机制
本文深入解析Linux程序的运行全流程,从ELF(可执行与可链接格式)文件的结构分析开始,详细讲解操作系统如何加载ELF程序到内存(包括程序头、段映射、动态链接等步骤)。随后探讨进程间通信(IPC)的核心机制,如管道、共享内存、消息队列和Socket,分析其底层实现与适用场景。通过结合代码示例和工具(如readelf、strace),帮助开发者理解程序从静态文件到动态执行的完整生命周期,并优化多进程协作效率。适合中高级开发者深入Linux系统编程。
2025-08-11 18:49:56
1757
29
原创 程序员必备技能:Linux 链接与库文件入门指南
本文针对程序员讲解Linux中链接与库文件的核心概念,涵盖静态链接与动态链接的区别、符号解析过程,以及如何创建和使用静态库(.a)与动态库(.so)。通过实际命令示例(如gcc编译选项、ldd依赖检查等),帮助读者掌握库文件的生成、链接及调试技巧,提升程序构建效率与兼容性。适合Linux开发初学者快速理解链接机制与库文件管理
2025-08-11 18:25:17
1676
17
原创 从物理扇区到路径访问:Linux文件抽象的全景解析
本文深入剖析Linux文件系统的层次化抽象设计,从磁盘物理扇区到用户可见文件的完整转换过程。通过分析块设备驱动、文件系统格式(如ext4),揭示inode、dentry等关键概念的协作机制,展现Linux如何通过统一抽象实现"一切皆文件"的设计哲学,为开发者提供文件系统运作机制的完整视角
2025-08-04 21:49:35
1848
22
原创 从exec到Shell:深度解析Linux进程等待,程序替换与自主Shell实现
本文深入解析Linux进程管理中exec系统调用、程序替换机制及进程等待的原理,通过分析进程创建、替换和回收的全流程,揭示Shell环境下的命令执行本质。文章将结合代码实例演示如何利用fork-exec-wait技术链实现简易Shell。
2025-08-04 20:51:42
1584
31
原创 从文件到文件描述符:理解程序与文件的交互本质
本文深入剖析Linux系统中文件描述符的核心机制,解析open/read/write等系统调用,重点探讨文件描述符表的组织方式、与VFS的交互过程。
2025-07-28 10:28:55
2298
28
原创 从fork到exit:剖析Linux进程的诞生、消亡机制
本文深入剖析Linux进程从创建到终止的全生命周期机制,重点解析fork()系统调用的底层实现、写时复制(COW)技术优化、进程地址空间构建,以及进程退出时的资源回收流程。通过分析进程描述符(task_struct)、调度器介入时机、僵尸进程的产生与处理,揭示Linux如何高效管理进程的诞生与消亡。文章还将探讨exit()与wait()的协同机制,以及信号处理、进程组与会话对终止行为的影响,为理解Linux进程管理提供系统性视角。
2025-07-28 10:10:38
1480
41
原创 从env到mm_struct:环境变量与虚拟内存的底层实现
本文深入解析Linux系统中环境变量与进程内存管理的底层机制,其存储结构由environ指针维护。内核通过mm_struct结构体管理进程虚拟地址空间,其中环境变量所在的栈区域受虚拟内存区域(VMA)保护,并采用写时复制(COW)机制优化内存使用。通过分析内核内存管理流程,揭示环境变量在进程初始化阶段的加载机制及其与虚拟内存系统的交互关系,为理解Linux进程启动和运行机制提供理论基础。
2025-07-21 10:31:20
1689
24
原创 Linux进程核心机制:状态、优先级与上下文切换详解
本文深入解析Linux进程管理的三大核心机制:进程状态、优先级调度与上下文切换。首先,详细阐述Linux进程的多种状态(如运行、睡眠、停止等)及其转换条件,揭示内核如何通过状态机模型管理进程生命周期。其次,剖析进程优先级机制,包括静态优先级(nice值)、动态优先级(实时策略),分析内核如何平衡效率与公平性。最后,深入探讨上下文切换的底层流程,帮助开发者理解进程调度的底层原理。
2025-07-21 10:18:34
1816
34
原创 硬件与软件的桥梁:冯诺依曼体系、操作系统和初始进程的深度解析
本文深入解析计算机系统中硬件与软件协同的核心机制,以冯诺依曼体系为起点,揭示其“存储程序”思想如何通过统一的二进制编码弥合硬件与软件的鸿沟。进一步探讨操作系统在其中的关键角色:作为资源管理者,它通过进程调度、内存分配等机制抽象硬件功能;作为服务提供者,它构建了系统调用等接口,使软件无需直接操作硬件。最后,以初始进程(如Linux的init)为例,阐述操作系统如何通过首个用户态进程激活软件生态,完成从硬件上电到多任务环境的跨越。全文通过这三层递进,展现计算机系统自底向上的逻辑连贯性,为理解软硬件交互提供体系化
2025-07-15 08:16:04
1840
48
原创 构建完整工具链:GCC/G++ + Makefile + Git 自动化开发流程
GCC/G++是GNU开源编译器套件,支持C/C++等语言的编译与优化,提供丰富的编译选项(如-O2、-Wall)以生成高效代码。Git作为分布式版本控制系统,用于管理代码变更、分支协作和历史追溯,核心命令包括clone、commit、push等。Makefile则通过定义目标、依赖和编译规则,结合make命令实现自动化构建,提升开发效率。三者结合形成完整的开发工具链:Git管理代码版本,Makefile组织编译流程,GCC/G++完成最终编译,共同支持高效、可维护的软件开发。
2025-07-14 08:57:20
1926
24
原创 从终端到 IDE:Linux 开发工具的全面指南
Linux 为开发者提供了强大而灵活的工具生态,从高效的命令行实用工具到现代集成开发环境(IDE),每一款工具都旨在提升生产力与代码质量。本文将探索经典的文本处理工具(如 grep、sed)、版本控制系统(如 Git)、调试利器(如 gdb),以及高效的代码编辑环境(如 Vim、VS Code),帮助开发者构建流畅、优雅的工作流程。无论是新手还是资深工程师,都能从中发现优化开发体验的实用技巧。
2025-07-09 14:04:00
1694
19
原创 指尖上的魔法:优雅高效的Linux命令手册
在键盘的轻触与终端的闪烁之间,Linux命令以简洁的字符编织出强大的力量。本文带你领略命令行的艺术——从基础的目录漫游到文本的优雅处理,从进程的精准操控到权限的微妙平衡。每一个命令都是通向系统深处的钥匙,每一次敲击都是与机器的高效对话。无论你是初探终端的新手,还是追求极致效率的行者,这里都有值得品味的技巧与智慧。
2025-07-07 21:46:39
1847
34
原创 数据结构之八大排序算法
各位铁子们好啊,博客已经好久没有更新了。今天就来看看新的文章吧。在日常生活中,我们能够发现在许多地方会存在排序的问题。比如学校排名,成绩排名,手机销量排名等等。而常见的排序有八种,我们一起来看看都有哪八种排序算法。
2025-02-10 12:14:41
1834
46
原创 初阶数据结构之队列的实现
QueueNode;//为了降低时间复杂度,增加一个尾指针,同时为了方便维护代码,对两个指针使用结构体进行封装}Queue;
2024-11-23 20:28:24
2026
51
原创 数据结构之带头双向循环链表
有了单链表的基础,要实现这个双向循环带头链表其实并不难。下面我们先来了解一下什么是双向循环带头链表。这就是双向循环带头链表的结构图,可以很清晰的看到,这个链表需要两个指针,一个指向后继结点,一个指向前驱节点,其次还需要一个头结点。只是这个头结点并不需要存储有效数据。//存储的数据类型//链表的定义//指向后继节点//指向前驱节点}LTNode;
2024-11-10 14:34:06
3101
79
原创 初阶数据结构之顺序表的实现
/动态顺序表//顺序表的容量int size;//实际存储数据的个数}SL;typedef int SLDataType 对int进行类型重命名,如果需要存储char类型数据,只需要修改这里的int就可以了。十分的方便,代码也不容易出现错误。
2024-10-25 19:03:27
1751
34
原创 C语言预处理详解
基本语法// 名字 内容100register//为register这个关键字创建一个简短的名字for;;//用更形象的符号来替换一种实现break;case//写case语句的时候自动把break加上//如果定义的stuff过长,可以分成几行写,除了最后一行外,每行的后面都加上一个反斜杠(\续行符)printf。
2024-10-19 15:36:06
779
57
原创 C文件操作
磁盘上的文件就是文件。程序文件数据文件(从文件功能的角度来分类的)。先来搞清楚内存和文件之间的关系。//从流得到字符//成功的话,返回读取到的字符,提升为整型值(ASCII码值)//失败的话或者遇到文件结束标志,发生读取错误,就返回EOFint main()//以写的方式打开文件exit(-1);//写文件ch
2024-10-04 20:28:21
1344
43
原创 C动态内存管理
/返回值类型是void*指针,参数类型是size_t,size是申请内存块的大小,单位是字节//size_t是一个unsigned int类型malloc函数向内存申请一块连续可用的空间,并返回指向这块内存空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针**。如果失败,则返回一个NULL指针,因此malloc函数的返回值一定要做检查。malloc函数的返回类型是void*类型的指针所以malloc函数并不知道开辟空间的类型,使用的时候由使用者自己来决定。
2024-10-02 19:20:19
1610
28
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅