Çok oyunculu bir oyunun NAT arkasında güvenilir bir şekilde çalışması nasıl sağlanır?


20

% 100 istemci / sunucu olan oyunlar bile, istemci NAT'ın arkasındayken bazen sorun yaşayabilir. Peee-peer oyunları daha büyük bir konudur. Bazı oyunların birden çok aktarım (UDP ve TCP gibi) veya birden çok bağlantı (örneğin ses için farklı bir UDP bağlantı noktası) kullanması gerekir.

Bir NAT yönlendiricisinin arkasında çalışırken bir oyunun güvenilir bir şekilde çalıştığından emin olmanın bazı yolları nelerdir?

  • Eşler Arası: Merkezi bir sunucu yok. Oyuncu A oyuna başlar ve Oyuncu B katılmak ister
  • İstemci-Sunucu: Bilinen bir adresteki (ana bilgisayar adı) merkezi bir sunucu tüm gelen bağlantıları kabul eder. Her istemci yalnızca bu sunucuyla iletişim kurar.
  • Combo: Sunucunun sadece eşleştirme yaptığı, ancak oyun güncellemeleri eşler arası. Farklı eşler farklı bir IP / bağlantı noktasına sahip her bir oyuncuyu potansiyel olarak görebilir (örneğin, bazı istemciler aynı NAT'ın arkasında ve bazıları farklı bir yönlendiricide)

Yanıtlar:


9

En yaygın olarak kullanılan tekniğe NAT delme denir. İşte iyi bir giriş: http://www.mindcontrol.org/~hplus/nat-punch.html

En azından UDP için bir OSS projesi var: http://udt.sourceforge.net/index.html

RakNet'in delmeyi de desteklediğine inanıyorum. Ticari, ancak ücretsiz bir "Indie" lisansına sahiptir. Buraya bakın: http://www.jenkinssoftware.com/

"NAT punch" için googling size daha fazla okuma malzemesi sağlayacaktır


1
Bunun gerçekten eski bir soru ve cevap olduğunu biliyorum, ancak herkes bunu okursa, RakNet OculusVR tarafından satın alındı ​​ve şimdi 2 maddeli BSD lisansı ile açık kaynaklı. github.com/OculusVR/RakNet
Quad

9
  • İstemcinin sunucuyu veya eşini kendi adresi hakkında bilgilendirmesi gerekmez. Başka bir deyişle, istemci A'nın IP'sini bir oyun paketine gömmeyin ve istemci B veya sunucunun bu adrese yanıt vermesini sağlayın. Her zaman iletinin kaynaklandığı adrese / bağlantı noktasına yanıt verin.

  • Oyun için kullanılan farklı UDP veya TCP bağlantı noktalarını en aza indirin. Bu NAT kurallarını ayarlamayı kolaylaştırır.

  • Kullanıcının oyunda kullanılan varsayılan bağlantı noktasını geçersiz kılmasına izin ver. Bu şekilde aynı NAT'ın arkasında birkaç sunucu barındırılabilir.

  • Oyun belgelerinizdeki bağlantı noktalarını ve uydukları kuralları belgeleyin (bunun için bir Zorba teşekkürler) İniş 3'te, bir test sunucusuna paketler göndererek yönlendiricinizde veya NAT yapılandırmanızda sorun gidermenize yardımcı olacak bağımsız bir test uygulaması oluşturmaya başladım.

7
Bu iyi yanıta ek olarak , oyun belgelerine oyun bağlantı noktalarını not edin . Kaç oyunun bunu yapmadığı şaşırtıcı - insanlar bağlantı noktalarını elle "netstat" ile köklendiriyor ve yarısını yanlış anlıyorlar.
ZorbaTHut

UDP ile mesajın nereden geldiğini gerçekten bilmiyorsunuz. İade adresine her şey yazılabilir.
16:16

0

Diğer cevapların yanı sıra, mevcut bir tekerleği kullanın: http://miniupnp.free.fr/ Bu kütüphane işlev formundaki hemen hemen tüm sıkıntılarla savaşır, size ne zaman ve nasıl yumruk atıp çekeceğinizi kontrol etmenizi sağlar :)

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.