UDP를 사용할 때, 공유기나 방화벽의 서로 다른 NAT(Network Address Translation)기능을 이용함으로 데이터의 전송이 되지 않았을 경우가 생긴다. 3 - 4회 테스트를 거쳐 전송이 되지 않으면 TCP를 사용하든지, 아니면 UDP홀 펀칭을 이용해야 한다.
유저들은 NAT뒤에 존재를 한다. 이는 둘 다 공유기를 사용을 하든, 방화벽을 쓰든 NAT기능이 실행되고 있다. 그래서 유저들이 서버에 정보를 보냈지만, 그 정보가 어디서 왔는지 확인할 길이 없으므로,
1. 유저들이 서버에 자신의 IP주소와 PORT를 보낸다.
2. 받아들인 IP와 PORT를 UDP로 연결할 각각의 클라이언트로 LIST를 만들어서 보내준다.
3. 클라이언트는 LIST를 이용하여 UDP로 원하는 상대와 접속한다.
이를 홀펀칭 이라고 한다.
참조
NAT [ Network Address Translation ]
OSI 모델의 3계층인 네트워크 계층에서 사설 IP 주소를 공인 IP 주소로 변환하는데 사용하는 통신망의 주소 변환기.
http://100.naver.com/100.nhn?docid=717874
우리가 흔히 말하는 공유기, 라우터 등이 이런 역할을 수행한다고 보면 된다.
종류
-전제 : 통신을 하기 위한 Client A와 Client B가 존재하며경우에 따라 NAT아래 놓일 수 있다.
이들의 통신을 중계하기 위한 Server S가 존재한다.
NAT과의 P2P 커뮤니케이션하기 위해서는 몇가지의 기술이 있다.
Relaying, Connection Reversal, UDP Hole Punching, UDP Port Number Prediction, Simultaneous TCP Connection Initiation 이 그것이다.
-------
홀펀칭 관련 알고 있는 개념이 전혀 없어... 공부겸 겸사 겸사 자료 가져왔다...
에혀 요놈 때문에 서버 크래쉬가 많이 일어 나는거 같은데 환장하겠네...
'[ Programing ] > Server' 카테고리의 다른 글
IOCP에서 ERROR_NETNAME_DELETED 에러 메세지 (0) | 2013.09.11 |
---|---|
UDP 홀펀칭2 (0) | 2013.08.22 |
IOCP (0) | 2013.08.22 |
뮤텍스와 세마포어 (0) | 2013.08.22 |
이벤트 객체 CreateEvent, SetEvent, ResetEvent, PulseEvent (0) | 2012.12.04 |