主持人离开后,在线游戏如何继续?


12

注意:这是有关网络而不是游戏的问题。我仅以星际争霸为例。

游戏《星际争霸》(不是《星际争霸2》)支持在线游戏。一个人主持,其他人参加。如果主机在游戏过程中离开,则游戏可以在没有主机的情况下无限期继续。这是如何运作的?

请考虑以下情形:

  • 我将3托管为3。请注意,为了使人们能够加入,我的路由器必须配置为转发6112,TCP和UDP端口(请参阅Blizzard支持)。
  • 五个人参加。每个人(包括我本人)都在路由器后面。我开始游戏。
  • 比赛开始三分钟后,大约有二十位狂热者涌入我的基地。没有人帮助我。
  • 我的阵营被淘汰,所以我离开了(游戏没有给您选择)。
  • 比赛在没有东道主的情况下继续进行(主队剩下两名球员)。

其余五个客户端(不需要转发6112)如何保持连接?

如果我理解正确:如果两个程序要互相通信,则其中一个必须是“服务器”并侦听端口上的连接,而另一个则必须是“客户端”并在该端口上发起连接请求港口。他们不能简单地开始向对方发送数据包(如果两个都在路由器后面,我什至不知道他们会怎么做)。

主持游戏的人是服务器,而加入游戏的人是客户端。很容易看到客户端如何开始与服务器通信。我不明白的是:客户端如何不通过服务器就开始彼此通信?Internet协议是否允许服务器启动客户端之间的连接?

就星际争霸而言,游戏流量完全可能通过Battle.net服务器。在游戏过程中,星际争霸确实维持与Battle.net的连接(用于来自朋友等的消息)。但是,我怀疑游戏流量会通过它,因为如果这样做了,为什么主机需要移植6112?

我的问题是:连接有多个客户端的服务器是否可以启动它们之间的连接?


2
我喜欢这里的《星际争霸》参考资料……
乔恩

I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).显然,这是开始游戏所必需的,以便用户可以找到您,但不需要保持联系。
JeffO 2011年

@Jeff O:Battle.net服务器维护可用游戏列表。但是,如果主机不进行端口转发,则当其他人尝试加入时,主机只会挂起(我认为)。
乔伊·亚当斯

Answers:


20

听起来像UDP打孔

假设A和B是两个主机,每个主机都在自己的专用网络中;N1和N2是两个NAT设备。S是具有众所周知的全球可访问IP地址的公共服务器。

  1. A和B分别与S开始UDP对话;NAT设备N1和N2创建UDP转换状态并分配临时外部端口号
  2. S将这些端口号中继回A和B
  3. A和B在转换后的端口上直接联系彼此的NAT设备;NAT设备使用先前创建的转换状态并将数据包发送到A和B

在此示例中,您是S。您的对手是A和B。当您被踢出游戏时,您的对手可以继续比赛,因为他们在首次与您建立联系时就已经相互协商了连接。


哇+1,我不知道可以像那样使用NAT
TheLQ

NAT的问题是您需要从防火墙后面开始。因此,您至少需要初始计算机可以公开使用或没有任何连接。

2

如果两个程序要互相通信,则一个程序不必是服务器,而另一个程序则可以是客户端。那是一种网络模型,但不是唯一的一种。另一个非常常见的模型是点对点模型,其中每个人都是客户端和服务器,任何人都可以与任何人交谈。我对Starcraft多人网络内部并不十分了解,但是我猜想它最有可能通过使用对等模型来实现您所描述的功能。


P2P模型通常仍要求每对对等方中的至少一个人转发端口以进行初始连接。尝试下载带有和不带有端口的torrent文件,并查看连接数的差异。
Snorbuckle 2011年
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.