Switch-Router

Recent Posts

  • 2024-01-15

    linux 内核实现与 rfc 不一致的地方

    本文后续不定时更新SYN 报文是否能携带 payload (不考虑 TCP FastOpen)TCP Fast Open(TFO)TCP ISN 递增速度理解 TCP 初始序号选择(ISN Selection)TCP TIME-WAIT 时间tcp_tw_reuse 的原理和实现TCP MSS 协商Linux内核协议栈中一些关于 TCP MSS 的细节rfc 接收端糊涂窗口综合征 vs 内核首部预测一个 TCP 接收缓冲区问题的解析本文不定时更新

  • 2023-12-12

    跟我一起学习drgn(4)---实现'ss -nlpt'

    ss -nlpt 是查看本机tcp监听端口的常用命令, 而本文将使用drgn重新实现它. 目的是为了证明一点: 作为一种快照式的调试工具, drgn 能非常有效地检视运行中内核的实时数据.预期结果先看看 ss -nlpt 会展示什么信息:图中展示了5条记录, 每条记录包含了监听信息: TCP状态, 队列长度, 地址端口, 进程和fd信息.数据来源接下来, 我们需要从内核源码中寻找上述信息的来源. 本文使用的内核版本是 6.2.2, 不同内核版本的数据结构略有不同内核创建的所有 tcp s...

  • 2023-12-08

    跟我一起学习drgn(3)---调试crash dump

    drng 可以调试运行中的 kernel (通过/proc/kcore), 也可以对 crash dump 文件进行调试.本文以官网中的Kyber bug为例子, 介绍 drgn 如何找出内核 bug.前置知识为了读懂这个案例, 需要先了解一些前置知识。内核会为每个 block 设备建立一个每 CPU 的 “software queue”, 并为硬件 I/O queue 建立一个 “hardware queue”,这两者是多对一的关系:每一个”hardware queue”可以绑定一个或多...

  • 2023-12-07

    跟我一起学习drgn(2)---核心概念

    本文介绍 drgn 中的一些核心概念.Programs A program being debugged is represented by an instance of the drgn.Program class. The drgn CLI is initialized with a Program named prog; unless you are using the drgn library directly, this is usually the only Program ...

  • 2023-12-06

    跟我一起学习drgn(1)---使用初体验

    drgn (读作”dragon”, 官网主页 github地址) 是一款由 Meta 公司开发的可编程调试器. 它可用于调试用户态程序, 也可以调试内核.说到调试器, 绕不开的就是 GDB, 那么 drgn 与 GDB 有何不同呢? GDB 调试相信大家已经很熟悉了, 因此, 这里我们用一个 drgn 的例子来看下:先编写一个简单的C语言程序global_inc.c, 该程序每隔1s将变量值累加.#include <stdio.h>#include <unistd.h&g...