이전글 : [WebRTC] WebSocket TLS Handshake 완벽 정리 (1/2)
🔐 WebRTC에서의 TURN 연결 및 DTLS Handshake 과정 정리
이번 글에서는 WebRTC 연결 과정에서 TURN 서버와의 통신, 그리고 DTLS Handshake를 통한 보안 채널 설정까지의 흐름을 Wireshark 패킷 캡처 기준으로 정리해볼게요.
실제 통신 패킷 흐름을 기반으로 설명하니, WebRTC와 TURN/ICE/DTLS 흐름을 이해하는 데 도움이 될 거예요 🙌
1️⃣ TURN 서버와의 초기 연결 (STUN Binding)
- 클라이언트(172.16.45.190)가 TURN 서버(192.168.0.175)에 STUN Binding Request를 전송합니다.
- 응답으로 XOR-MAPPED-ADDRESS가 반환되며, 이는 클라이언트가 NAT 뒤에 있음을 나타냅니다.
📌 STUN은 NAT 환경에서 자신의 public IP/port를 확인하기 위해 사용됩니다.
2️⃣ TURN Allocate 요청 시도 (Nonce 인증 포함)
- 클라이언트가 처음에 인증 없이 Allocate Request를 전송했지만, 401 Unauthorized 응답을 받고 다시 시도합니다.
- 서버가 요구하는 Nonce와 Username, Realm 정보를 포함해 재요청한 뒤,
Allocate Success 응답을 통해 Relay 주소가 생성됩니다. - 예: XOR-RELAYED-ADDRESS: 192.168.0.175:52493
🧠 TURN은 단순 NAT 우회뿐 아니라 P2P 불가능 시 중계 역할을 해줍니다.
3️⃣ 후보 포트에 대한 Binding Request 반복
- 다양한 포트를 대상으로 Binding Request를 반복 전송합니다.
- 이는 ICE Candidate 수집 과정이며, 이후 연결 가능한 후보를 선별하는 용도입니다.
🎯 실제 연결 시 가장 효율적인 후보를 선택하는 ICE(Interactive Connectivity Establishment) 과정의 일부입니다.
4️⃣ DTLS Handshake 시작 (보안 채널 설정)
- WebRTC는 SRTP(Session Real-time Transport Protocol) 를 보호하기 위해 DTLS를 사용합니다.
- 이 구간에서는 TLS와 유사하게 인증서 교환, 키 협상, 대칭키 공유 등의 작업이 진행됩니다.
🔐 DTLS를 통해 Secure SRTP가 가능해지며, 미디어 스트림이 암호화됩니다.
5️⃣ TURN 서버에 CreatePermission 요청
- 클라이언트는 TURN 서버에 CreatePermission 요청을 보내며, 피어와의 통신을 허용해달라고 요청합니다.
- TURN 서버는 이에 대해 Success Response를 반환하고, 이후 피어 간 통신이 가능해집니다.
🔑 TURN 서버는 보안상 허용된 IP와 포트로만 데이터 송수신을 허용합니다.
6️⃣ 실제 미디어 및 데이터 전송 시작
- 이 시점부터는 실제 WebRTC Media 또는 DataChannel 데이터를 송수신합니다.
- 해당 UDP 패킷은 실시간 음성, 영상 또는 기타 데이터가 될 수 있습니다.
🛰️ 이 부분이 바로 우리가 기대한 WebRTC의 실시간 통신입니다!
7️⃣ DTLS 종료 및 TURN 세션 정리
- DTLS 종료 신호를 보내고, 이어서 TURN Refresh Request에서 lifetime: 0을 설정하여 세션 종료를 요청합니다.
- TURN 서버는 이에 따라 해당 Relay 자원을 해제합니다.
🧹 연결 종료 후에는 TURN 서버 자원을 반드시 반납해야 합니다.
📊 전체 흐름 요약 다이어그램
[클라이언트] [TURN 서버]
|----------- STUN Binding ---------->|
|<---------- Binding Success --------|
|----------- Allocate ------------->|
|<--- Error 401 (unauthenticated) --|
|-- Allocate w/ nonce, user, realm -->|
|<----- Allocate Success (relay) ----|
|---- Binding (여러 포트 확인) ---->|
|<----- Binding Response ------------|
|-------- DTLS Handshake ---------->|
|<-------- DTLS Response ------------|
|------ CreatePermission Request ---->|
|<------ CreatePermission OK ---------|
|====== UDP Media/Data 전송 =======>
|--- Refresh lifetime=0 (종료) ----->|
|<------- Refresh Success -----------|
|----- ICMP 포트 종료 감지 ----------|
🎁 마무리
이 글에서는 WebRTC에서 TURN 서버를 통해 연결되는 전체 흐름을 실제 패킷 기반으로 살펴봤습니다.
초기 NAT 탐지 → Relay 설정 → 보안 세션 설정 → 미디어 전송 → 세션 종료까지의 전체 사이클을 명확히 이해하면, WebRTC 디버깅에도 큰 도움이 될 거예요!
'WebRTC' 카테고리의 다른 글
[WebRTC] WebSocket TLS Handshake 완벽 정리 (1/2) (0) | 2025.04.16 |
---|
댓글