WebRTC란 무엇인가?
WebRTC는 Web Real-Time Communication의 약자로,
브라우저 간 P2P 통신을 가능하게 해주는 오픈 소스 프로젝트이다.
text 형태로도, video 형태로도 가능하다.
(Peer to Peer 방식은 동등 계층간 통신방식으로 클라이언트, 서버의 개념없이 동등한 노드들로 구성되어
데이터를 주고받는 형식이다.)
WebRTC로 구성된 프로그램들은 별도의 플러그인이나 소프트웨어 없이 P2P 화상회의 및 데이터를 공유한다.
하지만 WebRTC가 P2P만을 말하는 것은 아니다. 단순한 P2P보다 더 복잡하다.
WebRTC는 크게 네 가지 단계를 거쳐 동작한다.
- Signaling
- Connecting
- Securing
- Communucationing
이후에 이 네 가지 단계를 서술하도록 하겠다.
WebRTC의 등장배경
WebRTC 이전에는 Server가 MiddleMan 역할을 했다.
서버가 사용자 간 통신의 모든 부하를 부담하기 때문에 유지비용이 컸다.
그래서 두 사용자가 직접 통신을 하게 되었다.
두 명의 사용자에게 각각의 라우터가 있다.
( 라우터 : 컴퓨터 네트워크 간에 데이터 패킷을 전송하는 네트워크 장치다.
패킷의 위치를 추출하여, 그 위치에 대한 최적의 경로를 지정하며,
이 경로를 따라 데이터 패킷을 다음 장치로 전달한다. )
라우터에는 IP 주소가 있다. IP 주소가 있다면 두 사용자는 서로 통신할 수 있다.
WebRTC가 동작하는 원리
Signaling
누가 누군가를 Call할 때, 그것을 중재하는 서버가 Signaling Server이다.
A사용자가 B사용자와 통신하고 싶을 때, B사용자에게 알려주는 역할을 한다.
어떤 정류의 통신을 원하는지와 같은 정보도 같이 전송한다.
서로 통신을 수락하게 되면, Signaling Server를 통해 자신의 IP주소를 교환한다.
Stun
보통 public ip인 공유기에는 여러 private IP 주소가 내부적으로 라우팅되어 있다.
공유기에 연결된 노트북, 스마트폰은 서로 다른 private IP를 사용하고 있다.
여기서 노트북과 스마트폰처럼 private IP를 할당받은 디바이스는 자신의 public IP 주소를 모른다.
그런데 공유기로 연결한 노트북을 갖고 다른 사용자와 통신하려면
노트북에서 자체적으로 자신의 public IP를 알고 있어야한다.
이를 가능하게 하는 것이 Stun Server이다.
노트북은 Stun Server를 통해 자신의 public IP주소를 알아내게 되는 것이다.
Turn
연결이 완성되면, 앞서 설명했듯이 이전에 서버가 담당했던 일들을 모두 클라이언트가 담당하게 된다.
그런게 혹시나 연결이 끊길 것을 대비해 이전의 서버 역할을 하는 것이 turn Server이다.
백업 서버라고 이해하면 좋다.
WebSocket
일반적인 통신절차는 request와 response가 존재하는 구조이다.
이 방식은 실시간 통신을 구현하는데 상당히 느린 방식이다.
따라서 하나의 연결을 상대방과 만들어놓는 것이다.
WebRTC의 경우 서버대신 다른 클라이언트가 들어갈 수 있다.
양방향이며 상호간에 request와 response가 이루어진다. 하나의 링크만 존재한다.
이 링크에 사용하는 통신 프로토콜이 WebSocket이다.
WebRTC가 동작하는 단계 및 사용 프로토콜
- Signaling
: SDP (Session Description Protocol)
- Connection
: ICE (Interactive Connectivity Establishment)
- Security
: DTLS (Datagram Transport Layer Security)
: SRTP (Secure Real-time Transport Protocol)
- Communicating
: RTP (Real-time transport Protocol)
: SCTP (Stream Control Transmission Protocol)
: RTCP (Real-time Transport Control Protocol)
SDP (세션 기술 프로토콜)
말 그대로 세션 기술을 위한 프로토콜이다.
생성할 세션의 타입 정보를 전송한다.
처음 A사용자가 B사용자에게 통신 요청을 하는 것을 offer, B사용자가 응답하는 것을 Answer라고 한다.
offer에는 통신 종류가 video / audio 인지, 인코딩에 어떤 방식을 사용할지, IP주소값 등의 정보가 들어았다.
이 정보를 교환해야 통신이 가능하다.
일반적으로 Web에서 Json을 사용해 통신하는데, SDP는 key=value 형태로 데이터를 전송하며,
아래의 7가지 Key값만 사용가능하다.
v - Version
o - Origin, contains a unique ID useful for renegotiations
s - Session Name
t - Timing
m - Media Description
a - Attribute
c - Connection Data
(보통은 패키지 레벨에서 이 Key에 대응되는 값을 다 채워넣는다고 한다.)
ICE (Interactive Connectivity Establishment)
peer connection을 담당하는 프레임워크이다.
일반적으로 peer connection이 필요한 경우는 크게 세 가지이다.
- 동일한 라우터를 공유
: 그냥 connect 가능하다.
- 서로 다른 라우터를 가지고 있는 경우
: 자신의 public IP 주소를 알아내기 위해 stun 서버를 사용한다. 이 주소를 토대로 상대방과 통신한다.
- P2P 통신이 불가능한 경우
연결을 중재해줄 서버가 필요하다. 이 서버를 TRUN 서버라고 한다.
이렇게 세 가지의 통신을 지원하는 프레임워크가 ICE이다.
( https://inspirit941.tistory.com/346
해당 링크의 블로그에 자세한 설명이 기술되어 있다! )
WebRTC 통신 원리
참고자료 :
https://medium.com/@hyun.sang/webrtc-webrtc%EB%9E%80-43df68cbe511
https://inspirit941.tistory.com/346