多人游戏使用TCP还是UDP?


18

我经常看到这个问题。多数人说,UDP对于实时游戏总是比TCP更好。我的理解是,TCP会尝试一遍又一遍地重新发送数据包,直到对方得到它们为止,而UDP则不在乎。

我读过的大部分内容是,任何实时游戏都必须使用UDP,而TCP则很糟糕。但问题是,无论如何,大多数人似乎还是在UDP之上实现了某种形式的TCP。而且我还听说,由于我们已经不在80年代了,而且互联网现在相当快速且可靠,因此两者之间的差异可以忽略不计。

我的一般理解是否错误?有人可以帮我清理一下吗?


7
internet is now pretty fast and reliable不,这不对。的带宽也大幅提升,是的,但延迟还是相当高的。使用纯TCP,除非您进行数据包压缩,否则您需要服务器滴答时间超过最大可承受延迟,这最好是通过UDP在客户端完成。问题是游戏中的某些信息需要可靠,而其他一些信息则需要快速。基于UDP的自定义协议以及一堆专有协议都可以实现这一点,这些协议可以在一个不错的程序包中为您提供所需的一切。
Ordous

4
他们没有完全实现UDP上的TCP。TCP提供了一些理想的功能,这些功能是在UDP之上实现的。使用UDP的主要要点是,如果您发送了一个包含t0从未收到的世界状态的数据包,那么您就可以在时发送新的世界状态,t1而不必等到客户端实际收到第一个数据包时,已经过时了。
Vincent Savard

@Ordous我认为这回答了我的问题:)谢谢
flooblebit

4
另外请注意,UDP很容易受到IP欺骗的影响,如果这很可能会使您的服务器容易受到DDoS攻击。您可以通过“控制” TCP连接将客户端IP地址和其他详细信息发送到服务器,然后再从“已认证”地址接受UDP数据包来避免这种情况。另外,由于没有针对UDP的开放标准,您可能必须实现自己的加密层。
ARau

@ blownie55好点
Naresh Kumar

Answers:


12

取决于您是在谈论对等,运行服务器的用户是客户端/服务器,还是运行服务器的数据中心是客户端/服务器。仅在后一种情况下,互联网才真正真正快速可靠。您的用户的计算机不能保证速度很快,当然也不可靠。

UDP使您可以更好地控制正在执行的类似TCP的实现。它为您提供了更大的灵活性,可以按顺序执行数据包,丢弃您认为不必要的数据包,而重试您认为重要的数据包之类的事情。但是,只有在需要且具有必要专业知识的情况下,才应这样做。

如果没有这种灵活性,TCP可以很好地工作,并且可以节省大量时间。即使不是绝对需要UDP的专业工作室(如我工作过的工作室)也使用TCP,并且他们有专门从事网络编程的人员。


我还建议“对于什么”很重要-例如,对于游戏内聊天系统,我什至不考虑UDP。我还要考虑的另一件事(至少对于“客户端服务器”而言)是服务器如何有效地处理流量-现代NIC对于TCP具有很多内置的“卸载”功能(拆分和合并数据包,将数据包分类为流,等),以减少CPU开销,而大多数不适用于UDP。
布伦丹

1
现在,QUIC(en.wikipedia.org/wiki/QUIC)可能会改变,它将成为使用UDP的HTTP / 3的一部分,并且默认情况下使用TLS进行加密。广泛使用它需要一些时间,因此值得期待。有关此处需要处理的某些问题的更多详细信息, Blog.cloudflare.com/the
road

3

正如@Ordous所指出的那样,假设说“ Internet现在已经非常快速且可靠”,这也是一个危险的假设。

在大多数游戏中,用于交付关键数据包的UDP +定制协议之所以如此神奇,是因为,有时丢失某些数据包可能会“正常”(例如,用于完成游戏的次要非关键事件) ,有时它“一点也不好”会丢失一些数据,例如光标移动等。(我不做游戏开发为生,所以请原谅我含糊的例子)

默认情况下,UDP不会浪费时间一次又一次地推送它们。

而且,与“总是需要不间断地交付”数据包相比,许多游戏似乎更容易“有时会丢失”数据包。因此,很自然地适合此任务。

UDP所需的全部就是使用自定义协议,该协议仅有助于正确地传递“始终需要无故障传递”的数据包,而剩下的游戏数据则由网络连接来决定。

现在确定哪种流量构成了您要传输的大部分数据,将有助于您做出更好的决策。

反对TCP的观点是,重试所花的时间可能会花在发送现在重要的数据包上。

如果在传输过程中出现任何问题,TCP也有可能级联到用户的更复杂的游戏场景中,与UDP + Custom Stack相比,会破坏他们的体验(最后一部分只是预感。我将离开请其他专家对此发表评论。希望了解这种情况的可能性)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.