WebRTC 개념 정리

※ 참고한 블로그 주소

WebRTC가 뭔지에 대해 정리하는 글이라고 생각하시면 됩니다.

블로그 참고를 많이 했구요, 음.. 이 글을 완벽하게 믿기보단 참고용으로 봐주세요. 부족한 점이 많습니다.

처음에 WebRTC가 뭔지 몰라서 위키백과를 봤습니다. Real Time Communication On Web Browsers라고 하더라구요. 음.. 대략적으로 말하자면 서버없이 웹 브라우저간에 통신이 가능하다?

서버가 없이 가능하다는데, 그러면 서로가 누군지 어떻게 알지? 이 의문점 때문에 시작도 전에 시간소모를 많이 했던 것 같습니다.

결국 서버가 완전하게 필요하지 않은 것은 아니더라구요. 브라우저를 서로 연결할 때 서버가 필요하고 통신할 때에는 서버가 빠지고 브라우저끼리 서버를 거치지 않고 데이터를 주고받습니다.

이러한 webRTC의 동작엔 4가지 Step이 있다고 합니다.

  • Signaling
  • Connecting
  • Securing
  • Communicationing

IP 주소를 알아내는 방식

1. Signaling

누가 누군가를 call할 때, 그걸 중재하는 서버가 Signaling server라고 하네요. 어떤 종류의 통신을 원하는지(ex - video/chat)의 정보도 같이 전송된다고 합니다.

서로에게 OK사인을 보내면, Singaling Server를 통해서 서로의 IP주소를 교환합니다.

2. Stun

Public IP 주소인 공유기에는 여러 Private IP 주소가 내부적으로 라우팅되어 있습니다. 공유기에 연결된 노트북과 핸드폰은 서로 다른 Private IP 주소를 사용하고 있습니다.

여기서 노트북과 핸드폰처럼 Private IP 주소를 할당받은 디바이스는 자신의 Public IP 주소를 모릅니다.

따라서 공유기에 연결한 노트북이나 휴대폰으로 다른 사람과 통신하려면, Public IP 주소를 알고 있어야 합니다. 이걸 알아내기 위한게 Stun Server라고 하네요.

3. Turn

연결이 완성되면, 결국 서버가 하던 일을 전부 클라이언트가 담당하게 되는데요. 혹시라도 connection에 문제가 생겼을 경우를 대비해서 서버역할을 해주는게 turn server라고 합니다.

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

Session의 Description을 담당하는 프로토콜

생성할 Session의 타입 정보를 전송합니다. 처음에 통신을 위해 A가 B에게 통신 요청을 했을 때를 offer라고 합니다.

이 offer에는 통신 종류, 인코딩 방식, IP 주소 값 등의 정보가 들어있습니다. 이 정보를 서로 교환해야 통신이 가능합니다. 이 때 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

ICE

Peer Connection을 담당하는 Framework. 일반적으로 Peer Connection이 필요한 경우는 크게 세 가지 입니다.

  • 동일한 라우터를 공유하는 경우 : 연결 가능
  • 서로 다른 라우터를 가지고 있는 경우 : 자신의 Public IP 주소를 알아내기 위해 Stun Server를 사용
  • 어떤 이유건 P2P 통신이 불가능한 경우 : 연결을 중재해줄 서버가 필요하며, Turn Server 사용

이렇게 세 가지 통신을 지원하는 Framework가 ICE라고 보면 됩니다.

RTP / RTCP

RTP는 audio/video stream이 전송되는 데이터의 format이라고 보면 됩니다.

voice call이 진행중인 상황에서 상대방이 말하고 있으면, 본인은 침묵하게 됩니다. 그러면, 굳이 이 침묵이 담긴 데이터를 상대방에게 전송할 필요가 없습니다. 이런 조절을 RTCP가 해준다고 보면 됩니다.

요약하자면 RTCP는 대역폭을 낭비하지 않도록 조절하는 것이라고 생각해주시면 될 것 같습니다.

SCTP

Stream Control Transmission Protocol로, RTP / RTCP와 같은 Communication Protocol 분류에 들어갑니다. RTP와 RTCP는 미디어, 오디오, screen sharing할 때만 적용이 가능한 통신 프로토콜입니다.

세가지 경우 가 아니라면 사용이 불가능하다고 합니다.

  • Real-time network games
  • Game player action events
  • Asset exchange
  • Text chat

File sharing / text message / game 등 비디오나 오디오를 제외한 나머지 데이터를 통신할 때 쓰인다고 합니다.

DTLS, SRTP

둘 다 Security Protocol. Peer to Peer로 전송되는 데이터는 개인의 웹캠이나 목소리, 기타 등등 Private data일 가능성이 큽니다.

해커가 중간에서 데이터를 접근하지 못하게 할 방법이 필요합니다. 보안을 위한 프로토콜로 보면 될 것 같습니다.

(설명이 좀 부족한데 찾아봐야 할 것 같습니다.) 오고가는 데이터에 관해서 데이터를 복호화하기 위한 프로토콜로 생각하면 될 것 같습니다.