【问题标题】:Java Tcp Socket Manage Packet RetransmissionJava Tcp Socket 管理数据包重传
【发布时间】:2025-11-21 11:50:01
【问题描述】:

是否可以获得java Socket的当前重传超时时间?

假设有两台主机位于地球的另一侧,通过一个 java Socket 连接(一个 ping 通常需要 450 毫秒),它们连续传输数据。

我了解重传由底层平台的 tcp 堆栈(例如 Windows 操作系统)管理。

我希望发送方的 OS/tcp 堆栈开始重新传输在 3 秒内没有收到确认的数据包

如何做到这一点? 是否可以查询给定套接字的当前配置的 tcp 重传计时器设置是什么?

【问题讨论】:

  • 不,这是不可能的,而且一般来说,我所知道的任何 TCP API 都无法管理重传。

标签: java sockets tcp


【解决方案1】:

无法从 Java 调整重传超时。事实上,我认为用任何编程语言编写的任何用户空间程序都不可能做到这一点。

重传超时由 TCP 流控制算法确定。超时是自适应的;即算法根据网络状况上下调整它们。事实上,在过去的 50 年中,已经尝试了许多版本的 TCP 流量控制算法。*中有一个摘要TCP congestion control

根据操作系统(以及您的管理员权限),可以让操作系统使用不同的流量控制算法。以下是一些链接:

但最重要的是,您不能(也不应该)从 Java 应用程序调整它。

【讨论】: