1

我计划对现有的传输层协议进行一些拥塞控制调整。在这种情况下,我选择了 TCP New Reno。主要是我有两个问题。

1)主要问题是如何找到TCP New Reno的源代码。

2)另一件事是即使我找到了源代码如何在两个节点之间的NS3内部使用它(在seventh.cc中,他们没有指定协议。它采用默认协议。我需要使用TCP New Reno)

我尝试搜索,但与该问题相关的信息很少。我从 NS3 文档中找到了某种源代码。但我认为这不是 TCP New Reno 的真正源代码。

tcp-newreno.h >> 取自https://www.nsnam.org/docs/release/3.18/doxygen/tcp-newreno_8h_source.html

tcp-newreno.cc >> 取自https://www.nsnam.org/docs/release/3.18/doxygen/tcp-newreno_8cc_source.html#l00247

4

1 回答 1

2
  1. 您提供的链接具有 TcpNewReno 的实际源代码,但它们来自版本 3.18。当前版本是 3.30.1。所以,你找到的代码已经过时了。如果您使用的是最新版本的ns-3(我推荐),那么TcpNewReno./src/internet/model/tcp-congestion-ops.cc. 如果您查看 的 API 文档TcpNewReno,您会发现每个成员/函数的源代码链接。API 文档是必不可少的。

  2. 默认协议为TcpNewReno,无需设置。您可以通过两种方式验证默认值:

    1. TCP 模型文档ns-3 TCP部分下说“支持几种拥塞控制算法,默认使用 NewReno” 。

    2. 您可以验证是否在函数中SocketType设置了默认 TCP。TcpNewReno./src/internet/model/tcp-l4-protocol.ccGetTypeId

话虽如此,如果您想更改默认值,可以通过调用Config::SetDefault脚本的 main 函数来实现,如下所示

Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));

跟进

如果我需要在 TCPNewReno 中编辑 CWND 计算算法,我需要在哪里进行更改?

如果您想创建一个新的拥塞控制算法,我建议您不要更改现有TcpNewReno代码。相反,创建 TcpNewReno 的子类。在新文件中定义和声明这个子类,./src/internet/model/tcp-placeholder.{h,cc}. 然后,您需要将这些新文件添加到./src/internet/wscript. 之后,这些新文件应该在您使用./waf. 同样,要实际使用这种新的拥塞控制算法,您需要进行上述Config::SetDefault调用。

因为在开发之后,我需要获取 TCPNewReno 更改后的源代码并将其放入实际设备中。我怎样才能做到这一点?

这可能不会发生。虽然ns-3试图在工作方式上模仿现实世界的实现,但您在ns-3中编写的代码几乎肯定不会在任何操作系统上按原样工作。如果您想在真实设备上测试新的拥塞控制算法,您将需要学习如何专门对该设备进行编程。

根据您所做的工作,您可能会发现使用网络模拟底座很有帮助。

于 2020-04-07T22:40:12.950 回答