UDP Hole Punching 관련 질문

3권에서 새로 도입된 네트웍 및 멀티플레이어 프로그로그래밍 섹션을 위한 게시판입니다.

Moderator: 류광

Locked
lskgenius
Posts: 9
Joined: 2007-11-02 15:57

UDP Hole Punching 관련 질문

Post by lskgenius »

GPG 및 구글링, 네이버 검색 등을 몇날몇일 훓어봤으나,

만족할정도로 상세히 설명되어있는 자료를 찾을수가 없어서 (혹은 찾지 못해서) 이렇게 질문드립니다.




홀펀칭은 서버에 접속해있는 Client들중, 하나 또는 다수의 Client가 (서로 다른) NAT 환경 예하에 있을 때에 UDP 환경일 경우 해당 Client끼리는 연결이 되지 않으므로
(이 부분에 대해서도 자세히 모르겠습니다. 공유기 또는 라우터가 내부적으로 매핑 테이블을 만든다는데, 그 부분에대해 확실히 이해를 못했습니다)

중계 서버를 통해 서로의 Connection 정보를 받아와서 그를 사용해 서로 접속을 한다는 내용으로 대충 이해를 했었으나, 간략한 시뮬레이션 프로그램을 작성하여 테스트해본 결과 (SOCKADDR_IN 안에 있는 Connection 정보를 무식하게 memcpy해서 보냈습니다) 서버와 완전 동일한 Connection정보를 사용해서 서로에게 Packet을 보냄에도 불구하고 왠지 받지 못합니다.

서버에서 전달한 Connection정보는 확실히 받아온 것을 확인했습니다.





살려주세요..

쉽게 얻을 수 있는 Hole Punching 정보보다 좀더 구체적인 정보를 원합니다 -_ㅜ
비회원

Post by 비회원 »

저도 캐쥬얼 게임에 관심 있어서 Hole Punching에 대한 자료를 여기 저기 검색해봐도
제가 이해력이 없어서 그런지 Hole Punching 대한 얘기는 이해가 안가더군요.

왠만한 네트웍 책에서도 개념만 살짝 건더리고 가고, 실제 캐쥬얼 게임을 구현하게 되면
어떻게 할까 궁금하세요.
lskgenius
Posts: 9
Joined: 2007-11-02 15:57

Post by lskgenius »

여러 영문 기술문서까지 뒤져보고 있지만,

NAT 기술에 의한 외부와 내부의 통신 방식에 대한 확실한 이해는 힘드네요..



대충, 라우터단에서 하나의 포트를 매핑해주어 그 포트를 통한 접속 시도는 매핑된 내부 호스트에게 연결시켜주는 방식인 것 같은데, (방법도 여러가지가 있는 것 같더군요) 이게 맞는지도 모르겠고.. 좀더 정확한 내용을 알 수가 없으니 문제가 생겼을 때 대응할수가 없어 당황스럽네요



만약, 홀펀칭을 확실히 구현해보신 분이나 그에 대한 상세한 자료의 위치를 알고 계신 분이 계시다면,, 저좀 살려주세요 :(
비회원

Post by 비회원 »

질문이 너무 막연하네요.
무작정 모르겠다고 하는 것 보단
자신은 이렇게 이해하고 있는데 이게 맞는지 라던가
자료를 보는데 어떤 부분에서 이해가 안되는데 관련 부분에서 좀 더 보충자료가 있는지
구체적으로 질문을 하면 더 많은 도움을 받을 수 있을 것 같습니다.
무념이
Posts: 63
Joined: 2006-05-01 17:04

Post by 무념이 »

어떤 점이 명확하지 않다는 건지가 명확하지 않네요. (말이 좀 꼬이네요 -ㅅ-)

NAT 동작은 RFC에 명확하게 명시되어 있습니다.

http://rfc.net/rfc3489.html
http://rfc.net/rfc2663.html
http://rfc.net/rfc3027.html
lskgenius
Posts: 9
Joined: 2007-11-02 15:57

Post by lskgenius »

그 이후로 여러 자료를 탐독하여, TCP 환경에서 Router가 어떤식으로 LAN환경 내부와 외부의 통신을 지원해주는지 깨닳았습니다 ( 내부에서 보낸 패킷을 어떤식으로 변환하고, 매핑하여 목적지로 보내주고, 목적지에서의 답신 패킷이 나중에 그 매핑을 어떻게 활용해 다시 해당 내부 터미널로 돌아가는지 )


UDP 환경에서도 그와 유사하게 (혹은 동일하게) 동작한다고 가정을 할 때, 중계 서버를 통해 서로의 Address 를 받아온 후, 서로를 향해 연결될때까지 계속 UDP패킷을 쏴주어 서로가 서로에 대한 매핑정보를 구성하기를 기대하는게 Hole Punching이 아닐까 싶습니다


맞나요? ^_^;;?
비회원

Post by 비회원 »

혹시 도움이 될지도...
http://pasv.zerois.net/?p=19
비회원

Re: UDP Hole Punching 관련 질문

Post by 비회원 »

GPG 및 구글링, 네이버 검색 등을 몇날몇일 ㅤㅎㅜㅀ어봤으나,

만족할정도로 상세히 설명되어있는 자료를 찾을수가 없어서 (혹은 찾지 못해서) 이렇게 질문드립니다.

홀펀칭은 서버에 접속해있는 Client들중, 하나 또는 다수의 Client가 (서로 다른) NAT 환경 예하에 있을 때에 UDP 환경일 경우 해당 Client끼리는 연결이 되지 않으므로
(이 부분에 대해서도 자세히 모르겠습니다. 공유기 또는 라우터가 내부적으로 매핑 테이블을 만든다는데, 그 부분에대해 확실히 이해를 못했습니다)


1. 당연한 애기입니다라고 밖에는.. A클라이언트는 B클라이언트와 연결한 적이 없습니다. 그런데 A와 B를 연결해야 합니다.
만약 A가 공유기(NAT)장비를 사용중입니다. IP를 192.168.1.2라고 합시다. 그리고 A의 공유기는 211.11.11.11 이라고 하죠. 이때 보통 A의 주소(IP + Port)를 "내부 주소"라고
통칭합니다. 공유기 주소는 "외부 주소"라고들 하죠.

자, 이제 B입장에서 봅시다. B가 연결해야 하는 건 A의 공유기가 아니라 A입니다. 뭔가 감이 오시나요?

이런 다른 두개의 주소를 가진 A를 연결해야 할때 사용하는 방법이 홀펀칭입니다. TCP, UDP둘다 가능합니다. 다만 TCP 특성상 UDP로 하시는게 좋습니다.

2. NAT 장비가 동작하는 방식입니다. 우선 약자를 검색해 보세요. NAT장비나 PAT라는 장비는 원래 적은 IP로 여러대의 호스트를 외부와 연결하게 해 준다던지(공유기),
해커등 공격을 막는 용도(방화벽)로 개발된 장비입니다. 라우터하고는 관련 없어요. 이 장비들로 인해 홀펀칭이 중요시된 이유는 일반 사용자가 공유기라는 장비를 통해
인터넷에 접속되어 있을 확률이 80%이상이기 때문입니다.

이 장비에 매핑 테이블이 있는 이유는 자기에게 셋팅된 외부주소에 비해 더 많은 사용자가 사용할 수 있기때문입니다.
NAT라는 기법은 외부주소가 1개고 10명의 사용자이면 처음 사용을 요청한 사용자에게 외부 주소를 주고 나머지 사용자는 대기해야 합니다. PAT라는 건 port로 구별하는 방식인데
하나의 IP는 65535까지 포트가 할당 가능하므로(short니까) 이론상 하나의 주소에 65535까지 외부 주소를 할당해 줄 수 있습니다. 네트웍 쪽에는 두 개를 구별해서 애기하는데 우리는
통합해서 NAT라고들 하죠.
중계 서버를 통해 서로의 Connection 정보를 받아와서 그를 사용해 서로 접속을 한다는 내용으로 대충 이해를 했었으나, 간략한 시뮬레이션 프로그램을 작성하여 테스트해본 결과 (SOCKADDR_IN 안에 있는 Connection 정보를 무식하게 memcpy해서 보냈습니다) 서버와 완전 동일한 Connection정보를 사용해서 서로에게 Packet을 보냄에도 불구하고 왠지 받지 못합니다.

서버에서 전달한 Connection정보는 확실히 받아온 것을 확인했습니다.
3. 확인할 사항
(1) 호스트에서 UDP 바인딩 하셨나요?
(2) 호스트의 장비가 symmetric장비 아닌가요?
(3) A 호스트와 서버간에 뚫어논 포트(211.11.11.11:100), B호스트와 서버간 뚫어논 포트(222.222.222.222:500)
이러하다면 B는 211.11.11.11:100으로 쏴야 하고 A는 222.222.222.222:500으로 보내야 합니다.
pasv
Posts: 3
Joined: 2007-11-16 15:31
Contact:

Post by pasv »

우리가 흔히! 볼수 있는 공유기는 라우터라고 할 수 있습니다.
lskgenius
Posts: 9
Joined: 2007-11-02 15:57

Post by lskgenius »

답변 달아주신 분들 모두 정말 감사합니다


어찌어찌 성공은 했습니다만, 석연치 않은 부분들이 좀 있어서 네트워크 이론서를 파고 있는 중입니다 ^_^;;;




서버의 길은 멀고도 험난하군요 아하하;
Locked