tcpdump 原理 1. tcpdump 简介tcpdump 类似于 wireshark,是常用的一款抓包工具,其是如何抓到内核态的网络包的呢?如果让你写一个抓包程序,你能完成吗? 2. tcpdump internal2.1 tcpdump 抓包点首先要明确,tcpdump 抓包的入口在何处,这里先讨论收包这种情况: 从软中断到tcp/ip协议栈的收包路径为 12345678net_rx_action --& 2022-02-25 linux network tcpdump af_packet
platform device driver 1. 什么是平台设备驱动首先需要区分物理总线和驱动总线。 物理总线:芯片和功能外设之间传送信息的公共(专用)通信线路,包括了地址总线,数据总线,控制总线,传递的是电信号。 驱动总线:Linux 为设备驱动模型虚拟出来的总线,指定,执行设备与驱动的匹配规则,自动完成设备与驱动之间的匹配,执行驱动的初始化函数。 对于常见的 I2C,USB,PCI 等物理总线,Linux 都会为其自动创建驱动总线, 2022-02-24 linux device driver platform
kobject 1. kobject 是什么在 Linux 设备驱动框架 一文中,我们提到了 Linux 设备驱动是以 Device,Bus,Driver,Class 这几种结构为核心,从而方便管理。 由于设备与设备,设备与总线之间有非常明显的拓扑关系(设备接在总线上,设备也会有依赖关系),因此,可以通过树状结构进行管理,而 kobject 就是这种管理方式的核心,同时辅助以 kset/ktype,构成了设备框架 2022-02-24 linux driver kobject kset
linux driver framework 1. Linux 设备框架1.1 软件架构首先必须明确一点,驱动是 Linux 中最为复杂,也是代码量最为庞大的部分。并不是因为其架构多么匪夷所思,而是作为一个通用操作系统,Linux 必须要支持 30 多种体系下面的无数硬件设备,这种复杂度已经达到了 O(n*m) 的级别。 设想一下,如果由你为一个设备编写跨平台驱动,肯定想通过尽可能少的代码改动,完成各个平台的适配,这绝非易事。如果使用普通的 2022-02-24 linux driver framework
kernel && nic && napic 1. kernel 与 nic 交互接收数据帧的过程中,kernel 与网卡有两种交互方式: 中断(interrupt) 轮询(polling) 1.1 中断方式如果要保证低延迟(laytency)则可以考虑中断的方式,保证一有数据就通过硬件中断通知 CPU,然后中断处理函数读取数据包,存放到上层的输入队列,再通知内核 1.2 轮询方式采用 polling 的方式,定期检查网络设备中是否有数据 2022-02-23 linux network napi nic
neighbouring subsystem 1. what’s neighbouring subsystem邻居子系统是网络协议栈必不可少的一环,主要负责将 L3(network layer)地址转换为 L2(link layer)地址。 为了实现这个功能,Linux 实现了 Arp 协议(ipv4)以及 Neighbour Discovery Protocol(ipv6)。本章只会讨论 Arp 协议相关的内容。首选会介绍一下几个重要的数据 2022-02-22 linux network neighbour
netlink 1. netlink 简介1.1 netlink 是什么netlink 是一种 进程间通信(inter process communication IPC) 机制,为用户空间和内核空间进程之间(当然也可以是两个内核进程之间)提供了一种双向异步的通信方式。 netlink 依托成熟的 socket api 提供服务,增加了 AF_NETLINK 这个协议簇,依靠 sock_ops 对应的各种回调函数 2022-02-22 linux network netlink ipc