webrtc에서 말씀하시는 "p2p 매칭"의 의도에 따라 다를 것 같아요
- 상호 UDP 로 패킷 통신이 가능한 상태
- 상호 stun 이 알려주는 주소만 알고있는 상태
1번이면 말씀하신대로 turn 이 필요 없어요
2번에서도 상황이 좋아서 상호 UDP 통신이 성공한 상태라면 turn 이 필요 없어요.
2번에서 상호 UDP 로 패킷 통신이 실패한 상태에서 turn 이 필요해요.
실패하는 요인은
- 피어가 symmetric nat 뒤에 있거나 해서 stun 이 알아낸 주소(의 포트)를 사용할 수 없거나
- 네트워크 중간 어디든 웹 트래픽만 허용하거나(80,443)
- 네트워크 중간 어디든 UDP 가 막혀있거나
- 한쪽은 ipv4 만 쓰고 한쪽은 ipv6 만 쓰거나
- 등등?
에는 turn 을 써야합니다.
(ipv4 only <-> ipv6 only 가 안된다는건 기억 검증하다가 처음 알았내요)
말씀하시고자 하는 부분이 어떤 부분이에요?
- stun 에서 알려주는 주소(+포트) 만으로 연동이 가능하므로 turn 서버는 필요없다. 따라서 "서버 없이 서로 연동" 표현이 텍스트 그대로 맞다.
-> 요거면 제가 아는게 옛날꺼인가보내요. 제가 알고있는(공유드린) 내용 이후로 상황이 바뀐 부분을 알려주시면 감사하겠습니다~! - turn 서버는 필요하지만 라이브러리니까 그정도는 봐주자.
-> skageektp님이 말씀하신게 맞아요. 라이브러리니까 그 정도는 봐줄 수도 있습니다. 제가 민감했어요.
저는
3. 제대로 쓰려면 stun 만으로는 부족하고 turn이 필요한대 과장이 심하내~
를 표현중이였습니다.
stun 말고 turn 요.
stun은 단순 stun 기준 넌 누구다 알려주는 정도라 공개된 서버가 좀 있지만
turn 은 트래픽을 릴레이해줘야해서(비싸서) 돈내고쓰던가 자체 구축을 하던가 해야해요.
예) https://github.com/coturn/coturn
요런친구요.
stun 만으로 통신이 가능한 경우가 많기야하지만 단순하게 "된다" 라고 하기에는.....
되......긴 되는대..... 쓰읍.. 라는 느낌이내요.