在iperf中实现DCCP需要重新安装一个支持DCCP的iperf(以下称为iperf-DCCP)。
iperf-DCCP地址:https://erg.abdn.ac.uk/users/gerrit/dccp/apps/iperf/
第一、二步的参考文档为/doc下的README文件
第三、五步的参考文档为解压出的iperf-2.0.2文件夹下的README以及/doc/index.html
第四步的参考资料为【1】,【2】,【3】
第六步的参考资料为【4】
以下为实现步骤:
第一步 解压
下载 /zip 下的【iperf-2.0.2.tar.gz】,然后解压该文件至安装目录:
tar -xzf iperf-2.0.2.tar.gz
第二步 打补丁
进入解压出的iperf目录:
cd iperf-2.0.2/
下载 /patchs 下的【iperf-patches_all-in-one.diff.gz】并解压至iperf的目录(命令略,这里我是windows下解压好然后传进linux的,一共就一个文件)
然后打上DCCP补丁:
patch -p1 < iperf-patches_all-in-one.diff
第三步 配置
打完补丁后进行配置:
./configure
第四步 调BUG
请先执行第五步,第五步若出错再回来看第四步。
这里在我的系统运行make命令后出现了BUG,导致编译不过:
> /usr/include/c++/6/bits/cpp_type_traits.h:205:12: error: redefinition of 'struct std::__is_integer<int>'
> struct __is_integer<int>
> ^~~~~~~~~~~~~~~~~
> /usr/include/c++/6/bits/cpp_type_traits.h:138:12: error: previous definition of 'struct std::__is_integer<int>'
> struct __is_integer<bool>
解决方法:
使用【1】中的办法,删除 iperf-2.0.2/目录下configure.ac的
DAST_CHECK_BOOL行。
更改之前记得将原文件进行备份!万一瞎改改失败了就将文件名改回来恢复
cp configure.ac configure.ac.backup
更改之后再运行make命令,报的错就变了,大概变成这样,总之意思就是编译器不认识bool这种类型的变量了:
unknown type name 'bool'
这时参照参考资料【2】的办法,将所有报错的文件(说是所有,其实也就下图中的两个)都加入stbbool.h的头文件即可
#include <stdbool.h>
(这种办法也并不是野办法,因为在查找解决BUG的办法的时候大家【3】都说iperf原本的文件里是没有用bool的,因此我想一定是补丁加了bool进去,相关文件肯定不多)
第五步 编译 安装
编译
make
安装
make install
安装完成后,使用下面的命令检查是否安装成功:
iperf -v
正确出现版本信息则说明安装成功!
使用以下命令获取使用说明:
iperf -h
第六步 使用
iperf-DCCP的使用说明在【4】,截取示例命令在这:
以packet-oriented固定发送速率模式为例,首先,在服务器上运行服务器代码:
iperf -sdb
然后,在客户端上运行客户端代码:
iperf -d -b0.5m -c 10.0.1.10
可以看到完成了测试。其中,-sdb的意思是-s -d -b,从上面的示例命令以及iperf -h的帮助文档很容易看出是服务器模式 DCCP模式 恒定带宽模式。-b0.5m的意思是恒定带宽为0.5m,-c为客户端模式,后面跟的ip地址为服务器的ip地址。
也可以根据iperf -h自由添加其他命令选项。
但是最大带宽模式在我这边验证的时候总是一开始发送1s就不发了(比如下图中的情况),读者要是在最大带宽模式下跑出结果了记得回这个帖子的评论区分享经验哦