HTB相关TC命令以及内核实现介绍

Linux TC 流量控制与排队规则 qdisc 树型结构详解(以HTB和RED为例) Linux 操作系统中的流量控制器 TC (Traffic Control) 用于Linux内核的流量控制,它规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。 阅读详情

 

HTB相关TC命令以及内核实现介绍

 

前言... 3

关于此文档... 3

参考资料... 3

第一章       HTB 介绍... 4

1.0 HTB 命令介绍... 5

2.0 Rate ceiling 速率限度... 12

第二章       HTB 程序实现... 13

2.0 用户传递消息的格式... 14

2.1 HTB 命令的解析... 16

举例消息解析过程... 17

2.2 HTB 内核程序的实现... 18

2.2.1 数据包进队... 19

2.2.2 数据包的出队... 21

 

 

 

 

 

 

 

 

 

前言

关于此文档

本文档是本人学习LINUX 流量控制的过程中的学习总结。

主要讲述了HTB的原理以及内核的实现部分,不过重点讲的是原理部分,以及如何根据需要给数据流分类,控制不同数据流的速度。

参考资料

网络资源。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HTB相关TC命令以及内核实现介绍

在介绍HTB 前我们看看在TC下的速度换算:

tc 采用如下规定来描述带宽:

mbps = 1024 kbps = 1024 * 1024 bps => byte/s

mbit = 1024 kbit => kilo bit/s.

mb = 1024 kb = 1024 * 1024 b => byte

mbit = 1024 kbit => kilo bit.

内定:数字以bps和b方式储存。

但当tc输出速率时,使用如下表示:

1Mbit = 1024 Kbit = 1024 * 1024 bps => byte/s

第一章  HTB 介绍

HTB 意味着是一个更好理解更容易掌握的可以快速替换LINUX CBQ 队列规定的队列, CBQ和HTB都可以帮助你限制你的链路上的出口带宽,但是CBQ配置很复杂而且精度又不够,在HTB问世后,HTB就逐渐的代替CBQ,成为人们进行流量控制的工具。  他允许你把一条物理链路模拟成几条更慢的链路,或者是把发出的不同类型的流量模拟成不同的连接,在他们的实际应用中, 你必须指定怎么分配物理链路给各种不同的带宽应用并且如何判断每种不同的应用的数据包是怎么样被发送的。应用HTB我们可以很好的规划我们的带宽,根据不同的需要为网络中的主机或者本机上的不同业务分配不同的带宽。

1.0 HTB 命令介绍

案例: 我们有两不同的用户A和B, 都通过网卡 eth0 连接到 internet ,我们想分配 60kbps的带宽给A 和 40 kbps的带宽给B。

HTB 可以保障提供给每个类带宽的数量是它所需求的最小需求或者等于分配给它的数量.当一个类需要的带宽少于分配的带宽时,剩余的带宽被分配给其他需要服务的类.

注: 这里这种情况被称为”借用”剩余带宽, 我们以后将用这个术语, 但无论如何,好像很不好因为这个”借用”是没有义务偿还的.

为了此目的,我们利用HTB来为我们服务:服务模型如下:

我们使用的 TC 命令如下:

tc qdisc add dev ifbr0 root handle 1: htb default 12

这个命令建立QDISC 的根类型。默认情况下选择的类为12.

tc class add dev ifbr0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps

这个命令在根的基础上建立一个类,速度为 100Kbps起到总速度限制的作用。

tc class add dev ifbr0 parent 1:1 classid 1:10 htb rate 30kbps ceil100kbps

tc class add dev ifbr0 parent 1:1 classid 1:11 htb rate 10kbps ceil100kbps

tc class add dev ifbr0 parent 1:1 classid 1:12 htb rate 60kbps ceil100kbps

 

这两命令是进行分流作用,在前面建立的底下建立三个类,速度控制分别为 30kbps ,10kbps和60,并且都设置 ceil 为100kbps 至于ceil我们稍后讨论。接下来我们使用分类器进行设置使不同的数据包分发到不同的类进行发送数据。

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \

match ip src 192.168.1.164

match ip dport 80 0xffff flowid 1:10

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \

match ip src 192.168.1.164

match ip dport 90 0xffff

flowid 1:11

这样来自ip 192.168.1.164 且目的端口号为80的数据包都会发送到类1:10 所对应的队列中,自ip 192.168.1.164 且目的端口号为90的数据包都会发送到类1:11 所对应的队列中,其他不匹配的数据包都会发送到类1:12所对应的队列中,这是默认的队列,前面已经定义。

当然这只是简单的配置,我们也可以根据自己的需要配置成更为复杂的队列规定,接下来我们举如下的例子:

假如内网中的用户通过网卡eth0与外界通讯,这样我们可能需要配置我们的通讯规则。

我们可能有如下的需求:

 

我们希望制定以上的控制规则,以便保证不同用户的不同需求。

当然带宽比例是相对的,也就是说在忙的时候会趋向于以上的带宽比例。不忙的时候忙的服务可以借用不忙用户的带宽。

假如我们总带宽为 2048Mbps。这样我们分配给A,B的带宽分别为1228Mbps,820Mbps。带宽分配如下所示:

好了按照以上的模型我们开始建立规则。

首先我们需要为网卡建立一个根类型(QDISC)这个是必须的步骤。

接下来我们在根类型下建立子类,控制总速度如图示。

 

按照上图的步骤我们应该在这个类的底下建立两个子类,来进行速度的分发。

我们继续根据上图建立如下子类:

CLASS 1:2的子类:

CLASS 1:3的子类:

接下来我们为叶子节点挂载pfifo的队列规定,当然你也可以根据自己的需要定义自己的队列规定。命令如下:

这样我们根据需要框架是已经搭建完成了,不过我们还不知道哪些包进入哪个类进行处理。接下来我们讲根据需求建立分类器。当然我们使用的是功能强大的U32分类器,

首先我们为A网络分配规则:

接下来我们为B 网络匹配规则:

这样我们就大功告成了。

2.0 Rateceiling 速率限度

我们看到了上面配置过程中一直有这个参数,我们接下来讨论下这个参数的用途。

参数ceil指定了一个类可以用的最大带宽, 用来限制类可以借用多少带宽.缺省的ceil是和速率一样。我们看上面的例子:

我们在分配A和B的速度的时候我们设置了cell 都为2048。 也就是说虽然A与B的rate值不一样但是他们峰值的速度是一样的。假如在某段时间内A用户网络流量很少或者几乎是没有的,但是这时候B用户的流量很大,这样B用户将会借用A用户的网络流量,当然B用户的总速度是不会超过cell 定义的速度的。

注: ceil的数值应该至少和它所在的类的速率一样高, 也就是说ceil应该至少和它的任何一个子类一样高。

第二章   HTB 程序实现

对于HTB的内核实现包括两部分

第一部分为:用户空间命令的解析以及传递消息到内核空间。

第二部分为HTB流量控制算法的实现。

 

 

2.0 用户传递消息的格式

我们对消息的封装使用如下的格式:首先是消息头然后接下来就是消息的数据部分了。数据部分是按照 类型、 长度、 参数值 的格式来填充数据包的。如下所示:

消息头

消息模板TC_MSG

传递的数据

其中消息头有如下的参数

struct nlmsghdr

{

       __u32          nlmsg_len;       /* Length of message including header */

       __u16          nlmsg_type;    /* Message content */

       __u16          nlmsg_flags;   /* Additional flags */

       __u32          nlmsg_seq;      /* Sequence number */

       __u32          nlmsg_pid;       /* Sending process PID */

};

系统中为支持QOS 定义了如下的消息类型:在文件RTNETLINK.H中。

       RTM_NEWQDISC  = 36,

#define RTM_NEWQDISC RTM_NEWQDISC

       RTM_DELQDISC,

#define RTM_DELQDISC  RTM_DELQDISC

       RTM_GETQDISC,

#define RTM_GETQDISC  RTM_GETQDISC

 

       RTM_NEWTCLASS     = 40,

#define RTM_NEWTCLASS    RTM_NEWTCLASS

       RTM_DELTCLASS,

#define RTM_DELTCLASS      RTM_DELTCLASS

       RTM_GETTCLASS,

#define RTM_GETTCLASS      RTM_GETTCLASS

 

TC_MSG结构如下:

struct tcmsg

{

       unsigned char tcm_family;

       unsigned char tcm__pad1;

       unsigned short      tcm__pad2;

       int         tcm_ifindex;

       __u32          tcm_handle;

       __u32          tcm_parent;

       __u32          tcm_info;

};

数据部分的格式有如下:

struct rtattr

{

       unsigned short      rta_len;

       unsigned short      rta_type;

};

nlmsg_len

nlmsg_type

nlmsg_flags

nlmsg_seq

nlmsg_pid

消息模板TC_MSG

rta_type  16 bits

rta_len 16 bits

Values 32 bits

其中数据部分的rta_type就是传递的参数类型:我们根据HTB可能的参数类型,定义如下的参数类型:定义在文件PKT_SCHED.H中。(我们这里省略一些定义的结构体可以去看看源文件)

/* HTB section */

#define TC_HTB_NUMPRIO         8

#define TC_HTB_MAXDEPTH           8

#define TC_HTB_PROTOVER           3/* the same as HTB and

enum

{

    TCA_HTB_UNSPEC,

    TCA_HTB_PARMS,

    TCA_HTB_INIT,

    TCA_HTB_CTAB,

    TCA_HTB_RTAB,

    __TCA_HTB_MAX,

};

 

2.1 HTB 命令的解析

 由于TC 关于QOS 方面的命令基本格式如下:

Usage: tc [ OPTIONS ]OBJECT { COMMAND | help }\n"

                 "tc [-force] -batch file\n"

"where  OBJECT := { qdisc | class | filter | action}\n"

      "  OPTIONS := {-s[tatistics] | -d[etails] | -r[aw]

可以看出TC 命令中OBJECT := { qdisc | class | filter | action }

也就是 用于建立QDISC以及建立分类CLASS, 建立过滤器FILTER或者是其他的动作ACTION。LINUX 内核中为这不同的命令分别建立了相应的命令解析结构,大致如下:

struct qdisc_util

{

       struct  qdisc_util *next;

       constchar *id;

       int  (*parse_qopt)(struct qdisc_util *qu, int argc,char **argv, struct nlmsghdr *n);

       int  (*print_qopt)(struct qdisc_util *qu, FILE *f,struct rtattr *opt);

       int        (*print_xstats)(struct qdisc_util *qu,FILE *f, struct rtattr *xstats);

 

       int  (*parse_copt)(struct qdisc_util *qu, int argc,char **argv, struct nlmsghdr *n);

       int   (*print_copt)(structqdisc_util *qu, FILE *f, struct rtattr *opt);

};

我们只列出qdisc_util部分其他的 如FILTER以及ACTION 的解析结构请参照tc_util.c这个文件。可以看出qdisc_util 这个结构是个链表。对于不同的策略我们都可以编译然后插入到这个链表当中。当然其中的函数指针根据不同的解析类型指向不同的函数。比如我们讲的HTB:这个文件在q_htb.c中

struct qdisc_util htb_qdisc_util = {

    .id            = "htb",

    .parse_qopt  = htb_parse_opt,

    .print_qopt    = htb_print_opt,

    .print_xstats = htb_print_xstats,

    .parse_copt  = htb_parse_class_opt,

    .print_copt     = htb_print_opt,

};

htb_parse_opt,用于解析qdisc htb参数部分的命令的。

htb_parse_class_opt,用于解析class  htb参数部分的命令的。

举例消息解析过程

一个命令:tc qdisc add dev ifbr0 roothandle 1: htb default 12

 这个命令为某个网络接口eth0增加一个qdisc。

命令首先在用户空间被iproute2分析:

分析tc:main(int argc, char **argv)被调用,此函数在tc/tc.c中;

分析tc qdisc:do_qdisc(argc-2, argv+2);被调用,此函数在tc/tc_qdisc.c中;

分析tc qdisc add: tc_qdisc_modify(RTM_NEWQDISC,NLM_F_EXCL|NLM_F_CREATE, argc-1, argv+1); 被调用,此函数在tc/tc_qdisc.c中,在这个函数中,将分析完这一行tc的命令,

分析 ……. htb default 12:前面分析完后,接下来就开始分析后面的部分了,程序发现是用htb,所以就根据这个标记找到htb_qdisc_util这个结构,然后用其中的函数htb_parse_opt对其后面的参数进行解析,并且根据上面提到的格式填充数据包。最后返回tc_qdisc_modify 中,tc_qdisc_modify这个函数最终完成发送消息到内核空间,用于控制相关的操作。其他的命令基本上也是一样的。只是不同的命令走的分支不一样。

2.2 HTB 内核程序的实现

 

   HTB关键是对不同数据包进行不同的流量控制,以达到控制的目的。对于流量的控制使用的是令牌桶的算法如下图:

对于一个数据包在内核中总的操作是入队和出队,入队只是根据分类把数据包放入不同的队列中,如果队列满了就要根据策略丢弃数据包。出队的过程中就是根据策略从队列中取出数据包,当然HTB和TBF一样速度的限制是在出队的时候才进行。

2.2.1 数据包进队

我们首先来看看进队的操作:

static inthtb_enqueue(struct sk_buff *skb, struct Qdisc *sch)

{

    struct htb_class *cl =htb_classify(skb,sch,&ret);

 

    else if (cl->un.leaf.q->enqueue(skb,cl->un.leaf.q) != NET_XMIT_SUCCESS) {

      sch->stats.drops++;

      cl->stats.drops++;

      return NET_XMIT_DROP;

    } else {

      cl->stats.packets++; cl->stats.bytes += skb->len;

      htb_activate (q,cl);

    }

    return NET_XMIT_SUCCESS;

}

进队首先调用的是分类器,查看数据包要放到那个队列中,然后再进行进队操作。至于分类过程我们看看下图:

当然这些结果是用户传递进来的信息,我们只是进行匹配然后找到分类结果

Tcf_result。当然分类结果有时候我们只保存了分类的CLASSID 但是我们有时候也保存了CLASS 根据不同的策略有时候是不同的:我们也看看另外一种的分类吧:

这种分类结果比较特殊,直接就有一个指针指向所定义的类,程序就不需要再根据ID来查找相应的类了。直接根据其结果的指针进行必要的操作就可以了。

 

2.2.2 数据包的出队

出队操作比较复杂整个过程掉的函数如下:

HTB的出队是个非常复杂的处理过程, 函数调用过程为:

htb_dequeue

è __skb_dequeue

è ->htb_do_events

è  ->htb_safe_rb_erase

è ->htb_change_class_mode

è ->htb_add_to_wait_tree

è ->htb_dequeue_tree

è ->htb_lookup_leaf

è ->htb_deactivate

è ->q->dequeue

è ->htb_next_rb_node

è ->htb_charge_class

è ->htb_change_class_mode

è ->htb_safe_rb_erase

è ->htb_add_to_wait_tree

è-> htb_delay_by

对于流量的控制总的思想如下:

首先从队列中取出数据包,然后根据数据包的长度算出要消耗的令牌数函数如下:

/* TODO: maybe compute rate when sizeis too large .. or drop ? */

// 将长度转换为令牌数

static inline long L2T(struct htb_class*cl, struct qdisc_rate_table *rate,

int size)

{

// 根据大小计算合适的槽位

int slot = size >> rate->rate.cell_log;

// 如果超过了255, 限制为255

if (slot > 255) {

cl->xstats.giants++;

slot = 255;

}

return rate->data[slot];

}

计算从上次发送数据包到现在的时间里生成的令牌数

toks = PSCHED_TDIFF_SAFE(now,q->t_c, q->buffer);

然后把toks加上原先桶中的令牌数就为总的令牌数,当然总的令牌数是不能比桶大的。

这时候总令牌数-数据包长度转换过来的令牌数,  如果大于0则允许数据包通过,如过小于0则看看能够借用其他类的速度,否则就让数据包重新入队。这就是限速的基本思想。

 


TC流量控制 概述 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,它利用队列规定(qdisc)建立处理数据包的队列,并定义队列中的数据包被发送的方式, 从而实现对流量的控制。TC模块实现流量控制功能使用的队列规定分为两类,一类是无类队列规定(classless qdisc), 另一类是分类队列规定(classful qdisc)。 无类队列规定相对简单,而... 阅读详情

相关推荐

Linux 内核 | 网络流量限速方案大 PK

网络流量限速是一个经久不衰的话题,Linux 内核中已经实现了若干种流量限速的方式。最简单的方式是通过定期采集速率,在超过指定的速率后直接丢包,但这种方案效果不佳,不能精准地将流量控制在指...

字节跳动技术团队官方博客 9616

HTB-Buff

HTB-Buff

TA不懒,但还没有添加简介 379

Linux流量整形工具:tc的实现原理

介绍 报文分组从输入网卡(入口)接收进来,经过路由的查找,以确定是发给本机的,还是需要转发的。如果是发给本机的,就直接向上递交给上层的协议,比如TCP,如果是转发的,则会从输出网卡(出口)发出。网络流量的控制通常发生在输出网卡处,Linux内核中由TC(Traffic Control)实现。TC是利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现流量控制。基本原理: 接收包从输入接口(Input Interface)进来后,经过流量限制(Ingress Policing)丢

qq_42270373的博客 4139

linux下tc、htb、iptables基础知识及openwrt 下qos使用介绍

htb基础知识:Linux Htb队列规定指南中文版:http://wenku.baidu.com/view/64da046825c52cc58bd6beac.html TC基础知识:Linux 的高级路由和流量控制LARTC http://download.youkuaiyun.com/detail/wuwentao2000/3963140 iptables基础知识: 中文howto:http:/

wuwentao2000的专栏 1万+

Linux下使用TC+HTB进行流量控制

在上面的示例中,我们创建了一个根队列(handle 1:),并定义了两个子队列(classid 1:10 和 1:20)。我们为每个子队列分配了相应的带宽(500Mbps),并将流量过滤到相应的子队列中。在Linux系统中,我们可以使用TC(Traffic Control)工具和HTB(Hierarchical Token Bucket)算法来实现流量控制。通过创建队列和过滤器,并为每个子队列分配带宽,我们可以有效地控制流量的传输速率。通过验证流量控制规则的效果,我们可以确保流量控制机制按预期工作。

YpysHtml的博客 431

Anki小白必看:手把手教你打造高颜值个性化笔记模板(附Leaflyer模板下载)

本文为Anki新手提供详细的个性化笔记模板设计指南,从基础配置到高级定制技巧,帮助用户打造高效记忆系统。特别推荐Leaflyer模板下载,通过视觉优化和功能强化,显著提升学习体验和记忆效率。

weixin_28717969的博客 433

linux 下使用 tc 模拟网络延迟和丢包

1 模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如 Fedora、Ubuntu、Redhat、OpenSuse、CentOS

weiweicao0429的专栏 3万+

点云体素化算法研究-3.Voxelization 三维模型体素化

体素(voxel)即体积元素的简称,是数字数据在三维空间分割上的最小的单位。体素化就是通过创建三维体素网格来表示三维物体,是一种将无序点云变为有序点云的降采样的空间数据结构方法,便于实现点云的空间卷积。激光雷达(LiDAR)| Open3D:第五节 表面重建-体素化。

周陽讀書 2066

HTB:Buff[WriteUP]

但是进来后发现该EXP不仅无法切换到其他目录下而且基本功能无法运行。尝试往靶机上传一个netcat,首先开启一个http服务。将其中未认证的RCE漏洞EXP拷贝到当前目录下。查找user_flag位置并查看其内容。查找root_flag位置并查看其内容。通过python再次启动http服务。靶机运行木马后,本地MSF侧收到回显。靶机IP:10.10.10.198。分配IP:10.10.16.7。靶机将nc.exe文件进行下载。靶机反弹shell回攻击机。靶机将该木马进行下载。

如有错误感谢斧正 934

微信小程序PC端兼容性实战:如何绕过限制在电脑上运行手机端小程序

本文详细解析了微信小程序在PC端的兼容性问题及解决方案,重点介绍了如何利用`wx.getSystemInfo`API检测运行环境,并通过修改User-Agent、动态环境检测与适配等技术手段实现手机端小程序在PC端的顺畅运行。文章还提供了常见兼容性问题的解决方法和调试工具推荐,帮助开发者高效应对多端适配挑战。

weixin_28366053的博客 865

《统计学习方法》——李航 学习大纲

最近在学习李航写的统计学习方法概论, 每一章都用xmind理清了思路,括号里是书里的公式,第一次写博文,敬请指教~~~~ 第一章 统计学习方法论 第二章 感知机 每个方法其实只需要着重掌握三要素和输入输出就可以了,主要看模型、策略和算法。 感知机主要是二类分类的线性分类模型。 看到后面会注意感知机和支持向量机的区别。 第三章 k近

wjy619251334的博客 1万+

Linux 下 TC 命令原理及详解<一>

文章目录1 前言2 相关概念3 使用TC4 创建HTB队列5 为根队列创建相应的类别6 为各个类别设置过滤器7 复杂的实例 1 前言 众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的。 然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾,比如,远程登录的交互数据流应该比数据下载有更高的优先级。 针对不同的数据流采取不同的策略,这种可能性是存在的。并且,随着研究的发展和深入,

有理论,有实验,有结论,可为一篇文章 1万+

Mac 环境配置jdk、Maven

3、终端打开配置jdk时候建好的脚本文件: open -e .bash_profile。4、查看maven是否安装成功和系统能不能识别maven/mvn命令:⬇️。输入⬇️并保存: 其中第一行JAVA_HOME替换为自己下的jdk路径。,安装编译好的二进制版本,具体安装zip还是tar.gz我看的。5、查看jdk是否安装成功和系统能不能识别java命令:⬇️。至此,我的Mac系统的环境配置jdk、Maven完成!然后就发现我的maven命令还是没作用,不识别,下载后直接安装即可,很快,点几下就OK了。

weixin_42416791的博客 4394

Linux 下 TC 命令原理及详解

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的。然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾, 比如,远程登录的交互数据流应该比数据下载有更高的优先级。 针对不同的数据流采取不同的策略,这种可能性是存在的。并且,随着研究的发展和深入, 人们已经提出了各种...

pansaky的博客 4万+

DID实战指南:从平行趋势检验到PSM-DID的Stata全流程解析

本文详细解析了双重差分法(DID)在政策评估中的应用,从平行趋势检验到PSM-DID的Stata全流程操作。通过实例演示和代码示例,帮助研究者掌握DID方法的核心逻辑、前提条件验证及稳健性检验技巧,提升因果推断研究的准确性。

weixin_29234239的博客 741

基于STM32与FPGA Cyclone IV的FSMC高速数据通信实战解析

本文详细解析了基于STM32的FSMC接口与FPGA Cyclone IV实现高速并行数据通信的实战方案。通过将FPGA模拟为SRAM设备,构建了MCU与FPGA之间的高速数据通道,并深入探讨了硬件连接、STM32软件配置、FPGA逻辑设计及性能优化等关键步骤,为图像处理、高速采集等需要大数据量交换的嵌入式应用提供了稳定高效的通信解决方案。

swift5iosmith的博客 294

Linux流量控制TC中的HTB队列创建与过滤

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有Linux流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的。然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾, 比如,远程登录的交互数据流应该比数据下载有更高的优先级。 针对不同的数据流采取不同的策略,这种可能性是存在的。并且,随着研究的发展和深入, 人们已经提出...

571

dify制作的工作流如何通过API调用

本文介绍了如何通过Python程序调用Dify工作流API实现数据处理功能。文章详细展示了workflow和chatflow的调用方法,包括参数设置和结果输出,并提供了一个完整的API调用工具代码示例。该工具可实现文本处理、成果查重、关键词生成等功能,支持通过Python脚本或Postman进行调用。核心代码包含API请求函数和批量处理函数,通过HTTP请求与Dify服务端交互,实现自动化数据处理流程。

hhue2007的专栏 934

linux tc模块源代码,LINUX TC:HTB相关源码

static struct Qdisc *qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,struct Qdisc *p, u32 parent, u32 handle,struct nlattr **tca, int *errp){/**dev:创建的qdisc最终会关联到这个设备上*tca:是找到想要的Qd...

weixin_33329746的博客 499

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TC中的HTB队列简单创建与过滤

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有Linux流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的。然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾, 比如,远程登录的交互数据流应该比数据下载有更高的优先级。 针对不同的数据流采取不同的策略,这种可能性是存在的。并且,随着研究的发展和深入, 人们已经提出...

~~ LINUX ~~ 1780

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LINUX TC介绍

简介Linux内核网络协议栈从2.2.x开始,就实现了对服务质量的支持模块。具体的代码位于net/sched/目录。在Linux里面,对这个功能模块的称呼是Traffic Control ,简称TC。TC是一个在上层协议处添加Qos功能的工具,原理上看,它实质是专门供用户利用内核Qos调度模块去定制Qos的中间件。 Tc用于Linux内核的流量控制,流量...

weixin_34336292的博客 1937

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TC限速原理和TC限速的实现

接收包从输入接口进来后,经过流量限制丢弃不符合规定的数据包,由输入多路分配器进行判断选择,如果接收包的目的主机是本主机,那么将该包送给上层处理,否则需要进行转发,将接收包交到转发块(Forwarding Block)处理。因tap01口的出方向的流量就是进入虚拟机内部网卡的流量,所以限制tap01口的出方向的流量,就可以限制流入虚拟机的网络流量。因tap01口的入方向的流量就是虚拟机内部网卡发出的流量,所以限制tap01口的入方向的流量,即可限制流出虚拟机的网络流量。

larance的挨踢生活 4198

Linux tc 常用命令总结(网卡限速、延迟、丢包与整形)

本文介绍了Linux流量控制工具tc的核心功能与使用方法。主要内容包括:1)tc的核心概念(qdisc、class、filter等);2)常用队列规则(netem模拟弱网、tbf限速、htb分层带宽管理);3)ingress限速方案(policer与IFB);4)实战案例(弱网模拟、带宽限制等)。文章提供了基础命令速查表和典型配置示例,并附有验证排障技巧,适合快速掌握Linux网络流量控制技术。

永不止息 2379

linux-iproute2系列-TC命令

TC 规则: 1 流量控制方式: SHAPING(限制) 传输速率限制在某个值一下,只要是对外的流量 SCHEDULING(调度) 在带宽范围内,按照优先级分配带宽 POLICING(策略) 处理接收到的流量 DROPING(丢弃) 流量超过某个设定的值,不管向内还是向外流量,直接丢弃 2 流量控制处理对象 qdisc(排...

weixin_40342459的博客 1596

linux使用tc进行流量控制

Linux下利用TC工具控制网络流量(图)   一、相关概念    由此可以看出, 报文分组从输入网卡(入口)接收进来,经过路由的查找, 以确定是发给本机的,还是需要转发的。如果是发给本机的,就直接向上递交给上层的协议,比如TCP,如果是转发的, 则会从输出网卡(出口)发出。网络流量的控制通常发生在输出网卡处。虽然在路由器的入口处也可以进行流量控制,Linux也具有相关的功能,

xaiojiang的专栏 2761
上一篇: 网络QoS原理与实现
下一篇: Linux内核中Netfilter架构介绍
废言Pro
博客等级 码龄16年 1093粉丝 142原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值