logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

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

by digipine posted Aug 08, 2024
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

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 •

List of Articles
No. Subject Author Date Views
112 OpenSSL Build for Windows digipine 2024.08.30 51
111 Rapid JSON 간단 사용법 digipine 2024.08.27 48
110 Direct X 11에서 그래픽 카드의 정보 가져오는 예제 digipine 2024.08.27 83
109 Python Slack 메시지 발송하는 예제 digipine 2024.08.27 52
108 Python email 보내는 예제 코드 digipine 2024.08.27 46
107 UDP 핀홀 트래버설 과정 요약, UDP pinhole traversal digipine 2024.08.08 49
» NAT 상태에서 P2P 통신하는 방법 digipine 2024.08.08 37
105 Windows Visual Studio 2022 OpenSSL Build 방법 1 digipine 2024.05.02 1208
104 Visual Studio 단축키 정리 digipine 2024.03.28 256
103 프로그래밍 언어 순위 2023년 file digipine 2023.10.30 333
102 이벤트 텍소노미(Event Taxonomy)란 무엇인가요? digipine 2023.08.11 426
101 Bitbucket에서 SSH 키 등록하고 사용하는 방법 (맥/리눅스) file lizard2019 2023.06.22 1618
100 FFServer RTSP Audio Server Config digipine 2023.05.12 395
99 OBS Studio for Http Interface EXE lizard2019 2023.02.15 389
98 xcode xib encountered an error communicating with ibagent-ios 해결 digipine 2022.10.06 680
97 XCode 사용시 git ignore 로 xcuserstate 충돌 해결하기, .gitignore에 등록했는데도 동작안할때 해결방법 lizard2019 2022.09.25 809
96 MAC Screen Sharing을 위한 VNC 접속을 위한 Port 변경 방법 digipine 2022.09.05 662
95 Phabricator Ubuntu Installation Guide digipine 2022.01.26 786
94 Remove all .git files, recursively digipine 2021.11.26 589
93 VSCode 에서 한글 특수문자 부분 만 검색하기 file digipine 2021.10.25 983
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6