九,iperf3源代码分析:main函数主要流程,正向TCP单向测试时服务端和客户端的交互过程详解

简述

这里把iperf3的正向TCP单向测试时服务端和客户端的交互过程详解,画成了图。
只描述了二侧的测试流程,具体代码调用过程可以参考另外二个文章。
七,iperf3源代码分析:状态机及状态转换过程—>运行正向TCP单向测试时的服务端代码
八,iperf3源代码分析:状态机及状态转换过程—>运行正向TCP单向测试时的客户端代码

客户端和服务端交互过程以及状态机迁移图

在这里插入图片描述

附件

CSDN不支持sequenceDiagram, 所以在https://mermaid-js.github.io/mermaid-live-editor/这个网站编辑后贴图过来,原始文档见底下。

sequenceDiagram
    
    note left of iperf3客户端: 先运行服务端,再运行客户端
    note right of iperf3服务端: 先运行服务端,再运行客户端
    

    iperf3服务端 ->> iperf3服务端 : main进入启动iperf3iperf3服务端
    iperf3服务端 ->> iperf3服务端 : 调用iperf_new_test创建并初始化测试对象
    note over iperf3服务端: 进入:初始化状态
    iperf3服务端 ->> iperf3服务端 : 读取配置参数,并创建服务端监听端口
    note over iperf3服务端: 进入:IPERF_START状态

    iperf3客户端 ->> iperf3客户端 : main进入启动iperf3客户端
    iperf3客户端 ->> iperf3客户端 : 调用iperf_new_test创建并初始化测试对象
    note over iperf3客户端: 进入:初始化状态
    iperf3客户端 ->> iperf3服务端 : 读取配置参数,向服务端发起连接请求,
    iperf3服务端 ->> iperf3服务端 : 调用select/accept函数建立控制链接
    note over iperf3服务端: 进入:PARAM_EXCHANGE状态
    iperf3服务端 ->> iperf3客户端 : 通过控制链接发送PARAM_EXCHANGE指令
    note over iperf3客户端: 进入:PARAM_EXCHANGE状态
    iperf3客户端 ->> iperf3服务端 : 发送用户命令行输入配置参数给服务端
    iperf3服务端 ->> iperf3服务端 : 保存配置参数,并让配置参数生效
    note over iperf3服务端: 进入:CREATE_STREAM状态 
    iperf3服务端 ->> iperf3客户端 : 通过控制链接发送CREATE_STREAM指令
    note over iperf3客户端: 进入:CREATE_STREAM状态
    iperf3客户端 ->> iperf3服务端 : 调用iperf_create_streams函数,创建TCP测试流实例 
    iperf3客户端 ->> iperf3客户端 : 调用iperf_handle_message_client()等待服务端发起新的指令
    iperf3服务端 ->> iperf3服务端 : 调用iperf_tcp_accept接受连接请求
    iperf3服务端 ->> iperf3服务端 : 调用iperf_add_stream创建TCP测试流实例
    note over iperf3服务端: 进入:TEST_START状态 
    iperf3服务端 ->> iperf3客户端 : 通过控制链接发送TEST_START指令
    iperf3服务端 ->> iperf3服务端 :  创建服务端为TCP测试流使用的各种定时器及其它资源
    note over iperf3客户端: 进入:TEST_START状态 
    note over iperf3服务端: 进入:TEST_RUNNING状态 
    iperf3客户端 ->> iperf3客户端 : 开始创建客户端为TCP测试流使用的各种定时器及其它资源
    iperf3客户端 ->> iperf3客户端 : 等待服务端发过来的下一条命令
    iperf3服务端 ->> iperf3客户端 : 通过控制链接发送TEST_RUNNING指令
    note over iperf3客户端: 进入:TEST_RUNNING状态 
    iperf3客户端 ->>  iperf3服务端 : 通过调用iperf_send函数里的sp->snd和test->protocol->send二个函数指针,
    iperf3客户端 ->>  iperf3服务端 : 最终调用iperf_tcp_send()函数向服务端发送测试数据开始测试
    iperf3服务端 ->>  iperf3服务端 : 调用iperf_run_server函数,直接进入TEST_RUNNING分支后,
    iperf3服务端 ->>  iperf3服务端 : 调用iperf_recv函数里的sp->rcv和test->protocol->recv二个函数指针
    iperf3服务端 ->>  iperf3服务端 : 最终调用iperf_tcp_recv()函数接收客户端发过来的测试数据,
    iperf3客户端 ->>  iperf3服务端 : ......
    iperf3客户端 ->>  iperf3服务端 : 最终调用iperf_tcp_send()函数向服务端发送测试数据开始测试
    iperf3客户端 ->>  iperf3服务端 : 直到本次测试完成
    iperf3服务端 ->>  iperf3服务端 : 并做统计,直到所有测试数据接收处理完毕,
    note over iperf3客户端: 进入:TEST_END状态 
    iperf3服务端 ->>  iperf3服务端 : 等待客户端通过控制链接发过来的TEST_END控制信息。
    iperf3客户端 ->>  iperf3服务端 : 通过控制链接发送TEST_END指令
    iperf3客户端 ->>  iperf3客户端 : 等待服务端发送EXCHANGE_RESULT指令
    note over iperf3服务端: 进入:TEST_END状态 
    iperf3服务端 ->>  iperf3服务端 : 通过test->stats_callback(test)和test->reporter_callback(test)二个函数指针,
    iperf3服务端 ->>  iperf3服务端 : 调用iperf_stats_callback和iperf_reporter_callback
    iperf3服务端 ->>  iperf3服务端 : 进行测试结果汇总和生成测试报告
    note over iperf3服务端: 进入:EXCHANGE_RESULT状态 
    iperf3服务端 ->>  iperf3客户端 : 通过控制链接发送EXCHANGE_RESULT指令
    iperf3服务端 ->>  iperf3服务端 : 调用iperf_exchange_result()函数,等待客户端发过来的测试报告
    note over iperf3客户端: 进入:EXCHANGE_RESULT状态 
    iperf3客户端 ->>  iperf3服务端 : 调用iperf_exchange_result()函数,向服务端发送的测试报告
    iperf3客户端 ->>  iperf3客户端 : 等待服务端发送DISPLAY_RESULT指令
    note over iperf3服务端: 进入:DISPLAY_RESULT状态 
    iperf3服务端 ->>  iperf3客户端 : 通过控制链接发送DISPLAY_RESULT指令
     iperf3服务端 ->>  iperf3服务端 : 打印测试报告
    iperf3服务端 ->>  iperf3服务端 : 等待服务端发送IPERF_DONE指令
    note over iperf3客户端: 进入:DISPLAY_RESULT状态 
    iperf3客户端 ->>  iperf3客户端 : 客户端主动发起打印测试报告,
    note over iperf3客户端: 进入:IPERF_DONE状态 
    iperf3客户端 ->>  iperf3服务端 : 并向服务端发IPERF_DONE指令
    iperf3客户端 ->>  iperf3客户端 : 退出iperf3客户端,测试结束
    note over iperf3服务端: 进入:IPERF_DONE状态

    iperf3服务端 ->>  iperf3服务端 : 调用run()–>iperf_run_server()–>iperf_reset_test()函数,reset测试对象test,
    note over iperf3服务端: 进入:初始化状态
    iperf3服务端 ->>  iperf3服务端 : 重新运行初始化,建立监听端口,
    note over iperf3服务端: 进入:IPERF_START状态,
    iperf3服务端 ->>  iperf3服务端 : 等待下一次测试的开始。   

猜你喜欢

转载自blog.csdn.net/meihualing/article/details/129411589
今日推荐