Aller au contenu principal

5.6. Machine d'états des pairs (Peer State Machine)

Cette section définit un automate fini que TOUTES les implémentations Diameter DOIVENT respecter. Chaque nœud Diameter DOIT suivre la machine ci-dessous pour chaque pair. Les actions multiples sont séparées par des virgules et peuvent se poursuivre sur la ligne suivante; idem pour l'état et l'état suivant.

Elle est étroitement liée à la machine d'états de [RFC3539], utilisée pour ouvrir, fermer, basculer, sonder et rouvrir les transports. [RFC3539] exige des messages watchdog pour sonder; pour Diameter, utiliser DWR et DWA.

Le préfixe I- désigne la connexion initiatrice (connectante), R- la connexion répondeur (écoute). Sans préfixe, l'événement ou l'action est le même sur l'une ou l'autre connexion.

Les états stables sont Closed, I-Open et R-Open; les autres sont transitoires. I-Open et R-Open diffèrent seulement par l'utilisation de la connexion initiatrice ou répondeur.

Le CER part toujours sur la connexion initiatrice juste après la réussite de la demande de connexion. Lors d'une élection (election), une des deux connexions se ferme. La connexion répondeur survit si l'Origin-Host local est lexicographiquement supérieur à celui du pair; sinon survit l'initiatrice. Tous les messages suivants utilisent la connexion restante. Le résultat sur un pair est l'inverse de l'autre.

Pour TLS/TCP et DTLS/SCTP, la poignée de main DEVRAIT commencer lorsque les deux extrémités sont en état fermé avant tout échange Diameter. La connexion sécurisée DEVRAIT être en place avant tout CER/CEA. Elle DEVRAIT être fermée quand la machine passe à fermé. Avec d'anciens répondeurs ne acceptant pas TLS à l'état fermé, la première tentative TLS échoue; l'initiateur PEUT alors utiliser TCP/SCTP puis négocier TLS une fois ouvert. Succès: trafic TLS; échec: les deux côtés passent à fermé.

La machine ne contraint que le comportement observable sur le fil.

Toute implémentation équivalente est conforme.

Table des transitions (State transition table)

state           event           action                  next state
-----------------------------------------------------------------
Closed Start I-Snd-Conn-Req Wait-Conn-Ack
R-Conn-CER R-Accept, R-Open
Process-CER,
R-Snd-CEA

Wait-Conn-Ack I-Rcv-Conn-Ack I-Snd-CER Wait-I-CEA
I-Rcv-Conn-Nack Cleanup Closed
R-Conn-CER R-Accept, Wait-Conn-Ack/Elect
Process-CER,
Elect
Timeout Error Closed

Wait-I-CEA I-Rcv-CEA Process-CEA I-Open
R-Conn-CER R-Accept, Wait-Returns
Process-CER,
Elect
I-Peer-Disc I-Disc Closed
I-Rcv-Non-CEA Error Closed
Timeout Error Closed

Wait-Conn-Ack/ I-Rcv-Conn-Ack I-Snd-CER,Elect Wait-Returns
Elect I-Rcv-Conn-Nack R-Snd-CEA R-Open
R-Peer-Disc R-Disc Wait-Conn-Ack
R-Conn-CER R-Reject Wait-Conn-Ack/Elect
Timeout Error Closed

Wait-Returns Win-Election I-Disc,R-Snd-CEA R-Open
I-Peer-Disc I-Disc, R-Snd-CEA R-Open
I-Rcv-CEA R-Disc I-Open
R-Peer-Disc R-Disc Wait-I-CEA
R-Conn-CER R-Reject Wait-Returns
Timeout Error Closed

R-Open Send-Message R-Snd-Message R-Open
R-Rcv-Message Process R-Open
R-Rcv-DWR Process-DWR, R-Open
R-Snd-DWA
R-Rcv-DWA Process-DWA R-Open
R-Conn-CER R-Reject R-Open
Stop R-Snd-DPR Closing
R-Rcv-DPR R-Snd-DPA Closing
R-Peer-Disc R-Disc Closed

I-Open Send-Message I-Snd-Message I-Open
I-Rcv-Message Process I-Open
I-Rcv-DWR Process-DWR, I-Open
I-Snd-DWA
I-Rcv-DWA Process-DWA I-Open
R-Conn-CER R-Reject I-Open
Stop I-Snd-DPR Closing
I-Rcv-DPR I-Snd-DPA Closing
I-Peer-Disc I-Disc Closed

Closing I-Rcv-DPA I-Disc Closed
R-Rcv-DPA R-Disc Closed
Timeout Error Closed
I-Peer-Disc I-Disc Closed
R-Peer-Disc R-Disc Closed