UDP与TCP安全性对比

4
我们正在开发一个拥有数百万客户端与我们的服务器通信的游戏。这些游戏大部分是回合制的。我知道UDP相比TCP具有一定的性能优势,但我想知道是否有一种协议比另一种更安全?我阅读了一些网站,表明TCP通常会更安全,但我看到了许多利用TCP弱点的攻击行为。
我们的代码对于不可靠连接和丢失/乱序数据相当宽容,这就是我想到使用UDP的原因。谢谢!

4
这些协议都不是以安全性为设计目的... - Oliver Charlesworth
2个回答

7

UDP的一个大安全问题是你容易受到欺骗DOS攻击的影响。使用TCP在互联网上无法伪造地址,因为握手永远不会完成。然而,使用UDP没有隐式握手 - 任何会话维护必须由您的代码完成(处理开销)。

我知道UDP相对于TCP具有一些性能优势

只有在局域网内 - 部分原因是不必进行握手的延迟较低 - 但最大的区别是它绕过了拥塞控制机制。这对于局域网内的数据不是问题,因为数据包丢失率将非常低 - 但如果您想通过互联网发送数据,则必须在应用程序中实现带宽限制、错误恢复和拥塞控制(更多的处理开销)。虽然您可以通过前向纠错控制处理某些类型的数据包丢失,但这对于超载路由器没有帮助。所有减慢UDP速度的东西都有其原因。
如果您的数据流不超过,比如说,在任何方向上的2个MSS,然后是来自远程端的确认,请使用它 - 但如果您想快速移动大量数据,请使用TCP(或一辆站车)。

我们的游戏不会流传音频或视频,它只是传递当前游戏状态的简短数据包 - 这样是否可以避免拥塞问题? - Benny Smith
如果它们真的很短,那么拥堵不应该成为太大问题 - 使用FEC将减少影响 - 但是关于UDP在互联网上的可靠性数据不太多,因此建议进行一些现场试验或坚持使用TCP。 - symcbean
1
@symcbean UDP不会创建可靠的通信形式,因此在性能方面优于TCP,后者确保每个数据包都被接收。 - Gary Drocella
@symcbean 此外,劫持TCP会话也是可能的,尤其是在局域网上,但理论上也有可能使用计时器攻击进行远程TCP会话劫持。 - Gary Drocella
@person27:也许你想要证明你的观点并提出一个替代方案,而不是批评别人。 - symcbean
同意,我当时说话很粗鲁。这是在说UDP只在局域网上比TCP提供性能优势。它引用了ack、sync-ack、ack握手作为TCP性能损失的主要来源,但这最多只是偶发事件。UDP的主要优势在于旧数据变得冗余并且可以停止被重发,即使许多TCP方面已经重新实现。这有时被称为RUDP(可靠UDP),但尚未标准化。 - person27

5

这是一个很好的比较UDP和TCP的资源:http://www.skullbox.net/tcpudp.php

传统上,大多数实时应用程序使用UDP,例如:VOIP。我不是安全领域的专家,但我猜两者同样安全/不安全。这取决于使用诸如TLS等安全协议的情况。

TCP只有机制来保证数据包的传递。


据我理解,TCP 还具有握手模型,用于连接到端口以侦听流量,在建立加密之前进行身份验证。因此,它不仅仅是保证数据包的传递。 - person27

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