프라우드넷의 모바일 데이터 통신의 P2P 성공율

by nettimays / 2016. 07. 06. [13:37]

프라우드넷의 모바일 기기의 P2P 홀펀칭 성공율을 측정해 보았습니다. 당연히 Wifi는 모두 끄고 순수하게 데이터 통신으로 측정하였습니다.

측정 후, 흥미로운 결과가 나옵니다. 통신사마다 다르다는 점입니다.

다음은 통신사별 LTE 폰의 테스트 결과입니다.

 

SK Telecom

LG Telecom

KT

SK Telecom

O

O

X

LG Telecom

O

O

X

KT

X

X

X

 

KT는 아마도 의도적으로 P2P 통신을 못하게 막아놓았나봅니다.

통신사별 사용 인구는 다음과 같습니다.

출처: http://windwaker.net/1448

이 두 지표를 갖고 계산해보면, LTE에서 P2P 홀펀칭 성공율은 56%로 나옵니다.

나나 상대방이 KT 통신망을 쓰고 있으면 P2P는 언제나 릴레이를 타는 상황이 됨을 의미합니다.

당연하지만, Wifi로는 모두 잘 됩니다.

 

 

3. 넷텐션 뉴스

ProudNet 모바일플랫폼 계약_주식회사 볼란테스튜디오

by yuhui.jang / 2016. 05. 31. [09:16]

2016년 05월 18일자로 주식회사 볼란테스튜디오와 ProudNet Mobile Platform 라이선스 계약을 체결하였습니다.

귀사의 프로젝트 성공을 위해서 지원을 아끼지 않겠습니다.

2. 고객사 소식

ProudNet 모바일플랫폼 계약_주식회사 만렙게임즈

by yuhui.jang / 2016. 05. 31. [09:14]

2016년 05월 30일자로 주식회사 만렙게임즈와 ProudNet Mobile Platform 라이선스 계약을 체결하였습니다.

귀사의 프로젝트 성공을 위해서 지원을 아끼지 않겠습니다.

2. 고객사 소식

ProudNet 모바일플랫폼 계약_주식회사 디지털 프로그

by yuhui.jang / 2016. 05. 23. [06:43]

2016년 05월 18일자로 주식회사 디지털 프로그와 ProudNet Mobile Platform 라이선스 계약을 체결하였습니다.

귀사의 프로젝트 성공을 위해서 지원을 아끼지 않겠습니다.

모바일 게임에서의 실시간 멀티플레이에서 P2P와 CS 네트워킹의 비교

by haley.choi / 2016. 05. 16. [12:18]

모바일 게임에서의 실시간 멀티플레이에서 P2PC/S 네트워킹에 대해 비교하면서 서술 하겠습니다.

 

결론부터 말하자면, 다음과 같습니다.

 

l  Wifi 환경에서 게임을 할때는 높은 확률로 직접 P2P 통신을 합니다.

l  FPS, 레이싱 장르 등 레이턴시가 민감한 게임은 P2P가 효과적입니다.

l  P2P는 해킹에 취약한 면이 있습니다. C/S는 사용법에 따라 해킹에 취약할 수 있습니다.

l  보편적으로 P2PC/S보다 레이턴시(반응 속도)가 더 좋습니다

 

자세한 내용을 말씀 드리겠습니다.
 

 

C/S 네트워킹과 P2P 네트워킹이란

멀티플레이어 게임에서 C/S 네트워킹 혹은 클라이언트-서버 네트워킹을 할 때는, 클라이언트에서의 메시지 가령 플레이어 캐릭터의 이동이나 플레이어가 입력한 명령을 서버에 보내고 서버가 그것을 다른 클라이언트들에게 보냅니다.

             

 

 

P2P 네트워킹 혹은 피어투피어(peer-to-peer) 네트워킹을 할 때는 클라이언트가 직접 다른 클라이언트에게 메시지를 보냅니다.

 

 

 

l  Wifi 환경에서 게임을 할 때 높은 확률로 직접 P2P 통신을 합니다.

 

게임을 할 때 두 기기 사이가 모두 셀룰러 네트워크 즉 3GLTE인 경우에는 홀펀칭 성공률은 제각각입니다.

한국의 경우 통신사마다 다릅니다. KT를 제외하고 나머지 통신사 기기간에는 P2P 홀펀칭이 잘 됩니다.

  SK Telecom LG Telecom KT
SK Telecom O O X
LG Telecom O O X
KT X X X

국내 통신사별 사용자수 통계도 포함해서 P2P 성공율을 산출하면 56%입니다.

한쪽이나 양쪽이 Wifi이면 홀펀칭 성공율은 높습니다.

 

 


 

실시간 멀티플레이 게임에서는 데이터 통신 요금이 발생합니다. 사용자 입장에서는 아무래도 신경이 쓰이죠.

중국에서는 통신 요금이 비싼 중국에서는 메신저앱 푸시 알림이 오면 이를 확인하기 위해 Wifi가 되는 환경을 찾아가기도 합니다

따라서 사용자들은 3G나 LTE 대신 Wifi를 선호하기 마련입니다. 

 


 

 

l   레이턴시가 민감한 게임은 P2P가 효과적입니다.

모바일 네트워크(3G/LTE)의 회선 품질이 좋지 않을 경우에는 P2PC/S의 레이턴시는 큰 차이가 나지 않습니다.

 

하지만 모바일 네트워크(3G/LTE)의 품질이 좋을 때는 P2P C/S 간의 차이가 확연해집니다.

 

품질이 좋은 모바일 네트워크(3G/LTE))에서는

P2P의 경우 약 2ms,

C/S에서는 약 12ms

처리 딜레이를 확인할 수 있습니다. (환경에 따라 다소 차이가 있을 수 있습니다.)

 

아마도 FPS 게임을 주로 하는 유저들은 레이턴시 10ms의 차이가 무엇을 의미하는지 절실하게 공감할 것입니다



 

 

 

 

l   P2P는 해킹에 취약한 면이 있습니다. C/S는 사용법에 따라 해킹에 취약해질 수 있습니다.

 

C/S 방식인 실시간 멀티플레이 온라인 게임의 경우 멀티플레이 동기화를 하는 방식은 크게 세가지로 구분됩니다..

  

l  방식 1: 클라이언트에서 명령을 보내는 방식 (Player 1 -> Player 1 Input(Scene Update))

l  방식 2: 클라이언트에서 연산된 플레이어 이동 정보만을 보내는 방식

 

방식1은 방식2에 비해 클라이언트 해킹에 강합니다.

그 이유는 플레이어 캐릭터에 대한 이동 연산을 서버에서도 처리하기 때문입니다.

하지만 scene update를 서버에서 모두 처리하는 것은 서버 성능에 있어서 상당한 부하를 차지합니다.

 

더 큰 문제가 발생하는데, 방식2보다 게임 플레이 중에 발생하는 끊김 현상 혹은 랙 현상이 더 심합니다.

 

<방식1을 쓴 게임의 랙 현상 https://www.youtube.com/watch?v=83i8Yzkkzvg>

 

방식2는 방식1과 달리, 플레이어 캐릭터에 대한 이동 연산을 클라이언트가 합니다. 따라서 방식1과 달리 해킹에 약합니다. P2P는 해킹에 약하지만 방식 1도 P2P와 거의 동급으로 해킹에 약합니다. 그나마 할 수 있는 최선은, 클라이언트의 연산이 해킹된 결과인지를 검사하는 것 뿐입니다.

방식1의 장점은 방식1보다 훨씬 쾌적한 멀티플레이입니다. 레이턴시에 덜 민감하기 때문입니다.  

 

모바일 게임은 무선 네트워크(WIFI/3G/LTE)를 사용합니다.

문제는 무선 네트워크의 레이턴시가 유선 네트워크에 비해서 편차가 크다는 데 있습니다.

무선 네트워크의 품질이 양호하더라도 간헐적인 큰 레이턴시는 피할 수 없습니다.

방식2는 간헐적인 큰 레이턴시가 일어나더라도 대부분 게임 플레이중에 이상함을 못 느낍니다.

하지만 방식1은 큰 레이턴시가 일어날 때 마다 게임플레이가 stuttering이 일어납니다. 화면이 잠깐 잠깐씩 멈춰버리는 현상입니다.

 

이러한 문제점 때문에 대부분의 모바일 게임에서는 클라이언트-서버 네트워킹을 할 경우 어쩔 수 없이 방식2를 사용하고 있습니다.

 

모바일 P2P 네트워킹에서는 플레이어의 이동 처리를 클라이언트가 담당합니다. 따라서 해킹에 취약할 수 밖에 없습니다.

그러나 클라이언트-서버 네트워킹으로 만든다 하더라도 방식2를 선택하는 이상 P2P 네트워킹과 마찬가지로 해킹에 취약해집니다. 해결하려면 방식1을 써야 하지만 게임의 질을 크게 떨어뜨리므로 선호되지 않고 있습니다.

 

 

l   보편적으로 P2PC/S보다 레이턴시(반응 속도)가 좋습니다.

 

멀티플레이에서 P2P 네트워킹을 적용하는 방식은 크게 두가지가 있습니다.

l  수퍼피어 방식: 클라이언트 중 하나가 모든 플레이어의 scene update를 담당합니다. 흔히들 리슨 서버 방식이라고 말합니다.

l  대칭피어 방식: 각 클라이언트가 각자 플레이어의 scene update를 담당합니다. 리슨 서버 방식이 아닙니다.

 

 

   

수퍼피어 방식은 패키지 게임에서 시작된 방식이며 이 방식은 일부 온라인 게임에서도 사용되고 있습니다. 서버에서 처리하기에는 scene update 들의 연산량이 많거나, 대칭피어 방식으로 개발하기 힘든 이유가 있을 때에 쓰이기도 합니다.

 

불가피한 경우가 아닌 이상 수퍼피어 방식을 피해야 합니다.

수퍼피어 방식의 경우 슈퍼 피어로 선정된 플레이어가 게임 플레이 도중 이탈할 때 함께 플레이하던 다른 플레이어들도 게임이 중단된다는 문제점이 있고, 수퍼 피어의 처리 성능이 나쁠 경우 다른 플레이어들도 모두 악영향을 받습니다.

 

따라서 많은 온라인 게임에서 P2P 네트워킹은 대칭피어 방식으로 사용됩니다.

대칭피어 방식에서는 각 플레이어의 위치 정보를 직접 다른 클라이언트들에게 전송합니다.

그러므로 플레이어는 C/S 방식으로 플레이할 때보다 빠른 반응 속도를 느낄 수 있습니다.

설령 P2P 홀펀칭을 못해서 릴레이를 하게 되고 이로 인해 느려졌다고 하더라도 C/S 방식으로 통신하는 게임과 동일한 레이턴시를 확인할 수 있습니다.

 

P2P방식은 C/S방식보다 더 빠른 반응 속도를 제공하며, 최악의 경우에도 반응 속도는 C/S 방식과 똑같아집니다.

 

 

P2P 네트워킹의 여러 가지 용도

P2P 네트워킹은 더 빠른 반응 속도의 멀티플레이뿐만 아니라 다음 용도로도 활용됩니다.

 

l  클라이언트간 많은 양의 트래픽이 발생하는 경우 (예시: 음성, 화상 대화 등)

l  서버에서 처리하기에는 너무 많은 양의 연산을 해야 하는 경우 (예시: 게임 물리 엔진 연산 등)

 

이에 대한 자세한 내용은 프라우드넷 도움말 P2P 통신에 대한 (한국어)에서도 설명하고 있습니다.

 

 

 

 

 

 

4. 개발 이야기

‘시빌워’ 흥행에 ‘마블 퓨처파이트’ 역주행…앱스토어 8위

by Sophia Lee / 2016. 05. 16. [04:47]

캡틴아메리카-시빌워 다들 보셨나요?

전 세계적으로 흥행 중이라 그런지 프라우드넷을 사용한 마블퓨처파이트도 덩달아 흥행 중이라 합니다!

자세한 내용은 기사 보기를 눌러 주세요~

 

기사 보기

2. 고객사 소식

ProudNet Subscription 계약_주식회사 모테가컨버전스

by yuhui.jang / 2016. 05. 10. [10:09]

2016년 04월 27일자로 주식회사 모테가컨버전스와 ProudNet Subscription 라이선스 계약을 체결하였습니다.

귀사의 프로젝트 성공을 위해서 지원을 아끼지 않겠습니다.

2. 고객사 소식

퍼스널 라이선스 오픈

by haley.choi / 2016. 05. 02. [10:34]

넷텐션이 개인 게임 개발자를 위하여 ProudNet을 무료로 지원합니다!
사용기한은 무제한이며 기능상 유료버전과 차이가 없으나 동시 접속자 수가 20명으로 제한됩니다.
신청은 넷텐션 홈페이지(http://proudnet.com/proud-net)를 이용하여 퍼스널 라이선스를 신청하여 주시기 바랍니다.^.^

1. 공지사항

ProudNet Subscription 계약_주식회사 트라이그람스코리아

by yuhui.jang / 2016. 05. 02. [09:43]

2016년 04월 29일자로 주식회사 트라이그람스코리아와 ProudNet Subscription 라이선스 계약을 체결하였습니다.

귀사의 프로젝트 성공을 위해서 지원을 아끼지 않겠습니다.

2. 고객사 소식

기기간 시간 동기화 방법

by Sophia Lee / 2016. 04. 29. [07:58]

게임을 개발하다 보면, "두 기기 간의 시간 동기화를 하는 방법"이 필요할 때가 있습니다.

이것에 대해서 알아 봅시다.

 

두 기기의 시간을 동기화하는 것은 일반적으로 round trip latency (RTT)를 이용하는 방법입니다.

 

기기 A,B가 있다고 있다고 칩시다.

 

* A->B: A의 시스템 시간을 보낸다.[1]

* B->A: [1]을 그대로 보낸다.

 

A에서는 A의 시스템 시간에서 [1] 안의 시간을 빼면 RTT를 얻게 됩니다.

이제,

 

* A->B: RTT[2]와 A의 현재 시간[3]을 보낸다.

 

이렇게 하면 됩니다. B에서 A의 현재 시간을 얻고 싶으면,

 

* A의 현재 시간 = [3] + [2]/2

 

를 계산하면 됩니다.

 

NTP도 이와 비슷한 방식으로 작동합니다.

컴퓨터 네트워크의 특징상 RTT는 한번만 측정한다고 정확하다고 말할 수 없습니다. 매번 RTT는 조금씩 틀리기 때문입니다. 무선 네트워크에서는 크게 틀리는 경우도 있습니다.

따라서 여러번 잰 후 최근 것의 평균을 내는 것이 더 정확합니다.

 

참고로, 프라우드넷(proudnet.com)에서 다양한 시간 동기화 함수를 제공합니다. 

 

* CNetClient.GetIndirectServerTimeMs

* CNetClient.GetP2PServerTimeMs

* CNetClient.GetServerTimeMs

 

프라우드넷은 서버 뿐만 아니라 P2P 연결된 다른 클라이언트와의 RTT를 얻는 기능도 제공합니다.

CNetClient와 CNetServer의 GetLastPing와 GetRecentPing 함수를 이용해서 말이죠.

4. 개발 이야기