ns3学习(三)——MPTCP

0.0、bake安装工具

之前自己安装一步步依赖,现在回看过来实在是有点麻烦,ns3出了新的安装工具:bake,非常简单的安装步骤,帮助安装ns3不同版本的依赖,参考链接:ns3官方安装教程
使用bake安装ns3的过程就在这个官方安装教程的Installation中,官方描述的步骤已经非常清晰了。位置如下图:
在这里插入图片描述
本人使用bake安装的过程十分丝滑,没有什么要注意的,如果过程中出现报错,考虑是否是文件目录错误,读取不了上层文件。

安装完成后,会在虚拟机的bake同级目录下创建一个source文件夹,用于存储不同的ns3不同版本的源码。
在这里插入图片描述

0.1、手动安装依赖

如果不想使用bake进行安装,可以考虑手动安装。下面是手动安装过程中遇到的所有问题及解决办法,可以参考。

参考链接:MPTCP github源码一MPTCP github源码二

参考链接:运行mptcp源码源码二配置

源码一ns3版本是3.19,会出现gcc版本的问题,建议更换gcc版本至gcc5.5。运行成功后就可以直接运行mptcp。
源码二ns3版本是3.29,比较新,gcc等依赖问题更好解决,但是没有example代码,要自己编写mptcp运行代码。如果ns3不是很熟悉的话不建议尝试。

在以上源码的运行过程中,可能会涉及以下问题,以下链接亲测可用:

  1. 工具系列 | Ubuntu18.04安装Openssl-1.1.1
  2. all warning报错问题解决
  3. libssl依赖问题
  4. gcc版本的问题:一些cc文件无法编译的语法问题,考虑gcc版本降级,参考链接:gcc降级到5.5。ubuntu20.04可参考:Ubuntu高版本如何安装低版本GCC (以Ubuntu 20安装GCC5为例)
  5. error: ‘UChar’ has not been declared:ns3.19运行C++11标准
  6. 有时候会出现Permission denied的错误,首先考虑是否文件路径不对?是否文件没有权限的问题?然后如果提示please run waf configure的话,运行./waf configure看看。
  7. 如果以上问题都解决后,还是出现gcc版本问题,或者依赖问题的话,建议重装虚拟机!!!

ns3官方api

一、源码一

进入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环境的不熟悉导致无法理解如何去调用这些类。决定放弃源码二进入源码一的学习,后续如果有时间会重新学习源码二。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值