Sockets 如何侵入Unix内核以消除TCP的指数退避?

Sockets 如何侵入Unix内核以消除TCP的指数退避?,sockets,unix,tcp,linux-kernel,Sockets,Unix,Tcp,Linux Kernel,我的想法是,如果我们从TCP中删除指数退避时间,这将提高TCP吞吐量的性能。我还看到一篇论文,上面写着怎么做。只要谷歌删除tcp,你就会得到它。但是,我无法理解如何进入UNIX内核并对其进行破解以改变TCP功能。拜托,如果有人能帮我,那就太好了 谢谢。如果这是真的,为什么会出现指数退避?你真的认为开发和发展TCP的人添加了一些东西只是为了让性能更差吗?然后,什么,所有不同的操作系统实现人员都不假思索地添加了它 移除指数退避会增加数据包丢失率,因为拥塞退避不会那么快,并且会增加延迟,因为路径上每个

我的想法是,如果我们从TCP中删除指数退避时间,这将提高TCP吞吐量的性能。我还看到一篇论文,上面写着怎么做。只要谷歌删除tcp,你就会得到它。但是,我无法理解如何进入UNIX内核并对其进行破解以改变TCP功能。拜托,如果有人能帮我,那就太好了


谢谢。

如果这是真的,为什么会出现指数退避?你真的认为开发和发展TCP的人添加了一些东西只是为了让性能更差吗?然后,什么,所有不同的操作系统实现人员都不假思索地添加了它

移除指数退避会增加数据包丢失率,因为拥塞退避不会那么快,并且会增加延迟,因为路径上每个接口处的队列将趋于更深。这两种影响是相乘的——延迟的增加使数据包丢失的增加更具破坏性。累积效应将对吞吐量造成灾难性影响


Linux允许一个模块来实现TCP拥塞控制算法。所以你可以随意调整它。查看Linux内核源代码的net/ipv4目录,如tcp_hybla.c和tcp_veno.c.

如果这是真的,为什么会出现指数退避?你真的认为开发和发展TCP的人添加了一些东西只是为了让性能更差吗?然后,什么,所有不同的操作系统实现人员都不假思索地添加了它

移除指数退避会增加数据包丢失率,因为拥塞退避不会那么快,并且会增加延迟,因为路径上每个接口处的队列将趋于更深。这两种影响是相乘的——延迟的增加使数据包丢失的增加更具破坏性。累积效应将对吞吐量造成灾难性影响


Linux允许一个模块来实现TCP拥塞控制算法。所以你可以随意调整它。看看Linux内核源代码的net/ipv4目录,像tcp_hybla.c和tcp_veno.c这样的文件指出,只要遵循数据包保护原则,就不需要指数退避。在对本文进行评估后,我认为该实现对于有损链路是好的,但对于拥塞链路则不好。

指出,只要遵循数据包保护原则,就不需要指数退避。在对论文进行评估后,我认为这种实现方式适用于有损链路,但不适用于拥塞链路。

CSMA/CD的指数退避是在通常作为硬件实现的物理层中完成的,在那里您可以处理信令

即使它是可调的,也可能是在固件级别完成的,而不是内核源代码


但是指数退避的另一个领域是在路由器中-这可能是您可以调整它的地方。

CSMA/CD的指数退避是在通常作为硬件实现的物理层中完成的,在那里您可以处理信令

即使它是可调的,也可能是在固件级别完成的,而不是内核源代码


但另一个指数退避的领域是路由器——这也许是你可以调整它的地方。

你最好使用网络模拟器来尝试这个假设,比如ns-3,它是TCP拥塞控制实现TCP Vegas、TCP Reno、TCP New Reno..:是的,我用的是ns-2模拟器,但我不想那样做。我想通过内核参数对其进行改进。您最好使用网络模拟器来尝试这一假设,如ns-3,它是TCP拥塞控制实现TCP Vegas、TCP Reno、TCP New Reno..:是的,我用的是ns-2模拟器,但我不想那样做。我想通过内核参数来改进它。你的想法是对的,但是,我在两个节点之间进行这个实验,我知道不会有拥塞,只是我在两个节点之间创建了一个有损链接。所以,我想删除指数退避时间,这样TCP只会因为有损链路而不是因为拥塞而丢弃数据包。默认情况下Unix使用哪种TCP控制机制???。您仍然需要指数退避。否则,队列将是深的而不是浅的,并且确定数据包已被丢弃的时间将更高,这意味着数据包丢失将对吞吐量造成更大的损害。你可能想要的是维诺。它的目的是确定数据包丢失是由于拥塞还是随机造成的,并在不形成深队列的情况下进行相应调整。它在Linux上是标准的,代码在内核中,大多数发行版都提供模块,您只需加载模块并选择它。Linux默认使用./sbin/modprobe tcp\u veno&&/sbin/sysctl-w net.ipv4.tcp\u拥塞控制=veno@Arvid当前位置不是
简单来说,因为数据包速率不是恒定的,排队行为通常是专门设计来在队列满之前触发数据包丢失,从而为其他用户保留延迟。你的想法是对的,但是,我在两个节点之间进行这个实验,在我知道不会出现拥塞的情况下,我只是在两个节点之间创建了一个有损链路。所以,我想删除指数退避时间,这样TCP只会因为有损链路而不是因为拥塞而丢弃数据包。默认情况下Unix使用哪种TCP控制机制???。您仍然需要指数退避。否则,队列将是深的而不是浅的,并且确定数据包已被丢弃的时间将更高,这意味着数据包丢失将对吞吐量造成更大的损害。你可能想要的是维诺。它的目的是确定数据包丢失是由于拥塞还是随机造成的,并在不形成深队列的情况下进行相应调整。它在Linux上是标准的,代码在内核中,大多数发行版都提供模块,您只需加载模块并选择它。Linux默认使用./sbin/modprobe tcp\u veno&&/sbin/sysctl-w net.ipv4.tcp\u拥塞控制=veno@Arvid:这并不是那么简单,因为数据包速率不是恒定的,排队行为通常是专门设计来在队列满之前触发数据包丢失,从而为其他用户保留延迟。