중계 서버를 두고 client A , client B 가 홀펀칭 (wifi) 하는 것은 테스트로 확인햇는데.
클라이언트 중 하나가 3g가 되버리면 홀펀칭이 되지 않더군요.
네트워크에 대해서 자세한 지식은 없지만 3g인 경우와 wifi인 경우가 많이 달라지는 건가요?
안되는 이유 (아니면 되지만 구현이 어려운 이유) 라도 알려주실 수 있나요?
구글링으로도 이해될만한 자료는 나오지 않는 것 같습니다. ㅠ
UDP 홀펀칭 입니다. 서로 다른 NAT에서 위치한 클라이언트 들끼리 홀펀칭은 테스트 되었습니다.
같은 NAT 내에서 통신이 되려면 공유기가 hairpin Translation(뜻이 무엇인지 묻지 마세요 ㅋ)을 해주어야 한다고 하더라구요.
일반 가정용 공유기의 경우 위의 기능을 지원하지 않아 같은 NAT내에서 홀펀칭은 아마 안되는 경우가 더 많을 겁니다.
3g의 경우 당연히 서버와의 통신은 문제가 없는데 홀펀칭을 시도하니 안되네요..
안되는 이유라도 명쾌하게 알고 싶어요 ㅎ
SKT 3g에서는 폰기종에 따라 안될 수 있다고 하네요
스트리밍 관련된 까페지만 udp 홀펀칭이 안된다는 이유가 설핏 나와있기에 남겨봅니다~^^
WiFi 일 경우 일반적으로 수신이 잘 됩니다. 하지만 SKT 3G망 접속은 폰기종에 따라서 다릅니다.
왜냐?
폰이 SKT 3G 망에 접속하면 사설IP를 할당해 줍니다.
와우자 미디어 서버에서 RTP(UDP)로 송출하면 망측 글로벌 NAT 공유기를 통해서 폰(사설IP)까지 데이터가 전송되어야 하는데
그만 막히고 마는 것이죠.
갤럭시는 폰까지 전송안되고 HTC는 폰까지 전송됩니다.
왜냐?
RTSP 로 수신 포트를 교환할 때 낮은 포트로 수신을 요구합니다.
낮은 포트로 요청하면 NAT 공유기 특성상 동일한 포트를 사용하는 어플리케이션이 많아지면 의도하지 않은 포트로 UDP 홀펀칭이 일어납니다. UDP 홀펀칭이 실패하면 수신을 할 수 없는 거죠
높은 포트로 수신을 요구하면 이 현상이 발생하지 않습니다.
해결 방안은 폰이 공인IP를 할당 받던가 아니면 수신측 재생기가 데이터를 RTP(TCP)로 요청하던가 입니다.
공인IP를 받는 건 어려울꺼 같고 재생기에서 좀 바꿔주면 될텐데. 삼성전자에서 이런거까지 지원해 줄려나. 쩝
라고 댓글이 있네요~




중계서버 + 홀펀칭이라시는걸 보니 udp신가보네요?~
wifi로 성공하셨다는건 같은 NAT내의 wifi를 말씀하시는것인지요?
아니면 각기 다른 NAT에서 접속하여 홀펀칭에 성공하셨다는것인지요?
(사실 같은 NAT에서 홀펀칭이라는것은 거의 의미가 없다고.....보여지기때문에..아니리라 생각하지만 혹시나 해서요..)
일단 cltA와 cltB는 중계서버에 tcp로 접속하고, 포트를 할당 받은 후 중계서버로부터 아이피와 포트를 받으시나요?
기본적으로, 3g도 공인ip를 받는다면, udp통신 자체는 문제 없다고 보여지는데요..?
공인 ip가 아니라면 당연히 접속이 안되겠고요..
( 이런 경우 커넥션 리저벌로 접속하시는지요? )
혹~시;; 중계서버를 통해서라도, 테스트 하신 환경이 cltA와 cltB 모두 같은 NAT 내에서 하신 테스트 라면
당연~~~~~~히 통신이 되겠지만,
cltA, cltB 모두 공인ip로 나오던가요? ( 3g로 접속하시고 핑부터 때려 보세요~ )
핑퐁은 되는데 본격! 통신이 안되시는건지.. 아니면 아예 hardware error나 no route 상태이신건지...?
질문에 정보가 너무 적네요~
저도 질문하러 왔다가 슬쩍 남기는 글이라서^^;;