WebRTC (Web Real-Time Communication)는 웹 애플리케이션과 사이트가 플러그인 없이 오디오, 비디오, 데이터 스트림을 교환할 수 있게 해주는 기술이다. 이 기술이 원활하게 작동하기 위해서는 다양한 네트워킹 구성 요소가 필수적이다. 이러한 구성 요소는 신뢰할 수 있는 연결을 보장하고, 데이터의 품질을 유지하며, 실시간 통신을 가능하게 한다. 이 글에서는 WebRTC의 네트워킹 구성 요소를 계층적으로 자세히 설명한다.

ICE (Interactive Connectivity Establishment)

ICE는 WebRTC 네트워킹의 핵심 구성 요소로, 두 엔드포인트가 서로 연결될 수 있도록 도와주는 프레임워크이다. ICE는 네트워크 주소 변환(NAT) 환경에서도 엔드포인트 간의 연결을 설정하는 데 중요한 역할을 한다.

ICE 후보 (ICE Candidates)

ICE 후보는 네트워크 인터페이스, IP 주소, 포트, 전송 프로토콜 등의 네트워크 주소 정보를 포함하는 요소이다. ICE 후보는 로컬 후보와 원격 후보로 나뉜다. 로컬 후보는 각 엔드포인트에서 생성되고, 원격 후보는 상대방 엔드포인트에서 전달된 것이다. 이 후보들을 조합해 연결 가능한 경로를 찾는다.

STUN (Session Traversal Utilities for NAT)

STUN은 공용 IP 주소를 얻고, NAT 뒤에 있는 호스트의 위치를 확인하는 데 사용된다. STUN 서버는 클라이언트의 요청을 받아 공용 IP 주소와 포트 번호를 반환하며, 이를 통해 엔드포인트가 자신의 위치를 확인할 수 있다. STUN은 ICE 프로토콜의 일부로, 엔드포인트 간의 직접 연결을 시도하기 위해 사용된다.

TURN (Traversal Using Relays around NAT)

TURN은 NAT 및 방화벽을 통해 직접 연결이 불가능할 때 데이터를 중계하는 데 사용되는 프로토콜이다. TURN 서버는 중간자 역할을 하며, 클라이언트는 TURN 서버를 통해 데이터를 주고받는다. TURN은 더 많은 대역폭을 요구하고 지연 시간이 증가할 수 있지만, 연결이 확실히 이루어질 수 있도록 보장한다.

SDP (Session Description Protocol)

SDP는 두 엔드포인트 간에 멀티미디어 세션의 파라미터를 정의하고 교환하는 데 사용되는 프로토콜이다. SDP는 연결을 설정하기 위한 필수 정보들을 포함하며, 이 정보는 주로 ICE 후보와 미디어 정보로 구성된다.

SDP 오퍼/앤서 (SDP Offer/Answer Model)

SDP 오퍼/앤서는 WebRTC에서 세션 설정을 위한 과정이다. 한쪽 엔드포인트가 SDP 오퍼를 보내고, 상대방이 이를 받아 SDP 앤서로 응답한다. 이 과정에서 미디어 유형, 코덱, 네트워크 정보 등이 협상된다. 이 협상 과정이 성공적으로 이루어져야 통신이 가능해진다.

SDP 파라미터

SDP는 다양한 파라미터를 통해 세션을 정의한다. 여기에는 미디어 형식, 코덱, 비트레이트, 샘플링 레이트 등이 포함되며, 네트워크 연결을 위해 필요한 정보도 포함된다. SDP는 텍스트 형식으로 작성되며, 이는 쉽게 해석되고 전달될 수 있다.

SRTP (Secure Real-Time Transport Protocol)

SRTP는 WebRTC에서 오디오와 비디오 데이터를 안전하게 전송하기 위해 사용되는 프로토콜이다. SRTP는 RTP (Real-Time Protocol)를 확장하여 데이터의 기밀성, 무결성, 인증을 제공한다.

암호화와 인증

SRTP는 데이터 암호화를 통해 통신 내용이 도청되지 않도록 보호한다. 또한, HMAC (Hash-based Message Authentication Code)를 사용하여 데이터가 전송 중에 변경되지 않았음을 보장한다. 이러한 보안 기능은 WebRTC에서 민감한 미디어 데이터를 보호하는 데 필수적이다.

키 관리

SRTP의 키 관리는 DTLS-SRTP(Datagram Transport Layer Security-SRTP)를 통해 이루어진다. 이 방법은 통신을 설정하는 동안 양쪽 엔드포인트가 서로의 신원을 확인하고, 안전한 키를 교환하는 과정을 포함한다. 이 키는 SRTP 스트림에서 사용된다.

NAT 및 방화벽 처리

NAT 및 방화벽은 WebRTC의 네트워킹에서 가장 큰 도전 과제 중 하나이다. NAT는 로컬 네트워크 내에서 IP 주소를 변환하며, 방화벽은 외부에서 내부 네트워크로의 접근을 제한한다. WebRTC는 이러한 문제를 해결하기 위해 다양한 기술을 사용한다.

시그널링 서버 (Signaling Server)

시그널링 서버는 클라이언트 간의 네트워크 정보를 교환하는 데 사용된다. WebRTC는 시그널링 프로토콜에 대해 구체적인 표준을 정하지 않으며, 다양한 프로토콜이 사용될 수 있다. 시그널링 서버는 두 클라이언트 간의 SDP 교환, ICE 후보 교환 등을 중재한다.

피어 간 연결 (Peer-to-Peer Connection)

WebRTC는 가능한 한 피어 간 직접 연결을 선호한다. 그러나 NAT 및 방화벽 때문에 직접 연결이 어려울 수 있다. 이때 ICE, STUN, TURN을 활용하여 최적의 연결 경로를 찾는다. 피어 간의 직접 연결은 대역폭 효율성을 높이고 지연 시간을 최소화하는 데 기여한다.


관련 자료:
1. IETF RFC 5245: Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols 2. IETF RFC 4566: SDP: Session Description Protocol 3. IETF RFC 3711: The Secure Real-time Transport Protocol (SRTP) 4. IETF RFC 5766: Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN) 5. IETF RFC 5389: Session Traversal Utilities for NAT (STUN)