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

时间:2018-12-01 18:26:41

标签: asynchronous networking udp multiplexing

我目前正出于自学目的,正在实施受KCP,Dragonite和QUIC启发的可靠UDP传输。我想应用几种优化,其中一种是多路复用。

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

此解决方案会起作用吗?我应该期待性能改善吗?

1 个答案:

答案 0 :(得分:1)

与TCP相反,UDP没有慢速启动,即它可以从头开始全速发送(如果知道)。因此,实质上可以完成多快发送的限制是本地系统可以发送数据的速度或可用带宽。假设发送不受CPU限制,并且您设想的所有多个套接字的通信将采用相同的方式(传出网卡,路由器,传入网卡),并且在中间盒中未进行特定于连接的流量整形,然后使用多个套接字不应提高速度,因为它不会改变各种瓶颈的使用方式。

如果发送受CPU限制,则此更改。在这种情况下,将多个协程与多个套接字结合使用可能会更好地利用当今的多处理器系统,因为它可以同时在多个CPU内核上运行,并且这种方式可以发送更多数据包,直到再次绑定CPU。 / p>

如果流量是带宽受限的,但是有到目标系统的替代路径可以提供额外的带宽,这也会改变。通过将套接字绑定到不同的本地IP地址(在不同的本地网卡上)或通过选择不同的目标IP地址(对于同一目标系统),人们可能能够使用这种替代路径,从而利用附加带宽

类似地,如果存在某些流量整形会限制客户端和服务器之间每个连接的带宽,则多个套接字可能会有所帮助。在这种情况下,多个套接字可以增加可用带宽。