연결 초기화 (Connection Initialization)
WebRTC(Web Real-Time Communication)는 웹 애플리케이션 및 사이트에서 브라우저 간의 실시간 미디어 및 데이터 교환을 가능하게 하는 기술이다. WebRTC의 절차는 클라이언트 간의 안정적이고 보안된 연결을 설정하고 유지하는 데 필수적인 단계들을 포함한다. 이 절차는 주로 두 개의 주요 부분으로 나눌 수 있다: 신호 처리(Signaling)와 피어 연결(Peer Connection).
신호 처리 (Signaling)
신호 처리(Signaling)는 WebRTC 절차의 첫 번째 단계로, 두 클라이언트가 서로 연결될 수 있도록 필요한 메타데이터를 교환하는 과정이다. WebRTC는 신호 처리 메커니즘을 정의하지 않지만, 일반적으로 WebSocket, HTTP, 또는 XMPP와 같은 프로토콜이 사용된다. 이 단계에서는 다음과 같은 절차가 포함된다:
-
세션 설명 프로토콜(Session Description Protocol, SDP) 교환:
클라이언트는 SDP를 사용하여 미디어 형식, 코덱, 네트워크 정보 등을 기술한다. 두 클라이언트는 이 SDP 정보를 교환하여 서로의 미디어 설정을 이해하고 적절히 조정한다. SDP는offer
와answer
로 나뉘며, 한 클라이언트가offer
를 생성하면, 다른 클라이언트는 이에 대한answer
를 반환한다. -
ICE 후보(Interactive Connectivity Establishment Candidates) 교환:
ICE는 네트워크 주소를 찾아내고 연결할 수 있는 가장 적합한 경로를 결정하는 데 사용된다. 각 클라이언트는 여러 네트워크 인터페이스(예: 로컬 IP, 공용 IP, 중계 서버)를 통해 접근 가능한 ICE 후보들을 생성하고, 이를 상대 클라이언트와 교환한다. ICE 후보는 STUN(Session Traversal Utilities for NAT) 또는 TURN(Traversal Using Relays around NAT) 서버를 통해 획득될 수 있다.
피어 연결 설정 (Peer Connection Establishment)
신호 처리 과정이 완료되면, 클라이언트 간의 실제 피어 연결이 설정된다. 이 과정은 다음과 같은 절차로 이루어진다:
ICE 후보 평가 및 연결 (ICE Candidate Gathering and Connectivity Checks)
클라이언트는 교환된 ICE 후보를 평가하고, 가장 적합한 경로를 선택하여 연결을 시도한다. 이 과정은 일반적으로 다음과 같이 진행된다:
-
ICE Gathering:
각 클라이언트는 가능한 모든 네트워크 경로를 수집하고, 이들 경로를 상대 클라이언트에게 전달한다. 이때 사용 가능한 후보들은 우선순위에 따라 나열된다. -
Connectivity Checks:
클라이언트들은 수신된 ICE 후보를 사용하여 상대 클라이언트와의 연결을 시도한다. 이 과정에서 STUN을 사용하여 연결 테스트를 수행하고, 성공적인 경로를 확인한다. 가장 높은 우선순위의 후보부터 순차적으로 테스트가 이루어지며, 성공적인 경로가 발견되면 그 경로가 선택된다. -
ICE Nomination:
다중 경로 중에서 최종적으로 사용할 경로를 선택하는 과정이다. 선택된 경로는 "Nominated" 상태가 되며, 이후 미디어와 데이터가 이 경로를 통해 전송된다.
DTLS 및 SRTP 설정 (DTLS and SRTP Setup)
피어 간의 연결이 확립된 후, 데이터 전송 전에 보안을 설정하는 단계이다.
-
DTLS(Datagram Transport Layer Security) 핸드셰이크:
WebRTC는 보안을 위해 DTLS를 사용한다. 두 클라이언트는 DTLS 핸드셰이크를 수행하여 암호화 키를 교환하고, 전송되는 데이터의 무결성과 기밀성을 보장한다. DTLS는 TLS의 변형으로, UDP 기반의 전송을 지원한다. -
SRTP(Secure Real-time Transport Protocol) 설정:
미디어 스트림의 보안을 위해 SRTP가 사용된다. SRTP는 미디어 데이터의 암호화, 인증, 무결성 확인을 제공한다. DTLS 핸드셰이크를 통해 생성된 키는 SRTP에 사용되어, 음성 및 비디오 데이터의 안전한 전송을 보장한다.
데이터 전송 및 유지 (Data Transmission and Maintenance)
연결이 확립된 후, WebRTC는 실시간 미디어 및 데이터 전송을 시작한다. 이 단계에서 이루어지는 절차는 다음과 같다:
미디어 및 데이터 스트림 전송 (Media and Data Stream Transmission)
-
RTP/RTCP(RTP Control Protocol) 전송:
실시간 오디오 및 비디오 데이터는 RTP(Real-time Transport Protocol)를 통해 전송된다. RTCP는 RTP 스트림의 품질을 모니터링하고 제어하기 위해 사용된다. RTCP 패킷은 네트워크 상태 정보를 포함하며, 이는 전송 경로의 품질을 조정하는 데 도움을 준다. -
데이터 채널 전송:
WebRTC는 데이터 채널을 통해 비미디어 데이터를 전송할 수 있다. 이 채널은 SCTP(Stream Control Transmission Protocol) 위에 구현되며, 신뢰성, 순서 보장 등의 다양한 전송 속성을 지원한다. 데이터 채널은 텍스트, 파일 등 다양한 형태의 데이터를 실시간으로 주고받을 수 있게 한다.
연결 유지 및 갱신 (Connection Maintenance and Renewal)
실시간 통신 동안, 네트워크 상태 변화나 다른 외부 요인으로 인해 연결 상태가 변할 수 있다. 이를 관리하기 위한 절차는 다음과 같다:
-
ICE 연결 상태 갱신:
초기 연결 후에도, 클라이언트는 주기적으로 네트워크 상태를 체크하고, 필요 시 새로운 ICE 후보를 교환하여 더 나은 경로로 연결을 갱신할 수 있다. -
RTT(Round-Trip Time) 모니터링 및 조정:
RTCP 패킷을 통해 라운드 트립 시간(RTT) 및 네트워크 지연을 모니터링하고, 이를 바탕으로 버퍼 크기 조정 및 비트 전송률 조정 등을 수행하여 스트림 품질을 유지한다. -
페이스 체인지 및 회피(Face Change and Recovery):
네트워크 장애나 변화가 발생했을 때, WebRTC는 신속하게 경로를 전환하거나 중단된 연결을 복구하는 절차를 수행한다. 이는 페이스 체인지(Face Change)라고 하며, 중계 서버를 통해 재연결하거나 새로운 ICE 후보를 통해 연결을 재설정한다.
관련 자료: - WebRTC 1.0: Real-Time Communication Between Browsers, W3C Candidate Recommendation. - Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal, IETF RFC 5245. - Datagram Transport Layer Security (DTLS), IETF RFC 6347. - Secure Real-time Transport Protocol (SRTP), IETF RFC 3711.