0

首先,如果这不是这个问题的正确论坛,我深表歉意。我正在尝试在 OMNeT/INET 中为我的论文实现两个 tcp 拥塞控制算法。

第一个是 TCP-FIT,我在http://www.tcpengines.com/wp-content/uploads/2013/11/tcp-whitepaper.pdf找到了它的伪代码。另一个是 TCP-Illinois,我在http://lxr.free-electrons.com/source/net/ipv4/tcp_illinois.c找到了一个 linux 实现。

我无法理解如何在这两种机制中实现一些变量和方法,如果您能帮助我弄清楚它们,我将不胜感激。也欢迎对变量类型提供一些帮助。

简而言之,对于 TCP-FIT:

  • epoch_startupdate_epoch(我知道 epoch 可以和 RTT 同义)
  • 阿尔法(值)
  • n - 它是什么?
  • RTT_cnt 计算是否正确(在 receivedDataAck() 下)?
  • tcpFitUpdateN() 函数是否正确?
  • 我实现了伪代码吗?

对于 TCP-伊利诺伊州:

  • snd_cwnd_cnt——我认为这只是一个有多少数据包被确认的计数器。
  • snd_cwnd_clamp -- 拥塞窗口的上限,我想我是对的。
  • end_seq - 似乎需要,但我不明白if (after(ack, ca->end_seq)) {...}中的“ack”参数,它来自函数tcp_illinois_cong_avoid(struct sock *sk, u32 确认,u32 确认){.​​..}
  • tp->snd_nxt -- 是否等同于 OMNeT++ state->snd_nxt?
  • sum_rttmax_rtt——我计算这些值对吗?

据我了解,在阅读了 linux 实现中提供的论文后,TCP-Illinois 的运行方式与 TCP-NewReno 相同,但 AIMD 部分除外。我敢打赌,这意味着我可以保持 TCP-NewReno 的大部分代码完好无损,除了 TCP-SACK 部分和 AIMD。

我也很感激任何关于实现的提示,当然还有关于代码正确性的任何评论。我当前和几乎完整的实现可以在 github 上找到,地址为https://github.com/SpyrosMArtel/TCP-Fit-Illinois

如果您需要更多详细信息或说明,请随时打扰我。

先感谢您。

4

0 回答 0