网络编程之XDP和TC

一、TC之于XDP

在前面分析过XDP,今天简单分析一下与其相关的TC,即traffic control,流量控制。在分析XDP时知道其只能用于ingress方向触发,而TC却可以在两个方向即ingress和egress方向触发。也可以简单理解成它可以同时钩住进出两个方向的数据。
同时,XDP位于网络栈的最底层,可以加载到驱动上进行运行。而TC是在数据链路层,最主要的功能就是流量控制,这种流量控制要和TCP窗口流控区别开来。TC的控制主要是对数据包进行管理。也因为TC更接近上层,所以可以访问sk_buff(IP报文)这种数据结构,而不象XDP只能自己搞一个xdp_buff。也正因为如此,TC和硬件基本没有半毛钱关系了,这和XDP是一个比较明显的不同。
由于位置的不同所处的协议栈的层次不同,因此其对数据的处理就有所不同,XDP位于底层,数据更原始完整,可以进行原始报文的修改控制;而TC处于上层,但可以使用更强大的数据结构处理更复杂的修改需求。
在实践中经常遇到的tcpdump抓包程序,其抓包的位置入口方向在XDP和TC之间,而出口方向位于TC之后。这个很重要,否则不知道数据包的位置就无法正确的判断包的准确性和完整性。
下面的图可以说明二者的关系:

在这里插入图片描述

二、原理

XDP是基于eBPF钩子的,TC亦是如此。在更向上的TC中,可以使用ip数据报文,即数据结构体sk_buff。最重要的是在TC中可以通过BPF程序读取其中的很多元数据如protocol、napi_id等等。在元数据的支持下,对数据报文的修改会更安全更方便。不过,反过来也是如此,处理元数据本身就是一个很复杂的过程。
TC使用的hook是分别是:在ingress方向上:由__netif_receive_skb_core函数来调用sch_handle_ingress函数;在egress方向上:由__dev_queue_xmit函数来调用sch_handle_egress函数。
TC使用Classifiers(cls_bpf)和Action来处理相关的行为,有点类似于编程模式中的策略模式或者说链式调用。cls_bpf可以动态自动更新程序而勿需重启或中断网络,这就大体现出了其优势。通常情况下,egress方向上会存在附着到网络设备上的qdisc队列。而在两方向上,cls_bpf都用一个sch_clsact的伪qdisc进行管理,这个伪qdisc可以同时处理两个方向上的钩子。
cls_bpf实例中可以同时包含多个TC程序,但这么做会导致重复的报文解析,千万性能的下降。TC有四个组件:
1、Queuing disciplines,简称为qdisc,即有算法的队列,默认的算法是FIFO,形成了一个最简单的流量调度器
2、Class,也就是上面的分类器,即对qdisc进行分类
3、Filters,过滤器,过滤数据报文并使其流入对应class的qdisc
4、Policers,策略,其实它是filter一个规则管理,用来其后对网络包操作,如丢弃、延迟或限速

三、分析和应用场景

TC可以进行packet mangling(数据报文处理),但更倾向于packet scheduler,即网络包的丢弃、顺序和速度控制等。看到这儿,是不是可以一下子想起对网络的动态控制,比如对不同用户不同服务的网络资源进行管理。事情往往具有两面性,TC的优势恰恰也是其劣势,复杂的配置极可能导致事得其反的效果。
可以基于上层应用的TC命令来一窥其面貌。TC命令一般分成三类,即qdisc队列,Class类型(分类器)以及filter过滤器,二者均挂在qdisc上。这是不是和上面分析的有些相互响应。看一个简单的例子:

# creat cls_act class
sudo tc qdisc add dev eth0 cls_act

# load ingress eBPF
sudo tc filter add dev eth0 ingress bpf da obj tc-pro.o sec ingress

# load egress eBPF
sudo tc filter add dev eth0 egress bpf da obj tc-pro.o sec egress

更多的相关命令可参看Linux官方的文档。
其实TC的应用场景很多,但主流仍然是流控。

四、总结

创新是技术的灵魂。不断重复的技术其实就是一种落后的表现。做为一个开发者,加入创新技术的大军可能是很小概率的事件,但不代表对新技术的不敏感。对于开发者来说,新技术的优秀重点在于落地。不能落地的新技术,还不如老的技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/710783.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Aivis:AI声音模仿系统的创新之旅

在人工智能技术的不断进步中,声音合成技术也迎来了新的发展机遇。Aivis项目正是这一领域的杰出代表,它提供了一个全流程的工具,让用户能够从数据集的创建到学习再到推理,一站式地生成逼真的语音。 Aivis是一个基于Bert-VITS2模型的…

一键取票,YonSuite商旅费控助力企业“消灭报销”

在数字化与智能化并行的时代,企业商旅管理正经历着前所未有的变革。面对传统商旅出行管理中流程复杂、费用不透明等问题,YonSuite商旅费控以其独特的数智化商旅管理平台,为企业提供了一站式的解决方案,特别是其“一键取票”功能&a…

【博客718】时序数据库基石:LSM Tree(log-structured merge-tree)

时序数据库基石:LSM Tree(log-structured merge-tree) 1、为什么需要LSM Tree LSM被设计来提供比传统的B树更好的写操作吞吐量,通过消去随机的本地更新操作来达到这个目标,使得写入都是顺序写,而不是随机写。 那么为什么这是一个…

怎么图片转excel表格?推荐三个方法

怎么图片转excel表格?在信息化高速发展的今天,图片转Excel表格的需求日益凸显,尤其是在职场办公中,这一需求更是显得尤为迫切。为了满足广大用户的需求,市面上涌现出了众多图片转Excel的软件。今天,就为大家…

周五美国股市总结,标普止步四日连涨,纳指五日连创新高,法股单周跌幅两年多最深

美国消费者信心意外下滑至七个月新低,通胀预期反弹,标普大盘脱离历史最高,道指连跌四日,罗素小盘股跌至六周新低,有分析称对经济担忧浮现。全周标普和纳指分别累涨1.6%和3.2%,都是八周里第七周上涨&#xf…

基于SpringBoot+Vue高校自习室预约系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…

Navicat和SQLynx产品功能比较一(整体比较)

Navicat和SQLynx都是数据库管理工具,在过去的二十年中,国内用户主要是使用Navicat偏多,一般是个人简单开发需要,数据量一般不大,开发相对简单。SQLynx是最近几年的数据库管理工具,Web开发,桌面版…

P450Rdb: CYP450数据库--地表最强系列--文献精读24

P450Rdb: A manually curated database of reactions catalyzed by cytochrome P450 enzymes P450Rdb: 一个人工整理的细胞色素P450酶催化反应数据库 http://www.cellknowledge.com.cn/p450rdb/ 还有一篇类似CYP450综述-20年-地表最强系列-文献精读-4 要点: P450…

【服务器硬件由 CPU、RAM、硬盘等组成,选购时需考虑应用需求、预算等。散热、安全、监控与维护亦重要,未来发展趋势包括高性能、低能耗和智能化。】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

TypeScript写好了,怎么运行啊!!!

环境搭建 Vs code Ctrlshiftp打开首选项—》打开工作区设置—》搜索Typescript 推荐开启的配置项主要是这几个: Function Like Return Types,显示推导得到的函数返回值类型;Parameter Names,显示函数入参的名称;Par…

基于VSCode和MinGW-w64搭建LVGL模拟开发环境

目录 概述 1 运行环境 1.1 版本信息 1.2 软件安装 1.2.1 下载安装VS Code 1.2.1.1 下载软件 1.2.1.1 安装软件 1.2.2 下载安装MinGW-w64 1.2.2.1 下载软件 1.2.2.2 安装软件 1.2.3 下载安装SDL 1.2.3.1 下载软件 ​1.2.3.2 安装软件 1.2.4 下载安装CMake 1.2.4.…

【ARM 安全系列介绍 3.7 -- SM4 对称加密算】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | GCC | CSH | Armv8/v9 系统异常分析】 文章目录 SM4 加密算法简介SM4 工作模式算法步骤加密举例注意事项 Principle of SM4 encryption algorithm SM4 加密算法简介 SM4是一种分组…

Ubuntu20.04-ROS:Noetic安装

根据Ubuntu系统来选择对应的ros版本,在Ubuntu20.04上安装ROS-Noetic为例说明下如何安装ros 一 设置ROS源 / 终端输入 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.lis…

PyQt5学习系列之新项目创建并使用widget

PyQt5学习系列之新项目创建并使用widget 前言报错新建项目程序完整程序总结 前言 新建项目,再使用ui转py,无论怎么样都打不开py文件,直接报错。 报错 Connected to pydev debugger (build 233.11799.298)新建项目程序 # Press ShiftF10 to…

河南资信评价资质申报日期一览

河南资信评价资质申报日期一览如下: 一、申报批次与截止日期 第一批次 开始时间:根据历年经验,第一批次的申报通常在上半年进行,但具体开始时间需以河南省工程咨询协会发布的官方公告为准。截止时间:第一批次的截止日…

基于SSM+Jsp的在线教育资源管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

活动集锦 | 英码科技积极参与行业盛会,AI赋能城市数字化转型

在当今数字经济时代,城市全域数字化转型已经成为提升城市管理效能、优化资源配置、推动经济发展的重要手段。英码科技始终致力于为企业打造高效、低成本的行业应用方案,助力企业实现数字化转型。近日,英码科技受邀参加了多场行业展示活动&…

C语言 | Leetcode C语言题解之第151题反转字符串中的单词

题目&#xff1a; 题解&#xff1a; void myResverse(char* s,int start,int end){while(start<end){char temp s[start];s[start] s[end];s[end] temp;start;end--;} } char* reverseWords(char* s) {int start 0;int end strlen(s)-1;myResverse(s,start,end);if(s[…

Flutter全面支持六大平台的开发,那鸿蒙呢?

Hi,大家好&#xff0c;今天带大家了解一下flutter3的新特性&#xff0c;flutter已经实现了对六大平台的支持&#xff0c;flutter进一步进化&#xff0c;对于鸿蒙系统目前没有明确的支持&#xff0c;不过相信不久的将来一定会支持的。 一、futter3的新特性 Flutter 3 在发布后…

20240613解决飞凌的OK3588-C的核心板的适配以太网RTL8211F-CG

20240613解决飞凌的OK3588-C的核心板的适配以太网RTL8211F-CG 2024/6/13 16:58 缘起&#xff1a;对于飞凌的OK3588-C的核心板&#xff0c;参照飞凌的底板/开发板。 ETH0空接&#xff0c;ETH1由RTL8211FSI-CG【20&#xffe5;】更换为RTL8211F-CG【4&#xffe5;】。 都是千兆网…