UDP pinhole traversal is a technique used in peer-to-peer (P2P) communication to establish direct connections between peers behind Network Address Translators (NATs). NAT devices are used to map private IP addresses within a local network to a single public IP address, complicating direct communication between devices on different networks. Here's a detailed explanation of how UDP pinhole traversal works:
Understanding NAT and Pinhole Traversal
-
Network Address Translation (NAT):
- Purpose: NAT is used to conserve public IP addresses and provide security by hiding internal IP addresses from the external network.
- Function: It translates private IP addresses (used within a local network) to a public IP address (used on the internet) and vice versa.
-
Challenges with NAT:
- Devices behind a NAT cannot be directly reached from outside the local network because the NAT hides their private IP addresses.
- NAT maintains a mapping table that associates outgoing requests from local devices with corresponding responses from the external network.
-
Pinhole:
- A pinhole in the context of NAT refers to an entry in the NAT mapping table that allows incoming traffic to reach a specific internal IP and port.
UDP Pinhole Traversal Process
-
Initial Contact (STUN Server):
- Both peers (say Peer A and Peer B) start by contacting a public STUN (Session Traversal Utilities for NAT) server. This server helps the peers determine their public IP addresses and port numbers assigned by their NAT devices.
-
Exchange of Public Information:
- After contacting the STUN server, Peer A and Peer B exchange their public IP addresses and port numbers. This exchange is usually facilitated by a signaling server (such as a central server in a P2P network).
-
Creating Pinhole Entries:
- Each peer then sends UDP packets to the other peer’s public IP address and port. These packets will initially be blocked by the NAT devices.
- However, the act of sending these packets causes each NAT device to create a pinhole entry in its mapping table for the destination IP and port.
-
Establishing Connection:
- Once both peers have sent packets to each other’s public IP addresses and ports, their respective NAT devices have created the necessary pinholes.
- Subsequent UDP packets sent by either peer will pass through these pinholes, allowing direct communication.
Detailed Example
-
Peer A (behind NAT A) and Peer B (behind NAT B) want to communicate:
- Peer A's private IP: 192.168.1.2
- Peer B's private IP: 192.168.2.2
- NAT A’s public IP: 203.0.113.1
- NAT B’s public IP: 203.0.113.2
-
Using STUN to Discover Public Endpoints:
- Peer A contacts STUN server and learns its public endpoint is 203.0.113.1:54321.
- Peer B contacts STUN server and learns its public endpoint is 203.0.113.2:12345.
-
Exchange of Public Endpoints:
- Peer A and Peer B exchange public IP addresses and ports via a signaling server.
-
Creating Pinhole Entries:
- Peer A sends a UDP packet to 203.0.113.2:12345 (Peer B’s public endpoint).
- Peer B sends a UDP packet to 203.0.113.1:54321 (Peer A’s public endpoint).
- NAT A and NAT B create pinhole entries in their mapping tables allowing traffic from these IP addresses and ports.
-
Direct Communication:
- With the pinholes in place, Peer A and Peer B can now send UDP packets directly to each other through their respective NAT devices.
Conclusion
UDP pinhole traversal allows peers behind NAT devices to establish direct communication by creating temporary "holes" in the NAT mapping table. This is crucial for P2P applications like VoIP, online gaming, and file sharing, where direct and efficient communication between peers is necessary.
UDP 핀홀 트래버설(Traversal)은 피어 투 피어(P2P) 통신에서 네트워크 주소 변환기(NAT) 뒤에 있는 피어들 간에 직접적인 연결을 설정하기 위해 사용되는 기술입니다. NAT 장치는 내부 네트워크의 개인 IP 주소를 단일 공용 IP 주소로 매핑하여 서로 다른 네트워크의 장치 간 직접 통신을 복잡하게 만듭니다. 아래는 UDP 핀홀 트래버설이 어떻게 작동하는지에 대한 자세한 설명입니다.
NAT와 핀홀 트래버설 이해하기
-
네트워크 주소 변환기(NAT):
- 목적: NAT는 공용 IP 주소를 절약하고 내부 IP 주소를 외부 네트워크로부터 숨겨 보안을 제공하기 위해 사용됩니다.
- 기능: NAT는 내부 네트워크에서 사용되는 개인 IP 주소를 인터넷에서 사용되는 공용 IP 주소로, 그리고 그 반대로 변환합니다.
-
NAT의 문제점:
- NAT 뒤에 있는 장치는 내부 네트워크 외부에서 직접 접근할 수 없습니다. NAT가 개인 IP 주소를 숨기기 때문입니다.
- NAT는 로컬 장치에서 나가는 요청과 외부 네트워크로부터의 응답을 연결하는 매핑 테이블을 유지합니다.
-
핀홀(Pinhole):
- NAT의 핀홀은 특정 내부 IP와 포트에 도달할 수 있도록 하는 NAT 매핑 테이블의 항목을 의미합니다.
UDP 핀홀 트래버설 과정
-
초기 접촉 (STUN 서버):
- 피어 A와 피어 B는 모두 공용 STUN(Session Traversal Utilities for NAT) 서버에 접속합니다. 이 서버는 피어들이 NAT 장치에 의해 할당된 공용 IP 주소와 포트 번호를 확인할 수 있도록 도와줍니다.
-
공용 정보 교환:
- STUN 서버에 접속한 후 피어 A와 피어 B는 공용 IP 주소와 포트 번호를 교환합니다. 이 교환은 보통 P2P 네트워크의 중앙 서버와 같은 신호 서버를 통해 이루어집니다.
-
핀홀 엔트리 생성:
- 각 피어는 다른 피어의 공용 IP 주소와 포트로 UDP 패킷을 보냅니다. 이 패킷은 초기에는 NAT 장치에 의해 차단됩니다.
- 그러나 이 패킷을 보내는 행위 자체가 NAT 장치의 매핑 테이블에 대상 IP와 포트를 위한 핀홀 엔트리를 생성하게 합니다.
-
연결 설정:
- 양쪽 피어가 서로의 공용 IP 주소와 포트로 패킷을 보낸 후, 각 NAT 장치에는 필요한 핀홀이 생성됩니다.
- 이후로는 각 피어가 보내는 UDP 패킷이 이 핀홀을 통해 직접 통과하게 되어, 직접적인 통신이 가능해집니다.
상세 예시
-
NAT A 뒤의 피어 A와 NAT B 뒤의 피어 B가 통신을 원함:
- 피어 A의 개인 IP: 192.168.1.2
- 피어 B의 개인 IP: 192.168.2.2
- NAT A의 공용 IP: 203.0.113.1
- NAT B의 공용 IP: 203.0.113.2
-
STUN을 사용하여 공용 엔드포인트 확인:
- 피어 A가 STUN 서버에 접속하여 공용 엔드포인트가 203.0.113.1:54321임을 확인함.
- 피어 B가 STUN 서버에 접속하여 공용 엔드포인트가 203.0.113.2:12345임을 확인함.
-
공용 엔드포인트 교환:
- 피어 A와 피어 B는 공용 IP 주소와 포트를 신호 서버를 통해 교환함.
-
핀홀 엔트리 생성:
- 피어 A는 203.0.113.2:12345 (피어 B의 공용 엔드포인트)로 UDP 패킷을 보냄.
- 피어 B는 203.0.113.1:54321 (피어 A의 공용 엔드포인트)로 UDP 패킷을 보냄.
- NAT A와 NAT B는 매핑 테이블에 핀홀 엔트리를 생성하여 해당 IP 주소와 포트로부터의 트래픽을 허용함.
-
직접 통신:
- 핀홀이 생성된 후, 피어 A와 피어 B는 NAT 장치를 통해 직접 UDP 패킷을 주고받을 수 있게 됨.
결론
UDP 핀홀 트래버설은 NAT 장치 뒤의 피어들이 NAT 매핑 테이블에 임시 "구멍"을 만들어 직접 통신할 수 있도록 하는 방법입니다. 이는 VoIP, 온라인 게임, 파일 공유와 같은 P2P 애플리케이션에서 피어 간의 직접적이고 효율적인 통신이 필요할 때 매우 중요합니다.