NAT 상태에서 P2P 통신하는 방법

by digipine posted Aug 08, 2024
?

Shortcut

PrevPrev Article

NextNext Article

ESCClose

Larger Font Smaller Font Up Down Go comment Print

NAT(Network Address Translation) 상태에서 P2P(피어 투 피어) 통신을 하기 위한 방법에는 여러 가지가 있습니다. 이러한 방법들은 NAT 장치 뒤에 있는 두 장치 간의 직접 통신을 가능하게 합니다. 주요 방법들로는 포트 포워딩, STUN(Session Traversal Utilities for NAT), TURN(Traversal Using Relays around NAT), 및 UDP 홀 펀칭(UDP hole punching)이 있습니다. 각각의 방법에 대해 설명하겠습니다.

1. 포트 포워딩 (Port Forwarding)

포트 포워딩은 라우터 또는 NAT 장치에서 특정 포트를 특정 내부 IP 주소로 전달하도록 설정하는 방법입니다.

  • 설정: NAT 장치의 관리 인터페이스에 접속하여, 특정 포트(예: 8080)를 내부 네트워크의 특정 장치(IP 주소)로 전달하도록 설정합니다.
  • 예: 게임 서버를 실행하는 장치의 IP가 192.168.1.2이고, 공용 포트 8080을 이 장치의 포트 8080으로 포워딩합니다.
  • 장점: 직접적이고 안정적입니다.
  • 단점: 사용자가 NAT 장치에 접근할 수 있어야 하고 설정을 변경해야 합니다.

2. STUN (Session Traversal Utilities for NAT)

STUN 서버는 NAT 뒤에 있는 장치가 자신의 공용 IP 주소와 포트를 알아내도록 도와줍니다.

  • 동작: 장치가 STUN 서버에 요청을 보내면, 서버는 요청이 도착한 공용 IP 주소와 포트를 응답으로 돌려줍니다.
  • 과정:
    1. 피어 A와 피어 B가 STUN 서버에 접속하여 자신의 공용 IP 주소와 포트를 확인합니다.
    2. 피어 A와 B는 서로의 공용 IP와 포트를 교환합니다.
    3. 피어 A와 B는 서로의 공용 IP와 포트로 직접 UDP 패킷을 보냅니다.
  • 장점: 자동화된 공용 IP 및 포트 확인.
  • 단점: NAT 종류에 따라 실패할 수 있음(대부분의 symmetric NAT에서 작동하지 않음).

3. TURN (Traversal Using Relays around NAT)

TURN 서버는 피어 간의 직접 통신이 불가능한 경우 중계 서버를 통해 데이터를 전달합니다.

  • 동작: 피어 A와 피어 B는 모두 TURN 서버에 연결하고, 서버는 중계 역할을 하여 데이터를 전달합니다.
  • 과정:
    1. 피어 A와 피어 B가 TURN 서버에 접속합니다.
    2. TURN 서버가 두 피어 간의 중계 역할을 합니다.
  • 장점: 모든 NAT 및 방화벽 환경에서 작동.
  • 단점: 대역폭과 서버 비용이 증가.

4. UDP 홀 펀칭 (UDP Hole Punching)

UDP 홀 펀칭은 NAT 장치에 핀홀을 만들어 두 피어가 직접 통신할 수 있도록 하는 방법입니다.

  • 동작: 피어 간에 서로의 공용 IP 주소와 포트를 교환한 후, 양쪽에서 동시에 UDP 패킷을 보내 NAT에 핀홀을 만듭니다.
  • 과정:
    1. 피어 A와 피어 B가 공용 STUN 서버에 접속하여 자신의 공용 IP와 포트를 확인합니다.
    2. 피어 A와 B는 서로의 공용 IP와 포트를 교환합니다.
    3. 피어 A와 B는 서로의 공용 IP와 포트로 UDP 패킷을 보냅니다.
    4. NAT 장치가 핀홀을 만들어 이후 패킷이 직접 전달될 수 있게 합니다.
  • 장점: 추가 비용 없이 NAT 뒤의 피어 간 직접 통신 가능.
  • 단점: 모든 유형의 NAT에서 작동하지 않음(특히 symmetric NAT에서 문제 발생).

결론

NAT 환경에서 P2P 통신을 설정하기 위해서는 네트워크 환경과 요구사항에 따라 다양한 방법을 사용할 수 있습니다. 포트 포워딩은 가장 직접적이지만 설정이 필요하고, STUN과 UDP 홀 펀칭은 자동화된 방식으로 직접 통신을 시도합니다. TURN 서버는 최후의 수단으로, 모든 환경에서 작동하지만 중계 서버를 통해 통신하므로 비용과 대역폭이 추가로 필요합니다.

TAG •