📌
이포스팅은 WEB RTC의 ICE, TURN STUN에 대해
본인이 이해한대로 서술한 포스팅입니다 참고만 부탁 드립니다 😊
두 단말간 서버를 통하지 않고
위의 3가지 객체를 통해 데이터를 통신 하는 것이며,
RTCPeerConnection들이 적절하게 데이터를 교환할 수 있게 처리해 주는 과정을 시그널링(Signaling)이라고 합니다.
시그널링 관련 정리자료는 아래의 포스팅을 참고해주세요 !☝
https://velog.io/@kkookk55/project-Web-RTC-signaling-exit
📌 P2P 절차
1 각 브라우저가 P2P 커뮤니케이션에 동의
2 서로의 주소를 공유
3 보안 사항 및 방화벽 우회
4 멀티미디어 데이터를 실시간으로 교환2번과 3번 단계가 일반적인 웹 개발의 접근 방법으로는 해결하기 어렵습니다. 왜냐하면 브라우저는 웹 서버가 아니기 때문에, 외부에서 접근할 수 있는 주소가 없기 때문이죠. 때문에 WebRTC가 P2P 기반이긴 하지만 통신 설정 초기 단계에서는 중재자의 역할이 필요합니다.
📌 ICE?
먼저 ICE란 Interactive Connecntivity Establishment의 약자로 두 단말이 서로 통신할수 있는 최적의 경로를 찾을수 있도록 도와주는 프레임 워크 입니다
TURN, STUN 서버를 사용하여 최적의 경로를 찾습니다 ☝
이렇게 경로들을 확보할때 P2P 연결을 할 두 브라우저는
RTCPeerConnection.onicecandidate 핸들러를 통해 내 네트워크 정보를 전달(쌍방)하여 받은 정보를 RTCPeerConnection.addIceCandidate 를 통해 등록합니다
📌 NAT?
NAT는 NetWork Address Translation의 약자로 네트워트 주소 변환을 이야기 합니다!
쉽게 해석 해보자면 여러장비가 하나의 IP주소를 공유하는 것 ! 또는
하나의 공인 IP를 여러개의 사설 IP로 변환하는 시스템 ! 이라고 할수 있습니다.
위의 문장이 이해 되지 않는다면 https://5kyc1ad.tistory.com/254 포스팅을 참고해주세요!그렇다면 NAT를 사용하는 이유는 무엇일까?
- IP 주소 절약
- 보안
- IP 주소 관리의 편의성
위의 3가지 이유를 들수 있을거 같습니다!
Web RTC는 P2P에 최적화 되어 있는데요!
Peer들간의 공인 네트워크 주소(IP)를 알아하고 데이터 교환을 해야하는데, 실제 개개인의 컴퓨터는 방화벽등 여러가지 보호장치들이 존재하고 있다고 합니다 ☝
그래서 이렇게 서로간의 연결을 위한 정보를 공유하여 P2P 통신을 가능하게 해주는 것이 Stun/Turn Server 입니다.
STUN ?
STUN 방식은 단말이 자신의 공인 IP 주소와 포트를 확인하는 과정에 대한 프로토콜 이며,인터넷의 복잡한 주소들 속에서 유일하게 자기 자신을 식별할 수 있는 정보를 반환해 준다고 합니다 😀
👉요약 하자면
WebRTC 연결을 시작하기 전에 STUN 서버를 향해 요청을 보내면, STUN 서버는 NAT 뒤에 있는 피어(Peer)들이 서로 연결할 수 있도록 공인 IP와 포트를 찾아줍니다.
TURN ?
하지만 STUN 서버를 이용하더라도 항상 정보를 알아낼 수 있는것은 아닙니다!
어떤 라우터들은 방화벽 정책을 달리 할 수도 있으며, 이전에 연결된 적이
있는 네트워크만 연결할 수 있게 제한을 걸기도 합니다
이때 우리는 TURN 서버를 대안으로 사용하게 됩니다.
TURN 방식은 네트워크 미디어를 중개하는 서버를 이용하는 것 이라고 요약할수 있을거 같네요!
TURN 방식은 중간에 서버를 한번 거치기 때문에 엄밀히 P2P 통신이 아니게 되며,
구조상 통신의 지연이 발생하게 됩니다.
하지만 보안정책이 엄격한 개인 NAT 내부에 위치한 브라우저와 P2P 통신을 할 수 있는
유일한 방법이므로 최후의 수단으로서 선택 되어야 한다고 합니다!