一个在ns3平台基于UDP协议实现的拥塞控制仿真框架

 本来ns3中实现的TCP协议栈就实现了各种的拥塞控制算法,我自己基于UDP协议也实现了一些拥塞控制算法。为什么这么干,当时觉得基于TCP协议仿真不灵活,比如怎么拿到数据包的单向传输时延,怎么统计丢包率。当时觉的这些都没法做,于是就模仿quic协议自己实现了一个简单的传输协议。最近发现,这些在ns3中的TCP协议栈中都是可以实现的。这样就显得我自己的实现很多此一举。通过抄写别人的代码,编程能力有所提升。
 然后就有一些同学,询问我的代码,代码本身是开源的。但是,一般向我问询的人都是是刚入门ns3。看到我的一坨代码,就不知道如何安装了。我又是十分热心的人,知道现在做毕设,做研究的不易,愿意帮助他们减少一些学习的困难。因为我感觉在网络研究领域,认真的人渐少。单纯的写手越来越多,点线图伪造的一个比一个高。但是一遍遍告诉别人怎么安装,每次查不到都要花费半天,时间浪费的令我心痛。子在川上曰:逝者如斯夫,不舍昼夜。我是一个惜时的人,有时周边人聚会什么的,我都不乐意参加,让人感觉不易相处。My time is not measured by the tick of a clock, but by the length of life.
 遂有此篇,怎么ns3中安装这坨代码[1],并获取数据。

Step1 修改编译器标志

 ns3中的有个编译标志需要修改,不然,定义的函数,没有被调用,编译当做错误处理。参考[2]中的1.3节(Change some warning flags)。

Step2 文件放置

 把[1]中的整个dqc文件夹放进ns3的src文件夹下。
一个在ns3平台基于UDP协议实现的拥塞控制仿真框架_第1张图片

配置环境变量

 sudo gedit /etc/profile

export DQC=/home/zsy/C_Test/ns-allinone-3.26/ns-3.26/src/dqc/model/thirdparty  
export CPLUS_INCLUDE_PATH=CPLUS_INCLUDE_PATH:$DQC/include/:$DQC/congestion/:$DQC/logging/  

 这里的DQC是我电脑中的路径,替换你的路径!
 找不路径,可以在shell中进入dqc/model/thirdparty,键入$PWD命令,
把输出的绝对路径赋值给DQC。

建立一个 traces文件夹收集数据

一个在ns3平台基于UDP协议实现的拥塞控制仿真框架_第2张图片

编译

 每次编译或者运行,需要生效环境变量。

sudo su
source /etc/profile

 编译./build.py。

测试

 把github中scratch下文件,复制到ns3的scratch文件夹下。
一个在ns3平台基于UDP协议实现的拥塞控制仿真框架_第3张图片
 曾经有同学,把我github中scratch文件夹放进了ns3中的scratch下(scratch/scratch/dqc-test),肯定是出错的。
 运行:

sudo su  
source /etc/profile  
./waf --run "scratch/dqc-test --it=1 --cc=bbr"  

 数据就在traces文件夹下。比如后缀为owd的文件,收集的就是单向时延信息。

//https://github.com/SoonyangZhang/DrainQueueCongestion/blob/master/dqc/model/dqc_trace.cc
void DqcTrace::OpenTraceOwdFile(std::string name){
	char buf[FILENAME_MAX];
	memset(buf,0,FILENAME_MAX);
	std::string path = std::string (getcwd(buf, FILENAME_MAX)) + "/traces/"
			+name+"_owd.txt";
	m_owd.open(path.c_str(), std::fstream::out);    
}
void DqcTrace::OnOwd(uint32_t seq,uint32_t owd,uint32_t size){
	if(m_owd.is_open()){
		float now=Simulator::Now().GetSeconds();
		m_owd<

 m_owd< [1] evluation congestion control algorithm
[2] ns3安装教程

你可能感兴趣的:(仿真,拥塞控制,计算机网络)