P2P (Mesh)
모든 클라이언트는 자신과 연결된 모든 클라이언트에 대한 1:1 link를 가진다.
자신의 미디어 정보를 송신할 Uplink 1개
상대의 미디어 정보를 수신을 Downlink 1개
장점
클라이언트끼리 직접 연결을 진행하고 서버는 단순 정보를 중계하기에 서버 부하가 적다.직접 연결로 데이터를 송수신하기 때문에 실시간 송수신이 보장된다.
단점
단순 1:1을 넘어 N:M 연결로 확장시 클라이언트가 유지해야하는 링크가 증가함에 따라 클라이언트의 부하가 심해진다.
SFU(Selective Forwarding Unit)
미디어 서버가 따로 존재하며, 미디어 트래픽을 중계해준다.
Mesh 형식의 연결과 다르게 클라이언트 - 클라이언트의 연결이 아닌 서버 - 클라이언트 간의 연결을 진행한다.
따라서 N : M 의 상황에서는 앞의 Mesh 형식보다 클라이언트의 부하가 덜하다.
장점
클라이언트끼리 P2P 사용할 때보다 느리긴 하지만 비슷한 수준의 실시간성을 유지할 수 있다.
Mesh 형식보다는 사용하는 것보다 클라이언트가 받는 부하가 줄어든다.
단점
따로 미디어 서버를 둬야하기 때문에 서버 비용이 증가한다.
Mesh 형식보다는 부하를 덜 받지만 그래도 여전히 어느정도의 부하는 감당해야한다.
MCU(Multi-point Control Unit) 서버
SFU과 비슷하게 중간에 미디어 서버가 존재하며, 서버 - 클라이언트 간의 연결이 진행된다.
SFU와 다른 점이라고 하면 각 클라이언트에서 오는 미디어 정보를 그대로 포워딩해주지 않고
클라이언트 측에서 오는 미디어 정보를 혼합하고 가공해서 수신측으로 전송해준다.
그렇기에 각 클라이언트는 서버에 송신할 링크, 다른 이들의 정보를 수신할 링크 모두 1개씩 가지고 있기 때문에 클라이언트의 부하가 줄어든다.
하지만 미디어 서버 측에서, 받은 정보를 혼합하고 가공하는 작업이 필요하기 때문에 서버의 부하가 훨씬 더해진다.
장점
위에서 언급했듯, 클라이언트는 Uplink, Downlink 각 1개씩 가지기 때문에 사용자가 받는 부하는 덜해진다.
N:M 연결에서 효율적일 수 있다.
단점
미디어 서버가 모든 클라이언트의 정보를 수집하고 혼합 및 가공 작업을 거친 후에 뿌리기 때문에 서버의 부하가 심해질뿐만 아니라, 실시간 송수신 보장 또한 어렵다.
출처: https://gilssang97.tistory.com/80
webRTC 기본 동작 과정
Signaling Server
Web RTC 기술의 가장 기본이 되는 서버로,
서로 다른 네트워크에 있는 클라이언트를 연결시키기 위해 필요한 여러 정보를 중계해주는 역할을 한다.
WebRTC 기술과 별개로 Signaling Server는 직접 구축해야하는 것으로 대부분 가이드에서는 WebSocket 사용해 통신한다.
STUN Server
; Session Traversal Utilities for NAT
Signaling Server 만으로는 서로 다른 네트워크에 존재하는 클라이언트끼리의 통신이 불가능하다.
방화벽, NAT 환경에 놓인 클라이언트에 대해서는 직접적인 Signaling이 불가하기 때문에 공인 IP를 알려주는 STUN Server가 필요하다.
TURN Server
; Traversal Using Replays around NAT
STUN Server를 활용한다면 대부분의 경우는 연결이 가능하지만
보호정책이 강한 NAT나 라우터, 보통 Symmetric NAT 환경에서 안되는 경우가 생긴다.
이때 TURN Server가 클라이언트 간의 통신 채널을 중계해주며, 다만 클라이언트 간의 모든 트래픽을 중계해주기 때문에 해당 서버에 대한 부하가 커진다.
그래서 Local IP, Public IP 둘 다로도 연결할 수 없는 경우 TURN Server를 최후의 수단으로 사용하게 된다.
- TURN 서버는 STUN 서버의 역할까지 포함하는듯 하다. 둘의 차이
위 STUN Server, TURN Server는 COTURN 라는 오픈소스로 구축할 수 있다고 한다.
출처: https://velog.io/@jsb100800/개발-WebRTC-SpringBoot-Vue.js를-활용한-Group-Video-Call
'Web' 카테고리의 다른 글
Exception? Error? (0) | 2023.12.23 |
---|---|
Proxy (0) | 2023.08.11 |
선생님.. 소셜 로그인이 하고싶어요.. (2) | 2023.02.16 |
이젠 잊지 말자, Servlet (0) | 2022.12.31 |