通过多个UDP端口传输数据是否会提高性能?

4

我目前正在实现可靠的UDP传输,这是受KCP、Dragonite和QUIC启发而来的,只是出于自我教育目的。我想应用几个优化措施,其中之一是多路复用。

我的想法是:我将数据分成小块(块大小与MTU相关),并通过多个数据报套接字异步并行发送和接收它们(客户端和服务器都如此),利用协程。

这个解决方案能行吗?我应该期望性能提高吗?


您的主机仍将串行发送和接收它们。网络本质上是串行的,除非您有多个NIC等并行设备。 - Ron Maupin
1个回答

6
与TCP相反,UDP没有慢启动,即它可以从一开始就以全速发送(如果已知)。因此,发送速度的限制实际上是本地系统发送数据的速度或可用带宽。假设发送不受CPU绑定,并且您想象的所有多个套接字的流量都将采用相同的方式(出站网络卡,路由器,入站网络卡),并且中间盒未执行特定于连接的流量整形,则使用多个套接字不应会导致速度增加,因为它不会改变如何使用各种瓶颈。
如果发送受CPU绑定,则情况会有所改变。在这种情况下,使用多个协程与多个套接字结合使用可能更好地利用当今的多处理器系统,因为它同时在多个CPU核心上运行,从而可以发送更多数据包,直到再次受到CPU绑定。
如果流量受带宽限制但有与目标系统提供额外带宽的替代路径,则情况也会发生变化。通过将套接字绑定到不同的本地IP地址(在不同的本地网络卡上)或选择不同的目标IP地址(针对同一目标系统),可以使用这些替代路径,从而利用额外的带宽。
同样,如果存在一些流量整形,限制客户端和服务器之间每个连接的带宽,则多个套接字可能有所帮助。在这种情况下,多个套接字可以增加可用带宽的数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接