UDP hole punching
홀 펀칭 (Hole Punching): 정확한 명칭은 STUN (Simple Traversal of User Datagram Protocol Through Network Address Translators)
공유기라는 녀석이 라우터의 특성도 함께 가지고 있어 Routing Table 을 작성하기 위해 P2P 통신을 목적으로, 사전에 상대방과 패킷을 주고받고 하여 각자의 공유기에 Routing Table 을 작성하는 것을 홀 펀칭이라고 한다.
UDP 홀펀칭은 클라이언트가 NAT 밑에 있더라도, 랑데뷰 서버를 통해 두 클라이언트간 P2P 다이렉트 세션 형성을 가능하게 해준다.
About
A4 용지 파일을 정리할때 구멍을 뚫는 펀칭도구를 홀펀칭이라고 부르지요? 말그대로 NAT로 인해 막혀있는 홀(포트)를 네트워크 패킷이 지나갈 수 있게 뚫는 것입니다.
NAT
다음 네 가지 종류가 있다.
- Full-cone NAT
- PC에서 UDP 데이터를 공유기 밖으로 보낼 때 해당 PC의 IP와 포트 정보를 공유기가 기억하고 공유기의 포트와 맵핑을 해줌.
- 공유기의 해당 포트로 데이터가 오면 출발지 IP와 포트 정보를 상관하지 않고 해당 PC에 포워딩을 해줌.
- (Address)-restricted-cone NAT
- PC에서 UDP 데이터를 공유기 밖으로 보낼 때 해당 PC의 IP와 포트 정보, 목적지 IP를 기억하고 공유기의 포트와 맵핑을 해줌.
- 공유기의 해당 포트로 데이터가 오면 출발지 IP정보를 비교하여 공유기에 기록된 목적지 IP와 같으면 해당 PC에 포워딩을 해줌.
- Port-restricted cone NAT
- PC에서 UDP 데이터를 공유기 밖으로 보낼 때 해당 PC의 IP와 포트 정보, 목적지 IP, Port 를 기억하고 공유기의 포트와 맵핑을 해줌.
- 공유기의 해당 포트로 데이터가 오면 출발지 IP 정보를 비교하여 공유기에 기록된 목적지 IP, Port 가 같으면 해당 PC에 포워딩을 해줌.
- Symmetric NAT
- PC에서 UDP 데이터를 공유기 밖으로 보낼 때 해당 PC의 IP와 포트 정보, 목적지 IP, Port 를 기억하고 공유기의 포트와 맵핑을 해줌.
- 만약 목적지 IP나 Port 번호가 바뀌면 새로운 포트로 맵핑해줌.
- 공유기의 해당 포트로 데이터가 오면 출발지 IP 정보를 비교하여 공유기에 기록된 목적지 IP, Port 가 같으면 해당 PC에 포워딩을 해줌.
자세한 내용은 NAT 항목 참조.
See also
Favorite site
- Wikipedia (en) 홀펀칭에 대한 설명
- 홀 펀칭(hole punching)기술에 대하여
- [추천] 수까락의 프로그래밍 이야기 - Hole Punching 3
- Program Factory :: 3. Hole Punching이란