SIP : Session Initiation Protocol
Introduction
SIP est un protocole normalisé et standardisé par l'IETF qui a été conçu pour établir, modifier et terminer des sessions multimédia. Il se charge de l'authentification et la localisation des multiples participants. Il se charge également de la négociation sur les types de média utilisables par les différents utilisateurs. SIP ne transporte pas les données échangées durant la session comme la voix ou la vidéo. SIP étant indépendant de la transmission des données, tout type de données et de protocoles peut être utilisé pour cet échange. Cependant le protocole RTP (Real-time Transport Protocol) assure le plus souvent les sessions audio et vidéo.
SIP est le standard ouvert de VoIP (Voice Over IP, voix sur IP) interopérable le plus étendu et vise à devenir LE standard des télécommunications multimédia (son, image...). SIP n'est donc pas seulement destiné à la VoIP mais pour de nombreuses autres applications telles que la visiophonie, la messagerie instantanée, la réalité virtuelle ou même les jeux vidéo.
1. Fonctionnement
SIP partage de nombreuses similitudes avec le protocole HTTP comme le codage en ASCII et les codes de réponse.
Un utilisateur peut se connecter avec les utilisateurs d’une session déjà ouverte. Pour ouvrir une session, un utilisateur émet une invitation transportant un descripteur de session permettant aux utilisateurs souhaitant communiquer de s’accorder sur la compatibilité de leur média, SIP permet donc de relier des stations mobiles en transmettant ou redirigeant les requêtes vers la position courante de la station appelée.
a. Fonctionnalités :
- Localisation du terminal appelé.
- Analyse du profil et des ressources du destinataire.
- Négociation du type de média (voix, vidéo, données…), et des paramètres de
communication.
- Disponibilité de l’appelé : détermine si le poste appelé souhaite communiquer, et
autorise l’appelant à le contacter.
- Etablissement et suivi de l’appel : avertit les parties appelant et appelé de la
demande d’ouverture de session, gestion du transfert et de la fermeture des appels.
b. Architecture
Avec SIP, les utilisateurs qui ouvrent une session peuvent communiquer en mode point à point, en mode diffusif ou dans un mode combinant ceux-ci. SIP permet donc l’ouverture de sessions en mode :
- point-à-point : communication entre 2 machines, on parle d’unicast (a)
->téléphonie sur IP
- diffusif : plusieurs utilisateurs en multicast, via une unité de contrôle M.C.U (Multipoint Control Unit) (b)
->visioconférence
->forum
- combinatoire : plusieurs utilisateurs pleinement interconnectés en multicast via un réseau à maillage complet de connexions (c)
c. Ouverture d’une session
Les différents éléments intervenant dans l’ouverture d’une session :
- Suivant nature des échanges, choix des protocoles les mieux adaptés (RSVP, RTP, RTCP, SAP, SDP).
- Détermination du nombre de sessions : par exemple, pour véhiculer de la vidéo, 2
sessions doivent être ouvertes (l’une pour l’image et l’autre pour la vidéo).
- Chaque utilisateur et sa machine est identifié par une adresse que l’on nomme
URL SIP et qui se présente comme une URL Mailto :
Informations_utilisateur@domaine paramètres en-têtes
Informations_utilisateur : nom d’utilisateur ou numéro de téléphone
Domaine : nom de domaine (lip6.fr) ou adresse IP : port
Paramètres : transport = udp ou tcp / user = phone ou IP / method = INVITE, ACK, OPTIONS, BYE, CANCEL, REGISTER / ttl = 0 à 255 /maddr = adresse IP de multicast…
En-têtes : hname = hvalue & hname = hvalue…
- Requête URI : permet de localiser le proxy server auquel est rattaché la machine
de l’appelé
- Requête SIP : une fois le client (machine appelante) connecté à un serveur SIP
distant, il peut lui adresser une ou plusieurs requêtes SIP et recevoir une ou
plusieurs réponses de ce serveur. Les réponses contiennent certains champs
identiques à ceux des requêtes, tels que : Call-ID, Cseq, To et From.
d. Description des méthodes de requêtes
Les échanges entre un terminal appelant et un terminal appelé se font par l’intermédiaire de requêtes :
- INVITE : cette requête indique que l’application (ou utilisateur) correspondante à
l’URL SIP spécifié est invité à participer à une session. Le corps du message décrit
cette session (par ex : média supportés par l’appelant ). En cas de réponse
favorable, l’invité doit spécifier les médias qu’il supporte.
- ACK : permet de confirmer que le terminal appelant a bien reçu une réponse
définitive à une requête INVITE.
- OPTIONS : un proxy server en mesure de contacter un terminal appelé, doit
répondre à une requête OPTIONS en précisant ses capacités à contacter le même
terminal.
- BYE : cette requête est utilisée par le terminal de l’appelé à fin de signaler qu’il
souhaite mettre un terme à la session.
- CANCEL : cette requête est envoyée par un terminal ou un proxy server afin
d’annuler une requête non validée par une réponse finale :
ðSi une machine ayant été invitée à participer à une session, et ayant accepté
l’invitation ne reçoit pas de requête ACK, alors elle émet une requête CANCEL.
- REGISTER : cette méthode est utilisée par un client pour enregistrer son adresse
auprès du serveur auquel il est relié.
e. Sécurité et Authentification
Les messages SIP peuvent contenir des données confidentielles, en effet le protocole SIP
possède 3 mécanismes de cryptage :
- Cryptage de bout en bout du Corps du message SIP et de certains champs d’en-tête
sensibles aux attaques.
- Cryptage au saut par saut (hop by hop) à fin d’empêcher des pirates de savoir qui
appelle qui.
- Cryptage au saut par saut du champ d’en-tête Via pour dissimuler la route qu’a
emprunté la requête.
De plus, à fin d’empêcher à tout intrus de modifier et retransmettre des requêtes ou réponses SIP, des mécanismes d’intégrité et d’authentification des messages sont mis en place. Et pour des messages SIP transmis de bout en bout, des clés publiques et signatures sont utilisées par SIP et stockées dans les champs d’en-tête Authorization.
Une autre attaque connue avec TCP ou UDP est le « deny of service », lorsqu’un Proxy Server intrus renvoie une réponse de code 6xx au client (signifiant un échec général, la requête ne peut être traitée). Le client peut ignorer cette réponse. Si il ne l’ignore pas et émet une requête vers le serveur "régulier" auquel il était relié avant la réponse du serveur "intrus", la requête aura de fortes chances d’atteindre le serveur intrus et non son vrai destinataire.
f. Les Users Agents.
Les User Agents désignent les agents que l'on retrouve dans les téléphones SIP, les softphones (logiciels de téléphonie sur IP) des ordinateurs et PDA ou les passerelles SIP. En théorie, on peut établir des sessions directement entre deux User Agents, deux téléphones par exemple. Mais cela nécessite de connaître l'adresse IP du destinataire. Cela n'est pas l'idéal car une adresse IP peut ne pas être publique (derrière un NAT) ou changer et elle est bien plus compliquée à retenir qu'une URI. Les User Agents peuvent donc s'enregistrer auprès de Registrars pour signaler leur emplacement courant, c'est à dire leur adresse IP.
g. Les registrars
Le Registrar est un serveur qui gère les requêtes REGISTER envoyées par les Users Agents pour signaler leur emplacement courant. Ces requêtes contiennent donc une adresse IP, associée à une URI, qui seront stockées dans une base de données. Les URI SIP sont très similaires dans leur forme à des adresses email : SIP:utilisateur@domaine.com Généralement, des mécanismes d'authentification permettent d'éviter que quiconque puisse s'enregistrer avec n'importe quelle URI.
h. Les Proxy
Un Proxy SIP sert d'intermédiaire entre deux User Agents qui ne connaissent pas leurs emplacements respectifs (adresse IP). En effet, l'association URI-Adresse IP a été stockée préalablement dans une base de données par un Registrar. Le Proxy peut donc interroger cette base de données pour diriger les messages vers le destinataire.
Un petit exemple concret pour bien comprendre: vous n'êtes qu'un pauvre internaute connecté temporairement grâce à un modem 56k. Votre machine n'a pas de nom de domaine connu et votre adresse IP change à chaque nouvelle connexion. Il est impossible pour vos amis de vous joindre car ils ne peuvent deviner votre adresse IP, à moins que vous ne leur donniez en envoyant un courriel, par exemple. Pour palier à ce problème, vous pouvez demander à avoir un compte sur un serveur SIP connu de vos amis, qui lui est fixe et tout le temps connecté. Pour cela, spécifiez l'adresse du serveur dans la boite de propriété, section SIP. Cette adresse est par exemple <SIP:serveur_exemple.com> et votre nom d'utilisateur est “Bob”. Linphone va alors envoyer au serveur un message pour l'informer de la correspondance entre l'adresse <SIP:bob@serveur_exemple.com> et votre adresse IP actuelle. Désormais vos amis peuvent vous appeler en utilisant cette nouvelle adresse, leurs appels seront alors automatiquement redirigés vers votre machine. Il n'ont plus besoin de connaitre votre adresse IP qui change tout le temps pour vous joindre. Bien sur, <SIP:serveur_exemple.com> est supposée être bien connue de tout vos amis.
2. Avantages et inconvénients de SIP
a. Avantages
- Ouvert : les protocoles et documents officiels sont détaillés et accessibles à tous en téléchargement
- Standard : l'IETF a normalisé le protocole et son évolution continue par la création ou l'évolution d'autres protocoles qui fonctionnent avec SIP
- Simple : SIP est simple voire simpliste et très similaire à HTTP
- P2P : sur un LAN, SIP fonctionne complètement en P2P (encore plus facilement avec l'intégration de Zeroconf), ce n'est pas le cas pour l'établissement de sessions entre deux pairs séparés par un NAT
- Flexible : SIP est également utilisé pour tout type de sessions multimédia (voix, vidéo, mais aussi musique, réalité virtuelle, etc.)
- Téléphonie sur réseaux publics : il existe de nombreuses passerelles (services payants) vers le réseau public de téléphonie (RTC, GSM, etc.) permettant d'émettre ou de recevoir des appels vocaux
- Points communs avec H323 : l'utilisation du protocole RTP et quelques codecs son et vidéo sont en commun
b. inconvénients
- Basé sur l'adresse IP : SIP ne traverse pas les NAT, mais cela peut être résolu en déployant des mécanismes client-serveur supplémentaires comme STUN ou en couplant SIP avec Jabber
- Mauvaise implémentation : une mauvaise implémentation ou une implémentation incomplète du protocole SIP dans les User Agents peut perturber le fonctionnement ou générer du trafic superflu sur le réseau.
- Existant : H323 (standard et ouvert) et Skype (propriétaire) bénéficient de leur effet réseau respectif, bien que H323 tende à disparaître au profit de SIP
- Présence et messagerie instantanée : SIP montre un certain nombre de faiblesses dans la gestion de la présence et la messagerie instantanée, mais l'intégration du standard ouvert spécialisé Jabber résout la plupart de ces problèmes
- Faible nombre d'utilisateurs : SIP est encore peu connu et utilisé par le grand public, n'ayant pas atteint une masse critique, il ne bénéficie pas de l'effet réseau
Conclusion
SIP est un protocole simple, rapide et efficace. De plus, malgré sa légèreté d’utilisation, il est très complet. Il inclut aussi une partie sécurité importante qui en fait un protocole fiable et utilisable dans de nombreux cas d’utilisation.