로컬 네트워크(혹은 사설 네트워크)
로컬 네트워크 또는 사설망은 IPv4 중 특정 대역을 가정, 기업 등의 한정된 공간에서 사용하는 네트워크를 뜻한다. 로컬 네트워크에 소속된 IP는 오직 로컬 네트워크 내에서만 사용이 가능하다. 사진에서의 192.168.1.x가 로컬 IP이다. 라우터(공유기)의 로컬 IP는 192.168.1.1이다.
흔히 보이는 LAN(Local Area Network)게임은 바로 이 로컬 네트워크 내에 있는 PC끼리 플레이할 수 있는 게임이다. 요즘은 같은 로컬 네트워크에 소속되어 있지 않아도 하마치와 같은 가상 로컬 네트워크를 만들어주는 프로그램으로 플레이가 가능하다.
글로벌 네트워크(혹은 공인 네트워크)
사진에서 공유기가 갖고 있는 Public IP Address 202.45.1.1가 글로벌 네트워크에 사용되는 공인 IP이다. 공인 IP는 인터넷을 통해 직접 액세스 할 수 있고 인터넷 서비스 공급자(ISP)가 라우터(공유기)에 할당해준다.
예전 IPv4 주소가 고갈될 수 있다는 얘기를 들어본 적이 있는데, 왜 아직도 IPv4가 사용중인지 의문이 들었던 적이 있다. 사실 이미 그에 대한 해결책으로 로컬, 글로벌 네트워크를 나눠 IP를 할당중인 것이었다. 기기 하나에 일일이 IP주소를 할당하지않고, 회사나 가정집의 기기 여러 대를 하나의 로컬 네트워크로 묶고 라우터에 하나의 공인 IP만 부여해주는 것이다. 하지만 이렇게 해서 생겨난 문제도 있다.
사진의 네트워크를 A, 다른 로컬 네트워크 B라고 가정해보자. B의 한 PC의 IP 주소가 192.168.0.2라면, A와 B는 이 로컬 IP만을 가지고서는 서로 통신을 할 수 없다. 인터넷과 연결되어 있는 공유기를 통해야하기 때문이다. 즉, A의 PC - A의 공유기 - 인터넷 - B의 공유기 - B의 PC의 과정을 거친다. 그리고 이때 로컬 IP와 글로벌 IP를 서로 변환하는데 사용하는 것이 NAT(Network Address Translation)이다.
마인크래프트나 다른 멀티플레이어 게임을 해봤다면 상대방의 공인 IP주소만으로 해당 서버에 접속할 수 없다는 것을 알것이다. 왜냐면 공인 IP 주소, 즉 라우터에 연결 요청을 보낸다해도, 라우터는 어느 기기로 요청한건지 알 수가 없기 때문이다. 이때 필요한 것이 포트포워딩이다.
포트 포워딩
포트 포워딩은 공인 IP로 들어오는 요청의 특정 포트를 로컬 네트워크의 특정 기기로 보내주는 역할을 한다.
예를들면 공인 IP인 12.34.56.78:80으로 요청이 들어온다면, 이것을 192.168.0.2:80으로 보내고, 12.34.56.78:7777로 요청이 들어온다면 192.168.0.3:7777로 보내는 식이다.
마인크래프트의 경우도 마찬가지다. 마인크래프트는 25565포트를 사용하는데, 마인크래프트 서버가 열려 있는 컴퓨터의 로컬 IP가 192.168.0.2라고 했을 때 공유기의 IP인 12.34.56.78:25565로 요청이 들어오면 192.168.0.2:25565로 보내서 결국에 마인크래프트 서버가 요청을 받을 수 있는 것이다.
이 원리를 안다면 공유기 포트포워딩 설정을 통해 쉽게 마인크래프트 서버나 워크래프트3 방파기 등이 가능할 것이다. 그런데 의문이 드는 점은 이런 IP 직접 입력이 아닌 서버를 거치는 멀티플레이어는 어떻게 가능한가?이다.
MMORPG 서버에 접속하는 것은 해당 게임의 서버가 포트포워딩이 되어있어 접속이 된다고 쳐도, 다른 플레이어들와의 연결은 어떻게 가능한 것 일까? Xbox나 PS4, Steam은 어떻게 해서 멀티플레이어가 가능한 것일까?
NAT 투과
STUN(Simple Traversal of UDP through NAT) 또는 TCP 홀펀칭 기법은 공인 IP로 공개된 중개 호스트, 예를 들면 Xbox 라이브나 PSN, Steam에 연결한다. 중개 호스트는 여러 호스트가 서로 직접 연결하기 위해 필요한 작업을 중개한다. NAT 테이블에 서로의 발신지, 목적지, 외부포트 등을 기록해주는 방식이라고 보면 된다.