Bagaimana permainan online berlanjut setelah tuan rumah pergi?

12

Catatan: Ini adalah pertanyaan tentang jaringan, bukan game. Saya menggunakan StarCraft hanya sebagai contoh.

Permainan StarCraft (tidak StarCraft 2) mendukung bermain online. Satu host orang, dan orang lain bergabung. Jika tuan rumah pergi selama pertandingan, permainan dapat berlanjut tanpa batas waktu tanpa tuan rumah. Bagaimana cara kerjanya?

Pertimbangkan skenario berikut:

  • Saya meng-host 3 lawan 3. Perhatikan bahwa, agar orang-orang dapat bergabung, router saya harus dikonfigurasikan ke port forward 6112, TCP dan UDP (lihat Dukungan Blizzard ).
  • Lima orang bergabung. Semua orang (termasuk saya) ada di belakang router. Saya memulai permainan.
  • Tiga menit ke dalam permainan, sekitar dua puluh fanatik mengalir ke pangkalan saya. Tidak ada yang membantu saya.
  • Basis saya dihilangkan, jadi saya pergi (permainan tidak memberi Anda pilihan).
  • Permainan berlanjut tanpa tuan rumah (tim tuan rumah memiliki dua pemain tersisa).

Bagaimana lima klien yang tersisa (yang tidak perlu diteruskan 6112) tetap terhubung?

Jika saya mengerti benar: jika dua program ingin berbicara satu sama lain, salah satunya harus menjadi "server" dan mendengarkan koneksi pada port, sedangkan yang lain harus menjadi "klien" dan memulai permintaan koneksi pada itu Pelabuhan. Mereka tidak bisa begitu saja mulai mengirim paket satu sama lain (dan saya bahkan tidak tahu bagaimana mereka akan melakukannya, jika keduanya berada di belakang router).

Seseorang yang meng-hosting game adalah server, sementara mereka yang bergabung adalah klien. Sangat mudah untuk melihat bagaimana klien dapat mulai berkomunikasi dengan server. Yang tidak saya dapatkan adalah: bagaimana cara klien mulai berkomunikasi satu sama lain tanpa melalui server? Apakah Protokol Internet memungkinkan server untuk memulai koneksi antara klien?

Sangat mungkin bahwa, dalam kasus StarCraft, lalu lintas game melewati server Battle.net. StarCraft mempertahankan koneksi ke Battle.net selama pertandingan (untuk pesan dari teman, dll.). Namun, saya ragu lalu lintas game melewatinya, karena jika itu terjadi, mengapa tuan rumah perlu melakukan port forward 6112?

Pertanyaan saya adalah: dapatkah server, dengan beberapa klien terhubung, memulai koneksi di antara mereka?

Joey Adams
sumber
2
Saya menyukai referensi Starcraft di sini ...
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).Tampaknya ini diperlukan untuk memulai permainan agar pengguna dapat menemukan Anda, tetapi tidak diharuskan untuk tetap terhubung.
JeffO
@ Jeff O: Server Battle.net memelihara daftar game yang tersedia. Namun, jika tuan rumah tidak port-forward, itu hanya akan hang ketika orang lain mencoba untuk bergabung (saya pikir).
Joey Adams

Jawaban:

20

Kedengarannya seperti lubang meninju UDP

Biarkan A dan B menjadi dua host, masing-masing di jaringan pribadinya sendiri; N1 dan N2 adalah dua perangkat NAT; S adalah server publik dengan alamat IP terkenal yang dapat dijangkau secara global.

  1. A dan B masing-masing memulai percakapan UDP dengan S; perangkat NAT N1 dan N2 membuat status terjemahan UDP dan menetapkan nomor port eksternal sementara
  2. S menyampaikan nomor port ini kembali ke A dan B
  3. A dan B saling menghubungi perangkat NAT satu sama lain langsung pada port yang diterjemahkan; perangkat NAT menggunakan status terjemahan yang dibuat sebelumnya dan mengirim paket ke A dan B

Dalam contoh ini, Anda adalah S. Lawan Anda adalah A dan B. Ketika Anda ditendang dari permainan, lawan Anda dapat terus bermain karena mereka telah menegosiasikan koneksi satu sama lain ketika mereka pertama kali terhubung dengan Anda.

duck9
sumber
Wow +1, saya tidak tahu NAT dapat digunakan seperti itu
TheLQ
Masalah dengan NAT adalah Anda harus mulai dari belakang firewall. Oleh karena itu, Anda memerlukan setidaknya komputer awal agar tersedia untuk umum atau tidak ada yang terhubung.
2

Jika dua program ingin berbicara satu sama lain, yang satu tidak perlu menjadi server dan yang lain sebagai klien. Itu salah satu model jaringan, tetapi bukan satu-satunya. Model lain yang sangat umum adalah model peer-to-peer , di mana setiap orang adalah klien dan server dan siapa pun dapat berbicara dengan siapa pun. Saya tidak tahu terlalu banyak tentang internal Starcraft multiplayer internal internal, tapi saya kira itu kemungkinan besar akan menyelesaikan apa yang Anda gambarkan dengan menggunakan model peer-to-peer.

Mason Wheeler
sumber
Model P2P umumnya masih membutuhkan port untuk diteruskan oleh setidaknya satu orang di setiap pasangan rekan untuk membuat koneksi awal. Coba unduh torrent dengan dan tanpa port yang diteruskan dan lihat perbedaan jumlah koneksi.
Snorbuckle