NAT 환경에서 P2P 연결을 위해서는 HolePunching을 사용해야한다.

관련자료는 https://www.netmanias.com/ko/post/blog/6263/nat-network-protocol-p2p/p2p-nat-nat-traversal-technic-rfc-5128-part-2-udp-hole-punching를 참고하였다.

 

홀펀칭(Hole Punching)은 NAT상황에서 P2P연결을 할때 사용되는 기술이다.

 

P2P(Peer to Peer)


흔히 스타크래프트와 같은 조금 오래된 게임의 경우 P2P로 연결되어 게임이 진행된다.

서버를 통해서 데이터를 주고 받는것이 아니라 사용자 간에 연결을 구성하는 것을 P2P라고 한다.

 

일반적으로 P2P연결을 하기위해선 서로의 IP와 Port를 알아야 연결을 할 수 있다.

하지만 가정집의 경우 NAT로 구성되어 있어 쉽게 연결할 수 없다.

 

 

NAT(Network Address Translation)


요즘 가정집의 경우 유무선 공유기는 필수로 존재한다. 공유기가 있으면 하나의 인터넷으로 PC, 스마트폰, TV등 각종 전자기기에서 인터넷을 할 수 있게 된다. 이것을 가능하게 해주는 기술이 NAT이다.

쉽게말해서 NAT는 공인 IP 하나를 가지고 여러개의 사설 IP와 연결해주는 기술을 말한다.

 

공인IP의 경우 고유의 IP로 중복되지 않지만 사설IP의 경우 중복된 IP가 대부분이다. 이름 그대로 사설에서만 사용할 수 있는 IP인 것이다. 그렇기때문에 사설IP를 기반으로 네트워크 통신은 불가능하며 P2P연결도 불가능하게 된다.

이러한 문제를 해결하기 위해 나온것이 Hole Punching이라는 기술이다.

 

홀펀칭


철심 파일에 종이를 깔끔하게 꽂기 위해서 구멍을 내는 도구를 펀치라고 부른다. 네트워크의 막힌부분에 구멍을 낸다. 라는 의미로 홀펀칭이라고 이름이 지어졌다.

홀펀칭은 NAT상황에서 P2P연결시에 필요하다. NAT는 막힌 벽이고 그것을 뚫어 P2P를 연결하는 것이 홀펀칭인 것이다.

 

홀펀칭은 사용자만있어서는 구현할 수 없다. 중간에서 다리 역할을 해주는 Relay서버가 필요하다.

언뜻 보면 P2P가 아닌 서버/클라이언트 구조처럼 보일 수 있지만 Relay서버는 연결시 다리역할을 할뿐 데이터 전송에 관여하지는 않는다.

 

처음엔 서버/클라이언트 방식과 같이 양측 모두 서버로 접속을 시도한다. 그러면 서버에선 접속된 클라이언트들의 정보를 가지고 클라이언트간 터널을 만들어주고 이 터널을 기반으로 통신하게 된다.

이렇게 터널을 연결하여 NAT환경에서 P2P구조를 생성하고 통신이 가능하게된다.

 

'Project1 - FileTransfer' 카테고리의 다른 글

4. STUN이란  (0) 2019.11.04
2. 관련 기술 조사  (0) 2019.10.18
1. 개요  (0) 2019.10.18
블로그 이미지

알터.

,