Search
Duplicate
🌏

WebRTC 개요

간단소개
ContributorNotionAccount
주제 / 분류
WebRTC
Chrome
태그
Scrap
팔만코딩경 컨트리뷰터 (Library DB (속성)에 관계됨)에 관계됨
7 more properties

WebRTC on Chrome

Real-time communication 을 웹에 제공
Chrome 에 최첨단 미디어 스택 구축
새로운 커뮤니케이션 플랫폼 개발

Three main tasks

1.
로컬의 오디오와 비디오 획득
2.
오디오와 비디오를 통신함
3.
임의의(arbitary) 데이터를 통신함

Three main Javascript APIs

1.
MediaStream (aka getUserMedia)
2.
RTCPeerConnection
3.
RTCDataChannel

1. MediaStream (로컬의 오디오와 비디오 획득)

Represents a stream of audio and/or video
Can contain multiple tracks
Obtain a MediaStream with navigator.getUserMedia()

2. RTCPeerConnection (많은 걸 함)

Signal processing
Codec handling
Peer to peer communication
Security
Bandwidth management

3. RTCDataChannel (임의 데이터 통신)

Same API as WebSockets
Ultra-low latency
Unreliable or reliable (신뢰할 수 없는 or 신뢰할 수 있는)
Secure

여기까지 중간정리

WebRTC 란 브라우저간 Peer-to-peer (P2P) 연결을 통해 오디오와 비디오 뿐만 아니라, 임의의 데이터까지 매우 빠른속도로 통신 할 수 있는 기술이다.
로컬의 오디오와 비디오를 획득할 때는 MediaStream 의 navigator.getUserMedia() 를 사용한다
그렇다면 어떻게 브라우저간 P2P 연결을 수립할 수 있는가?
Signaling 이라는 연결 수립 과정을 이제부터 설명한다.

Abstract Signaling

Need to exchange ‘session description’ objects :
What formats I support, what I want to send
Network information for peer-to-peer setup
Can use any messaging mechanism
Can use any messaging protocol

STUN (Session Traversal Utilities for NAT)

위 그림 중 An ideal world 는, 두 Peer 가 모두 각각의 Public IP 를 가지고 있는 경우이다. 이 때는 두 피어 모두 서로와 즉시 통신 할수 있다.
하지만 현실은 아래그림(The real world)과 같이 대부분 NAT(사설망) 뒤에 있다.
해서 이러한 네트워크 상태일 때 P2P 연결을 위해서 STUN Server 를 사용한다.
SUTN 은 Peer 의 Public IP 주소가 무엇인지 말해주는 녀석이다.
아주 심플한 서버이고, 저렴하게 유지할 수 있다.
STUN 을 사용하여 연결이 가능한 경우 P2P 연결 상태는 아래와 같다.
NAT 끼리 직접 연결되어 있는 것을 볼수 있다. 따라서 ideal 한 케이스와 거의 동일하게 Media(또는 Data) 를 주고 받을 수 있다.

TURN (Traversal Using Relays around NAT)

모든 경우를 STUN 으로만 해결 할 수 있는 것은 아니다. 두 Peer 가 모두 같은 Public IP 를 가지고 있거나, Symmetric NAT의 경우 어플리케이션이 달라 지면 NAT 의 맵핑 테이블이 바뀔 수 있기 때문에 불가능 하다.
이 경우 어쩔수 없이 중간에 중계서버를 두고 통신을 해야 하는데, 이 중계서버를 TURN 이라고 한다.
TURN provide a cloud fallback if peer-to-peer communication fails
Data is sent through server, uses server bandwidth
Ensures the call works in almost all environments
TURN 을 통해 통신하는 경우 아래와 같은 형태가 된다.
NAT 끼리 바로 연결되지 못하고 각각의 TURN server 에 연결되어 데이터(또는 미디어) 를 주고받는다. 당연히 더 느릴 수 밖에 없을듯 하다.

여기까지 중간정리

모든 Peer 들이 서로 직접 연결가능한 Public IP를 가지고 있는 것은 아니다. 해서
Peer-to-peer 연결 수립을 위해 STUN 이나 TURN 서버를 활용하게 되는데 내 생각으로는 TURN Server 는 STUN Server 의 기능을 모두 포함하면서, 데이터를 송수신 해주는 기능까지 추가된 서버인 것 같다.
아니 그렇다면 총 3가지 연결방법이 존재하는데,
Peer 끼리 직접 연결 (둘다 공인 IP가 있을 때) → Direct Connection
NAT 을 통해 연결 (둘중하나라도 NAT 뒤에 있을 때) → Server Reflexive Connection
TURN Server 를 통해 연결 (NAT 을 통한 연결이 불가능 할 때) → TURN Relay Connection
이 연결을 모두 구현해야 하나?
아니다 알아서 두 피어간의 가능한 연결을 체크하고, 이중 우선순위를 정해서 최적의 방법으로 연결해주는 프레임워크가 있다. 아래에서 설명한다.

ICE (Interactive Connectivity Establishment)

ICE : a framework for connecting peers
최적의 연결 경로를 찾아내주는 녀석이다.
대부분의 연결은 STUN 을 활용하는 선에서 끝난다 (TURN 이용하는 것이 극단적이는 얘기)
이미 제공되고 있는 STUN 과 TURN Server 는 아래와 같다.
WebRTC stunserver, turnserver
rfc5766-turn-server
restund
위에서 설명한 3연결을 candidate 로 하여 SDP(참조 : https://ko.wikipedia.org/wiki/%EC%84%B8%EC%85%98_%EA%B8%B0%EC%88%A0_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C ) 내에 포함시켜 전송한다.

Security throughout WebRTC (WebRTC 전반에 걸친 보안)

미디어 및 데이터에 대한 암호화가 필수적으로 포함되어 있다.
Secure UI, (명시적으로 옵션을 넣었을 때)
plugin 없는 Sandbox 화

Architecture

1. Peer to peer : one-to-one call
2. Mesh: small N-way call
3. Start: Medium N-way call
4. MCU: Large N-way call