L'appel, six répliques.
Un appel SIP réussi tient en six messages côté signalisation. Les voici dans l'ordre, avec ce que chacun signifie pour les deux parties.
L'INVITE.
Alice envoie une requête. Elle inclut un SDP qui décrit le canal audio qu'elle propose — codec, port d'écoute, adresse IP.
INVITE sip:bob@sip.ippi.com SIP/2.0 Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-7a1f Max-Forwards: 70 From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com> Call-ID: 2c2e9f2c@lacroix.tv CSeq: 1 INVITE Contact: <sip:alice@192.0.2.4:5060> Content-Type: application/sdp v=0 o=alice 2890844526 2890844526 IN IP4 192.0.2.4 m=audio 49170 RTP/AVP 0 8 96 a=rtpmap:96 opus/48000/2
L'INVITE est la seule méthode SIP qui demande un ACK final — parce que c'est la seule qui peut faire sonner un téléphone, et qu'il faut une confirmation explicite que l'utilisateur a bien décroché des deux côtés.
100 Trying.
Le proxy d'Alice (ou le UAS de Bob) acquitte la réception. Ça stoppe les retransmissions de l'INVITE : l'UDP n'étant pas fiable, Alice retransmet son INVITE toutes les 500 ms tant qu'elle n'a pas reçu une réponse provisoire. Le 100 dit : j'ai vu, je m'en occupe.
SIP/2.0 100 Trying Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-7a1f From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com> Call-ID: 2c2e9f2c@lacroix.tv CSeq: 1 INVITE
180 Ringing.
Le téléphone de Bob sonne. Alice reçoit cette réponse et joue un ringback tone local — le bip-bip-bip d'attente qu'on entend dans le combiné. Sauf si Bob renvoie un 183 Session Progress avec une description SDP : alors le ringback vient du réseau, en RTP, avant même que Bob décroche.
SIP/2.0 180 Ringing Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-7a1f From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com>;tag=b2c1 Call-ID: 2c2e9f2c@lacroix.tv CSeq: 1 INVITE Contact: <sip:bob@198.51.100.7:5060>
Notez le tag=b2c1 sur le To. C'est le tag de Bob, ajouté à partir de cette réponse. Désormais le triplet Call-ID + From-tag + To-tag identifie le dialogue précoce. Si Alice annule, son CANCEL doit citer ces trois éléments.
200 OK.
Bob décroche. Le 200 contient son propre SDP — la réponse à l'offre d'Alice. Bob y annonce le codec qu'il accepte parmi ceux proposés, son adresse IP et son port RTP. À partir de cet instant, les deux extrémités connaissent la totalité du contrat média.
SIP/2.0 200 OK Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-7a1f From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com>;tag=b2c1 Call-ID: 2c2e9f2c@lacroix.tv CSeq: 1 INVITE Contact: <sip:bob@198.51.100.7:5060> Content-Type: application/sdp v=0 o=bob 3812744426 3812744426 IN IP4 198.51.100.7 m=audio 38214 RTP/AVP 96 a=rtpmap:96 opus/48000/2
ACK.
Alice confirme avoir reçu le 200. C'est la troisième poignée de main. Sans ACK, Bob considère que l'appel a échoué et retransmettra son 200 jusqu'à expiration. Une fois l'ACK reçu, le dialogue est confirmé et le RTP commence à couler.
ACK sip:bob@198.51.100.7:5060 SIP/2.0 Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-9d2e From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com>;tag=b2c1 Call-ID: 2c2e9f2c@lacroix.tv CSeq: 1 ACK
BYE.
L'un des deux raccroche. Peu importe lequel — le BYE peut venir d'Alice ou de Bob. Il est acquitté par un 200 OK et le dialogue est clos. Le flux RTP s'arrête.
BYE sip:bob@198.51.100.7:5060 SIP/2.0 Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bK-c0fa From: "Alice" <sip:alice@lacroix.tv>;tag=a3f7 To: "Bob" <sip:bob@sip.ippi.com>;tag=b2c1 Call-ID: 2c2e9f2c@lacroix.tv CSeq: 2 BYE
Le CSeq est passé à 2 : c'est la deuxième transaction du dialogue, après l'INVITE initial. Le CSeq numérote les transactions, pas les messages.
« Six messages texte pour un appel téléphonique. Le reste est de l'air. » — note de lecture
Suivant : S'inscrire au registrar →