지난 포스팅에 이어 이번 포스팅에서는 WebRTC를 위한 P2P Infrastructure에 대해서 이야기 해보려고 한다.
(https://developer.mozilla.org/en-US/docs/Web/Guide/API/WebRTC/WebRTC_architecture 참고)
* P2P Infrastructure
WebRTC 는 브라우저 끼리 통신이기 때문에 이를 지원하기 위한 Infrastructure를 필요로 한다. WebRTC관련으로 나오는 단어들은 ICE, STUN, TURN, SDP, ICE Candidate 등인데 하나씩 기술하도록 한다.
1) ICE - Interactive Connectivity Establishment 의 약자로 웹브라우저(클라이언트, 또는 Peer)가 다른 웹브라우저에 접속하도록 하는 프레임웍이다. 인터넷 환경에서는 어떤 웹 브라우저가 다른 웹브라우저로 직접 접속하는데는 여러 장애가 있다. 일반적으로 하나의 접속은 NAT를 통해서 예를 들어 공유기(또는 라우터)를 통해서 접속되는 경우가 많으며 공유기 안의 웹 브라우저는 외부에서 접속이 불가능한 상황이 대부분이다.
2) STUN - Session Traversal Utilities for NAT의 약자로 P2P 접속을 하기 위한 Public IP Address 와 P2P 접속에 어떤 제한이 있는지를 결정해 준는 역활을 한다. STUN은 어떤 클라이언트의 Public IP Address와 라우터를 통해서 이 클라이언트가 외부에서 접속 가능한지를 알려준다.
3) TURN - Traversal Using Relays around NAT의 약자로 어떤 클라이언트가 Symmetric NAT 제한 상태 일때(Symmetric NAT 제한이라는 것은 클라이언트가 사전에 접속한 Peer로부터의 접속만 허용하는 것을 의미함) 다른 Peer들이 이 클라이언트에 접속하도록 하게 해주는 것으로 이 클라이언트가 TURN 서버에 커넥션을 만들고 다른 Peer들이 이 서버에 패킷을 보내면 이 서버가 해당 클라이언트에게 패킷을 forwarding 하게 한다.
4) SDP - Session Description Protocol 은 미디어 커넥션의 컨텐츠에 대한 메타 정보로 resolution, formats, codecs, encryption 등을 제공하여 두 Peer가 전송되는 데이터를 이해할수 있도록 해준다. WebRTC를 이용하기 위해서는 두 브라우져가 SDP를 서로 주고 받아야 하는데 이를 Offer/Answer라고 한다. 이 SDP의 Offer/Answer는 signal Channerl을 통해서 이루어 진다. Peer A는 Peer B에게 Offer를 하고 Peer B는 Peer A에게 Answer를 하게 되는 것이다.
5) ICE Candidate - ICE Candidate 는 Peer 들 간에 교환해야 하는 네트워크 커넥션에 대한 정보이다. 이 정보에는 Peer 들이 서로 통신할수 있는 방법을 알려준다. (직접 또는 TURN서버를 통해서)
다음 그림은 Peer A가 Peer B와 통신하는 플로우이다.
* ICE & RTCPeerConnection API
각각의 RTCPeerConnection 객체는 "ICE Agent"를 포함하며 ICE agent는 local IP, port 셋(candidates)를 수집하고, ICE agent는 peer들간에 connetivity 체크를 하고, connection keepalives들을 처리한다. Session Description이 설정이 되면 local ICE Agent는 자동으로 local peer에 대한 candidate IP, port 셋을 discovery 하는데 그 과정은 다음과 같다
1. OS에 local ip address를 쿼리함
2. 1.이 설정 되면 ICE agent는 외부 STUN server에 public ip/port 를 질의함
3. 2.가 설정되면 TURN server를 마지막 candidate로 첨부함
새로운 candidate가 발견되면 RTCPeerConnection의 onicecandidate callback 함수가 호출된다.