- 博客(969)
- 资源 (61)
- 收藏
- 关注
原创 如何使用队列规则(Qdisc)发送数据包
函数 __dev_queue_xmit 用于将数据包从网络层发送到网络设备的传输队列中。该函数在内核网络子系统中扮演着重要角色,负责将数据包从上层协议(如 IP 层)传递到网络设备(如以太网卡)进行发送。在这个过程中,__dev_queue_xmit 会处理各种情况,如流量控制、队列管理等,以确保数据包能够有效地发送到目标设备。
2025-01-12 16:07:45
243
原创 高速网络数据包处理中的内核旁路技术
该PPT详细介绍了Linux网络栈中数据包的传输路径、内核旁路技术的必要性以及具体的内核旁路技术,包括用户空间数据包处理和用户空间网络栈。数据包在Linux网络栈中的旅程:描述了数据包从发送到接收的完整路径,包括各个网络层的处理。内核旁路技术的必要性:解释了为什么需要内核旁路技术来处理数据包,特别是在高速网络环境中。
2025-01-03 21:38:55
276
原创 TCP 小队列的设计原理
解决这一问题的方法是在任意两个端点之间的每个系统中减少缓冲的数据量——这项任务听起来简单,但事实证明远比人们预期的更具挑战性。实际上,缓冲可以在网络协议栈的许多意想不到的地方出现;《TCP small queues》由 Jonathan Corbet 于2012年7月17日发表在 LWN.net 上,主要讨论了网络堆栈中的“缓冲区膨胀”(bufferbloat)问题。这个问题是由于在网络传输过程中,数据包在网络设备中被过度缓存导致的,从而在整个网络中引起较长时间的延迟和较差的可靠性。
2024-12-28 09:24:12
339
原创 Linux 网络栈中的队列机制
包队列是任何网络栈或设备的核心组件。它们允许模块之间进行异步通信,提高性能,并具有影响延迟的副作用。本文旨在解释IP数据包在Linux网络栈中的排队位置,如何操作诸如BQL这种有趣的缓解延迟的新特性,以及如何控制缓冲以减少延迟。
2024-12-23 22:15:55
160
原创 开始探索XDP:开启Linux高性能网络编程的新篇章
XDP(eXpress Data Path)是 Linux 中的一项强大新网络功能,它允许在数据包进入网络栈之前以高性能可编程的方式访问这些数据包。许多开发者已经为这项功能撰写了入门博客,例如 Paolo Abeni 的《使用 XDP 实现高性能、低延迟网络:第一部分》和 Toke 的《在 Red Hat Enterprise Linux 8 中使用 eXpress Data Path (XDP)》。因此,开发人员正在创建工具和框架,使编写 eBPF 和 XDP 应用变得容易。
2024-12-22 08:48:37
474
原创 关于UDP缓冲区和丢包统计
每个套接字默认会获得 wmem_default 大小的发送缓冲区,可以通过setsockopt 选项SO_SNDBUF 请求设置最多 wmem_max 大小的缓冲区。每个套接字默认会获得 rmem_default 大小的接收缓冲区,可以通过setsockopt 选项SO_RCVBUF 请求设置最多 rmem_max 大小的缓冲区。UDP 缓冲区由 7 个 sysctl 参数控制。控制套接字默认和最大发送缓冲区大小,单位为字节。控制套接字默认和最大接收缓冲区大小,单位为字节。调整和观察 UDP 缓冲区。
2024-12-21 07:26:34
422
原创 netfilter简介及流程图
Netfilter 是 Linux 内核中用于网络包过滤和操作的框架,由 Rusty Russell 于1998年创立,旨在改进旧的 ipchains 和 ipfwadm 实现。它采用模块化设计,具有良好可扩展性,并在2000年3月合并进Linux 2.3.x内核版本。
2024-12-20 20:23:21
348
原创 TCP小队列与WiFi聚合
作者们在测试中使用了带有 Atheros 芯片组的 USB/WiFi 802.11ab/g/n设备,具体型号包括AR9271(使用ath9k_htc驱动程序)、AR9580(ath9k驱动程序),以及 QCA9880v2(ath10k驱动程序)。在初步测试期间,他们遇到了一个问题:尽管这些 dongles 的标称传输速率为150Mb/s,但通过 iperf进行的上传连接仅能达到大约 40Mb/s。因此,如果遇到类似的性能问题,确保您的内核是最新的非常重要。
2024-12-17 12:31:01
454
原创 Linux 网络流量控制 - 实现概述
Linux 提供了一整套丰富的流量控制)功能。本文档概述了相应的内核代码设计,描述了其结构,并通过描述一种新的排队策略来说明新元素的添加。
2024-12-14 09:21:56
423
原创 Linux 高级路由教程
这本文是一个关于Linux高级路由的教程,主要讨论了如何使用Linux来构建一个能够根据数据包的目的地选择不同链路的路由器。详细解释了如何使用BGP(边界网关协议)来获取国内IP地址的路由信息,并介绍了如何在Linux系统中使用多个路由表和路由规则来实现复杂的路由策略。此外,还讨论了如何为DMZ(非军事化区)设置特殊的路由表和规则,以确保来自DMZ的流量通过特定的链路发送。本文的目的是帮助读者理解如何在Linux系统中实现高级路由策略,以及如何利用BGP等网络协议来优化网络性能。
2024-12-12 07:11:21
297
原创 深入探讨 AF_PACKET 套接字
AF_PACKET 套接字是一种用于直接访问网络接口(即网卡)的套接字类型,通常用于网络数据包捕获和分析。它允许应用程序直接与网络接口卡(NIC)交互,而不需要通过网络协议栈。从而可以发送和接收以太网帧。它提供了比普通TCP/UDP套接字更低级别的网络访问。通常用于需要直接处理网络帧的应用,如抓取网络数据包、入侵检测系统、自定义协议实现等。
2024-12-08 10:03:21
497
原创 iproute和路由表
我们将开始详细讨论路由策略数据库(RPDB: Routing Policy DataBase)三要素中的第一个组件:路由(另外两个组件是 ip rules 和 ip tables)。路由路由由 ip route(iproute2)和 route 工具进行管理。两者的区别在于 ip route 是当前版本(iproute2),而 route(iproute)已经被弃用很长时间了。尽管如此,后者在某些任务中(特别是只读查询)仍然有用,并且在更广泛的Linux社区中仍然具有相关性。
2024-12-07 09:31:06
267
原创 IEEE 802.11s wifi mesh网络
IEEE 802.11s 是对 IEEE 802.11 标准的扩展,允许多个无线节点相互连接,而无需在它们之间有接入点(AP)。例如,如果您家里有一个 AP,您想将文件复制到另一台连接到相同 AP 的笔记本电脑 B(与您的笔记本电脑 A 连接),那么笔记本电脑 A 会将数据传输到 AP,AP 再将数据传输给笔记本电脑 B。不过,IEEE 802.11s 的真正优势在于存在多个无线节点的情况下。使用 802.11s 网状(mesh)网络标准,这些节点可以形成一个多跳网络,网络中的所有连接都是无线的。
2024-11-30 09:29:54
604
原创 使用 XDP 实现高性能、低延迟的网络:第一部分
尽管在多个领域都取得了可测量的进步,但新的一波与架构相关的安全问题及相应的对策几乎抹杀了所有的这些进步,对于一些需要处理大量数据包的工作负载,纯内核解决方案仍然落后于绕过(bypass)内核的解决方案,如数据平面开发套件(Data Plane Development Kit, DPDK),几乎落后一个数量级。但是,内核社区从不停息(几乎是字面上的意思),基于内核的网络性能圣杯已经被发现,它的名字叫做XDP:即eXpress Data Path。
2024-11-28 07:06:37
220
原创 关于网络缓冲区膨胀 bufferbloat
在 2014 年的 Linux Plumbers Conference 上,Stephen Hemminger 以一种非常独特的方式介绍了关于网络缓冲区膨胀(bufferbloat)的问题。Stephen 在会议中使用了几加仑的水和一个小的充气游泳池来形象地展示网络排队和缓冲区膨胀的概念。他这样做是为了更直观地解释当前与缓冲区膨胀斗争的状态。虽然有一些好消息可以分享,但不幸的是,在很多方面,人们对此问题的理解和解决仍然处于“湿透”的状态,即还存在许多未解决的问题。Bufferbloat 是指在网络传输过程中
2024-11-21 08:52:28
308
原创 IPv6 邻居发现
本文介绍IPv6邻居发现(Neighbor Discovery)过程。邻居发现协议是IPv6中用于解决网络层相邻节点之间通信问题的一套协议,它是IPv6协议栈中的一个关键部分,主要用于替换IPv4中的ARP(地址解析协议)、ICMP路由器发现和ICMP重定向消息等功能。
2024-11-20 12:05:02
224
原创 Linux 数据包快速路径: XDP 轻松入门指南
XDP(即 eXpress Data Path)是一个 Linux 网络功能,使您能够在内核中创建高性能的包处理程序。XDP 在 Linux 4.8 中引入,建立在扩展的 Berkeley 包过滤器(eBPF)之上,提供了一种比经过本地内核网络协议栈更早、更快地处理网络数据包的机制。如何构建一个简单的 XDP 程序。XDP 内核中数据包的路径。传统网络协议栈面临的挑战。
2024-11-08 08:20:40
209
翻译 使用BPF进行网络数据包464转换
在这里,我们将尝试使用 BPF 做一些神奇的事情;我们将会把我们在网络上收到的 IPv4 数据包转换为IPv6 数据包然后送入 Linux 网络栈 ,这样接收的 TCP/IP 栈只会看到 IPv6 流量,然后我们在出站时反转这个技巧。因此,运行 BPF 的系统在网络栈中只会看到 IPv6的数据包,而 IPv4 流量将是在网络上看到的内容。所以远程的 ping 应用程序认为它在和一个 IPv4 端点通信,而本地的 Linux TCP/IP 协议栈则认为它在和一个远程的 IPv6 ping 客户端通信!
2024-11-07 08:31:24
77
原创 Linux流量控制Classifier-Action子系统架构
本文描述了Linux流量控制(TC)分类器-动作(CA:Classifier Action)子系统的架构。该子系统已在内核中存在超过十年(早在OF或P4之前)(更早在相关实验性补丁中存在),我们终于有动力来进行开源项目的枯燥而令人不快的一部分——文档化。我们将描述报文处理图架构及其底层可扩展性,进一步讨论使其成为一个出色的报文处理架构的形式化语言。
2024-11-06 08:56:43
390
原创 IPSec之数据封装协议
专为 IP 层通信设计的安全算法称为“IPSec”。它是一个协议套件,旨在提供通过 IP 网络(例如互联网)进行安全通信。它在 IP 层提供安全服务,使其能够保护所有基于 IP 的协议,包括 TCP、UDP 和 ICMP。
2024-08-10 17:45:17
1602
1
原创 Linux Bridge - Part 2
在中,我描述了Linux 网桥(bridge)的配置,并展示了一个实验,其中使用Wireshark来分析流量。在本文中,我将讨论当创建一个网桥时会发生什么,以及Linux 网桥(bridge)的工作原理。与网桥(bridge)相关的源代码可以在找到。
2024-07-07 11:34:00
1270
2
转载 连接跟踪(conntrack):原理、应用及 Linux 内核实现
本文介绍连接跟踪(connection tracking,conntrack,CT)的原理,应用,及其在 Linux 内核中的实现。代码分析基于内核4.19。为使行文简洁,所贴代码只保留了核心逻辑,但都给出了代码 所在的源文件,如有需要请查阅。水平有限,文中不免有错误之处,欢迎指正交流。// 为方便 NAT 的实现,内核将 tuple 结构体拆分为 "manipulatable" 和 "non-manipulatable" 两部分// 下面结构体中的 _man 是 manipulatable 的缩写。
2024-03-20 16:32:46
1821
转载 内核通信之 Netlink 源码分析和实例分析
这几天在看 ipvs 相关代码的时候又遇到了 netlink 的事情,所以这两天花了点时间重新把 netlink 的事情梳理了一下。linux 内核一直存在的一个严重问题就是内核态和用户态的交互的问题,对于这个问题内核大佬们一直在研究各种方法,想让内核和用户态交互能够安全高效的进行。如系统调用,proc,sysfs等内存文件系统,但是这些方式一般都比较简单,只能在用户空间轮询访问内核的变化,内核的变化无法主动的推送出来。
2024-03-08 13:14:56
295
转载 What Is eBPF? The Ultimate Guide
What Is eBPF? The Ultimate Guide - The New StackeBPF stands for extended Berkeley packet filter. Find out everything you should know about Linux eBPF in this comprehensive technology guide.Dec 26th, 2023 2:00am by B. Cameron GainLogo courtesy of the eBPF F
2024-03-03 18:29:41
100
转载 理解 TCP rate sample
内核中的 TCP rate sample 被 bbr 这样的拥塞控制算法使用,它总共也就不到200行代码,其中一半还是注释,但理解起来可能还是需要花点力气。本文将尝试解释它的实现原理.本文使用的内核代码版本是一句话概括, rate sample 的结果是在** interval **时间内发送的报文被网络成功(成功送达)的数目。比如, 5s 内, 成功送达了 10个报文、10s 内成功送达了 15 个报文 …. 等等.
2024-03-01 09:29:44
200
转载 linux-network-performance-parameters
【代码】linux-network-performance-parameters。
2024-02-28 20:13:09
88
转载 使用 eBPF 扩展内核
扩展型柏克莱封包过滤器 (eBPF) 是一个内核中的虚拟机,可运行用户提供的 eBPF 程序来扩展内核功能。这些程序可以挂接到内核中的探测点或事件,并用于收集有用的内核统计信息、监控和调试。程序使用bpf(2)系统调用加载到内核中,并作为 eBPF 机器指令的二进制 blob 由用户提供。Android 构建系统支持使用本文所述的简单 build 文件语法将 C 程序编译为 eBPF 程序。如需详细了解 eBPF 内部构件和架构,请参阅。
2024-02-26 14:16:15
150
转载 通用内核映像(GKI)
是所有 Android 产品内核的基础。供应商内核和设备内核位于 ACK 的下游。供应商通过修改内核源代码并添加设备驱动程序,添加了对 SoC 和外围设备的支持。这些修改内容可能很多,以至于设备上运行的代码中有多达 50% 是树外代码(并非来自上游 Linux 和 AOSP 通用内核)。几乎所有设备都具有自定义内核。这就导致了内核碎片化问题。Android 内核层次结构导致碎片化问题。
2024-02-26 14:03:38
1919
转载 L2TP/L2TP over IPSec
二层隧道协议L2TP ( Layer 2 Tunneling Protocol )是虚拟私有拨号网VPDN ( Virtual Private Dial-up Network )隧道协议的一种,扩展了点到点协议PPP ( Point-to-Point Protocol )的应用,是远程拨号用户接入企业总部网络的一种重要VPN技术。LAC:L2TP的访问控制中心,隧道发起方,企业分支的出口网关,用于站点到站点建立L2TP VPN,企业分支发起的L2TP VPN建立连接,中间不用经过运营商(场景三)
2024-02-07 08:40:39
1298
转载 linux路由表配置
D、解决方法,由于在table 0中添加路由只能解决目的地址或目的网络不同时路由问题,但两块网卡有相同的子网,网关也一样,目的子网也一样,所以已经不能通过在table 0添加路由记录来解决问题,我们只能添加其他编号的table,并在新的table中添加路由记录,使eth1的包选路时使用新的table的路由记录,并从eth1上出去。路由规则的查看使用ip rule sh路由规则也从0开始编号,可以自由添加,来源相同IP的路由规则选择根据规则编号的大小确定优先级,编号越小优先级越高。
2024-02-04 16:25:10
428
转载 利用qemu+gdb在ubuntu下搭建调试kernel的环境
在A Terminal中运行以下命令 qemu-system-x86_64 -kernel bzImage -boot c -m 1024 -initrd initramfs.img -append "root=/dev/sda rw console=ttyS0, 115200 acpi=off nokaslr" -serial stdio -display none -s -S。如果需要调试内核的kvm模块,则向上述命令添加 -enable-kvm。
2024-01-14 20:48:10
208
转载 Tc: ingress policing and ifb mirroring
【代码】Tc: ingress policing and ifb mirroring。
2024-01-11 13:46:33
153
转载 Linux Netfilter and Traffic Control
SFQ 之所以被称为“随机”,是因为它并不是真的为每一个会话创建一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。它的精确性不如其它的方法,但是它在实现高度公平的同时,需要的计算量却很少。Linux就而言,队列规定是附带在网卡上的,所有在这个网卡上排队的数据都排进这个队列规定。令牌桶过滤器(TBF)是一个简单的队列规定:只允许以不超过事先设定的速率到来的数据包通过,但可能允许短暂突发流量朝过设定值。就象在分类的队列规定一段中解释的,过滤器用与把数据包分类并放入相应的子队列。
2024-01-11 08:42:22
101
转载 QoS in Linux with TC and Filters
filters:bytes.bpfcgroupscope.flowerfwalready.routetcindexbpfconnmarkcsumiptmirrednatpeditpolicesimpleskbeditvlanConclusion----------
2024-01-10 20:21:43
241
nweb: a tiny, safe Web server (static pages only)
2012-04-22
Introduction to Java Programming Comprehensive Version Fifth Edition
2012-02-18
Fusion 基础简介
2012-02-02
DirectFB 原码导读
2012-01-31
KernelAnalysis−HOWTO
2012-01-11
第七讲 内核空间和用户空间
2012-01-11
linux 内存寻址
2012-01-11
Linux中的汇编语言
2012-01-09
TN05.ELF.Format.Summary.pdf
2012-01-06
ELF Format 文件格式讲解
2012-01-02
Linux Network Traffic Control-Implementation Overview
2024-12-07
Linux Kernel Networking: Implementation and Theory (2014)
2024-06-10
使用wireshark 解析rtp流.7z
2021-09-21
各种函数零点问题的处理
2017-12-10
electric fence
2016-04-05
Embedded Linux System Design and Development Source code
2013-09-05
<<Programming from the Ground Up>> by Jonathan Bartlett
2013-04-03
Memory Mapping and DMA.pdf
2012-05-23
linux frame buffer 学习资料
2012-05-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人