Linux内核中网络数据的流量控制(TC: Traffic control 和 QDISC)

news2024/9/21 20:33:57

(个人能力有限,本文如有错误之处,欢迎交流指正)

1 简介

在进行网络数据 接收 和 发送 过程中,网卡设备到L3(网络层) 中间会经历流量控制(Traffic control)。

                                《BPF之巅.洞悉Linux系统和应⽤性能》P413

qdisc这个可选层可以⽤来管理⽹络包的流量分类(tc)、调度、修改、过滤 以及 整形操作。
                                《BPF之巅.洞悉Linux系统和应⽤性能》P417

Traffic control is the name given to the sets of queuing systems and mechanisms by which packets are received and transmitted on a router. This includes deciding (if and) which packets to accept at what rate on the input of an interface and determining which packets to transmit in what order at what rate on the output of an interface.
                                2. Overview of Concepts

When the kernel has several packets to send out over a network device, it has to decide which ones to send first, which ones to delay, and which ones to drop. This is the job of the queueing disciplines, several different algorithms for how to do this "fairly" have been proposed.

This is useful for example if some of your network devices are real time devices that need a certain minimum data flow rate, or if you need to limit the maximum data flow rate for traffic which matches specified criteria. This code is considered to be experimental.
                                <kernel-src>/net/sched/Kconfig

2 功能组成

2.1 流量控制的树状图

以HTB(qdisc)和U32(filter)为例

2.2 qdisc (queueing discipline)

2.2.1 简介

A qdisc is a scheduler. Every output interface needs a scheduler of some kind, and the default scheduler is a FIFO. Other qdiscs available under Linux will rearrange the packets entering the scheduler's queue in accordance with that scheduler's rules.
                                4. Components of Linux Traffic Control

⼏乎所有设备都会使⽤队列调度出⼝流量,⽽内核可以使⽤名为队列规则(queuing discipline)的算法安排帧,使其以最有效率的次序传输。
                                《深⼊理解LINUX⽹络技术内幕》P251, P252

qdisc对应的内核代码如下:

# ls net/sched/sch_
sch_api.c        sch_cbs.c        sch_etf.c        sch_gred.c       sch_mq.c         sch_plug.c       sch_sfq.c        
sch_atm.c        sch_choke.c      sch_fifo.c       sch_hfsc.c       sch_mqprio.c     sch_prio.c       sch_skbprio.c    
sch_blackhole.c  sch_codel.c      sch_fq.c         sch_hhf.c        sch_multiq.c     sch_qfq.c        sch_taprio.c     
sch_cake.c       sch_drr.c        sch_fq_codel.c   sch_htb.c        sch_netem.c      sch_red.c        sch_tbf.c        
sch_cbq.c        sch_dsmark.c     sch_generic.c    sch_ingress.c    sch_pie.c        sch_sfb.c        sch_teql.c   

2.2.2 可分类(classful) qdisc

2.2.2.1 简介

The flexibility and control of Linux traffic control can be unleashed through the agency of the classful qdiscs. Remember that the classful queuing disciplines can have filters attached to them, allowing packets to be directed to particular classes and subqueues.
                                7. Classful Queuing Disciplines (qdiscs)

2.2.2.2 包括的 qdisc

CBQ、HTB、HFSC、PRIO、WRR、ATM、DRR、DSMARK 和 QFQ 等。

相关资料:
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_cbq.txt
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_hfsc.txt
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_prio.txt
                7. Classful Queuing Disciplines (qdiscs)

2.2.3 不可分类(classless) qdisc

2.2.3.1 简介

The classless qdiscs can contain no classes, nor is it possible to attach filter to a classless qdisc. Because a classless qdisc contains no children of any kind, there is no utility to classifying. This means that no filter can be attached to a classless qdisc
                                4. Components of Linux Traffic Control

Each of these queuing disciplines can be used as the primary qdisc on an interface, or can be used inside a leaf class of a classful qdiscs. These are the fundamental schedulers used under Linux. Note that the default scheduler is the pfifo_fast.
                                6. Classless Queuing Disciplines (qdiscs)

2.2.3.2 包括的 qdisc

SFQ、ESFQ、RED、GRED 和 TBF 等。

相关资料:
                https://linux-tc-notes.sourceforge.net/tc/doc/sch_tbf.txt
                6. Classless Queuing Disciplines (qdiscs)

2.2.4 控制网络接收流量的qdisc——ingress

前面章节介绍的qdisc是用于网络数据发送的流量控制。用于网络数据接收流量的控制的qdisc是ingress。

代码:<kernel_src>/net/sched/sch_ingress.c

2.3 class

Classes only exist inside a classful qdisc (e.g., HTB and CBQ). Classes are immensely flexible and can always contain either multiple children classes or a single child qdisc [5]. There is no prohibition against a class containing a classful qdisc itself, which facilitates tremendously complex traffic control scenarios.

Any class can also have an arbitrary number of filters attached to it, which allows the selection of a child class or the use of a filter to reclassify or drop traffic entering a particular class.

A leaf class is a terminal class in a qdisc. It contains a qdisc (default FIFO) and will never contain a child class. Any class which contains a child class is an inner class (or root class) and not a leaf class.
                                4. Components of Linux Traffic Control

2.4 qdisc 和 class 的 handle

Every class and classful qdisc requires a unique identifier within the traffic control structure. This unique identifier is known as a handle and has two constituent members, a major number and a minor number. 

The numbering of handles for classes and qdiscs

major

This parameter is completely free of meaning to the kernel. The user may use an arbitrary numbering scheme, however all objects in the traffic control structure with the same parent must share a major handle number. Conventional numbering schemes start at 1 for objects attached directly to the root qdisc.

minor

This parameter unambiguously identifies the object as a qdisc if minor is 0. Any other value identifies the object as a class. All classes sharing a parent must have unique minor numbers.

The special handle ffff:0 is reserved for the ingress qdisc.
                                4. Components of Linux Traffic Control

2.5 filter

2.5.1 简介

The filter is the most complex component in the Linux traffic control system. The filter provides a convenient mechanism for gluing together several of the key elements of traffic control. The simplest and most obvious role of the filter is to classify (see Section 3.3, “Classifying”) packets. Linux filters allow the user to classify packets into an output queue with either several different filters or a single filter.

  • A filter must contain a classifier phrase.

  • A filter may contain a policer phrase.

Filters can be attached either to classful qdiscs or to classes, however the enqueued packet always enters the root qdisc first. After the filter attached to the root qdisc has been traversed, the packet may be directed to any subclasses (which can have their own filters) where the packet may undergo further classification.
                                4. Components of Linux Traffic Control

2.5.2 classifier

2.5.2.1 简介

Filter objects

The classifiers are tools which can be used as part of a filter to identify characteristics of a packet or a packet's metadata. The Linux classfier object is a direct analogue to the basic operation and elemental mechanism of traffic control classifying.
                                4. Components of Linux Traffic Control

2.5.2.2 内核⾥的 classifier
# ls net/sched/cls_
cls_api.c       cls_bpf.c       cls_flow.c      cls_fw.c        cls_route.c     cls_rsvp.c      cls_tcindex.c   
cls_basic.c     cls_cgroup.c    cls_flower.c    cls_matchall.c  cls_rsvp6.c     cls_rsvp.h      cls_u32.c

2.6 action

2.6.1 简介

Actions get attached to classifiers and are invoked after a successful classification. They are used to overwrite the classification result, instantly drop or redirect packets, etc.
                                 <kernel_src>/net/sched/Kconfig

2.6.2 对网络数据进行修改的actions——skbedit、pedit 和 skbmod

2.6.3 对接收到的数据进行镜像(复制)的action——mirred

The mirred action allows packet mirroring (copying) or redirecting (stealing) the packet it receives. Mirroring is what is sometimes referred to as Switch Port Analyzer (SPAN) and is commonly used to analyze and/or debug flows.
                                man tc-mirred

2.6.4 对接收到的数据进行流量控制的action——police

The police action allows to limit bandwidth of traffic matched by the filter it is attached to.
A typical application of the police action is to enforce ingress traffic rate by dropping exceeding packets.
                                man tc-police

2.6.5 内核下的actions

# ls net/sched/act_
act_api.c              act_ct.c               act_ipt.c              act_mirred.c           act_police.c           act_skbmod.c
act_bpf.c              act_ctinfo.c           act_meta_mark.c        act_mpls.c             act_sample.c           act_tunnel_key.c
act_connmark.c         act_gact.c             act_meta_skbprio.c     act_nat.c              act_simple.c           act_vlan.c
act_csum.c             act_ife.c              act_meta_skbtcindex.c  act_pedit.c            act_skbedit.c 

3 linux系统下配置流量控制 的方式

3.1 通过tc命令

第4章会举例说明

3.2 通过脚本(tcng)

参考:Traffic Control using tcng and HTB HOWTO

 

4 使用tc命令配置发送数据时的流量控制

4.1 简介

dev_queue_xmit函数是TCP/IP协议栈网络层执行发送操作与设备驱动程序之间的接口。
                                《嵌⼊式Linux⽹络体系结构设计与TCP/IP协议栈》6.5.4 dev_queue_xmit函数

在dev_queue_xmit函数内部会调用流量控制的功能。

《深⼊理解 LINUX ⽹络技术内幕》P260

4.2 tc命令用法演示

4.2.1 网络数据发送端流控示意图

4.2.2 tc命令

想要实现4.2.1小节图片中的功能,在网络数据发送端机器上执行以下tc命令:

tc qdisc add dev vmnet8 root handle 1: htb default 1           
tc class add dev vmnet8 parent 1: classid 1:1 htb rate 10mbit 
tc class add dev vmnet8 parent 1:1 classid 1:20 htb rate 4mbit  
tc class add dev vmnet8 parent 1:1 classid 1:30 htb rate 6mbit 

tc qdisc add dev vmnet8 parent 1:20 handle 2: prio  
tc qdisc add dev vmnet8 parent 1:30 handle 3: cbq avpkt 1500 bandwidth 1mbit

tc filter add dev vmnet8 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.173.129 flowid 1:1 action skbedit mark 7    
tc filter add dev vmnet8 parent 1:1 handle 7 fw  flowid 1:20 
tc filter add dev vmnet8 parent 1:1 handle 6 fw  flowid 1:30 
tc filter add dev vmnet8 protocol ip parent 2:0 prio 1 u32 match ip dport 5201 0xffff flowid 2:1       
tc filter add dev vmnet8 protocol ip parent 2:0 prio 1 u32 match ip dport 5202 0xffff flowid 2:2       

4.2.3 mark值为7时的统计信息

4.2.3.1 通过iperf命令收发数据

在数据接收端机器上执行:iperf -s -p 5201

在数据发送端机器上执行

# iperf -c 192.168.173.129  -p 5201
------------------------------------------------------------
Client connecting to 192.168.173.129, TCP port 5201
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  3] local 192.168.173.1 port 42760 connected with 192.168.173.129 port 5201
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  4.88 MBytes  4.08 Mbits/sec
#
4.2.3.2 查看qdisc统计信息
# tc -s qdisc ls dev vmnet8
qdisc htb 1: root refcnt 2 r2q 10 default 0x1 direct_packets_stat 9 direct_qlen 1000
 Sent 5346774 bytes 3543 pkt (dropped 0, overlimits 2259 requeues 0) 
 backlog 0b 0p requeues 0
qdisc prio 2: parent 1:20 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
qdisc cbq 3: parent 1:30 rate 1Mbit (bounded,isolated) prio no-transmit
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle 187500 undertime 0
4.2.3.3 查看class统计信息
# tc -s -d class ls dev vmnet8
class htb 1:1 root rate 10Mbit ceil 10Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 7 
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 1057 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 19175 ctokens: 19175

class htb 1:20 parent 1:1 leaf 2: prio 0 quantum 50000 rate 4Mbit ceil 4Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 0 
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 1202 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 1204 borrowed: 0 giants: 0
 tokens: -688 ctokens: -688

class htb 1:30 parent 1:1 leaf 3: prio 0 quantum 75000 rate 6Mbit ceil 6Mbit linklayer ethernet burst 1599b/1 mpu 0b cburst 1599b/1 mpu 0b level 0 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 33328 ctokens: 33328

class prio 2:1 parent 2: 
 Sent 5345060 bytes 3534 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:2 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:3 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class cbq 3: root rate 1Mbit linklayer ethernet cell 16b (bounded,isolated) prio no-transmit/8 weight 1Mbit allot 1514b 
level 0 ewma 5 avpkt 1500b maxidle 374us 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle 187500 undertime 0

在4.2.2小节中,使用了skbedit action,将MARK值设置为7,所以最终发送的数据会进入prio 队列。

4.2.4 mark值为6时的统计信息

4.2.4.1 修改mark值为6

在执行完4.2.2小节中的tc命令后,修改skbedit action的mark值为6,执行以下命令

# tc actions change skbedit mark 6 index 1
# tc actions list action skbedit
total acts 1

	action order 0: skbedit  mark 6 pipe
	 index 1 ref 1 bind 1

mark值除了可以使用skbedit action设置,还可以使用iptables命令设置,如下:

iptables -t mangle -A POSTROUTING -o vmnet8 -j MARK --set-mark 6
4.2.4.2 通过iperf命令收发数据

在数据接收端机器上执行:iperf -s -p 5202

在数据发送端机器上执行

# iperf -c 192.168.173.129  -p 5202
------------------------------------------------------------
Client connecting to 192.168.173.129, TCP port 5202
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  3] local 192.168.173.1 port 57256 connected with 192.168.173.129 port 5202
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.2 sec  7.38 MBytes  6.04 Mbits/sec
4.2.4.3 查看qdisc统计信息
# tc -s qdisc ls dev vmnet8
qdisc htb 1: root refcnt 2 r2q 10 default 0x1 direct_packets_stat 5 direct_qlen 1000
 Sent 8086838 bytes 5349 pkt (dropped 0, overlimits 2159 requeues 0) 
 backlog 0b 0p requeues 0
qdisc prio 2: parent 1:20 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
qdisc cbq 3: parent 1:30 rate 1Mbit (bounded,isolated) prio no-transmit
 Sent 8085960 bytes 5344 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle -2.52893e+07 undertime 0
4.2.4.4 查看class统计信息
# tc -s -d class ls dev vmnet8
class htb 1:1 root rate 10Mbit ceil 10Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 7 
 Sent 8085960 bytes 5344 pkt (dropped 0, overlimits 1075 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 19175 ctokens: 19175

class htb 1:20 parent 1:1 leaf 2: prio 0 quantum 50000 rate 4Mbit ceil 4Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 0 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 50000 ctokens: 50000

class htb 1:30 parent 1:1 leaf 3: prio 0 quantum 75000 rate 6Mbit ceil 6Mbit linklayer ethernet burst 1599b/1 mpu 0b cburst 1599b/1 mpu 0b level 0 
 Sent 8085960 bytes 5344 pkt (dropped 0, overlimits 1084 requeues 0) 
 backlog 0b 0p requeues 0
 lended: 1087 borrowed: 0 giants: 0
 tokens: 31953 ctokens: 31953

class prio 2:1 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:2 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class prio 2:3 parent 2: 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
class cbq 3: root rate 1Mbit linklayer ethernet cell 16b (bounded,isolated) prio no-transmit/8 weight 1Mbit allot 1514b 
level 0 ewma 5 avpkt 1500b maxidle 374us 
 Sent 8085894 bytes 1086 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0
  borrowed 0 overactions 0 avgidle -2.52893e+07 undertime 2.50558e+07

5 使用tc命令配置接收数据时的流量控制

5.1 使用police

       A typical application of the police action is to enforce ingress traffic rate by dropping exceeding packets.  Although  better  done  on  the
       sender's  side, especially in scenarios with lack of peer control (e.g. with dial-up providers) this is often the best one can do in order to
       keep latencies low under high load. The following establishes input bandwidth policing to 1mbit/s using the ingress qdisc and u32 filter:

# tc qdisc add dev eth0 handle ffff: ingress
# tc filter add dev eth0 parent ffff: u32 \
                   match u32 0 0 \
                   police rate 1mbit burst 100k

                                参考:man tc-police

5.2 使用mirred

Limit ingress bandwidth on eth0 to 1mbit/s, redirect exceeding traffic to lo for debugging purposes:

# tc qdisc add dev eth0 handle ffff: ingress
# tc filter add dev eth0 parent ffff: u32 \
                   match u32 0 0 \
                   action police rate 1mbit burst 100k conform-exceed pipe \
                   action mirred egress redirect dev lo

6 参考资料

Linux TC 流量控制与排队规则 qdisc 树型结构详解(以HTB和RED为例)-CSDN博客

Traffic Control HOWTO

流量控制 · GitBook

Linux TC(Traffic Control)框架原理解析_linux tc原理-CSDN博客

Index of /tc/doc

https://www.cnblogs.com/acool/p/7779159.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习-数据预处理-聚类-回归-分类-单车数据集

机器学习-数据预处理-聚类-回归-分类-单车数据集 前言一、数据预处理1. 导入数据集2. 数据预处理3. 处理缺失值4. 生成特征用于后续进一步的分析 二、数据分布可视化1. 骑行时长分布2. 起始站和终点站分布可视化3. 高峰期与非高峰期骑行频次分布 三、聚类分析1. K-means聚类 四…

PostgreSQL 连接器:在 SeaTunnel 中的应用与优势

在现代企业中&#xff0c;数据已经成为核心资产&#xff0c;基于开源数据集成平台SeaTunnel&#xff0c;工程师如何高效地连接和管理这些数据源&#xff0c;直接关系到企业的竞争力和运营效率。 本文将给大家介绍如何通过 JDBC PostgreSQL 数据源连接器&#xff0c;在 SeaTunne…

240627_图像24位深度(RGB图)转为8位深度(单通道图)

240627_图像24位深度&#xff08;RGB图&#xff09;转为8位深度&#xff08;单通道图&#xff09; 在使用网络上下载下来的一部分图像分割数据集时&#xff0c;有些标签图你看着是一个黑白图&#xff0c;但是他还是有可能是一张RGB三通道图&#xff0c;具体怎么区分呢。右击图…

ARM芯片架构(RTOS)

前言&#xff1a;笔记韦东山老师的rtos教程&#xff0c;连接放在最后 #ARM介绍 arm芯片属于精简指令集risc&#xff0c;所用的指令比较简单&#xff0c;ARM架构是一种精简指令集&#xff08;RISC&#xff09;架构&#xff0c;广泛应用于移动设备、嵌入式系统、物联网等领域。AR…

英国国王座驾车标的逆向工程

多功能设计和制造解决方案为独特的挑战提供了引人注目的优势。Impossible Creations是一家来自英国的定制扫描、设计和建模公司&#xff0c;专门帮助客户完成无限制得创作任务。在他们最近接到的一个项目中&#xff0c;为了修复象征英国国王座驾的大英帝国吉祥物&#xff0c;Im…

【博士每天一篇文献-综述】Biological underpinnings for lifelong learning machines

阅读时间&#xff1a;2023-12-17 1 介绍 年份&#xff1a;2015 作者&#xff1a;Dhireesha Kudithipudi&#xff0c;Mario Aguilar-Simon&#xff0c;其中通讯作者Josh Bongard教授也是另一篇论文的通讯作者《Neural modularity helps organisms evolve to learn new skills …

widows下 vscode 的 terminal / powershell,ctrl+v失灵,输出^v

问题 原因 最近装了PSReadLine Import-Module PSReadLineSet-PSReadLineOption -PredictionSource History Set-PSReadLineOption -PredictionViewStyle InlineView Set-PSReadLineOption -EditMode Emacsvscode不兼容 解决方法 注释掉最后面的 Import-Module PSReadLineS…

Linux通过expect实现免交互

免交互 Here Document 用于将多行字符串直接传递给命令的方式&#xff0c;不需要人为交互命令界面&#xff0c;实现免交互 当使用Here Document操作文件时&#xff0c;需要借助一个文件结束符 EOF&#xff1a;文件结束符 示例 在脚本文件中写入以下内容 <<&#x…

RabbitMQ安装部署

简介 RabbitMQ一款知名的开源消息队列系统&#xff0c;为企业提供消息的发布、订阅、点对点传输等消息服务。 RabbitMQ在企业开发中十分常见&#xff0c;课程为大家演示快速搭建RabbitMQ环境。 安装 rabbitmq在yum仓库中的版本比较老&#xff0c;所以我们需要手动构建yum仓库…

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中&#xff0c;算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战&#xff0c;加之OpenAI带来的技术封锁&#xff0c;唯有坚定不移的发展自主可控的国产技术方案&#xff0c;持续壮大国产智算集群规模&#…

等保测评中的问题与建议

随着信息技术的广泛使用和飞速发展&#xff0c;网络安全已逐渐演变为威胁经济社会发展的关键议题。信息安全的范围涵盖了政治、商务、军事、教育等多个方面。其中&#xff0c;信息的存储、分享以及管理&#xff0c;主要取决于政府的宏观规划和决策、商业运作的信息、银行的财务…

字节跳动发布的Coze,可以免费使用GPT-4o模型了

Coze是字节跳动推出的一个AI聊天机器人和应用程序编辑开发平台&#xff0c;可以理解为字节跳动版的GPTs。无论用户是否有编程经验&#xff0c;都可以通过该平台快速创建各种类型的聊天机器人、智能体、AI应用&#xff0c;并将其部署在社交平台和即时聊天应用程序中&#xff0c;…

丝杆支撑座:滚珠丝杆稳定运行的守护者!

丝杆支撑座是丝杆和电机之间连接的重要组成部分&#xff0c;发挥着非常重要的功能。提到丝杆支撑座和滚珠丝杆&#xff0c;很多人都会想到支撑关系&#xff0c;但丝杆支撑座作为滚珠丝杆系统中至关重要的角色&#xff0c;其作用远不止于简单的支撑。 丝杆支撑座安装过程非常简单…

解锁横向招聘:创新您的人才搜索

技能差距仍然是面试官面临的问题之一。在这些空缺职位中&#xff0c;很难找到合适的技能候选人&#xff0c;特别是高级职位或以上职位。另一方面&#xff0c;申请人也发现很难找到一份适合自己的工作&#xff0c;因为他们抱怨工作要求太窄或太具体。在具有挑战性的职位招聘环境…

目标检测之YoloV1

一、预测阶段&#xff08;前向推断&#xff09; 在预测阶段Yolo就相当于一个黑箱子&#xff0c;输入的是448*448*3的图像&#xff0c;输出是7*7*30的张量&#xff0c;包含了所有预测框的坐标、置信度和类别 为什么是7*7*30呢&#xff1f; --将输入图像划分成s*s个grid cell&a…

深海电波,智能驾驭:海上发电系统中的先进网关技术

随着技术的不断演进&#xff0c;海上风电场逐渐走向深海&#xff0c;随之而来的高速通信保障成为一大难题。同时&#xff0c;海上风电特殊的环境与部署技术&#xff0c;也给运维带来了作业难、成本高、响应慢等困难。通过在沿海岸边建立高站&#xff0c;结合超远覆盖、载波聚合…

Packer-Fuzzer一款好用的前端高效安全扫描工具

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、Packer Fuzzer介绍 Packer Fuzzer是一款针对Webpack…

SAP 免费退货销售订单类型配置简介

作为一名 SD顾问&#xff0c;必须具备熟悉系统和系统配置&#xff0c;但是之前都是做的PP顾问&#xff0c;现在用户需要新增了一个销售订单类型&#xff0c;所以自己研究销售订单类型的配置&#xff0c;才有了以下的文章&#xff0c;希望对各位学习的同学有所帮助 1、创建销售…

如何有效降低云消息使用成本?涂鸦Pulsar云消息史诗级大更新来了!超级干货攻略快收藏

月末了&#xff0c;相信大家都会有信用卡额度超支的担忧&#xff0c;生怕一不留神就会超出预算&#xff0c;并且事后还需要仔细核对消费情况。类似的焦虑&#xff0c;也会出现在使用涂鸦 Pulsar 云消息服务时。虽然涂鸦 Pulsar 云消息能满足开发者对设备各类事件实时性和持久化…

STM32单片机实现串口IAP升级

一.概述 1.要实现串口IAP升级&#xff0c;首先要编写一个bootloader程序&#xff0c;然后再写支持IAP的app程序&#xff1b; 2.keil下bootloader的程序rom和ram设置 3.app程序要用bin文件 注&#xff1a;本文以STM32H743举例&#xff0c;其他stm32单片机IAP升级原理类似。 …