用cms建设网站课程制作网页的基本步骤
本文目录
- 一、测试用命令
- 二、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:
未完待续