NAT을 사용하게 되면 내부에 연결된 host들은 Public IP가 아닌 Private IP를 사용하게 된다. 다른 LAN에서는 Private IP끼리 통신은 불가능하므로 홀펀칭이라고 하는 방식을 사용해 통신을 하게 된다. 간단히 3단계로 정리하자면 1. Private IP로 전달해본다. 2. 안되면 Public IP로 전달해본다. 3. 그래도 안되면 Realy Server로 패킷 전달을 요청한다. (TCP/UDP) 각자의 클라이언트는 gethostname을 통해 본인의 IP를 확인한다. (이때 확인되는 IP는 Private인지 Public인지 스스로는 알 수 없다.) 그래서 다른 외부에 있는 서버로 데이터를 보내면 외부 서버는 클라이언트의 Public IP와 Port를 확인하게 되고, 해당 정보를 클..