我在哪里可以找到 TCP New Reno 的源代码和 运行 它在 NS3 上
Where I can find the source code of TCP New Reno and run it on NS3
我计划对现有的传输层协议进行一些拥塞控制调整。在这种情况下,我选择了 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
您提供的链接具有 TcpNewReno 的实际源代码,但它们来自 3.18 版。当前版本为 3.30.1。因此,您找到的代码已过时。如果您使用的是最新版本的 ns-3(我推荐),那么 TcpNewReno
是在 ./src/internet/model/tcp-congestion-ops.cc
. If you look at the API documentation of TcpNewReno
中实现的,您会找到源代码的链接对于每个 member/function。 API 文档必不可少。
默认协议为TcpNewReno
,无需设置。您可以通过两种方式验证默认值:
TCP model documentation 在 ns-3 TCP 部分下说 "several congestion control algorithms are supported, with NewReno the default"。
您可以验证默认 TCP SocketType
在 GetTypeId
函数中的 ./src/internet/model/tcp-l4-protocol.cc
中设置为 TcpNewReno
。
话虽这么说,如果您想更改默认设置,可以通过在脚本的主函数中调用 Config::SetDefault
来实现
Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));
跟进
If I need to edit the CWND calculation algorithm in TCPNewReno, where do I need to do the changes?
如果您想创建一个新的拥塞控制算法,我建议您不要更改现有的 TcpNewReno
代码。相反,创建一个 TcpNewReno 的子类。在新文件 ./src/internet/model/tcp-placeholder.{h,cc}
中定义并声明此子类。然后,您需要在 ./src/internet/wscript
中添加这些新文件。之后,这些新文件应该在您使用 ./waf
构建时编译。同样,要实际使用这个新的拥塞控制算法,您需要进行上面的 Config::SetDefault
调用。
Because later on after the developments, I need to get the changed source code of the TCPNewReno and put it inside an actual device. How Can I do that?
这可能不会发生。虽然 ns-3 试图模仿现实世界的实现方式,但您在 ns-3 中编写的代码几乎肯定不会像-在任何操作系统上。如果您想在真实设备上测试新的拥塞控制算法,您将需要学习如何专门为该设备编程。
根据您正在做的事情,您可能会发现使用 Network Simulation Cradle 很有帮助。
我计划对现有的传输层协议进行一些拥塞控制调整。在这种情况下,我选择了 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
您提供的链接具有 TcpNewReno 的实际源代码,但它们来自 3.18 版。当前版本为 3.30.1。因此,您找到的代码已过时。如果您使用的是最新版本的 ns-3(我推荐),那么
TcpNewReno
是在./src/internet/model/tcp-congestion-ops.cc
. If you look at the API documentation ofTcpNewReno
中实现的,您会找到源代码的链接对于每个 member/function。 API 文档必不可少。默认协议为
TcpNewReno
,无需设置。您可以通过两种方式验证默认值:TCP model documentation 在 ns-3 TCP 部分下说 "several congestion control algorithms are supported, with NewReno the default"。
您可以验证默认 TCP
SocketType
在GetTypeId
函数中的./src/internet/model/tcp-l4-protocol.cc
中设置为TcpNewReno
。
话虽这么说,如果您想更改默认设置,可以通过在脚本的主函数中调用 Config::SetDefault
来实现
Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));
跟进
If I need to edit the CWND calculation algorithm in TCPNewReno, where do I need to do the changes?
如果您想创建一个新的拥塞控制算法,我建议您不要更改现有的 TcpNewReno
代码。相反,创建一个 TcpNewReno 的子类。在新文件 ./src/internet/model/tcp-placeholder.{h,cc}
中定义并声明此子类。然后,您需要在 ./src/internet/wscript
中添加这些新文件。之后,这些新文件应该在您使用 ./waf
构建时编译。同样,要实际使用这个新的拥塞控制算法,您需要进行上面的 Config::SetDefault
调用。
Because later on after the developments, I need to get the changed source code of the TCPNewReno and put it inside an actual device. How Can I do that?
这可能不会发生。虽然 ns-3 试图模仿现实世界的实现方式,但您在 ns-3 中编写的代码几乎肯定不会像-在任何操作系统上。如果您想在真实设备上测试新的拥塞控制算法,您将需要学习如何专门为该设备编程。
根据您正在做的事情,您可能会发现使用 Network Simulation Cradle 很有帮助。