본문 바로가기

Network/Network

[Network] 네트워크 토폴로지

멀티플레이 게임에서 중요하게 다루어야 할 문제가 있습니다. 플레이어들 사이에서 게임 상태 갱신을 어떻게 처리할지, 객체 리플리케이션을 써야할지, 입력 상태만 공유할 것인지, 컴퓨터 상호 간에 전달된 게임 상태가 어느 한쪽에서 올바르지 않다고 판단되면 어떻게 해야 할지 등의 문제들이 있습니다.

 

네트워크 토폴로지(network topology)란 컴퓨터 네트워크의 요소들을 물리적으로 연결해 놓은 것, 또는 연결 방식을 말합니다. 게임 분야로 한정한다면, 게임에 접속한 컴퓨터들을 어떤 구조로 연결할지 정한 뒤, 그 플레이어들이 최신 상태를 공유하게끔 구조화하는 방식입니다.

 


 

클라이언트 - 서버(CS) 토폴로지

 

게임 인스턴스 하나를 서버로 두고 나머지 게임 인스턴스는 그 서버에 접속하는 클라이언트가 됩니다. 각 클라이언트는 서버하고만 통신하고, 서버는 모든 클라이언트와의 통신을 전담합니다.

 

 

대부분 CS로 구현되는 게임은 권한 집중형(authoritative)으로 서버를 구현합니다. 이 방식은, 시뮬레이션을 동시에 여러 기계에서 진행할 때, 그 중에서 어느 것이 올바른지 판단하는 권한을 서버에 집중시킵니다. 클라이언트는 자신의 시뮬레이션 내용이 서버와 다르다는 것을 발견하면 반드시 서버에 맞춰 자신의 게임 상태를 갱신해야합니다.

 

권한 집중형의 서버 종류에는 전용 서버(dedicated server)와 리스닝 서버(listen server)가 있습니다.

 

전용 서버(dedicated server)는 게임을 진행하고 클라이언트와 통신하는 용도로만 별도로 띄우는 서버를 말합니다. 전용 서버 프로세스는 클라이언트 프로세스와 완전히 분리되어있습니다.

 

리스닝 서버(listen server)는 플레이어가 자신이 서버를 띄운 머신을 가지고, 클라이언트로 직접 게임에도 참여하는 방식입니다. 즉, 자신의 컴퓨터가 서버 겸 클라이언트가 되는 것입니다.

 


 

피어-투-피어(peer-to-peer, P2P)

 

게임에 참여하는 모든 클라이언트끼리 서로 연결됩니다.

 

 

시뮬레이션은 각 피어마다 입력을 서로 공유해 각자가 이들 입력을 스스로 시뮬레이션을 합니다. 여기서 같은 결과가 도출되지 않으면, 어떠한 피어는 치팅을 했음을 알 수 있습니다.

 


 

 

 

'Network > Network' 카테고리의 다른 글

[Network] 레이턴시  (0) 2022.05.26
[Network] TCP/IP 스택  (0) 2022.04.27
[Network] Packet Switching (패킷 스위칭)  (0) 2022.04.26