프로토콜
WebRTC란?
- 웹 브라우저 간에 실시간 음성, 영상 및 데이터 통신을 가능하게 하는 오픈 소스 프로젝트
- P2P를 이용한 기술로, 서버 없이 클라이언트와 클라이언트가 직접적으로 연결하여 통신
- 클라이언트 간 직접 연결을 통해, 더 빠른 연결 속도와 더 작은 지연 시간을 제공
- API는 JavaScript로 구현
- RFC 8825 : https://datatracker.ietf.org/doc/html/rfc8825#name-terminology
SDP
- 세션을 초기화하고 미디어 통신을 위한 세션 파라미터를 교환하는 데 사용되는 프로토콜
- 세션을 설명하고 제안하는 메타데이터 형식으로, 웹 애플리케이션에서 피어 간에 미디어 통신을 설정하고 제어하는 데 사용
- 미디어 유형(예: 오디오, 비디오), 코덱 정보, IP 주소 및 포트 번호, 프로토콜 등이 포함
- 피어 간에 교환되며, 각 피어는 자신의 기능과 요구 사항을 SDP로 전달
- RFC 8866 : https://datatracker.ietf.org/doc/html/rfc8866
ICE
- 두 피어 간의 네트워크 연결을 확립하는 프로토콜
- 두 피어가 서로 통신할 수 있는 가장 효과적인 경로를 찾는 역할을 수행
- 수행과정
- Gathering: 모든 가능한 IP 주소(ICE candidate)를 수집. 로컬 IP 주소, 공용 IP 주소, 그리고 STUN 서버를 통해 얻은 주소를 포함
- Connectivity Checks : 수집된 모든 IP 주소의 효용성을 확인. TURN 서버를 사용하여 NAT 또는 방화벽을 통과할 수 있는지 테스트.
- Nominating: 가장 효과적인 연결 경로를 선택. 모든 경로 중 가장 효과적인 경로를 선택.
- Using: 선택된 경로를 사용하여 통신 시작.
- RFC 8445 : https://datatracker.ietf.org/doc/html/rfc8445
Signaling
- 두 피어가 서로 통신을 시작하기 전에 필요한 정보를 교환하는 과정을 의미
- 통신을 시작하기 위한 핸드셰이크처럼 동작
- WebRTC 연결의 초기 설정, 오디오와 비디오의 메타데이터 교환, 그리고 네트워크 정보를 교환하는 데 필요함
- 수행과정
- 세션 제어 메시지 교환 : 통신을 시작하거나 종료하려는 의도를 상대방에게 알리는 메시지를 교환
- 미디어 메타데이터 교환 : 미디어의 종류(오디오, 비디오 등), 포맷, 코덱 등에 대한 정보를 교환. 이 정보는 SDP(Session Description Protocol) 형식으로 교환됨.
- 네트워크 데이터 교환 : 각 피어의 IP 주소와 포트 정보를 교환하여 피어 간 직접 연결을 설정. 이 과정에서는 ICE 프로토콜이 사용됨
- Signaling 서버는 PeerConnection을 맺기 위한 세션정보를 교환해주는 서버를 의미
- 시그널링 서버에서 세션정보를 교환하는 기술에 대한 표준은 존재하지 않으며, WebSocket, STOMP, gRPC 등 다양한 방식으로 구현
STUN
- NAT(Network Address Translation) 환경에서 피어의 공용 IP 주소를 찾아내는 서버
- 피어는 STUN 서버에 요청을 보내고, STUN 서버는 요청을 보낸 피어의 공용 IP 주소와 포트 정보를 응답
- 이 정보는 시그널링 과정에서 다른 피어에게 전달되어 피어 간 직접 연결을 가능하게 함
TURN
- STUN이 실패했을 때, 즉 피어 간 직접 연결이 불가능한 환경에서 사용되는 서버
- Symmetric NAT 제한을 우회하기 위함
- 모든 트래픽을 중계하는 역할을 수행
- 피어는 데이터를 TURN 서버에 보내고, TURN 서버는 이 데이터를 목적지 피어에게 전달
- 더 많은 네트워크 리소스를 사용하기 때문에, 최후의 보루
Symmetric
- 네트워크 주소 변환(Network Address Translation)의 한 유형
- 호스트가 외부로 통신을 시도할 때마다, 소스 IP 주소와 포트 번호를 변경하여 외부로 나가는 패킷을 공용 IP 주소로 변환
- 각 호스트가 인터넷에 접속할 때마다 공용 IP 주소 및 포트 번호가 변경됨을 의미
- ‘외부에서 내부 호스트로 직접 접근 제한’ , ‘IP 주소 부족문제해결’ 을 위해 등장함.
API
getUserMedia
- 웹 브라우저에 접근하여 사용자의 카메라와 마이크를 사용할 수 있게함
- 이를 통해 비디오와 오디오 스트림을 캡처
RTCPeerConnection
- 미디어 스트림 연결 : 두 피어 간의 오디오, 비디오, 데이터 스트림을 교환하기 위한 커넥션 객체
- 시그널링 프로세스 관리 : 두 피어가 연결을 설정하고, 미디어 데이터를 교환하고, 네트워크 정보를 공유할 수 있게 함
- ICE 프레임워크 활용 : ICE 프레임워크를 사용하여 네트워크 경로를 찾음. STUN과 TURN 서버를 이용하여 NAT 및 방화벽을 통과하고, 두 피어 간의 가장 효과적인 연결을 확립
RTCDataChannel
- (오디오, 비디오 이외에) 텍스트, 이미지, 파일 등의 데이터를 직접 교환할 때 사용됨
- 데이터 손실 방지를 위한 확인 응답 프로토콜 지원
- 데이터 순서를 유지함
- 필요에 따라 대역폭 사용량 조정