IPerf——网络测试工具介绍与源码解析(5)

简介:

本篇随笔讲述一下TCP协议下,双向测试模式和交易测试模式下客户端和服务端执行的情况;

双向测试模式:

官方文档的解释

Run Iperf in dual testing mode. This will cause the server to connect back to the client on the port specified in the -L option (or defaults to the port the client connected to the server on). This is done immediately therefore running the tests simultaneously. If you want an alternating test try -r.

客户端连接到服务端进行数据发送的同时,服务端通过客户端设置的监听端口(可通过-L选项另行设置)向客户端发起连接进行数据发送,达成双向测试的效果。其实换句话来说就是模拟全双工通信模式。

交易测试模式:

官方文档的解释

Run Iperf in tradeoff testing mode. This will cause the server to connect back to the client on the port specified in the -L option (or defaults to the port the client connected to the server on). This is done following the client connection termination, therefore running the tests alternating. If you want an simultaneous test try -d.

 客户端连接到服务端进行数据发送结束后,服务端随即通过客户端设置的监听端口(可通过-L选项另行设置)向客户端发起连接进行数据发送,相应的就是模拟半双工通信模式。

 

两者的区别在于服务端何时模拟客户端的功能开始往回连接。这点在IPerf中很容易就实现了。

其实thread_Settings结构中存在两个指向thread_Setting类型的指针变量,分别命名为runNow和runNext,以往介绍IPerf的随笔中指出过,thread_Settings包涵了线程运行时所需的全部信息,程序是根据该类型的变量生成各种类型的线程,runNow表示在创建当前的线程之前需要先创建runNow指向的线程,而runNext表示当前线程结束后才创建runNext所指向的线程。定位到具体的代码如下所示:

复制代码
复制代码
            if ( tempSettings != NULL ) 
            {
                client_init( tempSettings );
                if ( tempSettings->mMode == kTest_DualTest ) 
                {
#ifdef HAVE_THREAD
                    server->runNow =  tempSettings;
#else
                    server->runNext = tempSettings;
#endif
                } else // if tradoff mode
                {
                    server->runNext =  tempSettings;
                }
            }
复制代码
复制代码

 

双向测试和交易测试其实就是:

1. 在客户端添加服务端的功能,表现在开始时添加了一个监听者线程,接收到服务端连接过来的套接字后添加了一个服务端线程;

2. 在服务端线程添加了客户端线程。

需要注意的一点就是,客户端监听服务端连接过来的套接字时,不是随便谁的连接都在接收后将其放入客户端链表,它需要判断对端的地址是否是当前这端客户端线程所连接的服务端的地址,如果不是则将其丢弃,并重新监听,具体定位到代码表示如下:

复制代码
复制代码
            if ( client )
            {
                //检测发起反向连接的对端是不是用户指定的服务端
                if ( !SockAddr_Hostare_Equal( (sockaddr*) &mSettings->peer, (sockaddr*) &server->peer ) )
                {
                    // Not allowed try again
                    close( server->mSock );
                    if ( isUDP( mSettings ) ) 
                    {
                        mSettings->mSock = -1;
                        Listen();
                    }
                    continue;
                }
            }
复制代码
复制代码

 下面两张图展示双向测试模式下客户端和服务端的执行过程:

 

 

目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
553 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
11月前
|
测试技术
Fast网络速度测试工具
Fast是由Netflix提供的网络速度测试工具,可快速测量用户的下载、上传速度及延迟。其全球可用、无广告干扰,并支持多种设备。测试自动进行,结果以Mbps显示。此外,用户可通过“Show more info”查看上传速度和延迟(含缓冲膨胀)。Fast以其简单快捷的特点,帮助用户了解网络性能并解决潜在问题,是评估网速的理想选择。
1339 0
Fast网络速度测试工具
|
6月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
370 6
|
7月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
1498 10
|
7月前
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
1002 0
|
8月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
9月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1293 23
|
9月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
8月前
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。
|
9月前
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
2795 4

推荐镜像

更多
  • DNS