选择哪种网络协议TCP或UDP用于远程桌面应用?

4

我想在C#中创建类似于TeamViewer的应用程序。从性能角度来看,TCP协议和UDP协议哪个更好?

3个回答

7
UDP只是简单地发送网络消息,不强制执行顺序,例如它们可以无序到达,并且不检查消息是否传递。
TCP强制执行数据包顺序,并具有检查消息是否已传递的方法。因此,它更可靠。
就吞吐量而言 - 即在给定时间内传输的数据量 - 它们在实践中将大致相同。
UDP的优点是较低的延迟。因为它不检查排序或确认数据包的接收 - 您的程序按照它们到达的顺序接收数据包。无需等待确认。
当低延迟至关重要且消息很小,并且您的程序能够容忍丢失数据包和乱序数据包时,您需要使用UDP。我只在视频游戏(如射击游戏)中看到过它用于发送用户输入。
对我来说,“teamviewer”意味着视频 - 大量数据 - 因此请使用TCP。

1
Windows的RDP默认使用UDP。如果客户端和服务器在网络拓扑中足够接近,则数据包大小可能并不重要。 - jpaugh

1

UDP几乎总是比TCP提供更好的性能,但可靠性会有所降低。


现今UDP的“可靠性”问题基本上是一种形式主义,除非您确实有连接问题,否则它总会通过。在类似TeamViewer的应用程序中,丢失一个数据包不会对其产生太大影响,因为它只发送一侧的输入和另一侧的“图片”。

但根据RDP协议,它使用TCP协议。在Windows 8中,他们已经开始在UDP协议上使用RDP协议。我认为可能还有其他原因。 - Rajdip Patel
逻辑上不同的UDP数据包会在不同的路径上传输。因此,与TCP相比,UDP会变得更慢,因为在TCP网络路由路径已经设置好了。如果我没错的话,那么UDP如何比TCP提供更高的性能呢? - Rajdip Patel
1
@RajdipPatel 即使在TCP中,每个数据包也可能使用不同的路由路径。 - glglgl
不,TCP 中一旦建立了路径,它就不会改变。 - Rajdip Patel
错误的说TCP的网络路径永远不会改变。这并不是协议的工作方式。路由决策是在IP层下面的一层进行的。TCP对其经过的路径没有任何控制,并且没有机制可以更改或防止其路由的变化。(我明白这篇文章已经五年了,但它在我的搜索结果中排名第一。) - ElizabethGreene

0

Teamviewer使用UDP作为连接远程计算机的主要协议。只有在UDP失败时才会使用TCP...就可访问性而言,我没有发现任何与其UDP连接相关的问题。如果UDP存在任何问题,他们就不会将其作为主要协议。我们需要找到的是他们如何优化他们的UDP连接。


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