SIP (Session Initiation Protocol)
Informations de base
Le SIP (Session Initiation Protocol) est un protocole de signalisation et de contrôle d'appel largement utilisé pour établir, modifier et terminer des sessions multimédias, y compris la voix, la vidéo et la messagerie instantanée, sur des réseaux IP. Développé par le Groupe de travail d'ingénierie de l'Internet (IETF), le SIP est défini dans le RFC 3261 et est devenu la norme de facto pour la VoIP et les communications unifiées.
Certaines caractéristiques clés du SIP comprennent :
Protocole basé sur le texte : Le SIP est un protocole basé sur le texte, ce qui le rend lisible par l'homme et plus facile à déboguer. Il est basé sur un modèle de requête-réponse, similaire à HTTP, et utilise des méthodes telles que INVITE, ACK, BYE et CANCEL pour contrôler les sessions d'appel.
Scalabilité et flexibilité : Le SIP est hautement scalable et peut être utilisé dans des déploiements à petite échelle ainsi que dans des environnements d'entreprise de grande envergure et de qualité opérateur. Il peut être facilement étendu avec de nouvelles fonctionnalités, le rendant adaptable à divers cas d'utilisation et exigences.
Interopérabilité : L'adoption généralisée du SIP et sa normalisation garantissent une meilleure interopérabilité entre différents appareils, applications et fournisseurs de services, favorisant une communication transparente sur différentes plateformes.
Conception modulaire : Le SIP fonctionne avec d'autres protocoles comme le RTP (Real-time Transport Protocol) pour la transmission multimédia et le SDP (Session Description Protocol) pour décrire les sessions multimédias. Cette conception modulaire permet une plus grande flexibilité et compatibilité avec différents types de médias et codecs.
Serveurs proxy et de redirection : Le SIP peut utiliser des serveurs proxy et de redirection pour faciliter le routage des appels et fournir des fonctionnalités avancées telles que le renvoi d'appels, le transfert d'appels et les services de messagerie vocale.
Présence et messagerie instantanée : Le SIP n'est pas limité à la communication vocale et vidéo. Il prend également en charge la présence et la messagerie instantanée, permettant une large gamme d'applications de communication unifiée.
Malgré ses nombreux avantages, le SIP peut être complexe à configurer et à gérer, en particulier lorsqu'il s'agit de problèmes de traversée NAT et de pare-feu. Cependant, sa polyvalence, sa scalabilité et son soutien étendu dans l'industrie en font un choix populaire pour la VoIP et la communication multimédia.
Méthodes SIP
Les méthodes SIP de base définies dans le RFC 3261 comprennent :
INVITE : Utilisé pour initier une nouvelle session (appel) ou modifier une session existante. La méthode INVITE transporte la description de la session (généralement en utilisant SDP) pour informer le destinataire des détails de la session proposée, tels que les types de médias, les codecs et les protocoles de transport.
ACK : Envoyé pour confirmer la réception d'une réponse finale à une demande INVITE. La méthode ACK garantit la fiabilité des transactions INVITE en fournissant un accusé de réception de bout en bout.
BYE : Utilisé pour mettre fin à une session établie (appel). La méthode BYE est envoyée par l'une ou l'autre des parties de la session pour indiquer qu'elles souhaitent mettre fin à la communication.
CANCEL : Envoyé pour annuler une demande INVITE en attente avant l'établissement de la session. La méthode CANCEL permet à l'expéditeur d'annuler une transaction INVITE s'il change d'avis ou s'il n'y a pas de réponse du destinataire.
OPTIONS : Utilisé pour interroger les capacités d'un serveur SIP ou d'un agent utilisateur. La méthode OPTIONS peut être envoyée pour demander des informations sur les méthodes prises en charge, les types de médias ou d'autres extensions sans établir réellement une session.
REGISTER : Utilisé par un agent utilisateur pour enregistrer son emplacement actuel auprès d'un serveur d'enregistrement SIP. La méthode REGISTER aide à maintenir une correspondance à jour entre l'URI SIP d'un utilisateur et son adresse IP actuelle, permettant le routage et la livraison des appels.
Notez que pour appeler quelqu'un, il n'est pas nécessaire d'utiliser le REGISTER pour quoi que ce soit.
Cependant, il est possible qu'en vue d'effectuer un INVITE, l'appelant doit s'authentifier d'abord ou il recevra une réponse 401 Unauthorized
.
En plus de ces méthodes de base, il existe plusieurs méthodes d'extension SIP définies dans d'autres RFC, telles que :
SUBSCRIBE : Définie dans le RFC 6665, la méthode SUBSCRIBE est utilisée pour demander des notifications sur l'état d'une ressource spécifique, telle que la présence d'un utilisateur ou l'état d'un appel.
NOTIFY : Également définie dans le RFC 6665, la méthode NOTIFY est envoyée par un serveur pour informer un agent utilisateur abonné des changements dans l'état d'une ressource surveillée.
REFER : Définie dans le RFC 3515, la méthode REFER est utilisée pour demander que le destinataire effectue un transfert ou fasse référence à un tiers. Cela est généralement utilisé pour les scénarios de transfert d'appel.
MESSAGE : Définie dans le RFC 3428, la méthode MESSAGE est utilisée pour envoyer des messages instantanés entre des agents utilisateurs SIP, permettant une communication basée sur du texte dans le cadre du SIP.
UPDATE : Définie dans le RFC 3311, la méthode UPDATE permet de modifier une session sans affecter l'état du dialogue existant. Cela est utile pour mettre à jour les paramètres de session, tels que les codecs ou les types de médias, pendant un appel en cours.
PUBLISH : Définie dans le RFC 3903, la méthode PUBLISH est utilisée par un agent utilisateur pour publier des informations sur l'état d'un événement à un serveur, le rendant disponible à d'autres parties intéressées.
Codes de réponse SIP
1xx (Réponses provisoires) : Ces réponses indiquent que la demande a été reçue et que le serveur continue de la traiter.
100 Trying : La demande a été reçue, et le serveur y travaille.
180 Ringing : Le destinataire est alerté et prendra l'appel.
183 Session Progress : Fournit des informations sur l'avancement de l'appel.
2xx (Réponses réussies) : Ces réponses indiquent que la demande a été reçue, comprise et acceptée avec succès.
200 OK : La demande a réussi, et le serveur l'a exécutée.
202 Accepted : La demande a été acceptée pour traitement, mais n'a pas encore été complétée.
3xx (Réponses de redirection) : Ces réponses indiquent qu'une action supplémentaire est nécessaire pour répondre à la demande, généralement en contactant une ressource alternative.
300 Multiple Choices : Il y a plusieurs options disponibles, et l'utilisateur ou le client doit en choisir une.
301 Moved Permanently : La ressource demandée a reçu un nouvel URI permanent.
302 Moved Temporarily : La ressource demandée est temporairement disponible à un URI différent.
305 Use Proxy : La demande doit être envoyée à un proxy spécifié.
4xx (Réponses d'erreur client) : Ces réponses indiquent que la demande contient une mauvaise syntaxe ou ne peut pas être satisfaite par le serveur.
400 Bad Request : La demande était mal formée ou invalide.
401 Unauthorized : La demande nécessite une authentification utilisateur.
403 Forbidden : Le serveur a compris la demande mais refuse de la satisfaire.
404 Not Found : La ressource demandée n'a pas été trouvée sur le serveur.
408 Request Timeout : Le serveur n'a pas reçu une demande complète dans le délai qu'il était prêt à attendre.
486 Busy Here : Le destinataire est actuellement occupé et incapable de prendre l'appel.
5xx (Réponses d'erreur serveur) : Ces réponses indiquent que le serveur n'a pas pu satisfaire une demande valide.
500 Internal Server Error : Le serveur a rencontré une erreur lors du traitement de la demande.
501 Not Implemented : Le serveur ne prend pas en charge la fonctionnalité requise pour répondre à la demande.
503 Service Unavailable : Le serveur est actuellement incapable de traiter la demande en raison de travaux de maintenance ou de surcharge.
6xx (Réponses d'échec global) : Ces réponses indiquent que la demande ne peut être satisfaite par aucun serveur.
600 Busy Everywhere : Toutes les destinations possibles pour l'appel sont occupées.
603 Decline : Le destinataire ne souhaite pas participer à l'appel.
604 Does Not Exist Anywhere : La ressource demandée n'est disponible nulle part dans le réseau.
Exemples
Exemple d'INVITE SIP
Exemple d'enregistrement SIP
La méthode REGISTER est utilisée dans le protocole d'initiation de session (SIP) pour permettre à un agent utilisateur (UA), tel qu'un téléphone VoIP ou un softphone, de enregistrer son emplacement auprès d'un serveur registraire SIP. Ce processus permet au serveur de savoir où router les demandes SIP entrantes destinées à l'utilisateur enregistré. Le serveur registraire fait généralement partie d'un serveur proxy SIP ou d'un serveur d'enregistrement dédié.
Voici un exemple détaillé des messages SIP impliqués dans un processus d'authentification REGISTER :
Requête REGISTER initiale de l'UA au serveur registraire :
Le message REGISTER initial est envoyé par l'UA (Alice) au serveur de registre. Il inclut des informations importantes telles que la durée d'enregistrement souhaitée (Expires), l'URI SIP de l'utilisateur (sip:alice@example.com), et l'adresse de contact de l'utilisateur (sip:alice@192.168.1.100:5060).
Réponse 401 Unauthorized du serveur de registre :
Le serveur de registre répond avec un message "401 Unauthorized", qui inclut un en-tête "WWW-Authenticate". Cet en-tête contient les informations nécessaires pour que l'UA s'authentifie, telles que le domaine d'authentification, le nonce et l'algorithme.
Requête REGISTER avec des identifiants d'authentification:
Le UA envoie une autre demande REGISTER, cette fois en incluant l'en-tête "Authorization" avec les informations d'identification nécessaires, telles que le nom d'utilisateur, le royaume, le nonce et une valeur de réponse calculée en utilisant les informations fournies et le mot de passe de l'utilisateur.
Voici comment le réponse d'autorisation est calculée :
Réponse d'inscription réussie du serveur de registre :
Après que le serveur d'enregistrement vérifie les informations d'identification fournies, il envoie une réponse "200 OK" pour indiquer que l'enregistrement a réussi. La réponse inclut les informations de contact enregistrées et l'heure d'expiration de l'enregistrement. À ce stade, l'agent utilisateur (Alice) est enregistré avec succès auprès du serveur d'enregistrement SIP, et les demandes SIP entrantes pour Alice peuvent être acheminées vers l'adresse de contact appropriée.
Exemple d'appel
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-3b12c48a60522cd163d8f44ef4ee564a601966ef%252Fimage%2520%28666%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=cda82d34&sv=1)
Il n'est pas mentionné, mais l'Utilisateur B doit avoir envoyé un message REGISTER à Proxy 2 avant de pouvoir recevoir des appels.
Last updated