- 博客(25)
- 收藏
- 关注
原创 深入链路层:报文 MAC 传输原理与 ARP 欺骗、中间人攻击全解析
在 TCP/IP 四层模型中,数据链路层位于,是主机与局域网通信的核心桥梁,它屏蔽了底层物理介质的差异,为网络层提供。把网络层传下来的 IP 数据包,加上帧头、帧尾封装成,交给物理层发送;接收时则剥离帧头帧尾,取出 IP 数据包上交网络层。数据链路层只负责之间的数据传输,不关心跨网段路由,只关心 “下一跳是谁”。使用标识网卡设备,实现局域网内的精准寻址,这也是它与网络层 IP 地址的最大区别。通过校验和、CRC 等机制检测传输错误,部分协议还支持重传、滑动窗口等机制保证传输可靠性(如以太网只检错不纠错)
2026-04-12 00:34:56
409
1
原创 吃透 TCP 核心原理:从握手挥手到滑动窗口与拥塞控制
TCP报文头部结构详解与连接管理机制 摘要:TCP报文由20-60字节的头部和应用层数据组成,头部包含源/目的端口号、序号/确认号、标志位、窗口大小等关键字段,实现可靠传输控制。通过三次握手建立连接(SYN、SYN+ACK、ACK)和四次挥手断开连接(FIN、ACK、FIN、ACK),确保通信可靠性。流量控制采用滑动窗口机制,窗口大小=min(接收方窗口,拥塞窗口),通过动态调整发送速率避免缓冲区溢出。TCP还提供校验和、紧急指针等功能保障数据传输的完整性和优先级处理。
2026-04-07 18:41:47
819
2
原创 【Linux】序列化与反序列化——网络计算器的实现
摘要:本文探讨了TCP字节流传输的困境及解决方案。由于TCP无消息边界特性,导致数据粘包/拆包问题,同时跨平台传输面临字节序、内存对齐等兼容性问题。文章提出使用序列化与反序列化技术,特别是JSON格式,来解决这些问题。通过构建Request/Response类实现结构化数据封装,采用"长度前缀+分隔符"方式确保消息边界,最终实现了一个分层解耦的网络计算器系统,包含通信层、协议层和业务计算层,有效解决了网络通信中的数据完整性和跨平台问题。
2026-03-20 11:52:17
411
3
原创 【Linux】网络编程基础—套接字
本文系统介绍了套接字编程的基本概念和实现方法。主要内容包括:1. 套接字基础概念和工作原理;2. TCP/UDP协议特性对比,TCP提供可靠连接,UDP注重传输效率;3. 网络编程核心结构体sockaddr及其派生类;4. UDP编程接口(socket/bind/sendto/recvfrom)及实现流程;5. TCP特有接口(listen/accept/connect/send/recv)和通信流程。文章通过示例代码详细展示了UDP和TCP服务端/客户端的完整实现过程,涵盖了字节序转换、地址绑定、数据收发
2026-03-17 22:40:58
983
5
原创 【Linux】网络基础——协议与网络传输基本原理
摘要:计算机网络的发展源于计算机间高效通信的需求,从最初的物理介质传输演变为全球互联基础设施。其本质是分布式系统总线,通过协议分层实现模块化通信。局域网依靠MAC地址进行设备识别和数据转发,而跨网传输则通过IP地址和路由器实现数据接力传递。TCP/IP协议栈将复杂的OSI模型简化为四层结构,通过封装/解包机制实现分层协作。整个网络通信过程遵循"MAC负责本地送达,IP负责目标定位,路由负责指路"的原则,以逐跳转发方式完成数据传输。这种分层架构和接力机制构成了互联网的核心运行原理。
2026-03-06 18:18:17
1826
4
原创 【Linux】单例模式与线程池(含实战代码)
摘要:单例模式是确保类仅有一个实例的设计模式,分为饿汉式(启动时创建)和懒汉式(首次调用时创建)。饿汉式线程安全但可能浪费资源,懒汉式更常用但需加锁保证线程安全。文章还介绍了线程池的池化技术,通过预创建和复用线程提升效率,并展示了结合单例模式的线程池实现,包括线程封装、锁机制、条件变量和任务队列管理。代码示例演示了如何创建线程安全的单例线程池,实现任务的生产消费模型。
2026-03-05 11:48:10
605
3
原创 【Linux】程序持久化运行记录——日志<含基础封装实战代码>
本文介绍了一个基于C++17的通用日志模块设计,采用策略模式、RAII机制和流式拼接三大核心思想。该模块支持控制台和文件两种输出方式,通过智能指针自动管理资源,使用互斥锁保证线程安全。日志内容包括时间、级别、进程ID、文件名和行号等信息,支持任意类型数据的流式拼接。实现上利用析构函数自动触发日志写入,避免了手动刷新操作。模块提供简洁的宏定义接口,便于在项目中快速集成和使用。
2026-03-03 20:14:54
420
3
原创 【Linux】线程同步——信号量及其实战代码
信号量(Semaphore)是一种灵活的同步机制,通过计数器实现对多份共享资源的精细化管控,解决了互斥锁"非0即1"二元模式的局限性。POSIX标准提供了sem_init()初始化、sem_wait()阻塞申请、sem_trywait()非阻塞申请、sem_timedwait()限时申请、sem_post()释放资源以及sem_destroy()销毁等核心接口。信号量可配置初始资源数量,支持多线程/进程间的复杂同步场景,当计数器初始值为1时即等价于互斥锁。示例代码展示了信号量从初始化、使
2026-02-26 21:30:00
1255
2
原创 【Linux】生产者-消费者模型及条件变量
摘要:生产者-消费者模型通过互斥锁和条件变量解决多线程同步问题。该模型维护三种互斥关系(生产者间、消费者间、生产者与消费者间),两种角色(生产者、消费者)和一个共享数据空间。条件变量使线程在条件不满足时阻塞等待,避免无效轮询。代码实现时需注意"伪唤醒"问题,应将if判断改为while循环确保安全。文中展示了基于队列的封装实现,包含任务分发功能,通过互斥锁保证线程安全,条件变量实现高效通知机制,最终构建出稳定的生产者-消费者系统。
2026-02-23 17:47:03
762
3
原创 【Linux】线程同步——互斥锁
多线程环境下if条件判断可能失效的原因分析及解决方案。通过抢票程序示例说明,当多个线程并发访问共享变量count时,由于if判断和count--操作不具备原子性,在判断后线程切换可能导致票数变为负数。这源于临界资源访问的非原子性操作。解决方法是引入线程互斥机制,使用pthread_mutex_t互斥锁保护临界区,确保同一时刻只有一个线程执行临界区代码。文章详细介绍了互斥锁的静态和动态初始化方法,以及加锁解锁的实现原理,通过硬件级原子交换指令保证操作的原子性。优化后的程序有效解决了数据竞争问题,但会降低执行效
2026-02-22 00:15:15
1004
2
原创 【Linux】线程初步——线程概念以及接口认识
本文介绍了线程的核心概念及其在Linux系统中的实现。线程作为轻量级执行单元,与进程的主要区别在于:进程是资源分配单位,线程是调度执行单位。线程共享进程资源(如虚拟地址空间),但拥有独立执行上下文和栈空间,这使得线程切换开销远小于进程切换。文章详细分析了线程的优缺点,并提供了Linux线程编程接口(pthread_create、pthread_join等)的使用示例。特别指出Linux通过轻量级进程(LWP)实现线程,底层使用clone()系统调用控制资源共享。线程虽能提升并发性能,但也带来编程复杂度增加、
2026-02-12 23:54:29
1079
4
原创 【Linux】深入解剖页表——分页式存储
理解了的本质后,我们便能清晰认知到:每个进程都拥有一段独属于自身的连续地址空间。不同于实际存储数据的物理内存,这段连续的虚拟地址空间更像是一张划定好范围的 “大饼”—— 仅作为进程内存访问的统一地址框架,并不承担实际的数据存储功能。真正的存储还需要在物理内存实现,那么从虚拟内存到物理内存就需要进行映射——因此就产生了页表。
2026-02-08 23:24:15
869
2
原创 【Linux】进程信号(下半)
文章摘要:本文系统讲解了Linux信号机制,包括信号产生(硬件异常/操作触发、软件主动发送)、保存(未决/阻塞信号集位图结构)和递达处理(默认/忽略/自定义三种方式)。重点分析了硬件与软件触发的区别、信号位图存储特性、终止类型(Term与Core的区别),并介绍了sigprocmask、sigpending等关键系统调用的使用。通过实验演示了信号阻塞与解除过程,特别探讨了SIGCHLD信号在默认忽略与显式忽略时对僵尸进程处理的不同影响,为Linux进程间通信和异常处理提供了实践指导。
2026-02-07 22:00:53
791
2
原创 【Linux】中断 —— 操作系统的运行基石
操作系统通过中断机制实现高效资源管理:硬件中断(如键盘输入)由外设触发,通过中断控制器唤醒CPU处理任务;时钟中断由CPU内置时钟源定期触发,用于进程调度和时间管理。系统核心是一个死循环,无任务时CPU进入低功耗状态。软中断(如系统调用)允许用户态程序通过指令(int 0x80/syscall)主动陷入内核态。进程故障也会触发中断,内核在返回用户态前会检查并处理信号,形成"无穷符号"状的状态切换流程。这种中断驱动架构使操作系统能在能耗与性能间取得平衡。
2026-02-07 01:27:08
1366
2
原创 【Linux】进程信号(上半)
Linux信号机制解析:Ctrl+C如何终止进程 摘要: 本文深入解析了Linux信号机制,以Ctrl+C终止进程为例,阐述了信号的工作原理。信号是内核通知进程的一种异步通信方式,具有延迟性和可配置性。文章介绍了62种信号类型,重点分析了SIGINT(2)信号的特点及处理方式。通过signal()接口,进程可以自定义信号处理函数,但SIGKILL(9)和SIGSTOP(19)信号无法被捕获。
2026-02-05 22:39:22
1009
3
原创 【力扣hot100】双指针从easy到hard
本文通过力扣hot100中的四道题目,展示了双指针算法的应用和优化思路。首先在"移动零"问题中,通过双指针将时间复杂度从O(N²)优化到O(N);其次在"盛水容器"问题中,利用双指针和贪心思想高效求解;接着在"三数之和"问题中,结合排序和双指针解决重复问题;最后在"接雨水"问题中,展示了前后缀数组和双指针两种优化方法。这些案例体现了双指针算法在降低时间复杂度和简化问题上的重要作用,适用于各类数组操作问题。
2026-02-04 01:08:59
1024
2
原创 【Linux】动静态库原理及制作
文章摘要:本文系统讲解了编程中库的概念与使用原理。首先阐述了库的本质是经过验证的可复用代码集合,分析了从源代码到可执行文件的完整编译链接过程。重点对比了动静态库的核心区别:静态库在链接时合并到可执行文件中,而动态库在运行时加载。详细介绍了动静态库的制作方法,包括ar命令创建静态库、gcc的-fPIC选项生成位置无关码的动态库,以及解决库路径问题的多种方案。通过反汇编和ldd等工具验证了动静态库的不同链接机制,为开发者深入理解库的底层原理提供了实践指导。
2026-01-31 20:16:02
910
3
原创 【Linux】磁盘与Ext系列文件系统
即可精准找到目标存储位置。这就是磁盘经典的三维物理寻址方式 ——CHS 寻址,由柱面、磁头、扇区三个维度共同构成,层层缩小寻址范围,实现对磁盘任意扇区的精准定位。
2026-01-29 20:01:27
1570
2
原创 【Linux】进程间通信与进程池构建
在Unix/Linux系统编程中,fork()是创建子进程的核心利器:它通过复制父进程地址空间生成独立的子进程,凭借进程间的完全隔离性,既能避免数据资源被污染(比如子进程崩溃不会牵连父进程),又能让多个子进程被调度到不同CPU核心,最大化利用多核资源。但纯粹的fork()多进程模型有个明显短板——子进程只能机械执行预设代码后退出,父进程与子进程之间缺乏灵活的协同能力,无法实现“父进程分发任务、子进程处理任务”的动态交互。而管道(pipe)的出现,恰好完美弥补了这一缺陷,成为多进程间高效通信的经典方案。
2026-01-27 20:17:33
1296
5
原创 【Linux】文件系统与基础IO
函数原型 int open(const char *pathname, int flags, ... /* mode_t mode */);open用于在内核层打开或创建指定路径的文件,参数包含文件路径、打开模式(如只读 O_RDONLY、只写 O_WRONLY、读写 O_RDWR,创建文件需附加 O_CREAT)及文件权限(创建时生效,如 0644),返回唯一的文件描述符(fd,整数)作为后续操作标识;
2026-01-25 22:37:14
1252
1
原创 【Linxu】进程替换与自制Shell命令行解释器
1、getenv (const char *name):读取环境变量,参数为变量名,返回值指针(成功)/NULL(失败),用于获取用户名、PWD/HOSTNAME 环境变量;2、putenv (char *string):设置环境变量,参数为 "NAME=VALUE" 格式字符串,返回 0(成功)/ 非 0(失败),用于注册自定义环境变量数组;
2026-01-24 20:22:46
958
6
原创 【Linux】虚拟地址空间
首先我们以一张图来展示linux机器(以32位为例)虚拟地址空间分布方式,虚拟空间大小为4GB也就是2^32个地址,其中用户空间大小为3GB,内核空间爱你大小为1GB。用户空间由低地址(0x00000000)到高地址(0xBFFFFFFF)的空间排布结构如图所示,内核空间主要用于存放进程PCB以及内核代码数据等,并且区别于用户空间,内核空间为所有进程共享。
2026-01-18 13:59:44
771
1
原创 【Linux】环境变量与main()函数参数
PATH是系统查找可执行程序的目录列表,ls 等指令的目录在其中所以不用./;HOME是当前用户的家目录,就是它的简写;USER记录当前登录用户名;PWD是终端当前所在目录。这些变量就像系统的基础说明书,程序读取它们就能获取系统和用户的关键信息。Linux 中所有可执行程序的真正入口函数都不是 main (),而是_start 函数,main () 只是 C/C++ 编译器为我们封装的应用层入口,gcc 会自动链接启动代码,由_start 调用 main ();
2026-01-10 19:14:25
1312
4
原创 【Linux】进程切换与调度
进程优先级指的是进程得到CPU资源的先后顺序,进程优先级的存在可以让操作系统公平地对每个进程进行资源分配,将有限的CPU资源最大化合理利用。
2026-01-04 20:45:30
1231
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅