ns3学习(三)——MPTCP

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

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

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

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

  1. gcc版本的问题:工具系列 | Ubuntu18.04安装Openssl-1.1.1
  2. all warning报错问题解决
  3. libssl依赖问题
  4. 一些cc文件无法编译的语法问题:gcc版本降级,参考链接:gcc降级到5.5
  5. error: ‘UChar’ has not been declared:ns3.19运行C++11标准
  6. 如果以上问题都解决后,还是出现gcc版本问题,或者依赖问题的话,建议重装虚拟机!!!

ns3官方api

一、源码一

进入mptcp,文件中
ns3学习(三)——MPTCP_第1张图片

输入以下语句来运行mptcp。

sudo ./waf --run scratch/mptcp

运行截图:

ns3学习(三)——MPTCP_第2张图片

源码二学习

源码二可以理解为一个可运行mptcp的环境,运行mptcp的代码需要自己编写。如果ns3不是很熟悉的话不建议尝试。

我们可以使用如下指令查找包含MPTCP的文件:

find . -name ‘*.cc’ | xargs grep MPTCP

解决ns3环境问题后,使用vscode在虚拟机中打开源码二,可以看到有八个cc文件:
ns3学习(三)——MPTCP_第3张图片

二、学习内容

1、crypto

crypto意为密码:定义了一些密码,先不看

2、fullmesh

fullmesh意为组网:设置组网络

3、mapping

mapping意为映射,看到后缀为.h的文件中有两个类

(1)MpTcpMapping类

维护一个存放MpTcpMapping的映射表set MappingList。

MpTcpMapping属性包括m_dataSequenceNumber(0)、m_subflowSequenceNumber(0)、m_dataLevelLength(0)。即:数据序列号,子流序列号,数据级长度

猜测:
MpTcpMapping是子流序列号到数据序列号的映射
MappingList是存放单个子流到多个数据序列号的映射

(2)MpTcpMappingContainer类

维护一个存放MpTcpMapping的映射表set m_mappings。
it is a set ordered by SSN

猜测MpTcpMappingContainer是存放多个子流的映射。

4、ndiffports

(1)RttEstimator类

被include

(2)MpTcpSocketBase类

被include

ns3学习(三)——MPTCP_第4张图片

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

你可能感兴趣的:(拥塞控制算法,网络)