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 •

  1. No Image 20Jan
    by lizard2019
    2025/01/20 by lizard2019
    Views 84 

    rmix test application 배포

  2. No Image 05Nov
    by lizard2019
    2024/11/05 by lizard2019
    Views 538 

    윈도우에서 패스워드 입력 실패로 잠금 상태인지 확인 하는 방법

  3. No Image 30Aug
    by digipine
    2024/08/30 by digipine
    Views 502 

    OpenSSL Build for Windows

  4. No Image 27Aug
    by digipine
    2024/08/27 by digipine
    Views 991 

    Rapid JSON 간단 사용법

  5. No Image 27Aug
    by digipine
    2024/08/27 by digipine
    Views 782 

    Direct X 11에서 그래픽 카드의 정보 가져오는 예제

  6. No Image 27Aug
    by digipine
    2024/08/27 by digipine
    Views 805 

    Python Slack 메시지 발송하는 예제

  7. No Image 27Aug
    by digipine
    2024/08/27 by digipine
    Views 614 

    Python email 보내는 예제 코드

  8. No Image 08Aug
    by digipine
    2024/08/08 by digipine
    Views 501 

    UDP 핀홀 트래버설 과정 요약, UDP pinhole traversal

  9. No Image 08Aug
    by digipine
    2024/08/08 by digipine
    Views 515 

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

  10. Windows Visual Studio 2022 OpenSSL Build 방법

  11. No Image 28Mar
    by digipine
    2024/03/28 by digipine
    Views 732 

    Visual Studio 단축키 정리

  12. 프로그래밍 언어 순위 2023년

  13. No Image 11Aug
    by digipine
    2023/08/11 by digipine
    Views 839 

    이벤트 텍소노미(Event Taxonomy)란 무엇인가요?

  14. Bitbucket에서 SSH 키 등록하고 사용하는 방법 (맥/리눅스)

  15. No Image 12May
    by digipine
    2023/05/12 by digipine
    Views 852 

    FFServer RTSP Audio Server Config

  16. No Image 15Feb
    by lizard2019
    2023/02/15 by lizard2019
    Views 867 

    OBS Studio for Http Interface EXE

  17. No Image 06Oct
    by digipine
    2022/10/06 by digipine
    Views 1496 

    xcode xib encountered an error communicating with ibagent-ios 해결

  18. No Image 25Sep
    by lizard2019
    2022/09/25 by lizard2019
    Views 1357 

    XCode 사용시 git ignore 로 xcuserstate 충돌 해결하기, .gitignore에 등록했는데도 동작안할때 해결방법

  19. No Image 05Sep
    by digipine
    2022/09/05 by digipine
    Views 1408 

    MAC Screen Sharing을 위한 VNC 접속을 위한 Port 변경 방법

  20. No Image 26Jan
    by digipine
    2022/01/26 by digipine
    Views 1679 

    Phabricator Ubuntu Installation Guide

Board Pagination Prev 1 2 3 4 5 6 Next
/ 6

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5