본문 바로가기

개발/WebRTC

1. WebRTC 정리하기

WebRTC 이론부터 구현까지
1. WebRTC 정리하기

2. WebRTC 구현 방식
3. WebRTC 구현하기(1:1 P2P)
4. WebRTC 구현하기(1:N P2P)
5. WebRTC 구현하기(1:N SFU)
6. WebRTC 성능 비교(P2P vs SFU)

1. WebRTC란 무엇일까?

WebRTC(Web Real-Time Communication)란 웹 브라우저 환경 및 Android, IOS 애플리케이션에서도 사용 가능한 비디오, 음성 및 일반 데이터가 피어간에 실시간으로 전송되도록 지원하는 오픈 소스이다.

공개 웹 표준으로 구현되며 모든 주요 브라우저에서 일반 JavaScript API로 제공한다. (Apple, Google, Microsoft 및 Mozilla가 지원)

2. WebRTC의 기술 및 프로토콜 소개

2-1. ICE(Interactive Connectivity Establishment)

브라우저가 peer를 통한 연결이 가능하도록 해주는 프레임 워크이다.

peer간 단순 연결 시 작동하지 않는 이유들

  1. 연결을 시도하는 방화벽을 통과해야 함
  2. 단말에 Public IP가 없다면 유일한 주소값을 할당해야 한다.
  3. 라우터가 peer간의 직접 연결을 허용하지 않을 때 데이터를 릴레이해야 하는 경우

ICE는 위의 작업들을 수행하기 위해 STUN과 TURN 서버 둘 다 혹은 하나의 서버를 사용한다.

2-2. STUN(Session Traversal Utilities for NAT) 서버

클라이언트 자신의 Public Address(IP:PORT)를 알려준다.

peer간의 직접 연결을 막는 등의 라우터의 제한을 결정하는 프로토콜 (현재 다른 peer가 접근 가능하지 여부 결정)

클라이언트는 인터넷을 통해 클라이언트의 Public Address와 라우터의 NAT 뒤에 있는 클라이언트가 접근 가능한지에 대한 답변을 STUN서버에 요청한다.

[그림1] WebRTC-STUN server

2-3. NAT(Network Address Transilation)

단말에 공개 IP(Public IP) 주소를 할당하기 위해 사용한다.

라우터는 공개 IP 주소를 갖고 있고 모든 단말들은 라우터에 연결되어 있으며 비공개 IP주소(Private IP Address)를 갖는다.

요청은 단말의 비공개 주소로부터 라우터의 공개 주소와 유일한 포트를 기반으로 번역한다. 이 덕분에, 각각의 단말이 유일한 공개 IP 없이 인터넷 상에서 검색 가능하다.

몇몇의 라우터들은 Symmetric NAT이라고 불리우는 제한을 위한 NAT을 채용한다. 즉, peer들이 오직 이전에 연결한 적 있는 연결들만 허용한다. 따라서 STUN서버에 의해 공개 IP주소를 발견한다고 해도 모두가 연결을 할수 있다는 것은 아니다. (위의 설명에서 STUN 서버에 다른 peer가 접근 가능한지 여부를 요청하는 이유)

이를 위해 TURN이 필요하다.

2-4. TURN(Traversal Using Relays around NAT) 서버

TURN 서버와 연결하고 모든 정보를 그 서버에 전달하는 것으로 Symmetric NAT 제한을 우회하는 것을 의미한다.

이를 위해 TURN 서버와 연결을 한 후 모든 peer들에게 저 서버에 모든 패킷을 보내고 다시 나(TURN서버)에게 전달해달라고 해야 한다.

명백히 오버헤드가 발생하므로 이 방법은 다른 대안이 없을 경우만 사용해야 한다.

[그림2] WebRTC-TURN server

 

2-5. SDP(Session Description Protocol)

해상도나 형식, 코덱, 암호화등의 멀티미디어 컨텐츠의 연결을 설명하기 위한 표준이다.

두 개의 peer가 다른 한쪽이 데이터가 전송되고 있다는 것을 알게 해준다.

기본적으로 미디어 컨텐츠 자체가 아닌 컨텐츠에 대한 메타데이터 설명이다.

기술적으로 보자면 SDP 는 프로토콜이 아니다. 그러나 데이터 포멧은 디바이스간의 미디어를 공유하기 위한 연결을 설명하기 위해 사용한다.

[참고]

https://webrtc.org/

 

WebRTC

An open framework for the web that enables Real-Time Communications (RTC) capabilities in the browser.

webrtc.org

https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API

 

WebRTC API - Web API | MDN

WebRTC(Web Real-Time Communication)은 웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는

developer.mozilla.org

 

 

 

'개발 > WebRTC' 카테고리의 다른 글

6. WebRTC 성능 비교(P2P vs SFU)  (4) 2021.01.20
5. WebRTC 구현하기(1:N SFU)  (2) 2021.01.20
4. WebRTC 구현하기(1:N P2P)  (0) 2021.01.19
3. WebRTC 구현하기(1:1 P2P)  (9) 2021.01.18
2. WebRTC 구현 방식  (3) 2021.01.17