WebRTC
WebRTC (Web Real-Time Communication)
WebRTC는 웹 애플리케이션 혹은 사이트 간에 미디어 데이터 임의의 데이터를 교환할 수 있는 기술이다. 대표적으로 화상회의 web service를 구현하거나 web torrent를 구현하는데 사용할 수 있다. Media Capture and Streams API를 이용하여 API를 구현되어있다.
Peer간의 connection을 RTCPeerConection이라는 interface로 추상화 했으며, 미디어 데이터를 의미하는 MediaStream을 연결하여 사용한다. 미디어 데이터를 전달하기 위한 interface로는 RTCDataChannel과 RTCRtpSender / RTCRtpReceiver가 있다.
Data Channels
RTCDataChannel은 SCTP (Stream Control Transmission Protocol)상에서 동작한다. Web brower에서 사용하는 SCTP는 kernel에 있는 구현을 사용하지 않고, usrsctp lib을 이용하여 UDP (User Datagram Protocol)위에 DTLS(Datagram Transport Layer Security)를 올리고 SCTP를 구현했다. RTCDataChannel은 MediaStream 뿐만 아니라 BLOB이나 ArrayBuffer형태의 일반적인 binary type (bytestream) 데이터도 전달할 수 있다.
RTCRtpSender / RTCRtpReceiver의 경우 SRTP (Secure Real-time Transport Protocol)를 이용하여 데이터 채널로 이용하며, RTCP (RTP Control Protocol)를 이용하여 제어한다. SRTP는 RTP를 암호화한 protocol이다. RTP의 transport layer는 spec상 정해지지 않았지만, 일반적으로 UDP를 사용한다. 또한 WebRTC에서는 SRTP또한 DTLS를 이용하여 암호화한다.
Fig. 0: Data Transport Protocols of WebRTC
SDP (Session Description Protocol)
HTML5에서 사용하기위해 google에서 지원하여 개발한 컨테이너. mkv에 기반하고 있으며 사실상 mkv의 일부를 사용하는 subset. mkv와 같이 EMBL (Extensible Binary Meta Language) 를 기반으로 컨테이너가 구성되어 있음. 하지 mkv가 다양한 codec을 지원하는데에 반해, webm은 ogg/opus/vp/av1등 (google에서 개발한) 소수의 코덱만을 지원한다.
SDP는 멀티미디어 데이터를 주고 받기 위해 데이터에 대한 포맷을 기술하는 protocol이다. SDP를 통해 데이터를 전달 받는 쪽은 전달 받는 데이터의 메타 정보를 알 수 있다. SDP에 대한 표은 RFC4566 [2]에 기술되어 있다. Fig. 1 (a)는 SDP에서 사용하는 문자들의 의미를 기술해 놓았다. =뒤에 *는 optional을 의미한다. Fig. 1 (b)는 SDP를 기술한 예시이다.
ICE (Interactive Connectivity Establishment)
ICE는 브라우저에서 peer간의 연결을 도와주는 framework이다. Peer간의 연결은 방화벽을 통과해야 하거나, public IP가 없는 경우 연결의 어려움이 생길 수 있다. 하지만 ICE에서 지원하는 signaling이라는 우회 과정을 통해서 peer간의 연결을 수행한다.
STUN (Session Traversal Utilities for NAT)
일반적인 개인 컴퓨터에는 public IP가 할당되어 있지 않습니다. 개인 컴퓨터는 private IP 주소 만을 갖고 있고, 라우터가 public IP를 노출한다. 라우터는 유일한 포트를 통해 특정 사용자를 노출하며, 테이블을 갖고 private IP와 매핑한다. 이러한 기술을 NAT (Network Address Translation)라 하며, NAT에 의해 컴퓨터는 자신의 public IP를 모르기 때문에 연결의 어려움이 생긴다. 하지만 peer간의 연결을 맺기 위해서는 자신의 public IP를 다른 상대방에 전달을 해야한다.. STUN은 외부에 둔 서버에 자신의 public IP를 조회하여 peer간의 connection을 알아낼 수 있는 방법을 제공한다.
TURN (Traversal Using Relays around NAT)
일부 라우터는 symmetric NAT라는 기술을 채용하여, 이전에 연결한 peer들만 연결을 허용한다. 이로 인해 peer간의 직접 연결이 불가능해지며, 릴레이 서버를 두어 symmetric NAT를 우회하는 방법을 TURN이라한다. TURN은 추가적인 overhead가 발생하기 때문에 주의해야 한다.
Fig. 2: Signaling, (a): w/ STUN, (b): w/ STUN and TURN