首先,如果这不是这个问题的正确论坛,我深表歉意。我正在尝试在 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_start和update_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_rtt和max_rtt——我计算这些值对吗?
据我了解,在阅读了 linux 实现中提供的论文后,TCP-Illinois 的运行方式与 TCP-NewReno 相同,但 AIMD 部分除外。我敢打赌,这意味着我可以保持 TCP-NewReno 的大部分代码完好无损,除了 TCP-SACK 部分和 AIMD。
我也很感激任何关于实现的提示,当然还有关于代码正确性的任何评论。我当前和几乎完整的实现可以在 github 上找到,地址为https://github.com/SpyrosMArtel/TCP-Fit-Illinois。
如果您需要更多详细信息或说明,请随时打扰我。
先感谢您。