본문 바로가기
프로그래밍/WebRTC

[WebRTC] WebRTC 기본 개념과 Peer to Peer

by YuminK 2023. 9. 16.

WebRTC(Web Realtime Commnunication)란?

WebRTC는 브라우저간 Peer to Peer 통신을 가능하게 하는 기술이다.

음성 통화, 영상 통화, P2P 파일 공유 등으로 활용될 수 있다.

 

SDP(Session Description Protocol)란?

Peer 서로간의 미디어와 네트워크에 관한 정보를 이해하기 위해 사용되는 프로토콜이다. 

코텍, 소스 주소, 오디오와 비디오의 타이밍 정보가 포함된다.

 

ICE(Interactive Connectivity Establishment)란? 

WebRTC에서 Peer간 연결을 위해 사용하는 프레임워크이다. 공인 IP 주소를 갖지 않은 기기들에 대한 유일한 주소를 부여한다거나 방화벽을 통과 하는 등의 문제들을 해결하기 위해 사용된다.

 

ICE Candidate란?

원격 디바이스간 통신을 위해 ICE Candidate를 Peer간 주고 받는다.

ICE Candidate는 프로토콜과 라우팅 정보를 포함한다. 각 연결에서 여러 개의 후보자들이 처리가 되는데 가장 좋은 프로토콜(후보자)를 골라 Peer간 연결에 사용된다.

 

Signaling Server란?

SDP 정보과 ICE Candidate 정보를 주고 받기 위해 서버가 필요하다.

시그널링 서버는 Peer간 연결을 위해 데이터를 주고 받는 '중개자' 역할을 한다.

어떤 데이터를 넘기는지는 시그널링 서버의 입장에서 중요하지 않다.

단순히 Peer간 SDP, ICE Candidate 정보를 처리하기 위한 용도로 사용되기 때문이다. 

 

주로 Socket.io로 시그널링 서버를 구축한다. 

 

STUN(Session Traversal Utilities for NAT)이란?

STUN NAT(Network Address Translator) 주변에서 데이터를 전송하기 위한 보조 프로토콜이다.

STUN은 NAT 뒤의 네트워크 컴퓨터의 IP 주소, 포트 및 연결 상태를 반환한다.

대부분의 WebRTC 어플리케이션에서 사용된다. 

 

TURN(Traversal Using Relays around NAT)이란?

TURN은 컴퓨터가 방화벽이나 NAT 뒤에서 데이터를 주고 받을 수 있게 하는 프로토콜이다.

STUN보다 더 진보된 기술이다.


Peer A와 Peer B가 통신하는 방식

사전 내용)

1. SDP 프로토콜은  Local과 Remote의 개념이 존재한다.

자신의 미디어 정보를 통해 받은 내용을 Local Description으로 설정하고,

연결하는 Peer의 미디어에서 받은 정보를 Remote Description 정보로 사용한다. 

 

2. SDP 정보를 넘겨줄 때 연결을 시작하는 쪽에서 Offer 객체를 만들어 전달하고,

연결을 받는 쪽에서 Answer 객체를 만들어 전달한다. (살짝 핸드쉐이킹 느낌하고 비슷한 듯)

 

3. SDP 정보를 주고 받은 이후에는 ICE Candidate를 주고 받는 과정을 거친다. 

그림 설명)

1. A의 입장에서 자신의 미디어 정보를 Local Description로 설정하고,

 Offer의 형태로 Description 정보를 Peer B에게 전달한다. 

 

2. Peer B는 받은 정보를 Remote Description으로 설정하고 자신의 미디어 정보를 Local Descrition 으로 설정한다.

이후 Answer 객체를 만들어 Peer A에게 보낸다. 

 

3. Peer A는 자신이 받은 정보를 Remote Description으로 설정한다.

(A와 B간 Local, Remote Description 설정이 끝난 상태)

 

4. 연결을 시작한 A쪽에서 ICE Candidate 정보가 생성되면, 이를 B에게 보낸다.

B는 A에게 ICE Candidate 정보를 보낸다.

 

5. 서로 받은 ICE Candidate 정보를 Connection 정보에 추가한다.

이후 stream을 추가하여 통신을 시작한다.

 

참고자료

https://developer.mozilla.org/en-US

https://webrtc.org/getting-started/peer-connections

댓글