OkHttp支持(和使用)哪些TCP拥塞控制算法?

0 人关注

什么是所有TCP拥塞控制算法的列表,这些算法是由谁利用的? OkHttp库 ?

我想弄清楚为什么一些FOSS的移动应用在恶劣的网络条件下会失败得如此惨烈(高丢包、抖动、延迟)。但有时开发者只是挥挥手,说应该没问题,因为他们使用的是OkHttp。

虽然看起来OKHttp的设计是为了通过缓存来最大限度地减少带宽,并做其他很酷的事情,以转化为更好的用户体验,但我无法在下面找到任何信息 兴发娱乐官网手机版文件 指定哪些 TCP拥塞控制算法 they're using.

例如,我怎样才能告诉OkHttp使用 BBR ?

5 个评论
看起来 retryOnConnectionFailure() 在初始连接建立后,当数据包丢失导致下载失败时,不会恢复。 square.github.io/okhttp/4.x/okhttp/okhttp3/-ok-http-client/...
为什么你认为他们会做任何具体的拥堵控制,而不是依靠操作系统的默认值?包括拥塞控制在内的TCP行为完全由操作系统处理,应用程序最多只能从操作系统提供的算法中选择。大多数应用程序在这里没有选择任何东西,而是依赖操作系统的默认值。而就我从源头上看,OkHttp在这里也没有什么不同。
因为当我为安卓应用开出关于在糟糕的网络上出现故障的票据时,开发人员(来自不同的项目)的反应是告诉我,大致上 "应该没问题,因为我们现在使用OkHttp"。如果这不是错误的信息,那么有理由认为OkHTTP做了一些神奇的机器学习来优化TCP拥塞控制算法--或者至少允许用户对其进行调整。我想问题在于,开发者认为OkHttp是某种神奇的子弹。其实不然。
答案是 "没有"。OkHTTP是一个应用协议库。它位于平台的TCP实现之上,这是你能找到任何拥塞控制算法的唯一地方。OkHTTp甚至不能看到TCP拥堵,更不用说对它做什么了。
android
tcp
okhttp
jitter
packet-loss
Michael Altfield
Michael Altfield
发布于 2022-08-06
2 个回答
Steffen Ullrich
Steffen Ullrich
发布于 2022-08-06
已采纳
0 人赞同

包括拥塞控制在内的TCP行为完全由操作系统处理,应用程序最多只能做到 从操作系统提供的算法中选择 .大多数应用程序在这里没有选择任何东西,而是依赖操作系统的默认值。而据我从源代码中看到,OkHttp在这里也没有什么不同,也就是说,它只是依赖操作系统的默认值。

你是否有一个例子,说明在Android上使用OkHttp时如何改变TCP拥塞控制算法(所以是用Java,不是C++)。OkHttp是用Java为Android编写的。
@MichaelAltfield:不,我怀疑OkHttp是否有固有的功能来做到这一点。如果你能够得到底层的套接字,也许可以通过设置一些套接字选项。但这并不是OkHttp所特有的。
如果OkHttp不支持改变TCP拥塞控制算法,好吧。你有没有一个例子说明如何在Android上改变TCP拥塞控制算法(用Java)?对于这个问题(Android上的Java)来说,这将是一个比你答案中的链接(Linux上的C++)更好的资源。
@MichaelAltfield:我没有看到这里宣布的必要选项。 developer.android.com/reference/java/net/SocketOptions
Yuri Schimke
Yuri Schimke
发布于 2022-08-06
0 人赞同