我正在开发一个C++应用程序,目前使用C sockets在对等方之间传输数据。有n个对等方,所有对等方都运行相同的代码。在应用程序逻辑中,任何对等方都可能需要向任何其他对等方传输(可能很大的)数据,因此首先在所有可能的对等方之间打开连接。要求应用程序逻辑和(可能很大的)数据网络传输速度尽可能快。
目前,在任意两个对等方之间(例如A和B),应用程序打开两种类型的连接 - 一种是A是服务器,B是客户端,反之亦然。这样做可能是为了如果A和B需要并发地相互传输数据,则整个过程可以比只从A到B具有一种连接类型更快地完成。对于每种连接类型(例如A是服务器,B是客户端),应用程序然后打开3个TCP连接(使用C-sockets)。但是,它目前的编码方式只使用其中一个这些3个连接。
看到这一点,我开始想知道如何最优地利用N个打开的连接,也许可以使用轮询或某种策略将数据分块并同时传输。但是,有多少个并行TCP连接应该打开以及这些连接之间应该使用什么策略不清楚。这个答案还取决于哪些因素?例如,如果我打开了1000个TCP连接,有什么危害?(忽略系统约束,如用完端口等)
如果有人可以说明如何使应用程序利用多个并行TCP连接最具性能,那将是很好的。快速的谷歌搜索会导致几篇研究论文,但我也对例如Web浏览器如何解决此问题感兴趣。
谢谢!
更新:与一些更了解TCP的人交谈后,我对情况有了更好的了解。首先,我的前提是在A和B之间打开两种类型的连接(A是客户端,B是服务器,反之亦然)将有助于增加网络吞吐量似乎是错误的。在A和B之间打开一种类型的TCP连接就足够了。这取决于数据报是否能够同时从A到B和反之亦然。我发现这个链接很有用:TCP是双向还是全双工的?。
此外,为了充分利用可用带宽,最好打开多个TCP连接。我发现这个非常相关的链接:TCP是否可以通过多个连接实现更高的传输速率? 但是,仍然存在打开多少此类连接的问题。如果有人能回答这个问题就太好了。
目前,在任意两个对等方之间(例如A和B),应用程序打开两种类型的连接 - 一种是A是服务器,B是客户端,反之亦然。这样做可能是为了如果A和B需要并发地相互传输数据,则整个过程可以比只从A到B具有一种连接类型更快地完成。对于每种连接类型(例如A是服务器,B是客户端),应用程序然后打开3个TCP连接(使用C-sockets)。但是,它目前的编码方式只使用其中一个这些3个连接。
看到这一点,我开始想知道如何最优地利用N个打开的连接,也许可以使用轮询或某种策略将数据分块并同时传输。但是,有多少个并行TCP连接应该打开以及这些连接之间应该使用什么策略不清楚。这个答案还取决于哪些因素?例如,如果我打开了1000个TCP连接,有什么危害?(忽略系统约束,如用完端口等)
如果有人可以说明如何使应用程序利用多个并行TCP连接最具性能,那将是很好的。快速的谷歌搜索会导致几篇研究论文,但我也对例如Web浏览器如何解决此问题感兴趣。
谢谢!
更新:与一些更了解TCP的人交谈后,我对情况有了更好的了解。首先,我的前提是在A和B之间打开两种类型的连接(A是客户端,B是服务器,反之亦然)将有助于增加网络吞吐量似乎是错误的。在A和B之间打开一种类型的TCP连接就足够了。这取决于数据报是否能够同时从A到B和反之亦然。我发现这个链接很有用:TCP是双向还是全双工的?。
此外,为了充分利用可用带宽,最好打开多个TCP连接。我发现这个非常相关的链接:TCP是否可以通过多个连接实现更高的传输速率? 但是,仍然存在打开多少此类连接的问题。如果有人能回答这个问题就太好了。