RTCPeerConnection P2P

· 릴리스

sgcWebSockets 2022.8.0부터 sgcWebSockets 라이브러리에 TsgcRTCPeerConnection 컴포넌트가 추가됐어요.

TsgcRTCPeerConnection은 UDP를 통해 P2P로 피어를 연결하는 클라이언트 컴포넌트예요. 흐름은 4단계로 나뉘어요:




이 단계들을 구현하기 위해 클라이언트는 다음 프로토콜을 사용해요:

시그널링 

클라이언트가 시작될 때는 누구와 무엇을 통신할지 알 수 없어요. 시그널링은 다음과 같은 세부 정보를 포함하는 SDP(세션 설명 프로토콜)를 사용해요:

The Signaling makes use of the WebSocket protocol to exchange the data, it works through a subprotocol and it's implemented in the TsgcWSPServer_RTCPeerConnection component on server side.

TsgcRTCPeerConnection은 내부적으로 TsgcWSPClient_RTCPeerConnection이 연결된 WebSocket 클라이언트를 자동으로 생성해요.

IP 및 포트를 얻기 위해 클라이언트는 STUN/TURN 프로토콜을 사용해요. 따라서 STUN/TURN 서버도 필요해요.

링크:

연결 

두 피어가 후보와 SDP를 알게 되면 클라이언트는 ICE라는 또 다른 표준 프로토콜을 사용해요.

ICE(Interactive Connection Establishment)는 두 피어 간의 연결을 수립해요. 피어는 동일한 네트워크에 있거나 NAT 뒤에 있을 수 있어요. ICE는 중앙 서버 없이 직접 연결을 수립하는 솔루션이에요. P2P 연결이 불가능한 경우 ICE는 TURN 서버를 통해 데이터를 릴레이해요.

두 피어 간 연결 가능한 유효한 후보를 ICE가 찾으면 다음 단계는 통신을 암호화하는 것이에요.

링크:

보안 

 피어가 연결된 후에는 통신을 보호해야 해요. 이는 UDP를 통한 통신을 보호하는 암호화 프로토콜인 DTLS를 사용해 처리해요.

DTLS 핸드셰이크가 성공적으로 완료되면 SRTP(Secure Real-Time Transport Protocol)라는 또 다른 프로토콜이 사용돼요. 현재 SRTP는 구현되어 있지 않아요.

링크:

통신 

두 피어가 보안 프로토콜을 사용하게 되면 다음 두 프로토콜로 통신해요:

현재 이 프로토콜들은 구현되어 있지 않지만, UDP를 통한 DTLS로 데이터를 주고받을 수 있어요.