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