knowledge-base
WebRTC vs SIP: wanneer welke kiezen
Een evergreen kennisbankartikel uit de pronk.it-redactie — WebRTC vs SIP: wanneer welke kiezen.
TL;DR
- SIP is een signaling‑protocol dat sessies opzet, wijzigt en beëindigt; WebRTC is een browser‑API die peer‑to‑peer media‑ en datastromen mogelijk maakt zonder extra plugins.
- SIP zit vaak achter een PBX of SBC en vereist een aparte signaling‑server; WebRTC bevat signaling niet en laat de ontwikkelaar kiezen voor een eigen mechanisme (bijv. WebSocket, SIP‑over‑WebSocket of een ander protocol).
- Kiezen tussen de twee hangt af van de vereisten voor interoperabiliteit met bestaande telecom‑infrastructuur, de gewenste client‑omgeving (native‑app vs. browser) en de complexiteit die je zelf wilt beheren.
Inleiding
Session Initiation Protocol (SIP) en Web Real‑Time Communication (WebRTC) zijn beide fundamentele technologieën voor realtime communicatie over IP‑netwerken, maar ze dienen verschillende lagen van de stack. SIP is een gestandaardiseerd signaling‑protocol (RFC 3261 en gerelateerde RFC’s) dat vooral wordt gebruikt door VoIP‑centrales, SIP‑telefoons en sessie‑border‑controllers om oproepen tot stand te brengen en te beheren. WebRTC daarentegen is een verzameling JavaScript‑API’s en native‑code onderdelen die browsers en mobiele apps in staat stellen om directe audio‑, video‑ en datakanalen op te zetten zonder tussenkomst van een plugin of aparte client‑software.
Hoewel beide technologieën uiteindelijk media‑stromen kunnen transporteren, verschillen ze sterk in hoe signaling wordt afgehandeld, welke infrastructuur nodig is en welke gebruiksscenario’s het meest geschikt zijn. In dit artikel worden de technische verschillen, voor‑ en nadelen en praktische richtlijnen vergeleken, zodat VoIP‑ingenieurs, PBX‑beheerders en technische besluitvormers een gefundeerde keuze kunnen maken tussen een puur SIP‑gebaseerde oplossing, een WebRTC‑gebaseerde oplossing of een hybride architectuur waarin beide elkaar aanvullen.
Technische grondslagen
SIP werkt op de toepassingslaag en maakt gebruik van tekst‑gebaseerde berichten die sterk lijken op HTTP‑verzoeken en -antwoorden. Een typisch SIP‑dialog begint met een INVITE‑verzoek, wordt bevestigd met een 200 OK‑antwoord en afgesloten met een BYE. Het protocol definieert een set methoden (INVITE, ACK, BYE, REGISTER, OPTIONS, SUBSCRIBE, NOTIFY, MESSAGE, INFO, UPDATE, PRACK) en een reeks statuscodes (1xx‑6xx) die de voortgang van een sessie aangeven. Het lichaam van een SIP‑bericht bevat vaak een Session Description Protocol (SDP) blok (RFC 4566) waarin codecs, poorten en mediaparameters worden onderhandeld.
WebRTC bestaat uit drie hoofd‑API’s:
- getUserMedia – toegang tot lokale microfoon en camera.
- RTCPeerConnection – onderhandeling en transport van media‑ en datakanalen via het ICE‑protocol (RFC 8445), DTLS‑versleuteling en SRTP/RTCP voor de mediastream.
- RTCDataChannel – willekeurige bi‑directionele data‑stroom gebaseerd op SCTP (RFC 4960).
In tegenstelling tot SIP bevat WebRTC geen ingebouwde signaling‑mechanisme; de ontwikkelaar moet zelf een weg kiezen om sessiebeschrijvingen (offer/answer) en controle‑berichten uit te wisselen. Dit kan gebeuren via WebSocket, HTTP‑polling, of zelfs via een bestaand SIP‑signaling‑kanaal (SIP‑over‑WebSocket). Omdat de media‑stack binnen de browser wordt afgehandeld, zijn er geen aparte plugins nodig en wordt gebruikgemaakt van de ingebouwde beveiligingsvoorzieningen van het browser‑sandboxmodel.
Signaling en mediawege
SIP signaling
SIP signaling wordt meestal afgehandeld door dedicated servers: registrars, proxy’s, redirect servers en session‑border‑controllers (SBC’s). Een typische call‑flow ziet er als volgt uit:
- UE‑A stuurt een REGISTER naar de registrar om zijn adres bekend te maken.
- UE‑A stuurt een INVITE naar de proxy, die het verzoek doorstuurt naar UE‑B (via een eventuele SBC voor NAT‑traversal en interworking).
- UE‑B antwort met 180 Ringing, vervolgens 200 OK met SDP.
- UE‑A bevestigt met ACK; de mediastroom wordt direct tussen de UE’s opgezet (of via een media‑relay in de SBC).
- Bij beëindiging stuurt een van de partijen een BYE, waarna de andere met 200 OK reageert.
Omdat signaling en media vaak gescheiden zijn, kan een SBC de media‑stroom transcoderen, opnemen of statistieken verzamelen zonder de signaling‑path te verstoren.
WebRTC signaling
WebRTC laat de keuze voor signaling volledig aan de applicatie. Een veelgebruikt patroon is een WebSocket‑verbinding naar een signaling‑server die JSON‑berichten uitwisselt. Een minimale stroom kan er als volgt uitzien:
- Client A maakt een RTCPeerConnection aan, genereert een offer (via
createOffer) en stuurt dit via het signaling‑kanaal naar Client B. - Client B ontvangt het offer, roept
setRemoteDescriptionaan, genereert een answer (createAnswer) en stuurt dit terug. - Beide partijen wisselen ICE‑candidates uit (via hetzelfde signaling‑kanaal) totdat een geldig paar is gevonden.
- Na succesvolle ICE‑completed‑event wordt de DTLS‑handshake uitgevoerd, waarna SRTP‑versleutelde media‑stromen worden opgezet.
- Data‑kanalen kunnen tegelijkertijd worden geopend via
createDataChannel.
Omdat signaling losstaat van de media‑stack, kun je dezelfde signaling‑server gebruiken voor verschillende soorten clients (browser, native SDK, SIP‑gateway) zolang het formaat van de uitgewisselde berichten overeenkomen.
Browser- en apparaatondersteuning
SIP is een protocol‑agnostische standaard; elke client die een SIP‑stack kan implementeren (softphone, IP‑phone, PBX, mobiele app) kan er mee communiceren. Er zijn talloze open‑source en commerciële SIP‑bibliotheken (bijv. PJSIP, Sofia‑SIP, linphone) en veel hardware‑telefoons ondersteunen SIP natiu.
WebRTC wordt standaard ondersteund in alle moderne desktop‑browsers (Chrome, Firefox, Safari, Edge) en de meeste mobiele browsers (Chrome voor Android, Safari voor iOS). Er bestaan daarnaast native WebRTC‑SDK’s voor Android (WebRTC‑native) en iOS, waardoor dezelfde media‑stack ook buiten de browser kan worden gebruikt. Belangrijk is dat WebRTC vereist dat de client toegang heeft tot een betrouwbare signaling‑server en dat firewall‑regels UDP‑poorten voor ICE‑candidates (typisch hoog‑nummerbereik) toelaten.
Beveiliging en privacy
SIP beveiliging
Standaard SIP gebruikt UDP of TCP zonder versleuteling. Beveiliging wordt toegevoegd op twee lagen:
- Transport‑laag beveiliging – SIP‑over‑TLS (aangeduid met het schema
sips:) versleutelt de gehele signaling‑stream (RFC 3261 hoofdstuk 26, RFC 4474 voor identity‑based authenticatie). - Media‑laag beveiliging – SRTP (Secure Real‑time Transport Protocol) versleutelt de RTP‑payload en wordt onderhandeld via SDP‑attributen
a=crypto(RFC 3711).
Voor een end‑to‑end beveiligde sessie moeten zowel signaling (sips:) als media (SRTP) versleuteld zijn. Daarnaast spelen authenticatie‑mechanismen zoals digest‑auth (RFC 3261 hoofdstuk 22) en token‑based schemes (bijv. OAuth‑2.0 voor SIP) een rol bij het voorkomen van ongeautoriseerde registraties.
WebRTC beveiliging
WebRTC dwingt beveiliging af op zowel signaling als media:
- Signaling – de ontwikkelaar moet zelf zorgen voor een versleutelde verbinding (bijv. WSS – WebSocket Secure) en eventuele authenticatie (tokens, cookies).
- Media – de RTCPeerConnection maakt standaard gebruik van DTLS‑handshake voor sleuteluitwisseling, waarna SRTP wordt gebruikt voor de audio‑ en videostromen (RFC 5763). Data‑kanalen maken gebruik van SCTP over DTLS.
Omdat de media‑stack binnen de browser draait, profiteert WebRTC automatisch van de sandbox‑beperkingen (zelfde‑origin‑policy, CORS) en van de browser‑matige updates voor cryptografische bibliotheken.
Praktische toepassingen en hybride architecturen
Zuiver SIP‑gebaseerde systemen
- Traditionele PBX‑installaties (Asterisk, FreeSWITCH, Cisco Unified Communications Manager).
- SIP‑trunks naar PSTN‑providers.
- Grote schaal carrier‑grade oplossingen waarbij SBC’s verantwoordelijk zijn voor load‑balancing, transcodering en lawful‑intercept.
Zuiver WebRTC‑gebaseerde systemen
- Browser‑gebaseerde klantenservice‑widgets (click‑to‑call, video‑support).
- Samenwerkingsplatforms waarbij gebruikers direct vanuit de browser een gesprek starten zonder software‑installatie.
- Mobiele apps die de native WebRTC‑SDK gebruiken voor een lichte VoIP‑client zonder aparte signaling‑stack.
Hybride benaderingen
Een veel voorkomend patroon is het gebruik van een SIP‑gateway die WebRTC‑clients via een signaling‑interface (bijv. SIP‑over‑WebSocket of een aangepast JSON‑protocol) verbindt met een bestaande SIP‑infrastructuur. Dit laat je profiteren van de rijke functies van een PBX (voicemail, conferentie‑bridges, call‑recording, IVR) terwijl je de gebruiksvriendelijkheid van WebRTC behoudt voor eind‑gebruikers in de browser.
Voorbeelden van hybride stromen:
- Browser‑client maakt een WebSocket‑verbinding naar een signaling‑server.
- Signaling‑server vertaalt de WebRTC‑offer/answer naar SIP‑INVITE/200 OK (met behulp van een B2BUA zoals Kamailio of Asterisk met
wsmodule). - De SIP‑kant zet de oproep door naar de PBX of naar een andere SIP‑endpoint.
- Media wordt, indien gewenst, doorgestuurd via een media‑relay (SBC) of blijft end‑to‑end tussen browser en de andere partij wanneer zowel beide WebRTC‑capable zijn.
Praktische checklist
- Controleer of je signaling‑transport versleuteld is (WSS voor WebRTC of sips:/TLS voor SIP) om afluisteren te voorkomen.
- Valideer dat de ICE‑candidates van beide partijen een geldig paar opleveren; gebruik STUN‑servers met bekende publieke adressen en, indien nodig, een TURN‑relay voor symmetrische NAT‑situaties.
- Zorg dat de SDP‑uitwisseling overeenkomende codecs bevat (bijv. Opus voor audio, VP8/VP9/H.264 voor video) om transcoding‑overhead te minimaliseren.
- Test de call‑flow met zowel succesvolle als falende scenario’s (bijv. 486 Busy Here, 503 Service Unavailable, ICE‑failed) en implementeer geschikte retry‑ of fallback‑logica.
- Log de volledige SIP‑ of signaling‑berichten (met verwijdering van gevoelige authenticatie‑data) voor latere analyse en probleemoplossing.
- Bij gebruik van een SBC of media‑gateway, controleer of transcodering alleen wordt ingezet wanneer het echt nodig is om CPU‑ en licentiekosten te beperken.
- Controleer of de firewall‑regels de benodigde poorten toelaten: SIP (5060/5061 TLS), WebSocket signaling (bijv. 8443), en een hoge‑nummer UDP‑bereik voor RTP/ICE (bijv. 10000‑20000).
- Verify dat je client‑ en server‑tijd correct is gesynchroniseerd (NTP) om problemen met verlopen certificaten of nonce‑waarden in digest‑auth te voorkomen.
Verder lezen
- RFC 3261: SIP – Session Initiation Protocol
- RFC 4566: SDP – Session Description Protocol
- RFC 8445: ICE – Interactive Connectivity Establishment
- RFC 5763: Framework for SIP-Based Media Encryption
- WebRTC 1.0: Real-time Communication Between Browsers – W3C Recommendation
Met deze informatie kun je een weloverwogen beslissing nemen of je een zuiver SIP‑oplossing, een WebRTC‑oplossing of een combinatie daarvan gaat implementeren, afhankelijk van de specifieke eisen van je organisatie met betrekking tot interoperabiliteit, gebruikerservaring en operationele complexiteit.