0.0、bake安装工具
之前自己安装一步步依赖,现在回看过来实在是有点麻烦,ns3出了新的安装工具:bake,非常简单的安装步骤,帮助安装ns3不同版本的依赖,参考链接:ns3官方安装教程
使用bake安装ns3的过程就在这个官方安装教程的Installation中,官方描述的步骤已经非常清晰了。位置如下图:
本人使用bake安装的过程十分丝滑,没有什么要注意的,如果过程中出现报错,考虑是否是文件目录错误,读取不了上层文件。
安装完成后,会在虚拟机的bake同级目录下创建一个source文件夹,用于存储不同的ns3不同版本的源码。
0.1、手动安装依赖
如果不想使用bake进行安装,可以考虑手动安装。下面是手动安装过程中遇到的所有问题及解决办法,可以参考。
参考链接:MPTCP github源码一、MPTCP github源码二
源码一ns3版本是3.19,会出现gcc版本的问题,建议更换gcc版本至gcc5.5。运行成功后就可以直接运行mptcp。
源码二ns3版本是3.29,比较新,gcc等依赖问题更好解决,但是没有example代码,要自己编写mptcp运行代码。如果ns3不是很熟悉的话不建议尝试。
在以上源码的运行过程中,可能会涉及以下问题,以下链接亲测可用:
- 工具系列 | Ubuntu18.04安装Openssl-1.1.1
- all warning报错问题解决
- libssl依赖问题
- gcc版本的问题:一些cc文件无法编译的语法问题,考虑gcc版本降级,参考链接:gcc降级到5.5。ubuntu20.04可参考:Ubuntu高版本如何安装低版本GCC (以Ubuntu 20安装GCC5为例)
- error: ‘UChar’ has not been declared:ns3.19运行C++11标准
- 有时候会出现Permission denied的错误,首先考虑是否文件路径不对?是否文件没有权限的问题?然后如果提示please run waf configure的话,运行./waf configure看看。
- 如果以上问题都解决后,还是出现gcc版本问题,或者依赖问题的话,建议重装虚拟机!!!
一、源码一
进入mptcp,文件中
输入以下语句来运行mptcp。
sudo ./waf --run scratch/mptcp
运行截图:
源码二学习
源码二可以理解为一个可运行mptcp的环境,运行mptcp的代码需要自己编写。如果ns3不是很熟悉的话不建议尝试。
我们可以使用如下指令查找包含MPTCP的文件:
find . -name ‘*.cc’ | xargs grep MPTCP
解决ns3环境问题后,使用vscode在虚拟机中打开源码二,可以看到有八个cc文件:
二、学习内容
1、crypto
crypto意为密码:定义了一些密码,先不看
2、fullmesh
fullmesh意为组网:设置组网络
3、mapping
mapping意为映射,看到后缀为.h的文件中有两个类
(1)MpTcpMapping类
维护一个存放MpTcpMapping的映射表set<MpTcpMapping> MappingList。
MpTcpMapping属性包括m_dataSequenceNumber(0)、m_subflowSequenceNumber(0)、m_dataLevelLength(0)。即:数据序列号,子流序列号,数据级长度
猜测:
MpTcpMapping是子流序列号到数据序列号的映射
MappingList是存放单个子流到多个数据序列号的映射
(2)MpTcpMappingContainer类
维护一个存放MpTcpMapping的映射表set<MpTcpMapping> m_mappings。
it is a set ordered by SSN
猜测MpTcpMappingContainer是存放多个子流的映射。
4、ndiffports
(1)RttEstimator类
被include
(2)MpTcpSocketBase类
被include
const MpTcpSocketBase&这个类型传入create。
MpTcpSocketBase my_sock();
如何构造这个类型:先调用一个无参构造函数,然后再赋值进去形成有参的。
//setAttribute的意思是设置属性,和属性类型。NS3 中Attribute 学习
my_sock.SetAttribute(“peerkey”,peerKeyType);
(3)MpTcpNdiffPorts类
主要注意的是CreateSubflows接口
void CreateSubflows (Ptr<MpTcpSocketBase> meta, uint16_t localport, uint16_t remoteport);
5、socket
规定socket的形式
6、subflow
#include "ns3/mptcp-mapping.h"
(1)MpTcpSubflow类
class MpTcpSubflow : public TcpSocketBase
继承于TcpSocketBase,继承方式为public继承
学习到这里还是一知半解,包括对ns3环境的不熟悉导致无法理解如何去调用这些类。决定放弃源码二进入源码一的学习,后续如果有时间会重新学习源码二。