只是好奇在创建在线游戏时使用UDP和TCP之间的决定

时间:2011-04-10 18:00:52

标签: tcp udp

正如标题所示,我想知道如何决定实施哪种协议。到目前为止,我理解UDP可以实现更快的数据传输,但是它的命令被忽略了,并且它不会监视数据是否被接收。据我所知,TCP更安全,在数据必须精确且接收时间不必太快时使用。但我注意到不同的在线游戏使用不同的协议,即使它们所有的游戏都非常流畅(我假设这意味着快速的数据传输。)所以我想知道你怎么知道使用哪个,以及为什么使用这个协议?

由于

3 个答案:

答案 0 :(得分:1)

警告:传入过度简化。不过,这应该有助于你理解。

TCP可靠。如果您发送数据,它将以一个整体的顺序到达那里,或者它将无法到达那里。这种可靠性是以更多的流量开销为代价的,因为接收方必须向发送方确认其收据,并且发送方可以多次发送相同的数据以确保正确的交付。

UDP不可靠,但没有这样的开销。发送方在接收方处抛出数据包。到达的数据包仍然保证一个到达,但并非所有数据包都保证到达。当您能够承受传输损耗并且TCP的开销太大而无法证明可靠性时,UDP非常有用。

UDP的使用示例包括实时内容流(视频/音频)和连续状态更新(例如,数据包通知客户端游戏世界中各种对象的状态)。一般来说,这些都是适当的目标,因为数据被新数据取代后很快变得无关紧要。最好继续投掷比特,而不是担心可能不再重要的过去数据的完整到达。

另一方面,身份验证,内容更新系统或游戏内聊天等功能可以从更可靠的TCP连接中获益,因为延迟远不如完整性重要。

答案 1 :(得分:0)

确定使用哪种协议的可靠方法是使用网络数据包嗅探器来记录您的网络流量,记录一些与游戏相关的流量并查看协议名称。一个免费且简单的网络嗅探器的例子是Wireshark(以前的Ethereal)。

UDP vs TCP的决定很可能(我说可能是因为我不是专业游戏开发者,只是一个爱好开发者)可归结为您期望发送/接收的流量,网络条件,持久性数据包丢失时的程序和预期的并发用户数。

基于回合制的策略游戏,例如国际象棋,其中每个玩家不需要发送比他们的移动和偶尔的聊天消息更多的东西,将受益于TCP。 3D中有数十名玩家的第一人称射击游戏可能会在很长一段时间内产生大量流量,但如果偶尔丢失一些数据包可能不会受到影响,这使其成为UDP的理想候选者。

然后,有些游戏甚至可能会将TCP和UDP的组合用于对速度和可靠性有不同要求的任务。

答案 2 :(得分:0)

不要将其视为“UDP更快”和“TCP更慢”,因为这是错误的。最大的区别是坏的数据包只是在UDP中丢弃。接收方UDP实现不必等待丢弃的数据包在向应用程序提交任何后续数据包之前重新传输和接收

在TCP中,即使您的计算机在缓冲区中丢弃的数据包之后有下一个数据包,在发送方重新发送丢弃的数据包之前,它也无法将其传递给应用程序。

TCP:按顺序将数据传送到应用程序,自动重新传输 UDP:以任何顺序将数据传送到应用程序,无需重新传输

如果数据包是自包含的,则UDP通常是有意义的。如果必须将多个UDP数据包重组为一个,则应该使用TCP。