Ev sahibi ayrıldıktan sonra çevrimiçi bir oyun nasıl devam eder?


12

Not: Bu, oyun oynamak değil, ağ oluşturma hakkında bir sorudur. StarCraft'ı sadece örnek olarak kullanıyorum.

Oyun StarCraft (StarCraft 2 değil) çevrimiçi oynamayı destekler. Bir kişi ev sahibi ve diğer kişiler katılıyor. Ev sahibi oyun sırasında ayrılırsa, oyun ev sahibi olmadan süresiz olarak devam edebilir. Bu nasıl çalışıyor?

Aşağıdaki senaryoyu düşünün:

  • 3'e karşı 3'ü barındırıyorum. Kullanıcıların katılabilmesi için yönlendiricimin 6112, TCP ve UDP'yi ileriye taşıyacak şekilde yapılandırılması gerektiğini unutmayın (bkz. Blizzard Desteği ).
  • Beş kişi katılıyor. Herkes (ben dahil) bir yönlendiricinin arkasında. Oyuna başlıyorum.
  • Oyuna üç dakika kala, tabanımın içine yaklaşık yirmi zealot dökülür. Kimse bana yardım etmiyor.
  • Üssüm elendi, bu yüzden ayrılıyorum (oyun size bir seçenek sunmuyor).
  • Oyun ev sahibi olmadan devam eder (evsahibi takımda iki oyuncu kaldı).

Kalan beş müşteri (6112 iletilmesine ihtiyaç duymayan) nasıl bağlantıda kalır?

Doğru anlıyorsam: iki program birbiriyle konuşmak istiyorsa, bunlardan biri "sunucu" olmalı ve bağlantı noktasındaki bağlantıları dinlemeli, diğeri "istemci" olmalı ve bu konuda bir bağlantı isteği başlatmalıdır. Liman. Sadece birbirlerine paket göndermeye başlayamazlar (ve her ikisi de yönlendiricilerin arkasındaysa, nasıl olacağını bile bilmiyorum).

Oyuna ev sahipliği yapan biri bir sunucudur, oyuna katılanlar istemcidir. İstemcilerin sunucuyla nasıl iletişim kurmaya başlayabileceklerini görmek kolaydır. Ne alamadım: istemciler sunucu üzerinden geçmeden birbirleriyle nasıl iletişim kurmaya başlar? Internet Protokolü bir sunucunun istemciler arasında bağlantı başlatmasına izin veriyor mu?

StarCraft söz konusu olduğunda, oyun trafiğinin Battle.net sunucularından geçmesi tamamen mümkündür. StarCraft, oyunlar sırasında Battle.net ile bağlantı kuruyor (arkadaşlardan gelen mesajlar vb. İçin). Ancak, oyun trafiğinin içinden geçtiğinden şüpheliyim, çünkü eğer öyleyse, ev sahiplerinin neden 6112'yi ileriye taşıması gerekir?

Sorum şu: Birden fazla istemciye bağlı olan bir sunucu, aralarında bağlantı başlatabilir mi?


2
Starcraft referansını burada beğendim ...
Jon

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).Görünüşe göre bu, bir oyun başlatmak için gereklidir, böylece kullanıcılar sizi bulabilir, ancak bağlantıda kalmaları gerekmez.
JeffO

@ Jeff O: Battle.net sunucuları mevcut oyunların bir listesini tutar. Ancak, ev sahibi port-forward değilse, diğerleri katılmaya çalıştığında sadece asmak olacaktır (sanırım).
Joey Adams

Yanıtlar:


20

UDP delik delme gibi geliyor

A ve B, her biri kendi özel ağındaki iki ana bilgisayar olsun; N1 ve N2 iki NAT cihazıdır; S, dünya çapında iyi bilinen bir IP adresine sahip genel bir sunucudur.

  1. A ve B'nin her biri S ile bir UDP görüşmesine başlar; N1 ve N2 NAT aygıtları UDP çeviri durumları oluşturur ve geçici harici bağlantı noktası numaraları atar
  2. S bu port numaralarını A ve B'ye geri gönderir
  3. A ve B birbirlerinin NAT aygıtlarına doğrudan çevrilmiş bağlantı noktaları üzerinden temas eder; NAT cihazları önceden oluşturulan çeviri durumlarını kullanır ve paketleri A ve B'ye gönderir

Bu örnekte, S'siniz. Rakipleriniz A ve B'dir. Oyundan atıldığınızda, rakipleriniz size ilk bağlandıklarında birbirleriyle bağlantı kurdukları için oyuna devam edebilirler.


Vay canına +1, NAT'ın bu şekilde kullanılabileceğine dair hiçbir fikrim yoktu
TheLQ

NAT'ların sorunu, güvenlik duvarının arkasından başlamanız gerektiğidir. Bu nedenle, en azından ilk bilgisayarın herkese açık olması veya bağlanılacak bir şey olmaması gerekir.

2

İki program birbiriyle konuşmak istiyorsa, birinin sunucu, diğerinin istemci olması gerekmez. Bu bir ağ modeli, ama tek değil. Bir diğer çok yaygın model, herkesin hem istemci hem de sunucu olduğu ve herkesin herkesle konuşabildiği eşler arası modeldir . Starcraft çok oyunculu ağ içleri hakkında çok fazla şey bilmiyorum, ancak büyük olasılıkla eşler arası bir model kullanarak tanımladığınız şeyi başardığını tahmin ediyorum.


P2P modelleri hala, bağlantıyı kurmak için bağlantı noktalarının her bir eş çiftinde en az bir kişi tarafından iletilmesini gerektirir. Bağlantı noktaları yönlendirilmiş ve yönlendirilmemiş bir torrent indirmeyi deneyin ve bağlantı sayısındaki farkı görün.
Snorbuckle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.