Résumé

  • RFC 5393 décrit comment moins de dix messages SIP valides pouvaient préparer une arborescence susceptible d’atteindre 2^71 messages; avec plusieurs AOR, le trafic reste supérieur à N! même si tous les proxys détectent les boucles.
  • Max-Breadth limite les branches concurrentes, mais restitue le crédit après une réponse finale. Il étale donc le trafic sans en réduire nécessairement le total.
  • Il faut conserver séparément l’identité de routage, l’historique Via, la décision boucle ou spirale, le pic simultané, le nombre cumulé de branches et l’historique traversant les B2BUA.

Le compteur vert ne comptait que l’instant

RFC 5393 définit deux valeurs dans chaque contexte de réponse. Incoming Max-Breadth est le budget reçu. Outgoing Max-Breadth est la somme des crédits attribués aux requêtes transférées qui n’ont pas encore obtenu de réponse finale. La seconde ne peut dépasser la première.

Imaginons huit destinations et un budget de quatre. Le proxy ouvre quatre branches. L’une échoue; son crédit redevient disponible et ouvre une cinquième destination. La même séquence peut visiter les huit cibles sans que le nombre actif dépasse quatre. La limite a parfaitement fonctionné, mais elle n’a pas limité le nombre d’essais pendant toute la vie de la requête.

Le groupe de travail a considéré l’autre choix: ne jamais restituer le crédit. Une requête n’aurait alors pu créer qu’un multiple constant du budget initial. Cette solution a été rejetée parce qu’elle aurait réduit trop brutalement la portée légitime et risquait de casser des déploiements. Le compromis protège la pointe et conserve l’exploration séquentielle.

La direction doit donc exiger l’unité de chaque indicateur. « Quatre » peut signifier quatre branches vivantes, quatre destinations à vie, quatre sauts ou quatre requêtes racines. RFC 5393 ne garantit que la première interprétation.

L’inscription valide portait le multiplicateur

Le scénario simple relie deux services proxy/registrar. Deux AOR de chaque côté sont enregistrées comme contacts des deux AOR de l’autre côté. Un INVITE destiné à la première adresse se divise en deux, puis quatre, puis huit. Chaque message peut être valide; c’est le graphe de résolution qui fabrique la croissance.

La propagation continue jusqu’à l’épuisement de Max-Forwards. Avec la valeur recommandée de 70, l’arbre binaire représente 2^71 - 1 requêtes. Si le traitement dépasse Timer C, des réponses 408 et des CANCEL peuvent s’ajouter. Les deux proxys doivent entre-temps conserver l’état des transactions.

RFC 5393 rapporte un essai SIPit réel, mené avec davantage de proxys et Max-Forwards limité à 20. Après quelques messages de préparation, les machines se sont bombardées pendant des heures. Le document extrapole un achèvement en un peu moins de dix jours; certaines machines redémarrées ont rejoint de nouveau le trafic lorsque leurs inscriptions avaient survécu.

Ce fait ne prouve rien sur un opérateur actuel. Il montre une frontière durable: redémarrer un processus ne supprime pas l’autorisation persistante inscrite dans le graphe. La reprise exige de neutraliser la cause, pas seulement de renouveler les conteneurs.

Une boucle et une spirale n’ont pas la même identité

Pour le cas binaire, la détection de boucle est décisive. RFC 5393 annonce 14 messages stimulés dans le premier scénario et 10 dans la variante à un seul serveur lorsque tous les proxys détectent la boucle. Le texte impose donc à tout proxy qui bifurque vers plusieurs lieux de vérifier qu’il ne participe pas à une boucle.

La valeur branch du Via est raffinée en deux parties. La seconde dépend du Request-URI, des champs Route et de toute donnée réellement employée par la logique de localisation. Si un proxy retrouve sa propre trace et recalcule la même valeur, les entrées n’ont pas changé: réponse 482. Si la valeur diffère, le passage est une spirale sous un autre contexte de routage et peut continuer.

Cette distinction empêche deux erreurs. Une identité trop pauvre laisse une boucle paraître nouvelle. Une identité trop large peut tuer une spirale légitime. Elle dépend aussi de la conservation de l’historique: retirer ou modifier les paramètres Via supprime la capacité du nœud d’origine à reconnaître son propre passage.

N AOR produisent des chemins uniques avant la répétition

Le scénario le plus instructif relie N AOR, chacune bifurquant vers tout l’ensemble. Depuis AOR 1, toutes les permutations des N-1 autres adresses peuvent être parcourues avant qu’une adresse se répète. Le dernier embranchement ajoute N requêtes à chacun de ces chemins. À lui seul, il représente N! requêtes.

Le tableau de RFC 5393 passe de 64 requêtes pour quatre AOR à 1 956 pour six, 109 600 pour huit et 9 864 100 pour dix. Tant que N ne dépasse pas Max-Forwards, le trafic total est supérieur à N! même si chaque proxy détecte les boucles.

Ce n’est pas une prévision pour tout réseau SIP. C’est la preuve qu’un contrôle de répétition ne borne pas le nombre de chemins encore uniques. L’identité empêche le doublon; elle ne fixe pas le coût de toutes les combinaisons nouvelles.

Max-Forwards limite la profondeur. Max-Breadth limite la largeur simultanée. Le nombre cumulé de branches reste une troisième dimension. Une réponse 440 indique seulement qu’un plan parallèle ne tient pas dans le budget et que le proxy ne veut ni sérialiser ni rediriger. Elle ne prouve pas que l’exploration s’arrête.

Le protocole a acheté du temps d’intervention

La section sécurité est explicite: Max-Breadth ne diminue pas le trafic agrégé de l’attaque. Il l’étale en limitant les branches traitées au même moment. Plusieurs requêtes racines peuvent encore construire une charge déraisonnable.

Le bénéfice est un délai. Les nœuds peuvent rester vivants assez longtemps pour détecter l’augmentation des transactions en attente, isoler les AOR impliquées et désactiver temporairement une ressource. Mais un délai sans surveillance peut devenir une attaque lente et coûteuse. Le succès opérationnel doit donc combiner un pic borné et un registre cumulé acceptable.

La frontière la plus fragile est le B2BUA. Il termine un dialogue SIP et en crée un autre; l’historique du premier côté peut disparaître. RFC 5393 avertit que deux éléments cachant l’historique peuvent empêcher à la fois la détection de boucle, Max-Forwards et Max-Breadth de protéger le circuit. RFC 7332 exigera plus tard la copie et la décrémentation de Max-Forwards ainsi que le transfert et l’application de Max-Breadth.

La présence d’un champ ne prouve toutefois pas son exécution. La primauté du code en fonctionnement demande un essai qui traverse le véritable B2BUA et observe le budget, l’historique et les branches émises. La confidentialité topologique et la détection de boucle sont des objectifs en tension, pas deux promesses gratuites.

Limite des preuves

Les sources établissent le texte des RFC, l’essai SIPit qu’elles rapportent et les mécanismes normatifs. Elles n’établissent ni l’adoption actuelle, ni la fréquence des attaques, ni la cause d’une panne récente. 2^71, N! et 9 864 100 restent attachés à leurs constructions.

La conclusion est plus utile qu’un chiffre spectaculaire. La concurrence est une photographie; le travail total est un livre de comptes. Une organisation gouvernable conserve les deux, ainsi que l’identité qui a autorisé chaque nouvelle branche.