- 博客(24)
- 收藏
- 关注
原创 队头阻塞:一条 TCP,如何拖慢一整个页面?
本文系统解析了网络传输中的队头阻塞(HOL)问题及其演进解决方案,主要内容包括: 概念辨析:区分应用层HOL(HTTP消息排队)和传输层HOL(TCP按序交付),前者源于协议规则,后者由可靠传输机制引发。 协议演进: HTTP/1.1存在应用层串行请求问题,通过多连接缓解 HTTP/2实现多路复用解决应用层HOL,但仍受限于TCP的传输层HOL HTTP/3/QUIC采用流级可靠传输,显著减轻跨流阻塞 实践指导: 识别HOL特征:浏览器瀑布图中排队/停滞现象 优化策略:关键资源预加载、请求合并、CDN加速等
2026-07-30 16:00:00
296
原创 TCP 为什么有时故意跑不快?拥塞控制与滑动窗口一次讲清
摘要: 《计算机网络基础·传输层》第三篇聚焦TCP拥塞控制机制,解释为何网络传输会“忽快忽慢”。关键点包括: **流量控制(rwnd)与拥塞控制(cwnd)**的区别:前者保护接收方缓冲,后者避免网络路径拥塞; 发送窗口受限于min(rwnd, cwnd),通过滑动窗口实现高效流水线传输; 拥塞算法逻辑:慢启动(指数增长)→拥塞避免(线性试探)→丢包时降窗(快速重传/超时恢复); 现代算法差异:CUBIC依赖丢包信号,BBR主动建模带宽与RTT。
2026-07-29 16:00:00
400
原创 TCP 专章:三次握手之后,可靠管道里发生了什么?
《TCP协议详解:从握手到粘包问题》摘要 本文系统讲解TCP协议核心机制与应用实践。三次握手通过SYN/ACK交换建立可靠连接,四次挥手确保双向数据关闭。TCP通过序号确认、超时重传、滑动窗口实现可靠性,并采用流量控制与拥塞控制平衡传输效率。典型问题如粘包(字节流无消息边界)可通过长度前缀协议解决。文章提供Python/C的Echo服务示例,演示连接状态观察(ss命令)和抓包分析(tcpdump),并给出连接超时、CLOSE-WAIT堆积等问题的排查思路。
2026-07-28 05:45:00
398
原创 UDP 专章:不握手的快件——简单、粗暴、好用也易踩坑
本文介绍了UDP协议的基本概念、原理和应用。UDP是一种无连接、尽力而为的传输层协议,具有端口区分、数据报边界清晰、开销小等特点,但不保证可靠传输。文章通过生活类比和分层模型解释了UDP的工作原理,分析了其8字节报头结构和无连接特性带来的影响。常见应用场景包括DNS查询、音视频直播、游戏同步等对实时性要求高的场景。文中提供了Python和C语言的UDP收发程序示例,演示了基本通信和可靠传输模拟实现,并给出问题排查方法和安全注意事项。最后通过对照实验清单帮助读者巩固理解UDP的特性与使用方式。
2026-07-27 06:00:00
824
原创 快递选「挂号」还是「平邮」?传输层一次讲清
文章摘要: 《计算机网络基础》第三章探讨传输层的核心功能与协议选择。传输层负责将数据准确交付到目标程序(通过端口号),并权衡可靠性(TCP)与实时性(UDP)。TCP通过三次握手、序号确认、重传等机制确保可靠传输,但可能因拥塞控制或队头阻塞影响性能;UDP轻量快速,但需应用层处理丢包问题;QUIC基于UDP优化,支持多路复用与连接迁移,适合现代应用(如HTTP/3)。
2026-07-26 17:43:14
285
原创 你每天上网,其实都在「应用层」说话
文章摘要 《计算机网络基础》专栏第三章聚焦应用层协议,解析程序间通信的核心规则。应用层不涉及寻址与传输保障,而是定义消息格式与会话语义(如HTTP请求、DNS解析、TLS加密)。它依托传输层(TCP/UDP)的端口区分服务,常见协议包括: DNS(域名→IP,类似电话簿) HTTP/HTTPS(网页交互,TLS确保安全) WebSocket(长连接实时通信) SSH/DHCP(运维/IP分配)
2026-07-25 22:23:10
260
原创 敲完网址按回车,网页到底怎么冒出来的?
摘要: 本文以「在浏览器输入网址后发生了什么」为主线,拆解了网络请求的完整流程。通过六场「分镜」清晰呈现:1)URL解析(协议/域名/路径拆分);2)DNS查询(域名→IP);3)TCP三次握手建立连接;4)TLS加密认证(证书校验);5)HTTP请求/响应(状态码与资源加载);6)浏览器渲染(网络层终止)。全程由IP寻址和底层链路(以太网/Wi-Fi)支撑。文章提供实用排障指南,如通过dig、curl或浏览器开发者工具定位DNS/TCP/TLS/HTTP各阶段问题,并总结「耗时地图」帮助快速锁定瓶颈。
2026-07-24 16:12:49
393
原创 深入 Linux C/C++ 调试工具之 free(内存余量心里有数)
本文系统介绍了Linux系统中的free命令,包括其功能定位、使用场景、核心原理、常用参数和实战案例。free命令用于查看系统内存和交换分区使用情况,数据来源于/proc/meminfo。文章强调重点关注available列而非free列,因为Linux会利用空闲内存作为缓存。详细解析了内存计算原理、Swap机制和常见误区,并通过10个典型案例展示如何诊断内存泄漏、缓存问题和Swap使用等场景。最后总结了free命令的核心价值:提供整机内存状况概览,需结合其他工具进行深入分析,是内存问题排查的第一步而非终点
2026-07-23 21:48:09
351
原创 断点一设真相现!程序调试必备工具之 gdb,快速入门到精通
本文摘要: 《GDB调试从入门到精通》提供高效学习路线,分为L0入门至L3精通四个阶段,强调实践闭环:编写崩溃小程序,用GDB定位根因并记录命令。GDB是Linux核心调试工具,支持断点控制、内存查看、多线程调试等,需结合-g编译选项。文章详解启动方式、断点设置、数据查看、多线程/进程调试等核心命令,并通过12个案例(如空指针、死锁、条件断点)演示实战技巧。高级内容涵盖脚本化、STL美化打印和远程调试。常见问题解答覆盖优化代码调试、符号缺失等场景。最后总结分层学习要点,附自验收清单。
2026-07-22 23:18:55
1091
原创 深入 Linux C/C++ 调试工具之 objdump(反汇编一眼看懂)
《objdump工具深度解析与使用指南》 摘要:本文系统介绍了Linux环境下二进制分析工具objdump的核心功能与应用场景。作为GNU Binutils的重要组件,objdump能够静态解析ELF格式文件,提供反汇编、段头分析、符号查看等关键功能。文章详细对比了objdump与nm、readelf等相关工具的差异,通过7大典型场景和8个实战案例,演示了如何查看函数汇编、优化对比、源码混排、PLT调用分析等实用技巧。特别针对地址转换、交叉架构、strip影响等常见问题给出解决方案。
2026-07-20 18:30:15
1230
原创 Linux 段错误(Segmentation fault)怎么定位?8 种实战方法从 dmesg 到 ASan/gdb
摘要: Segmentation fault(段错误)是进程访问非法内存地址时触发的SIGSEGV信号,常见于空指针、堆越界、栈溢出等场景。定位需关注四要素:故障地址、指令位置、调用栈及内存操作时间线。核心工具有: ASan(开发首选):实时检测内存越界、UAF等问题,直接定位根因代码; CoreDump+GDB:分析崩溃现场,结合bt full查看完整调用栈与变量; dmesg:解析内核日志中的地址与错误码,快速匹配崩溃点; Valgrind:无侵入检测内存错误,适合无法重编场景。
2026-07-19 13:45:58
1103
1
原创 深入 Linux C/C++ 调试工具之 tiptop(IPC 高低一目了然)
摘要: tiptop是一款基于Linux硬件性能计数器的实时监控工具,类似top但聚焦微架构指标(如IPC、缓存缺失率),帮助开发者分析CPU效率问题。核心功能包括:实时监控进程级性能指标、对比优化效果、排查缓存瓶颈等。其原理通过perf_event_open采集数据,支持交互与批量模式。典型使用场景包括高CPU低吞吐服务分析、多线程伪共享检测等。文章详细介绍了命令参数、实战案例(如计算密集与缓存密集任务对比)及常见问题解答。tiptop与top/perf互补,快速定位性能瓶颈后,可结合perf进行深度剖析
2026-07-19 00:31:21
309
原创 深入 Linux C/C++ 调试工具之 ps(进程快照一眼看清)
本文详细介绍了Linux进程管理工具ps的核心功能与实战应用。全文分为六个部分:首先概述ps作为进程快照工具的特点及与其他工具(top/pgrep等)的对比;其次解析7个典型使用场景,包括确认服务状态、排查僵尸进程、分析多线程程序等;然后深入探讨ps的工作原理,包括/proc数据源、STAT状态解析和线程/僵尸机制;第四部分详解常用参数和输出列定制;第五部分通过C语言demo程序演示7个实战案例;最后解答常见疑问。
2026-07-16 21:55:38
197
原创 深入 Linux C/C++ 调试工具之 ss(套接字状态一目了然)
ss(socket statistics)是iproute2套件提供的套接字统计与查看工具,用于查看本机等套接字的状态、本地/对端地址、进程、队列深度、定时器、内存等信息。ss 是网络连接的「实时透视镜」—— 比netstat更快、信息更全,排查端口占用、连接堆积、CLOSE-WAIT 泄漏时首选。ss 通过 Netlink 快速展示本机套接字状态,是netstat的现代替代。先看 LISTEN/ESTAB/CLOSE-WAIT/TIME-WAIT 分布,再决定查应用还是网络。
2026-07-15 22:33:52
533
原创 深入 Linux C/C++ 调试工具之 top(进程热点一眼掌握)
摘要: top是Linux/Unix系统自带的实时进程与资源监控工具,核心功能包括动态刷新CPU、内存、负载等指标,支持交互排序、筛选进程、调整优先级及终止进程。常用于快速定位高CPU/内存消耗的进程,结合htop、perf、iostat等工具形成完整排查链路。其数据源自/proc文件系统,通过两次采样计算进程CPU占比,界面分为系统摘要(负载、CPU状态、内存)和进程列表(PID、RES、%CPU等)。常用操作包括按P/M/T排序、-H查看线程、-p监控指定进程,以及批处理模式日志记录。
2026-07-14 07:45:00
583
1
原创 深入linux c/c++调试工具之ltrace(库函数无处遁形)
本文介绍了Linux下的动态库函数调用跟踪工具ltrace。ltrace用于监控程序运行时调用的共享库函数(如malloc、fopen等),可显示参数、返回值和耗时信息。与strace(跟踪系统调用)和gdb(调试)相比,ltrace更接近程序员日常使用的API层次。文章详细讲解了ltrace的工作原理(拦截PLT跳转)、常用参数(-e过滤、-c统计、-f跟踪子进程等)和典型应用场景(排查内存泄漏、分析闭源库行为等),并通过多个案例演示了如何使用ltrace进行实际问题排查。
2026-07-13 07:53:54
804
原创 深入linux c/c++调试工具之nm(一眼看穿符号)
摘要: nm工具是GNU Binutils中的符号表查看工具,用于分析目标文件、可执行文件、静态库及内核模块中的符号信息,包括函数、变量名称、类型和地址。核心功能包括排查链接错误(如undefined reference)、验证符号是否导出(动态库/内核模块)、对比strip前后差异、解析C++混淆符号(mangled name)以及静态库符号检索。
2026-07-10 17:48:53
310
原创 深入linux c/c++调试工具之AddressSanitizer(内存越界一跑就现形)
摘要:AddressSanitizer(ASan)是Google开发的内存错误检测工具,集成于GCC/Clang编译器,通过编译时插桩和影子内存机制实时检测多种内存问题。支持堆/栈/全局缓冲区越界、释放后使用、重复释放及内存泄漏等错误类型。使用时通过-fsanitize=address编译选项启用,结合调试信息可精准定位错误位置及调用栈。典型应用场景包括崩溃调试、CI门禁和用户态仿真测试。ASan通过红区隔离和内存毒化技术实现高效检测,性能损耗约2倍,适用于开发调试阶段。
2026-07-09 11:18:15
1184
原创 自研网卡如何接入 DPDK?一篇讲透 PMD 驱动适配开发的实战指南
本文介绍了在DPDK框架下适配PMD(Poll Mode Driver)网卡驱动的完整流程。主要内容包括:1. DPDK与PMD基础概念:DPDK是高速数据面开发工具包,PMD是其用户态网卡驱动实现;2. PMD适配步骤:从编译配置、PCI ID注册、初始化流程到收发包核心函数实现;3. 关键接口开发:详细说明eth_dev_ops中设备信息、队列管理、状态统计等20+个必需接口;4. 应用调用流程:典型DPDK应用对PMD的初始化、配置和使用方法;5. 调试经验:列举编译失败、probe异常、性能问题等
2026-07-08 09:08:55
580
原创 深入linux c/c++调试工具之perf
perf 是 Linux 内核自带的 性能分析工具,基于内核的 perf_events 子系统,可采集 CPU 周期、指令、缓存缺失、分支预测失败、系统调用、函数调用链等事件,用于 定位热点函数、分析 CPU 瓶颈、排查性能退化。perf 跟踪的是 CPU 性能事件和热点函数,回答「时间花在哪些函数/指令上」,而不是「发起了哪些 syscall」。原理是 perf_events 采样/计数,开销通常低于 ptrace 型 strace,适合 短时性能分析,但仍不建议 7×24 全开。
2026-07-07 18:12:23
210
原创 深入linux c/c++调试工具之strace
摘要: strace是Linux下强大的系统调用跟踪工具,用于监控进程与内核的交互(如文件/网络操作、权限检查等)。其核心原理基于ptrace机制,通过拦截syscall和信号实现跟踪。
2026-07-07 16:12:01
317
原创 梳理陌生代码函数调用链,finstrument-functions助你快速破局
文章摘要:GCC/Clang的-finstrument-functions编译选项通过自动在函数入口/出口插入钩子函数,实现运行时调用链追踪。相比传统调试方法(如逐行阅读、gdb单步),它能快速生成完整的函数调用路径图。使用时需实现__cyg_profile_func_enter/exit钩子函数并添加防递归属性,建议配合-g选项将地址转换为可读代码位置。该方法特别适合分析复杂调用关系,但会降低内联优化效率,仅推荐用于调试构建。示例代码演示了如何输出带缩进的调用层级,显著提升代码理解效率。
2026-07-06 18:32:55
559
自媒体人救星:小红书+知乎+头条+百家号+公众号差异化爆款写作 Skill
2026-07-27
短视频AI制作五件套skills:从选题到成片文案一次齐
2026-07-20
【计算机体系结构】基于DMA的高性能数据传输方案:面向FPGA与Linux驱动的描述符环设计及零拷贝优化
2026-07-15
【计算机等级考试】C语言二级备考全攻略:6周复习计划与操作题提分策略设计
2026-07-15
光通信SFF-8431 SFP+模块规范:高速电气与管理接口技术标准
2026-07-14
【网络设备驱动】基于i40e的Intel网卡中断机制源码分析:MSI-X多向量中断处理与NAPI轮询协同设计
2026-07-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅