필요한 배경지식
NAT(Network Address Translation)환경
1개의 공인 IP(공유기)로 다수의 사설 IP들(각종 전자기기들)이 연결되어 인터넷이 되는 환경
이 환경의 단점은 외부에서 접근시, Private IP OR 사설IP로 접근이 불가하다는 것이다. 그렇기에 아래와 같이 NAT(공유기)가 변환테이블을 가지고 변환해주어야 통신이 가능해진다.
그런데 만약 컴퓨터A 뿐만아니라 다른 유저도 NAT이 있다면? 서로의 Private으론 통신이 안되는데, 어떻게 서로 통신을 할 수 있나?
그래서 나온 개념이 hole punching이다! NAT환경에서 P2P연결이 필요할때 사용된다
정의
중간에서 다리역할을 해주는 Relay서버가 NAT환경에서의 P2P연결을 가능하게 해준다
1) 유저A & 유저B 가 중개서버에 아무 내용을 날리면
2) 각자의 NAT은 변환테이블(NAT주소<->유저)을 만든다
3) 이제 A가 중개서버로 응답을 보내면 B의 NAT으로 응답을 보내고 (중개서버 데이터전송 안함, 다리역할뿐임)
4) B의 NAT이 200.200.200.200:2인 public IP로 메세지 오면 변환하여 192.168.0.2:1인 B에게 전달해준다
*그림출처
https://program-factory.tistory.com/7
https://cjwoov.tistory.com/6