NAT 뒤에서 멀티 플레이어 게임을 안정적으로 작동시키는 방법은 무엇입니까?


20

클라이언트 / 서버가 100 % 인 게임조차도 클라이언트가 NAT 뒤에있을 때 문제가 발생합니다. Peee-peer 게임은 더 큰 문제입니다. 일부 게임은 여러 전송 (예 : UDP 및 TCP) 또는 여러 연결 (예 : 다른 UDP 포트와 같은 음성)을 사용해야합니다.

NAT 라우터 뒤에서 실행할 때 게임이 안정적으로 작동하도록하는 방법은 무엇입니까?

  • 피어-피어 : 중앙 서버가 없습니다. 플레이어 A가 게임을 시작하고 플레이어 B가 참여하려고합니다.
  • 클라이언트 서버 : 잘 알려진 주소 (호스트 이름)의 중앙 집중식 서버는 모든 들어오는 연결을 허용합니다. 각 클라이언트는 해당 서버와 만 통신합니다.
  • 콤보 : 서버가 매치 메이킹이지만 게임 업데이트는 피어 피어입니다. 다른 피어는 각 플레이어가 잠재적으로 다른 IP / 포트를 가지고있는 것을 볼 수 있습니다 (예 : 일부 클라이언트는 동일한 NAT 뒤에 있고 일부는 다른 라우터에 있습니다)

답변:


9

가장 일반적으로 사용되는 기술을 NAT 펀치 스루라고합니다. 괜찮은 소개가 있습니다. http://www.mindcontrol.org/~hplus/nat-punch.html

적어도 UDP에 대한 OSS 프로젝트가 있습니다. http://udt.sourceforge.net/index.html

RakNet도 펀치 스루를 지원합니다. 상업용이지만 무료 "인디"라이센스가 있습니다. 여기를 봐: http://www.jenkinssoftware.com/

"NAT 펀치"에 대한 인터넷 검색을 통해 더 많은 독서 자료를 얻을 수 있습니다.


1
나는 이것이 정말로 오래된 질문과 대답이라는 것을 알고 있지만 누군가가 이것을 읽는다면 RakNet은 OculusVR에 의해 인수되며 2 절 BSD 라이센스로 오픈 소스입니다. github.com/OculusVR/RakNet
Quad

9
  • 클라이언트에게 서버 또는 피어에게 자체 주소를 알려주지 마십시오. 즉, 클라이언트 A의 IP를 게임 패킷에 포함시키지 말고 클라이언트 B 또는 서버가 해당 주소에 응답하도록하십시오. 메시지가 발생한 주소 / 포트에 항상 회신하십시오.

  • 게임에 사용되는 다른 UDP 또는 TCP 포트를 최소화하십시오. 이렇게하면 NAT 규칙을보다 쉽게 ​​설정할 수 있습니다.

  • 사용자가 게임에 사용 된 기본 포트를 재정의하도록 허용합니다. 이런 식으로 여러 서버를 동일한 NAT 뒤에 호스팅 할 수 있습니다.

  • 게임 설명서에서 따르는 포트와 규칙을 문서화하십시오 (Zorba에 감사). Descent 3에서는 테스트 서버로 패킷을 전송하여 라우터 또는 NAT 구성 문제를 해결하는 데 도움이되는 독립형 테스트 응용 프로그램을 작성했습니다.

7
이 좋은 답변 외에도 게임 설명서에 게임 포트 메모를 포함시킵니다 . 사람들이 "netstat"로 수동으로 포트를 뽑아 내고 그중 절반을 틀리게 만드는 것은 놀라운 일입니다.
ZorbaTHut

UDP를 사용하면 메시지의 출처를 알 수 없습니다. 반송 주소에 무엇이든 쓸 수 있습니다.
MickLH

0

: 다른 답변과 함께, 기존의 휠 사용 http://miniupnp.free.fr/ 펀치 풀 때와 방법을 제어주는 거의 모든 기능의 형태로 불만이 라이브러리 전투를 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.