Le squelette d'un message.
Sept en-têtes obligatoires structurent tout message SIP. Connaître ces sept, c'est lire 90 % des traces sans avoir à chercher.
Via — la route retour.
Chaque proxy traversé ajoute son propre Via au sommet de la pile. Quand la réponse revient, elle redescend la pile : chaque proxy lit son Via, le retire, et transmet au précédent.
Via: SIP/2.0/UDP proxy.lacroix.tv:5060;branch=z9hG4bK-abc Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-7a1f
Le branch commence toujours par z9hG4bK. C'est une signature magique qui dit : je suis un SIP RFC 3261, identifie ma transaction par ce branch. Au-delà du préfixe, c'est aléatoire.
From et To.
Deux URI logiques. From est l'expéditeur logique, To est le destinataire logique. Logique, parce que la route réelle peut passer par dix proxies : From et To restent inchangés tout du long.
From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com>;tag=b2c1
Le tag From est généré par l'appelant à la création de la requête. Le tag To est ajouté par le destinataire à la première réponse non-100. Ces deux tags, plus le Call-ID, forment l'identité du dialogue.
Call-ID.
Identifiant unique du dialogue, généré à la création de la première requête. Forme typique : une chaîne aléatoire suivie de @ et du host de l'expéditeur.
Call-ID: 2c2e9f2c-3b7a-4d1e-8f6b@lacroix.tv
Un seul Call-ID pour tout le dialogue, du premier INVITE au dernier BYE. Pour filtrer une trace Wireshark sur un seul appel :
sip.Call-ID == "2c2e9f2c-3b7a-4d1e-8f6b@lacroix.tv"
CSeq.
Un entier croissant et la méthode associée. Sert à : ordonner les requêtes dans un dialogue, distinguer les retransmissions, associer chaque réponse à la requête qu'elle acquitte.
CSeq: 1 INVITE CSeq: 2 BYE
L'ACK garde le numéro de l'INVITE qu'il acquitte (CSeq 1 ACK). En revanche un re-INVITE ou un BYE incrémente.
Contact.
L'URI à laquelle envoyer les requêtes directes à venir. C'est ce qu'Alice écrit pour dire : une fois le dialogue établi, ne passe plus par le proxy, viens me trouver ici.
Contact: <sip:alice@192.0.2.4:5060>
Contraste avec From : From est logique (identité), Contact est physique (route). Une même identité peut avoir plusieurs Contact actifs si plusieurs appareils sont enregistrés.
Max-Forwards.
Compteur de sauts. Initialisé à 70, décrémenté par chaque proxy qui relaie. Quand il atteint 0, le proxy retourne un 483 Too Many Hops. C'est le TTL du SIP : protection contre les boucles de routage.
Max-Forwards: 70
Quelques utiles de plus.
| En-tête | Rôle | RFC |
|---|---|---|
| Allow | Liste des méthodes SIP supportées par ce UA. | 3261 |
| Supported | Extensions optionnelles que le UA comprend (timer, replaces, path). | 3261 |
| User-Agent | Identifiant du logiciel/firmware. Linphone/5.3.0. | 3261 |
| Expires | Durée de validité pour un REGISTER ou une souscription. | 3261 |
| Record-Route | Force le passage par certains proxies pour toute la durée du dialogue. | 3261 |
| Route | Le chemin réel à suivre, dérivé des Record-Route. | 3261 |
| P-Asserted-Identity | Identité vérifiée par le réseau opérateur, distincte du From déclaré. | 3325 |
| Refer-To | Cible d'un transfert d'appel (REFER). | 3515 |
« Sept en-têtes obligatoires, soixante optionnels. Apprenez les sept. » — principe directeur
Retour à : L'aperçu du protocole →