일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬 머신러닝
- 이더리움
- 그라파나
- 파이썬 동시성
- 파이썬 데이터분석
- Actor
- play2 강좌
- 파이썬 강좌
- 주키퍼
- 블록체인
- akka 강좌
- 하이퍼레저 패브릭
- 플레이프레임워크
- play 강좌
- CORDA
- 안드로이드 웹뷰
- Play2 로 웹 개발
- 스칼라
- 스위프트
- hyperledger fabric
- 스칼라 동시성
- Play2
- Hyperledger fabric gossip protocol
- Golang
- 파이썬
- 스칼라 강좌
- Adapter 패턴
- Akka
- 엔터프라이즈 블록체인
- 하이브리드앱
- Today
- Total
HAMA 블로그
홀펀칭 기초 본문
http://www.gamedevforever.com/47 <-- 실전에서 알아보는 홀펀칭 기법
http://www.sysnet.pe.kr/2/0/1226 <-- 정말 쉽게 잘 설명된 홀펀칭 기초
위의 홀펀칭 기초 싸이트에서 핵심사항.
1. 일반적인 NAS 를 사이에둔 클라이언트 - 서버간 통신
클라이언트가 서버 측에 UDP 메시지를 전송할 것입니다. 이 과정에서 다음과 같은 연결 통로가 구성됩니다.
서버에서 공유기로 패킷을 보내면 공유기는 60010 포트로 들어온 데이터가 수신되어야 할 내부 IP 의 컴퓨터에 대한 정보 (192.168.50.10, 50010포트)를 가지고 있으므로 정상적으로 해당 컴퓨터로 UDP 패킷을 전송할 수 있게 되는 것입니다.
2. NAS 를 사이에둔 피어 TO 피어 간 통신
"Hole Punching"에서는 공유기의 NAT 에서 유지되는 매핑 테이블의 도움을 받아 이뤄집니다.
아이디어는 사실 매우 간단합니다. 즉, UDP 서버가 아니라 다른 컴퓨터에서 해당 공유기 IP 의 60010 포트로 데이터
를 전송하면 어떨까 하는 것입니다.
물론, 저 상황에서는 데이터를 보낸 측이 "124.137.26.36:12000" 주소가 아니기 때문에 공유기 측에서 버려집니다. 하지만, 저렇게 데이터를 보내는 와중에 클라이언트 측이 "100.100.100.100:15000" 주소로 데이터를 한번 전송해 주면 어떻게 될까요?
공유기 매핑 테이블에는 175.194.21.14:60010 포트에 대해 2가지 원격 주소지가 포함되어 데이터를 받을 수 있게 됩니다. 결과적으로, Private IP 를 가지고 있는 PC 임에도 불구하고 마치 공용 IP 에 연결할 수 있는 것처럼 데이터를 전달받을 수 있게 된 것입니다.
'Network' 카테고리의 다른 글
keepalive 란? (0) | 2015.07.22 |
---|---|
SSH 터널링 상세이론 (0) | 2015.07.14 |
와이파이로 기기간 연결 강화한다 (0) | 2015.06.11 |
모바일기기 wifi의 ip주소를 수동으로 설정하기 (0) | 2015.06.11 |
UDP 브로드캐스트의 재발견: 네트워크 브로드캐스팅 라이브러리 만들기 (0) | 2015.05.16 |