WebRTC(Web Real-Time Communication) - 수정 예정
WebRTC - 웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술(서버를 통하지 않고 사용자끼리 통신)
쉽게 생각한다면 어떠한 플러그인 없이 음성, 비디오, 데이터를 서로 교환할 수 있는 기술
WebRTC 기술을통해 통신 이루어지는 과정으로는
1.서로의 주소를 공유
2.보안 사항 및 방화벽 우회
3.데이터를 실시간으로 교환
1,2번을 시그널링이라고 한다.
시그널링 - 서로 다른 네트워크에 있는 2개의 디바이스들을 서로 위치시키기 위해서는, 각 디바이스들의 위치를 발견하는 방법과 미디어 포맷 협의가 필요. 시그널링 과정에서 디바이스들을 상호간에 동의된 서버에 연결시킨다
브라우저(사용자)로 하여금 서버가 상대가 어디에 있는지 알려주는 것
WebRTC 용어
ICE(Interactive Connectivity Establishment)
ICE는 브라우저가 peer를 통한 연결이 가능하도록 하게 해주는 프레임워크
Peer A에서 Peer B까지 단순하게 연결하는 것으로는 작동하지 않는 것에 대한 이유는 많이 있다.
연결을 시도하는 방화벽을 통과해야하기도 하고, 단말에 퍼블릭 IP가 없다면 유일한 주소값을 할당해야할
필요도 있으며 라우터가 peer간의 직접연결을 허용하지 않을 때에는 데이터를 릴레이해야할 경우도 있는데
ICE는 이러한 작업을 수행하기 위해 STUND과 TURN 서버 둘다 혹은 하나의 서버를 사용한다.
STUN(Session Traversal Utilities for NAT)
STUN은 당신의 공개 주소(public address)를 발견하거나 peer간의 직접 연결을 막는 등의
라우터의 제한을 결정하는 프로토콜
클라이언트는 인터넷을 통해 클라이언트의 공개주소와 라우터의 NAT 뒤에 있는 클라이언트가
접근가능한지에 대한 답변을 위한 요청을 STUN서버에 보낸다.
NAT(Network Address Translation)
NAT는 단말에 공개 IP주소를 할당하기 위해 사용된다. 라우터는 공개 IP 주소를 갖고 있고 모든 단말들은
라우터에 연결되어 있으며 비공개 IP주소(private IP Address)를 갖고 있다.
요청은 단말의 비공개 주소로부터 라우터의 공개 주소와 유일한 포트를 기반으로 번역되는데
이러한 경유로 각각의 단말이 유일한 공개 IP 없이 인터넷 상에서 검색 될 수 있는 방법이다.
어떠한 라우터들은 네트워크에 연결할수 있는 제한을 갖고 있는데 따라서 STUN서버에 의해
공개 IP주소를 발견한다고 해도 모두가 연결을 할수 있다는 것은 아니므로 이를 위해 TURN이 필요하다.
TURN(Traversal Using Relays around NAT)
몇몇의 라우터들은 Symmetric NAT이라고 불리우는 제한을 위한 NAT을 채용하고 있다.
이 말은 peer들이 오직 이전에 연결한 적 있는 연결들만 허용한다는 것인데
TURN은 TURN 서버와 연결하고 모든 정보를 그 서버에 전달하는 것으로 Symmetric NAT 제한을 우회하는 것을 의미한다.
이를 위해 TURN 서버와 연결을 한 후 모든 peer들에게 저 서버에 모든 패킷을 보내고 다시 나에게 전달해달라고 해야한다.
이것은 명백히 오버헤드가 발생하므로 이 방법은 다른 대안이 없을 경우만 사용하게 된다
SDP(Session Description Protocol)
SDP는 해상도나 형식, 코덱, 암호화등의 멀티미디어 컨텐츠의 연결을 설명하기 위한 표준.
이러한 것이 두개의 peer가 다른 한쪽이 데이터가 전송되고 있다는 것을 알게 해주고
이것은 기본적으로 미디어 컨텐츠 자체가 아닌 컨텐츠에 대한 메타데이터 설명이다.
기술적으로 보자면 SDP는 프로토콜이 아니다. 데이터 포멧은 디바이스간의 미디어를 공유하기 위한
연결을 설명하기 위해 사용된다.
출처
https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API
https://developer.mozilla.org/ko/docs/Web/API/WebRTC_API/Protocols
'TIL' 카테고리의 다른 글
브라우저 렌더링 과정 (0) | 2022.04.04 |
---|---|
자바스크립트 데이터 타입 (0) | 2022.03.15 |
[자바스크립트] 변수 (0) | 2022.03.14 |
[자바스크립트] 자바스크립트 변수 선언 방법 (0) | 2022.03.13 |
git rebase (0) | 2022.02.19 |