首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每个连接Linux中提高TCP重传速率?

如何在每个连接Linux中提高TCP重传速率?
EN

Stack Overflow用户
提问于 2022-01-29 00:00:24
回答 1查看 429关注 0票数 0

我在一个非常有损耗的网络系统上使用TCP (下降率几乎为20% ),但延迟极低(<2ms)。在我们的Linux系统上,默认的TCP实现是非常糟糕的。有时,它等待5-6秒才能重新发送数据包。另一方面,我们的TCP堆栈每隔20‘s就重试一次,这很好。

我找不到任何方法来手动进行重新传输,即使使用TCP_NODELAY,也没有积极地发送任何数据。此外,这里似乎没有每个套接字的配置。因为我们只想更改特定套接字的时间(这个网络上的套接字)。

是否有任何内核特性,可以用TCP手动重新传输,或者积极地设置计时器,以便允许每秒进行多次重试?

(我知道这是一个类似的(但不是相同的)问题:Application control of TCP retransmission on Linux --但我不想关闭连接,就像TCP_USER_TIMEOUT让它不断地重试一样。

EN

回答 1

Stack Overflow用户

发布于 2022-01-29 10:19:23

TCP_NODELAY是一个完全不相关的选项--它禁用了Nagle的分组合并算法--它用于交互连接(如ssh ),在这种情况下,希望在单独的数据包中包含每个字符(以获得一个即时的远程回波)。

通常,TCP层将持续监视RTT (往返时间)以接收ACK,并调整其超时。这就是Karn的算法。

AFAIK,在重新传输时,Linux内核中没有可调性,因为这是由RFCs指定的,并且它嵌入在协议中。

我建议您阅读以下介绍:https://www.catchpoint.com/blog/tcp-rtt,然后捕获包含这些异常长的重传的数据包转储,然后在这里发布它们。

另外,您确定包丢失在两个方向都是相同的吗?这可以解释一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70901426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档