프라우드넷
프라우드넷
  • ProudNet 서버
  • ProudNet 성능
  • ProudNet 기능
  • 기타 기능
  • ProudNet Server
  • ProudNet Performance
  • ProudNet Function
  • Others
Powered by GitBook

ProudNet 기능

Last updated 5 months ago

주요 기능

데이터 통합(Coalesce) 같은 양의 메시지를 여러 번 조금씩 보내는 대신, 동시에 수집된 데이터를 한 번에 전송하고 고유 ID를 추가 적용하면 네트워크 트래픽을 줄일 수 있습니다.

분할(Fragmentation) MTU를 고려하여 메시지를 나눠 보낼 수 있습니다.

혼잡 제어(Congestion control) 과도한 UDP 통신은 네트워크 혼잡을 일으킬 수 있습니다. ProudNet은 이를 방지하기 위해 UDP 혼잡 제어 기능을 제공합니다.

안정적인 신뢰할 수 없는 메시지 프로토콜 게임에서는 UDP가 신뢰할 수 없지만 트래픽이 적고 빠르기 때문에 캐릭터 이동이나 기관총 발사와 같은 빠른 이벤트 전송에 적합하다는 것이 널리 알려져 있습니다. 다른 메시지의 경우, 신뢰할 수 있는 프로토콜인 TCP가 사용됩니다. 즉, 소켓 API에서 메시징을 위해 UDP를 사용하는 것은 간단하지만 TCP처럼 신뢰성을 보장하지 않습니다. 또한 UDP는 해킹에 더 취약하고 다양한 네트워크 환경에서 덜 안정적일 수 있습니다. 그럼에도 불구하고 속도와 단순성 덕분에 고속 액션 게임에서 독특한 장점이 있습니다. ProudNet의 신뢰할 수 없는 메시징 프로토콜은 단순한 UDP보다 훨씬 더 나은 안정성을 제공합니다.

엔진 계층의 QoS 기능 게임은 높은 네트워크 트래픽, 지연 시간 및 연결 문제를 일으킬 수 있습니다. 이러한 문제들은 ProudNet의 QoS(서비스 품질) 또는 네트워크 속도 제한 기능을 통해 쉽게 해결할 수 있습니다. 특히, QoS 기능은 게임에서 음성 채팅에 유용하게 사용됩니다.

WIFI 핸드오버

ProudNet의 네트워크 감지 기능을 통해 새로운 네트워크로 전환할 때 즉시 재연결을 시도하며, 연결이 끊어진 동안 전송된 메시지까지 복구합니다.

P2P

P2P 통신은 음성 채팅이나 캐릭터 움직임 동기화에 사용되며, 서버 부하를 줄이고 반응 속도를 높입니다.

강력한 P2P 전송 기능

  • P2P를 효과적으로 활용하면 서버의 부하를 줄이고 게임의 반응성을 높일 수 있습니다.

  • 서버 간 통신(Server-to-Server)에도 P2P를 사용할 수 있고, 슈퍼 피어(Superpeer)를 선택하고 활용할 수 있습니다.

  • ProudNet은 클라이언트-서버(Client-to-Server) 및 클라이언트-클라이언트(Client-to-Client) 연결을 위한 단순화된 API를 제공하여, 불안정한 네트워크에서 연결 대기 상태나 연결 끊김을 확인하는 등의 복잡한 작업이 필요 없습니다.

  • ProudNet은 홀 펀칭(Hole-punching)과 릴레이(relay) 기능을 내장하고 있으며, 관련 작업은 ProudNet 내부에서 자동으로 처리됩니다.

  • ProudNet의 P2P 통신은 연결 대기 시간이 없어, 로비가 있는 게임은 즉시 시작할 수 있으며, MMORPG는 월드 동기화에서 C2C와 C2S 통신을 모두 활용할 수 있습니다.

트래픽 제어

  • P2P는 좋은 광대역 인터넷 환경에서는 문제가 없지만, 중국이나 동남아시아 등 ADSL2+ 이하의 속도를 제공하는 국가나 지역에서는 문제가 발생할 수 있습니다.

  • P2P 통신 속도가 낮으면 문제가 생기기 쉽고, NAT 라우터가 멈추는 등 다양한 문제를 유발할 수 있습니다. 이를 방지하기 위해 ProudNet은 다음과 같은 기능을 제공합니다:

    • 일정량 이상의 데이터를 전송할 때 서버 릴레이 사용

    • 패킷 감소 기능

P2P 간 Unreliable 및 Reliable 메시징 지원

  • P2P 메시지를 UDP로 전송하는 것은 TCP보다 더 간단하지만, UDP는 본질적으로 신뢰성이 없고(메시지 전달 및 순서 보장 불가), 클라이언트 간 채팅 시 일부 메시지가 손실될 수 있습니다.

  • ProudNet은 TCP와 유사한 ARQ(Automatic Repeat-reQuest) 메커니즘을 포함하여 이 문제를 해결합니다.

홀 펀칭 유지(Hole-Punching Upkeep)

  • 안정적인 P2P 통신을 위해 홀 펀칭이 필수적입니다. 특히, 많은 P2P 연결과 높은 트래픽이 있는 네트워크에서 홀 펀칭을 장기간 유지하는 것이 중요합니다.

  • 예를 들어, 중국의 인터넷 카페처럼 하나의 라우터에 수백 대의 컴퓨터가 연결된 경우, 대량의 P2P 트래픽이 라우터의 포트 매핑 엔트리 목록을 채워 연결이 끊길 수 있습니다. 이를 방지하기 위해 ProudNet은 다음 기술을 제공합니다:

    • 즉시 홀 펀칭(Just-in-time hole-punching).

    • 포트 매핑 재사용(Port mapping reuse).

    • 중복 포트 매핑 방지 기술

홀 펀칭과 릴레이 간 자동 전환

  • P2P를 위한 홀 펀칭은 네트워크 트래픽과 NAT 라우터 상태에 따라 갑자기 소멸될 수 있습니다. 이를 적절히 처리하지 않으면 플레이어가 멈추거나 문제가 발생할 수 있습니다.

  • ProudNet은 P2P 연결 상태를 감지해 홀 펀칭과 릴레이를 자동으로 전환하여 이러한 문제를 방지합니다.

  • 홀 펀칭이 갑자기 중단되더라도 작은 지연만 발생하며, 연결이 끊어지지는 않습니다.

즉시 홀 펀칭 (Just-In-Time Hole Punching)

ProudNet은 다음 기술로 안정적인 P2P 통신을 지원합니다

  • 즉시 홀 펀칭(Just-in-time hole-punching).

  • 포트 매핑 재사용(Port mapping reuse).

  • 중복 포트 매핑 방지 기술

메시징 (Messaging)

원격 메서드 호출 (Remote Method Invocation, RMI)

받은 메시지가 어떤 것인지 알아내기 위해 많은 switch-case 문을 작성할 필요없이 ProudNet의 RMI로 해결할 수 있습니다.

  • PIDL로 메시지를 정의하고 컴파일하면, 메시지를 전송(프록시)하고 수신(스텁)하는 코드를 생성합니다.

  • 개발자는 이 코드를 서버 또는 클라이언트 객체에 포함하고 등록하여, 메시지를 함수 호출하듯이 간단히 보낼 수 있습니다.

암호화 및 압축 (Encryption/Compression)

중요한 데이터를 주고받을 때, 암호화는 필수입니다. ProudNet은 두 가지 주요 암호화 방식을 제공합니다.

  1. 빠르지만 약한 암호화: 보안성이 다소 낮지만 암호화/복호화 속도가 매우 빠릅니다.

  2. 강력하지만 느린 암호화: 신뢰할 수 있는 AES 알고리즘을 사용합니다.

  • 서버 부하가 증가하더라도 메시지를 압축하여 트래픽을 줄이는 것이 더 유리한 경우가 있습니다. ProudNet은 이러한 경우를 대비해 손쉽게 사용할 수 있는 압축 기능을 제공합니다.

  • 클라이언트-서버 및 클라이언트-클라이언트(P2P) 메시징에서 강력한 암호화를 지원합니다.

  • 패킷 스니핑, 복사, 변조를 방지하는 메커니즘이 내장되어 있습니다.