泉州建设网站公司,国内知名的网站建设企业,互联网销售平台,当今十大热门行业本文目录一、测试用命令二、iperf3状态机中各个状态解析三、iperf3状态机迁移分析K-初始化测试对象#xff08;NA---初始化状态#xff09;:A-服务器端测试对象开始运行#xff08;初始化状态---IPERF_START状态#xff09;:B-建立控制连接#xff08;初始化状态-…
本文目录一、测试用命令二、iperf3状态机中各个状态解析三、iperf3状态机迁移分析K-初始化测试对象NA---初始化状态:A-服务器端测试对象开始运行初始化状态---IPERF_START状态:B-建立控制连接初始化状态---IPERF_START状态::C-完成服务端与客户端的配置参数交换:这里描述的是iperf3进行单向TCP正向流测试时的状态机转换过程以及转换过程中的代码调用关系。通过前面的iperf3代码主要架构分析之main函数主要流程我们已经知道iperf3虽然是C语言编写的但它是以面向对象的方式实现的所以本文中讲述的状态机是以每个测试对象即为每次测试实例的运行过程创建一个测试对象从测试开始到测试进行到测试结束输入测试报告管理测试实例的整个生命周期为单位的。每个测试对象都拥有独立的状态机。所以这里同时也引也客户端和服务端都有自己的独立的状态机客户端的状态会通过ctrl_socket同步到服务端引发服务端状态变化。因为客户端状态切换
一、测试用命令
在正常的测试过程中使用如下图描述的命令启动iperf3进行单向TCP正向流测试
服务端
iperf3 -s客户端 总共发送8K数据每次发送1K
iperf3 -c 127.0.0.1 -n 8K -l 1K二、iperf3状态机中各个状态解析
有限状态机编程通常是由当前状态事件条件动作状态迁移或称为目标状态的五元组组成的。所以下面我们也会用这五元组来描述状态。如图所示iperf3在正常情况下客户端启动测试后就一直跑到测试完成中途不中断测试有10个状态。状态迁移方向如如箭头所示状态迁移发生的”事件条件“由箭头上的字母标识会在下一章中详细解析。
初始化状态 服务端开始运行创建测试对象后测试对象就直接进入这个状态这是一个中间状态测试对象不会一停留在这个状态下。IPERF_START状态 测试对象创建好后会开始创建监听端口并进入监听状态然后进入到IPERF_START状态下。PARAM_EXCHANGE状态 在这个状态下通过控制链接完成客户端和服务端的参数交换即服务端收取客户端发过过的配置参数。CREATE_STREAM状态 未完待续TEST_START状态 未完待续TEST_RUNNING状态 未完待续TEST_END状态 未完待续EXCHANGE_RESULT状态 未完待续DISPLAY_RESULT状态 未完待续IPERF_DONE状态 未完待续
三、iperf3状态机迁移分析
K-初始化测试对象NA—初始化状态:
服务端开始运行创建测试对象后对象状态会直接初始化成初始化状态函数调用关系如下
debug out: func main ,line 62, file main.c
debug out: func iperf_new_test ,line 2732, file iperf_api.c
debug out: set the state from 0
状态机元组名称状态机元组当前值当前状态无事件条件perf3做为服务端被启动运行动作K-初始化测试对象下一状态初始化状态
A-服务器端测试对象开始运行初始化状态—IPERF_START状态:
服务端开始运行创建测试对象后读取配置参数并创建服务端监听端口状态将从 初始化状态 变成 IPERF_START状态 。
debug out: func main ,line 62, file main.c
debug out: func iperf_new_test ,line 2732, file iperf_api.c
debug out: set the state from 0
-----------------------------------------------------------------------------------
debug out: func iperf_defaults ,line 2796, file iperf_api.c
debug out: func iperf_parse_arguments ,line 1125, file iperf_api.c
debug out: func run ,line 145, file main.c
debug out: func iperf_run_server ,line 456, file iperf_server_api.c
debug out: func iperf_server_listen ,line 72, file iperf_server_api.c
debug out: func netannounce ,line 263, file net.c
debug out: func netannounce ,line 354, file net.c
debug out: create listen socket
debug out: set the state from 0 to 15
-----------------------------------------------------------------------------------状态机元组名称状态机元组当前值当前状态初始化状态事件条件进入初始化状态后无条件继续运行动作A-服务器端测试对象开始运行创建服务端监听端口下一状态IPERF_START状态
B-建立控制连接初始化状态—IPERF_START状态::
调用select函数等待并接受客户端发起的控制链接test-ctrl_sck指向控制链接 。
......
-----------------------------------------------------------------------------------
debug out: func iperf_defaults ,line 2796, file iperf_api.c
debug out: func iperf_parse_arguments ,line 1125, file iperf_api.c
debug out: func run ,line 145, file main.c
debug out: func iperf_run_server ,line 456, file iperf_server_api.c
debug out: func iperf_server_listen ,line 72, file iperf_server_api.c
debug out: func netannounce ,line 263, file net.c
debug out: func netannounce ,line 354, file net.c
debug out: create listen socket
debug out: set the state from 0 to 15
-----------------------------------------------------------------------------------
debug out: func iperf_run_server ,line 498, file iperf_server_api.c
debug out: func iperf_run_server ,line 587, file iperf_server_api.c
debug out: func iperf_accept ,line 154, file iperf_server_api.c
debug out: set the state from 15 to 9
-----------------------------------------------------------------------------------状态机元组名称状态机元组当前值当前状态IPERF_START状态事件条件收到客户端发起的控制链接连接请求动作B-建立控制链接下一状态PARAM_EXCHANGE状态
C-完成服务端与客户端的配置参数交换:
调用iperf_exchange_parameters函数接收客户端通过控制链接发送的配置参数完成服务端与客户端的参数交换 。
......
-----------------------------------------------------------------------------------
debug out: func iperf_run_server ,line 498, file iperf_server_api.c
debug out: func iperf_run_server ,line 587, file iperf_server_api.c
debug out: func iperf_accept ,line 154, file iperf_server_api.c
debug out: set the state from 15 to 9
-----------------------------------------------------------------------------------
debug out: func iperf_exchange_parameters,line 2067, file iperf_api.c
debug out: func get_parameters ,line 2246, file iperf_api.c
debug out: set the state from 9 to 10
状态机元组名称状态机元组当前值当前状态PARAM_EXCHANGE状态事件条件收到客户端发送过来的配置参数动作C-接收并保存客户端送过来的配置参数并进行配置下一状态CREATE_STREAM状态
D: 未完待续 E: 未完待续 F: 未完待续 G: 未完待续 H: 未完待续 I: 未完待续 J: 未完待续