iperf 测 TCP 和 UDP 网络吞吐量

注:本文为 “iperf 测网络吞吐量” 相关文章合辑

未整理去重。


使用 iperf3 监测网络吞吐量

Tom 王 2019-12-21 22:23:52

一 iperf3 介绍

(1.1) iperf3 是一个网络带宽测试工具,iperf3 可以擦拭 TCP 和 UDP 带宽质量。iperf3 可以测量最大 TCP 带宽,具有多种参数和 UDP 特性,iperf3 可以报告带宽、延迟抖动和数据包丢失。利用 iperf3 这一特性,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。

(1.2) 使用 iperf3,你可以调整与时序、缓冲区和协议(如 TCP、UDP、SCTP)相关的几个参数。它对网络性能调优操作很方便,为了获得最大或相当改善的网络性能,你需要增加吞吐量以及网络接收个发送功能的延迟。但是在进行实际调整之前,你需要执行一些测试以收集整体网络性能统计信息,以指导你的调优过程。其结果包括以秒为单位的时间间隔,数据传输,带宽(传输速率),丢失和其他有用的网络性能参数,它主要用于协助调整特定路径上的 TCP 连接。

二 iperf3 安装

(2.1) 我们使用的操作系统是 CentOS 7.4,然后我们使用 base 源安装,便可以将 iperf3-3.1.7-2.el7.x86_64 软件包安装好。

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_iperf3

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_运维_02

(2.2) 然后我们使用两台主机,其中 192.168.26.51 作为服务器端,将 192.168.26.131 作为客户端。在两台主机上安装好 iperf3 后,即可开始测试网络吞吐量。我们首先连接到我们的服务器端的远程机器使用 - s 标志的是服务器模式下的 iperf3,默情况下它将监听 5201 端口,我们也可以使用 - f 开关指定生成报告的数据格式类型(其中 k 表示 Kbits、m 表示 Mbits、g 表示 Gbits、K 表示 KBytes、M 表示 MBytes、G 表示 GBytes)。

# iperf3 -s -f K

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_Linux_03

(2.3) 如果服务器上的另一个程序正在使用端口 5201,则我们可以使用 - p 开关指定其他端口监听(例如指定 4000 端口)

# iperf3 -s -p 4000

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_iperf3_04

(2.4) 我们也可以使用 - D 标志作为守护程序运行,并将服务器消息写入日志文件

# iperf3 -s -D > iperf3.log

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_iperf3_05

三 iperf3 客户端操作

(3.1) 我们将 192.168.26.51 作为服务器,并且执行监听 5201 端口的命令(图 3-1),在客户端 192.168.26.131 的主机上,使用 - c 标志在客户端模式下运行 iperf3 并指定运行服务器的主机(使用 IP 地址或域主机名都可以)。执行大约 18 至 20 秒后,客户端终止并生成指示基准测试平均吞吐量的结果,显示信息如下(图 3-2)。

注意:从基准测试结果中,如下面的屏幕接入所示,服务器和客户端的值存在差异,但是,我们应该始终考虑在执行的每个测试中使用从 iperf3 客户端主机获得的结果。

\# iperf3 -s -f K— 在服务器端执行\# iperf3 -c 192.168.26.51 -f K— 在客户端执行

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_Linux_06

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_运维_07

(3.2) 如果我们想在 Linux 中实现先进的网络测试吞吐量,确定网络中给定时间内数据量的一个重要因素是 TCP 窗口大小,它在调整 TCP 连接时很重要,我们可以使用 - w 标志设置窗口大小、套接字缓冲区大小,如图所示。

\# iperf3 -c 192.168.26.51 -f K -w 200K

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_iperf3_08

(3.3) 如果要在服务器发送和客户端接收的反向模式下运行,可以添加 - R 开关。

\# iperf3 -c 192.168.26.51 -f K -w 200K -R

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_运维_09

(3.4) 如果要运行双向测试,意味着我们要同时测量两个方向上的宽带,可以使用 - d 选项。

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_运维_10

(3.5) 如果要在客户端输出中获取服务器结果,可以使用 “–get-server-output” 选项,此时我们便会在客户端 192.168.26.131 主机上获取两份数据。

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_运维_11

(3.6) 也可以使用 - P 选项设置并行客户端流的数量,它们同时运行

【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_运维_12

——— 本文至此结束 ———


iperf 测 UDP 和 TCP 丢包率及带宽

嘟嘟嘟嘟于 2021-09-01 16:34:39 发布

iperf

iperf3 (安装包是:iperf-master)安装遇到 error while loading shared libraries:libiperf.so.0

解决方法:在正常编译以后运行 ldconfig

安装软件包的方法 (参考 REDMINE):在顶层目录下:

./configure
make
make install

yqq@ubuntu18:~/Tool/iperf-master$ iperf3 -s
iperf3: error while loading shared libraries: libiperf.so.0: cannot open shared object file: No such file or directory
yqq@ubuntu18:~/Tool/iperf-master$ sudo ldconfig
yqq@ubuntu18:~/Tool/iperf-master$ iperf3 -s
//tcp 和 udp 服务器端用 iperf3 的话都是这个命令,如果是 udp,在客户端加上 - u 即可
// 如果是 iperf,tcp 和 udp 在服务器端加 - u,tcp 和 udp 的客户端命令相同
Server listening on 5201 (test #1)

安装

方法 1:sudo apt-get install iperf

方法 2:下载 iperf 的源码包 ( 在板子上使用二进制文件时,可将源码直接拷贝到板子上 ./configure make)

测试

无论是 tcp 还是 udp 方式测试,都要一端运行服务器模式,另一端运行客户端模式,另外如果打开了 iptables, 要打开 tcp 5001 端口,当然也可以指定端口

tcp 方式

服务器端:iperf -s

客户端: iperf -c SERVERIP -t 60 -i 1 -P 5

udp 方式

服务器端:iperf -u -s //iperf3 服务端不支持 - u 选项

客户端: iperf -c SERVERIP -t 60 -i 1 -b 100M

共用的指令

-f            -- 格式 [k|m|K|M] 分别表示 Kbits,Mbits,Kbits,KBytes,MBytes 显示报告,默认是 Mbits
-i            -- 以秒为单位统计带宽值
-l            -- 读写缓冲区的大小,默认是 8kb
-m            -- 显示最大的 TCP 数据段大小 (MTU-TCP/IP header)
-o            -- 将报告和错误信息输出到文件
-p            -- 指定服务器和客户端连接的端口
-w            -- 指定 TCP 窗口的大小,默认是 8KB
-B            -- 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C            -- 兼容旧版本(当 server 和 client 端版本不一样时使用)
-M            -- 指定 TCP 数据包的最大 MTU 值
-N            -- 设定 TCP 不延时
-V            -- 传递 ipv6 数据包
适用于 server
-s            -- 服务器
-U            -- 单线程 UDP 模式下运行
-D            -- 以守护进程模式运行
适用于 client
-b            -- 指定客户端通过 udp 协议发送信息的带宽,默认为 1Mbit/s
-c            -- 客户端
-d            -- 同时进行双向传输测试
-n            -- 指定传输的字节数
-r            -- 单独进行双向传输测试
-t            -- 指定 iperf 测试时间,默认 10-F            -- 指定需要传输的文件
-I            -- 从标准输入 (stdin) 中读取要传输的数据
-L            -- 指定一个端口,服务器将利用这个端口与客户端相连
-P            -- 客户端到服务器的连接数,默认为 1
-T            --ttl 值
-u            -- 使用 udp 协议# iperf -s -u               // 此为 iperf,不是 iperf3,如果是 iperf3 则如果是测试 UDP,则在客户端加上 - u,服务器不需要 - u------------------------------------------------------------Server listening on UDP port 5001Receiving 1470 byte datagramsUDP buffer size:  208 KByte (default)------------------------------------------------------------[  3] local 192.168.1.6 port 5001 connected with 192.168.1.6 port 52657
[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-16.4 sec   196 MBytes   101 Mbits/sec   0.003 ms    0/139968 (0%)
[  3]  0.0-16.4 sec  1 datagrams received out-of-order
[  4] local 192.168.1.6 port 5001 connected with 192.168.1.6 port 39426
[  4]  0.0-41.1 sec  2.90 GBytes   606 Mbits/sec   0.004 ms 9271/2128456 (0.44%)
[  4]  0.0-41.1 sec  1 datagrams received out-of-order
[  3] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 60678
[  3]  0.0-22.1 sec  1.55 GBytes   602 Mbits/sec   0.032 ms 4317/1136481 (0.38%)
[  3]  0.0-22.1 sec  1 datagrams received out-of-order
[ 3840.205662] ata1: exception Emask 0x10 SAct 0x0 SErr 0x10200 action 0xe frozen
[ 3840.213102] ata1: irq_stat 0x00400000, PHY RDY changed
[ 3840.218375] ata1: SError: { Persist PHYRdyChg }
12345678910111213141516171819
# iperf  -c 192.168.1.6 -t 60 -i 1 -b 1GB
WARNING: option -b implies udp testing
------------------------------------------------------------
Client connecting to 192.168.1.6, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.6 port 39426 connected with 192.168.1.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  76.0 MBytes   638 Mbits/sec
[  3]  1.0- 2.0 sec  71.2 MBytes   597 Mbits/sec
[  3]  2.0- 3.0 sec  65.2 MBytes   547 Mbits/sec
[  3]  3.0- 4.0 sec  66.5 MBytes   557 Mbits/sec
[  3]  4.0- 5.0 sec  72.5 MBytes   608 Mbits/sec
[  3]  5.0- 6.0 sec  73.4 MBytes   616 Mbits/sec
[  3]  6.0- 7.0 sec  76.8 MBytes   644 Mbits/sec
[  3]  7.0- 8.0 sec  76.2 MBytes   639 Mbits/sec
[  3]  8.0- 9.0 sec  75.1 MBytes   630 Mbits/sec
[  3]  9.0-10.0 sec  76.6 MBytes   643 Mbits/sec
[  3] 10.0-11.0 sec  76.3 MBytes   640 Mbits/sec
[  3] 11.0-12.0 sec  76.7 MBytes   643 Mbits/sec
[  3] 12.0-13.0 sec  76.1 MBytes   638 Mbits/sec
[  3] 13.0-14.0 sec  76.4 MBytes   641 Mbits/sec
[  3] 14.0-15.0 sec  76.8 MBytes   644 Mbits/sec
[  3] 15.0-16.0 sec  76.7 MBytes   643 Mbits/sec
[  3] 16.0-17.0 sec  72.8 MBytes   610 Mbits/sec
[  3] 17.0-18.0 sec  69.5 MBytes   583 Mbits/sec
[  3] 18.0-19.0 sec  69.6 MBytes   584 Mbits/sec
[  3] 19.0-20.0 sec  75.8 MBytes   636 Mbits/sec
[  3] 20.0-21.0 sec  62.1 MBytes   521 Mbits/sec
[  3] 21.0-22.0 sec  76.1 MBytes   639 Mbits/sec
# iperf -c 127.0.0.1 -t 60 -i 1 -b 4g
WARNING: option -b implies udp testing
------------------------------------------------------------
Client connecting to 127.0.0.1, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  208 KByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 60678 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  78.8 MBytes   661 Mbits/sec
[  3]  1.0- 2.0 sec  77.2 MBytes   648 Mbits/sec
[  3]  2.0- 3.0 sec  70.1 MBytes   588 Mbits/sec
[  3]  3.0- 4.0 sec  73.5 MBytes   617 Mbits/sec
[  3]  4.0- 5.0 sec  73.1 MBytes   613 Mbits/sec
[  3]  5.0- 6.0 sec  72.4 MBytes   608 Mbits/sec
[  3]  6.0- 7.0 sec  74.5 MBytes   625 Mbits/sec
[  3]  7.0- 8.0 sec  61.4 MBytes   515 Mbits/sec
[  3]  8.0- 9.0 sec  71.0 MBytes   596 Mbits/sec

iPerf 3 测试 UDP 和 TCP 方法详解

诸葛悠闲已于 2024-12-11 10:50:41 修改

前言

工具安装、说明等详细信息可参考官方文档

  • ipef user doc
    https://iperf.fr/iperf-doc.php#3doc

一、What is iPerf /iPerf3 ?

Perf3 是一款用于主动测量 IP 网络最大带宽的工具。它支持调整与定时、缓冲区和协议(TCP、UDP、SCTP 与 IPv4 和 IPv6)相关的各种参数。每次测试都会报告带宽、损耗和其他参数。

二、功能

1. TCP and SCTP

  • 测量带宽

  • 报告 MSS/MTU 大小和观察到的读取大小

  • 通过套接字缓冲区支持 TCP 窗口大小。

2. UDP

  • 客户端可创建指定带宽的 UDP 数据流

  • 测量数据包丢失

  • 测量延迟抖动

  • 支持组播

3. 其他

  • 客户端和服务器可同时进行多个连接(-P 选项)。

  • 服务器处理多个连接,而不是在一次测试后退出。

  • 可在指定时间(-t 选项)内运行,而不是在设定的数据传输量(-n 或 -k 选项)内运行。

  • 以指定时间间隔打印定期的中间带宽、抖动和损耗报告(-i 选项)。

  • 将服务器作为守护进程运行(-D 选项)

  • 使用代表性数据流测试链路层压缩对可实现带宽的影响(-F 选项)。

  • 服务器同时接受单个客户端(iPerf3)或多个客户端(iPerf2)

  • 新功能:忽略 TCP 慢启动(-O 选项)。

  • 新功能:为 UDP 和(新)TCP 设置目标带宽(-b 选项)。

  • 新功能:设置 IPv6 流量标签(-L 选项)

  • 新功能:设置拥塞控制算法(-C 选项)

  • 新功能: 使用 SCTP 而非 TCP(–sctp 选项)

  • 新功能: 以 JSON 格式输出(-J 选项)。

  • 新功能: 磁盘读取测试(服务器:iperf3 -s / 客户端:iperf3 -c testhost -i1 -F 文件名)

  • 新功能: 磁盘写入测试(服务器:iperf3 -s -F 文件名 / 客户端:iperf3 -c testhost -i1)

三、 Iperf 的使用

1. Iperf 的工作模式

Iperf 可以运行在任何 IP 网络上,包括本地以太网、接入因特网、Wi-Fi 网络等。在工作模式上,iperf 运行于服务器、客户端模式下,其服务器端主要用于监听到达的测试请求,而客户端主要用于发起测试连接会话,因此要使用 iperf 至少需要两台服务器,一台运行在服务器模式下,另一台运行在客户端模式下。

2. 通用指令

在这里插入图片描述

3. 服务端特有选项

在这里插入图片描述

4. 客户端特有选项

在这里插入图片描述

5. -t -n 参数联系

-t 参数说明如下:

在这里插入图片描述

-n 参数说明如下:

在这里插入图片描述

-n 会重写 - t 参数,-n 参数会使 - t 参数失效。

-n 30M 意思表明,传输完 30M 便停止,-t 失效。

在这里插入图片描述

四、Iperf 使用实例

1. 调整 TCP 连接

1. 1 TCP 窗口大小调节

iPerf 的主要目标是帮助调整特定路径上的 TCP 连接。TCP 最基本的调整问题是 TCP 窗口大小,它控制着网络中任何一点的数据量。如果窗口大小太小,发送方有时就会处于空闲状态,从而导致性能低下。

窗口大小的理论值为:

瓶颈带宽 * 往返时间

若瓶颈链路是 45 Mbit/sec 链路,用 ping 测量的往返时间是 42 ms。带宽延迟乘积为:

45 Mbit/sec * 42 ms
= (45e6) * (42e-3)
= 1890000 bits
= 230 KByte

这是计算最佳窗口大小的一个起点;将其设置得更高或更低可能会产生更好的结果。

请注意,许多操作系统和主机都有 TCP 窗口大小的上限。iPerf 会尝试检测这些限制,并在实际窗口大小与请求的窗口大小不相等时发出警告。

另一个测试方法是运行并行 TCP 流。如果总带宽大于单个数据流的带宽,就说明出了问题。要么是 TCP 窗口大小太小,要么是操作系统的 TCP 实现有问题,要么是网络本身有缺陷。

测试示例:

  • 启动服务端

在这里插入图片描述

  • 启动客户端
  1. 单线程测试,TCP 窗口大小 1000 字节。(非常小,所以性能不能达到网卡瓶颈 1Gbit)

在这里插入图片描述

  1. 单线程测试,TCP 窗口大小 16K。速度有所提升

在这里插入图片描述

  1. 单线程测试,窗口调整为 420K 时,基本达到了 1Gbit 的极限。

在这里插入图片描述

  1. 最后测试一下多线程,使用 190k 的窗口,同样可以把网卡极限跑满:

在这里插入图片描述

所以如果我们使用单线程传输,tcp 窗口的大小很关键。

1. 2 最大传输单元 (MTU) 调整

为了达到最佳效果,两台主机都应支持路径 MTU 发现。不支持路径 MTU 发现的主机通常使用 536 作为 MSS,这会浪费带宽和处理时间。使用 -m 选项可显示正在使用的 MSS,并查看是否与预期相符。以太网的 MSS 通常在 1460 字节左右。

2. 调整 UDP 连接

iPerf 创建了一个恒定比特率的 UDP 数据流。没有其他功能。

需要将数据报大小 (-l) 调整为您的应用程序所使用的大小。

服务器通过数据报中的 ID 号来检测 UDP 数据段是否丢失。通常,一个 UDP 数据段会变成多个 IP 数据包。丢失一个 IP 数据包就会丢失整个数据段。要测量数据包丢失而不是数据段丢失,可使用 -l 选项使数据段小到足以容纳进一个数据包。默认的 1470 字节大小适用于以太网。还能检测出乱序数据包。由于 TCP 不会向用户报告数据包丢失情况,UDP 测试有助于查看路径上的数据包丢失情况。

根据 RFC 1889 中 RTP 的规定,抖动计算由服务器持续计算。客户端在数据包中记录 64 位秒 / 微秒时间戳。服务器计算的相对传输时间为(服务器接收时间 - 客户端发送时间)。客户端和服务器的时钟无需同步;抖动计算中会减去任何差异。抖动是连续传输时间差的平滑平均值。

测试示例:

  • 服务端启动

在这里插入图片描述

  • 启动客户端

在这里插入图片描述

请注意,在使用较大的 50 KB 数据报(每个数据报分成 23 个 1500 字节的数据包)时,数据报重组导致的抖动较高。这里看到的数据报丢包率较高,可能是由于流量的突发性,即 23 个背靠背的数据包,然后是长时间的停顿,而不是均匀分布的单个数据包。

在这里插入图片描述

3. 测试 TCP 吞吐量

  • Server 端开启 iperf 的服务器模式:

在这里插入图片描述

  • Client 端启动 iperf 的客户端模式

在这里插入图片描述

  • Server 端监听结果

在这里插入图片描述

① Interval 表示时间间隔。

② Transfer 表示时间间隔里面转输的数据量。

③ Bandwidth 是时间间隔里的传输速率 。

4. 测试 UDP 吞吐量

带宽测试通常采用 UDP 模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为 100Mbps,先用 - b 100M 进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。

  • Server 端开启 iperf 的服务器模式

在这里插入图片描述

  • Client 端启动 iperf 的客户端模式,连接服务端

在这里插入图片描述

  • Server 端监听结果

在这里插入图片描述

① Jitter 为抖动,在连续传输中的平滑平均值差。

② Lost 为丢包数量。

③ Total Datagrams 为包数量。


via:

  • 【讲清楚,说明白!】使用 iperf3 监测网络吞吐量_51CTO 博客_iperf3 测试吞吐量
    https://blog.51cto.com/u_13613726/2460671

  • iperf 测 UDP 和 TCP 丢包率及带宽_iperf udp-CSDN 博客
    https://blog.csdn.net/weixin_38717634/article/details/120042874

  • iPerf 3 测试 UDP 和 TCP 方法详解_iperf3 udp-CSDN 博客
    https://blog.csdn.net/weixin_44399845/article/details/137950306

  • Udp 数据丢包测试 --iperf3_iperf3 udp 测试 - CSDN 博客
    https://blog.csdn.net/weixin_44011068/article/details/107383079

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

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

相关文章

神经网络的数据流动过程(张量的转换和输出)

文章目录 1、文本从输入到输出,经历了什么?2、数据流动过程是张量,如何知道张量表达的文本内容?3、词转为张量、张量转为词是唯一的吗?为什么?4、如何保证词张量的质量和合理性5、总结 🍃作者介…

MediaPipe与YOLO已训练模型实现可视化人脸和手势关键点检测

项目首页 - ZiTai_YOLOV11:基于前沿的 MediaPipe 技术与先进的 YOLOv11 预测试模型,精心打造一款强大的实时检测应用。该应用无缝连接摄像头,精准捕捉画面,能即时实现人脸检测、手势识别以及骨骼关键点检测,将检测结果实时、直观地…

JAVA篇12 —— 泛型的使用

​ 欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【JAVA学习】 如果这篇文章对你有帮助,希望点赞收藏加关注啦~ 1 泛型介绍 先对集合进行说明,不能对加入到集合中的元素类型进行约束(不安全)。遍历的时候需要…

JavaScript 数据类型

基本概念 什么是数据类型 JavaScript是一种 灵活的动态类型语言 ,其数据类型构成了程序的基础构建块。它主要包括两类数据类型: 原始数据类型 :包括String、Number、Boolean、Undefined、Null和Symbol。 复杂数据类型 :以Object…

被裁与人生的意义--春节随想

还有两个月就要被迫离开工作了十多年的公司了,不过有幸安安稳稳的过了一个春节,很知足! 我是最后一批要离开的,一百多号同事都没“活到”蛇年。看着一批批仁人志士被“秋后斩首”,马上轮到我们十来个,个中滋味很难言清…

Redis代金卷(优惠卷)秒杀案例-多应用版

Redis代金卷(优惠卷)秒杀案例-单应用版-CSDN博客 上面这种方案,在多应用时候会出现问题,原因是你通过用户ID加锁 但是在多应用情况下,会出现两个应用的用户都有机会进去 让多个JVM使用同一把锁 这样就需要使用分布式锁 每个JVM都会有一个锁监视器,多个JVM就会有多个锁监视器…

绘制决策树尝试3

目录 代码解读AI 随机状态 种子 定义决策树回归模型 tree的decision regressor fit 还可用来预测 export 效果图 我的X只有一个特征 为何这么多分支 ??? 这是CART回归 CART回归 为什么说代码是CART回归? 不是所有的决…

为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1

为大模型提供webui界面的利器:Open WebUI Open WebUI的官网:🏡 Home | Open WebUI 开源代码:WeTab 新标签页 Open WebUI是一个可扩展、功能丰富、用户友好的自托管AI平台,旨在完全离线运行。它支持各种LLM运行程序&am…

langchain 实现多智能体多轮对话

这里写目录标题 工具定义模型选择graph节点函数定义graph 运行 工具定义 import random from typing import Annotated, Literalfrom langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.prebuilt import InjectedSt…

【Block总结】CPCA,通道优先卷积注意力|即插即用

论文信息 标题: Channel Prior Convolutional Attention for Medical Image Segmentation 论文链接: arxiv.org 代码链接: GitHub 创新点 本文提出了一种新的通道优先卷积注意力(CPCA)机制,旨在解决医学图像分割中存在的低对比度和显著…

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。 如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。 最终,我们将实现以下功能: …

强化学习、深度学习、深度强化学习的区别是什么?

前言 深度强化学习就是 深度学习 和 强化学习 的结合体。它让计算机程序(也就是智能体)在特定环境中不断尝试,从错误中学习,最终找到最优的行动策略。 深度学习是AlphaGo从棋谱里学习,强化学些Alphazero 学习规则&am…

string类(详解)

为什么学习string类? 1.1 C语言中的字符串 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想&#xf…

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …

一些计算机零碎知识随写(25年2月)

今天复习 MySQL 的时候,我突然冒出一个想法:能不能远程连接 MySQL 呢?虽说心里清楚理论上可行,但一直没实际操作过。 于是,起床后我立马打开服务器,准备启动 MySQL。结果,这一启动就发现问题了&…

ESP32-c3实现获取土壤湿度(ADC模拟量)

1硬件实物图 2引脚定义 3使用说明 4实例代码 // 定义土壤湿度传感器连接的模拟输入引脚 const int soilMoisturePin 2; // 假设连接到GPIO2void setup() {// 初始化串口通信Serial.begin(115200); }void loop() {// 读取土壤湿度传感器的模拟值int sensorValue analogRead…

Java 大视界 -- Java 大数据在量子通信安全中的应用探索(69)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

86.(2)攻防世界 WEB PHP2

之前做过&#xff0c;回顾一遍&#xff0c;详解见下面这篇博客 29.攻防世界PHP2-CSDN博客 既然是代码审计题目&#xff0c;打开后又不显示代码&#xff0c;肯定在文件里 <?php // 首先检查通过 GET 请求传递的名为 "id" 的参数值是否严格等于字符串 "admi…

从理论到实践:Linux 进程替换与 exec 系列函数

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 在Linux中&#xff0c;进程替换&#xff08;Process Substitution&#xff09;是一个非常强大的特性&#xff0c;它允许将一个进程的输出直接当作一个文件来处理。这种技术通常用于Shell脚本和命令行操作中…

【数据结构】初识链表

顺序表的优缺点 缺点&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度效率较低&#xff0c;为O(N) 空间不够的时候需要扩容。 如果是异地扩容&#xff0c;增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff0c;会有不小的消耗。 扩容可能会存在…