호스트가 떠난 후 온라인 게임은 어떻게 계속됩니까?


12

참고 : 이것은 게임이 아니라 네트워킹에 관한 질문입니다. 저는 스타 크래프트를 단지 예로 사용하고 있습니다.

게임 스타 크래프트 (안 스타 크래프트 2) 온라인 플레이를 지원합니다. 한 사람이 호스트하고 다른 사람이 참여합니다. 게임 도중 호스트가 떠나면 호스트없이 게임을 계속 진행할 수 있습니다. 어떻게 작동합니까?

다음 시나리오를 고려하십시오.

  • 3 대 3을 호스팅합니다. 사람들이 참여하려면 라우터가 6112, TCP 및 UDP를 포워드하도록 구성해야합니다 ( 블리자드 지원 참조 ).
  • 다섯 사람이 합류합니다. 모든 사람 (자신 포함)은 라우터 뒤에 있습니다. 게임을 시작합니다.
  • 경기 시작 3 분, 약 20 명의 열광자가 제 기지에 쏟아졌습니다. 아무도 나를 도와주지 않습니다.
  • 내 기지가 제거되었으므로 떠나야합니다 (게임은 당신에게 선택권을주지 않습니다).
  • 호스트없이 게임이 계속됩니다 (홈 팀에는 2 명의 플레이어가 남아 있습니다).

나머지 5 명의 클라이언트 (6112 전달이 필요하지 않은 클라이언트)는 어떻게 연결되어 있습니까?

내가 올바르게 이해한다면 : 두 프로그램이 서로 대화하기를 원한다면, 그 중 하나는 "서버"여야하고 포트에서 연결을 수신해야하는 반면, 다른 하나는 "클라이언트"여야하고 연결 요청을 시작해야합니다. 포트. 그들은 단순히 서로에게 패킷을 보내기 시작할 수 없습니다 (그리고 둘 다 라우터 뒤에있는 경우 어떻게 될지조차 알지 못합니다).

게임을 호스팅하는 사람은 서버이고, 게임에 참여하는 사람은 클라이언트입니다. 클라이언트가 서버와 통신을 시작할 수있는 방법을 쉽게 알 수 있습니다. 내가 얻지 못하는 것은 클라이언트가 서버를 거치지 않고 어떻게 서로 통신을 시작합니까? 인터넷 프로토콜을 통해 서버가 클라이언트 간 연결을 시작할 수 있습니까?

스타 크래프트의 경우 게임 트래픽이 Battle.net 서버를 통과하는 것이 전적으로 가능합니다. 스타 크래프트는 게임 도중 (친구의 메시지 등) Battle.net과의 연결을 유지합니다. 그러나 게임 트래픽이 통과 한 것으로 의심됩니다. 만약 그렇다면 호스트가 6112를 포워딩해야하는 이유는 무엇입니까?

내 질문은 : 여러 클라이언트가 연결된 서버가 그들 사이의 연결을 시작할 수 있습니까?


2
스타 크래프트 참고 자료를 좋아합니다.
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).분명히 게임을 시작해야 사용자가 나를 찾을 수 있지만 연결 상태를 유지할 필요는 없습니다.
JeffO

@Jeff O : Battle.net 서버는 사용 가능한 게임 목록을 유지 관리합니다. 그러나 호스트가 포트를 전달하지 않으면 다른 사람이 참여하려고 할 때 단순히 중단됩니다 (제 생각에).
Joey Adams

답변:


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가 그렇게 사용될 수있을 줄
몰랐습니다

NAT의 문제점은 방화벽 뒤에서 시작해야한다는 것입니다. 따라서 최소한 초기 컴퓨터를 공개적으로 사용할 수 있어야하거나 연결할 것이 없습니다.

2

두 프로그램이 서로 대화하기를 원한다면 하나는 서버 일 필요는없고 다른 하나는 클라이언트 일 필요는 없습니다. 그것은 네트워킹의 한 모델이지만 유일한 것은 아닙니다. 또 다른 매우 일반적인 모델은 피어 투 피어 모델입니다 . 여기서 모든 사람은 클라이언트 및 서버이며 누구나 누구나 대화 할 수 있습니다. Starcraft 멀티 플레이어 네트워킹 내부에 대해 너무 구체적으로 알지 못하지만 피어 투 피어 모델을 사용하여 설명 한 내용을 달성했을 가능성이 큽니다.


P2P 모델은 일반적으로 초기 연결을 위해 각 피어 쌍에서 적어도 한 사람이 포트를 전달해야합니다. 포트가 전달되거나 전달되지 않은 토렌트를 다운로드하고 연결 수의 차이를 확인하십시오.
Snorbuckle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.