RFC 8835 - Transports for WebRTC
- Statut: Proposed Standard
- Publié: January 2021
- Stream: IETF
- Errata: Pas d'errata
Informations de Base
- Numéro RFC: 8835
- Titre: Transports for WebRTC
- Titre Français: Transports pour WebRTC
- Date de Publication: Janvier 2021
- Statut: PROPOSED STANDARD (Standard Proposé)
- Auteur: H. Alvestrand (Google)
Résumé (Abstract)
Cette spécification décrit la pile de protocoles de transport utilisée par WebRTC, incluant les composants principaux ICE, DTLS et SRTP. WebRTC transmet les médias et les données via UDP, utilise ICE pour la traversée NAT, DTLS pour établir des connexions sécurisées et SRTP pour chiffrer les flux médias.
Aperçu de la Pile de Transport WebRTC
Pile de Protocoles Complète
Pile de Protocoles WebRTC (de haut en bas):
┌─────────────────────────────────────────┐
│ Couche Application (Application) │
│ - Flux Audio/Vidéo │
│ - Canaux de Données (DataChannel) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ RTP/RTCP (Protocole de Transport │
│ Temps Réel) │
│ - Transmission Média │
│ - Informations de Contrôle │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ SRTP/SRTCP (RTP Sécurisé) │
│ - Flux Média Chiffrés │
│ - Authentification │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ DTLS (TLS pour Datagrammes) │
│ - Négociation des Clés │
│ - Chiffrement de Bout en Bout │
│ - Vérification des Certificats │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ ICE (Établissement de Connectivité │
│ Interactive) │
│ - Traversée NAT │
│ - Collecte des Candidats │
│ - Vérifications de Connectivité │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ UDP (User Datagram Protocol) │
│ - Transport de Base │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ IP (Internet Protocol) │
│ - IPv4 / IPv6 │
└─────────────────────────────────────────┘
Pile Supplémentaire pour Canaux de Données:
┌─────────────────────────────────────────┐
│ DataChannel API │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ SCTP (Stream Control Transmission │
│ Protocol) │
│ - Transmission Fiable │
│ - Frontières de Messages │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ DTLS │
└─────────────────────────────────────────┘
↓
(ICE + UDP + IP)
Pourquoi UDP?
UDP vs TCP pour WebRTC:
Problèmes TCP:
❌ Blocage de Tête de File (Head-of-Line Blocking)
- Une perte de paquet bloque tout le flux
- Inacceptable pour audio/vidéo en temps réel
❌ Établissement de Connexion Lent
- Délai du Three-Way Handshake
- Délai du Handshake TLS
❌ Contrôle de Congestion Inflexible
- Algorithme Fixe
- Pas d'optimisation pour médias temps réel
Avantages UDP:
✓ Pas de Blocage de Tête de File
- Paquets indépendants
- Perte de paquet n'affecte pas les paquets suivants
✓ Faible Latence
- Pas d'attente d'accusé de réception
- Envoi immédiat
✓ Contrôle Flexible
- Contrôle de congestion au niveau application
- Optimisé pour les médias
Choix WebRTC:
UDP + Fiabilité au niveau application
→ Médias avec SRTP (non fiable)
→ Données avec SCTP (fiabilité optionnelle)
ICE (Interactive Connectivity Establishment)
Rôle d'ICE
Problème: Traversée NAT
Scénario:
Utilisateur A (192.168.1.100) ← NAT1 ← Internet → NAT2 → Utilisateur B (192.168.1.200)
IP Privée IP Privée
Problème:
- A ne sait pas comment atteindre l'IP privée de B
- B ne sait pas comment atteindre l'IP privée de A
- NAT bloque les connexions externes
Solution ICE:
1. Collecter les Candidats (Candidates)
- Candidat Host: IP locale
- Candidat Server Reflexive: IP publique NAT (via STUN)
- Candidat Relay: Adresse relais (via TURN)
2. Échanger les Candidats (via signalisation)
3. Vérifications de Connectivité (Connectivity Checks)
- Tester toutes les paires de candidats
- Trouver le meilleur chemin
4. Établir la Connexion
Types de Candidats
// Candidat Host (adresse locale)
{
type: 'host',
ip: '192.168.1.100',
port: 54321,
protocol: 'udp',
priority: 2130706431,
foundation: '1',
component: 1
}
// Candidat Server Reflexive (adresse publique obtenue via STUN)
{
type: 'srflx',
ip: '203.0.113.1', // IP Publique
port: 12345, // Port mappé par NAT
protocol: 'udp',
priority: 1694498815,
foundation: '2',
relatedAddress: '192.168.1.100', // IP Locale
relatedPort: 54321
}
// Candidat Relay (adresse relais TURN)
{
type: 'relay',
ip: '198.51.100.1', // IP du serveur TURN
port: 3478,
protocol: 'udp',
priority: 16777215,
foundation: '3',
relatedAddress: '203.0.113.1',
relatedPort: 12345
}
Ordre de Priorité:
Host > Server Reflexive > Relay
(Connexion directe préférée, relais en dernier recours)
DTLS (Datagram Transport Layer Security)
Rôle de DTLS
Pourquoi DTLS est nécessaire:
Problème:
- UDP n'est pas sécurisé
- Les flux médias RTP doivent être chiffrés
- Négociation de clés nécessaire
Solution DTLS:
✓ Établir une connexion sécurisée
✓ Négocier les clés de chiffrement
✓ Authentifier la partie distante
✓ Protection d'intégrité
DTLS vs TLS:
TLS (basé sur TCP):
- Transport fiable
- Livraison ordonnée
- Transport en flux
DTLS (basé sur UDP):
- Transport non fiable
- Possiblement désordonné
- Transport en datagramme
→ Nécessite un traitement supplémentaire des pertes et du réordonnancement
Version DTLS:
WebRTC exige: DTLS 1.2 ou supérieur
Recommandé: DTLS 1.3
SRTP (Secure RTP)
Chiffrement SRTP
SRTP = RTP + Chiffrement + Authentification
Structure de Paquet RTP:
┌──────────────────────────────────────┐
│ En-tête RTP (12+ octets) │
│ - V, P, X, CC, M, PT, Seq, TS, SSRC │
├──────────────────────────────────────┤
│ Charge Utile RTP (données média) │
│ - Échantillons audio ou trames vidéo │
└──────────────────────────────────────┘
Structure de Paquet SRTP:
┌──────────────────────────────────────┐
│ En-tête RTP (texte clair) │
├──────────────────────────────────────┤
│ Charge Utile Chiffrée (chiffrée) │
│ - Données média chiffrées │
├──────────────────────────────────────┤
│ Étiquette d'Authentification │
│ - HMAC-SHA1 ou autre │
└──────────────────────────────────────┘
Contenu Chiffré:
✓ Charge utile RTP (données média)
✗ En-tête RTP (non chiffré - pour routage)
Contenu Authentifié:
✓ En-tête RTP + charge utile chiffrée
Canaux de Données (DataChannel)
SCTP sur DTLS sur UDP
Pile de Protocoles des Canaux de Données:
Couche Application: DataChannel API
↓
Couche Transport: SCTP (Stream Control Transmission Protocol)
↓
Couche Sécurité: DTLS
↓
Couche Réseau: ICE + UDP + IP
Pourquoi SCTP?
✓ Préserver les frontières de messages (pas comme flux TCP)
✓ Fiabilité optionnelle (retransmission configurable)
✓ Ordre optionnel (tri configurable)
✓ Support multi-flux (plusieurs flux sur une connexion)
✓ Contrôle de congestion
Fonctionnalités SCTP:
1. Fiable/Non fiable optionnel
2. Ordonné/Désordonné optionnel
3. Frontières de messages
4. Multiplexage
Résumé
Points Clés
✓ WebRTC utilise le transport UDP
✓ ICE gère la traversée NAT
✓ DTLS fournit le chiffrement
✓ SRTP protège les médias
✓ SCTP supporte les canaux de données
Pile de Transport:
Application → RTP/SCTP → SRTP/DTLS → ICE → UDP → IP
Types de Candidats:
Host > Server Reflexive > Relay
Chiffrement:
DTLS négocie les clés → SRTP chiffre les médias
Canaux de Données:
Fiable/Non fiable configurable
Ordonné/Désordonné configurable
Contrôle de Congestion:
Algorithme GCC
Sondage de bande passante
Adaptation de débit
Références
RFCs Connexes:
- [RFC 8835] Transports for WebRTC ← Ce document
- [RFC 8445] ICE
- [RFC 6347] DTLS 1.2
- [RFC 3711] SRTP
- [RFC 4960] SCTP
- [RFC 8831] WebRTC Data Channels
Résumé: La pile de transport WebRTC construit une infrastructure de communication temps réel sécurisée et efficace sur UDP non fiable grâce à la combinaison sophistiquée d'ICE, DTLS et SRTP. Comprendre ces protocoles de couche transport est la clé pour maîtriser WebRTC!