브라우저가 peer를 통한 연결이 가능해주도록 해주는 프레임워크.
Peer간 단순 연결 시 작동하지 않는 이유
이를 해결하기 위해 ICE는 STUN과 TURN 서버 둘 다 혹은 둘 중 하나를 이용함.
단말에 Public IP 주소를 할당하기 위해 사용.
라우터는 Public IP 주소를 갖고 있고, 라우터에 연결된 단말들은 Private IP 주소를 가짐.
NAT은 단말들의 Private IP를 라우터의 Public IP와 포트 기반에 매핑.
몇몇 라우터들은 Symmetric NAT을 채용함.
클라이언트 자신의 Public Address(IP:PORT)를 알려줌.
클라이언트는 인터넷을 통해 클라이언트의 Public Address와 라우터의 NAT 뒤에 있는 클라이언트가 접근 가능한지에 대한 답변을 요청.
해결할 수 없는 경우
Public IP들을 가지고 미디어를 릴레이하기 때문에 네트워크 및 컴퓨팅 자원이 사용됨.
1. TURN Client가 Allocate Request를 보냄.
2. 1이 성공하면 TURN Server는 해당 Client에 할당된 Relayed Transport Address를 포함한 응답을 보냄.
3. TURN Client는 통신하고자 하는 Peer에게 이 주소 전달.
4. Peer는 이 Address:Port로 TURN Server에 접근하여 최종적으로 TURN Server를 거쳐 TURN Client와 P2P 연결이 맺어짐.
종단 간 미디어 트래픽을 중계하는 중앙 서버 방식.
서버가 각각의 Client에게 Peer로서 동작함.
클라이언트는 서버에게만 자신의 영상 데이터를 보내면 됨.(Uplink가 한 개)
상대방의 수만큼 데이터를 받아야 함.(Downlink가 peer의 수만큼)
1:N 혹은 소규모 N:M형식의 실시간 스트리밍에 적합.
클라이언트의 부하 및 서버의 부하 둘 다 적당함.
SFU의 경우 서버가 직접 Peer로서 작동하고 서버는 IP가 공개되어 있으므로 사실 STUN이나 TURN이 필요 없지만, 유저의 네트워크를 직접 제어할 수 없으므로 SFU에 접속하는 Client는 TURN/STUN ICE Server 및 자격 증명이 필요함. 그래서 SFU라 하더라도 STUN이나 TURN 서버가 필요함.