Aller au contenu principal

8. Concluding ICE Processing (Conclusion du traitement ICE)

Cette section décrit comment un agent termine ICE.

8.1. Procedures for Full Implementations (Procédures pour les implémentations complètes)

La conclusion d'ICE implique la nomination de paires par l'agent contrôlant et la mise à jour de la machine à états.

8.1.1. Nominating Pairs (Nomination de paires)

L'agent contrôlant nomme les paires à sélectionner par ICE en utilisant l'une des deux techniques suivantes : la nomination régulière ou la nomination agressive. Si son pair a une implémentation Lite, un agent MUST utiliser un algorithme de nomination régulière. Si son pair utilise des options ICE (présentes dans un attribut ice-options du pair) que l'agent ne comprend pas, l'agent MUST utiliser un algorithme de nomination régulière. Si son pair est une implémentation complète et n'utilise aucune option ICE ou utilise des options ICE comprises par l'agent, l'agent MAY utiliser soit l'algorithme de nomination agressive, soit l'algorithme de nomination régulière. Cependant, l'algorithme régulier est RECOMMENDED car il offre une plus grande stabilité.

8.1.1.1. Regular Nomination (Nomination régulière)

Avec la nomination régulière, l'agent laisse un certain nombre de vérifications se terminer, dont chacune omet l'attribut USE-CANDIDATE. Une fois qu'une ou plusieurs vérifications se terminent avec succès pour un composant d'un flux média, des paires valides sont générées et ajoutées à la liste valide. L'agent laisse les vérifications continuer jusqu'à ce qu'un critère d'arrêt soit rempli, puis choisit parmi les paires valides sur la base d'un critère d'évaluation. Les critères d'arrêt des vérifications et d'évaluation des paires valides sont entièrement une question d'optimisation locale.

Lorsque l'agent contrôlant sélectionne la paire valide, il répète la vérification qui a produit cette paire valide (en mettant en file d'attente la paire qui a généré la vérification dans la file d'attente des vérifications déclenchées), cette fois avec l'attribut USE-CANDIDATE. Cette vérification devrait réussir (puisque la précédente a réussi), entraînant la définition du drapeau nommé de cette paire et uniquement de cette paire. Par conséquent, il n'y aura qu'une seule paire nommée dans la liste valide pour chaque composant, et lorsque l'état de la liste de vérification passe à terminé, cette paire exacte est sélectionnée par ICE pour l'envoi et la réception de média pour ce composant.

La nomination régulière offre le plus de flexibilité, puisque l'agent a le contrôle sur les critères d'arrêt et de sélection des vérifications. La seule exigence est que l'agent MUST finalement choisir une et une seule paire de candidats et générer une vérification pour cette paire avec l'attribut USE-CANDIDATE présent. La nomination régulière améliore également la résilience d'ICE aux variations d'implémentation (voir la section 14). La nomination régulière est également plus stable, permettant aux deux agents de converger vers une paire unique pour le média sans aucune sélection transitoire, ce qui peut se produire avec l'algorithme agressif. L'inconvénient de la nomination régulière est qu'elle garantit une augmentation des latences car elle nécessite une vérification supplémentaire.

8.1.1.2. Aggressive Nomination (Nomination agressive)

Avec la nomination agressive, l'agent contrôlant inclut l'attribut USE-CANDIDATE dans chaque vérification qu'il envoie. Une fois que la première vérification pour un composant réussit, elle sera ajoutée à la liste valide et aura son drapeau nommé défini. Lorsque tous les composants ont une paire nommée dans la liste valide, le média peut commencer à circuler en utilisant la paire nommée la plus prioritaire. Cependant, parce que l'agent a inclus l'attribut USE-CANDIDATE dans toutes ses vérifications, une autre vérification peut encore se terminer, entraînant la définition du drapeau nommé d'une autre paire valide. ICE sélectionne toujours la paire de candidats nommée la plus prioritaire de la liste valide comme celle utilisée pour le média. Par conséquent, la paire sélectionnée peut en fait changer brièvement à mesure que les vérifications ICE se terminent, résultant en un ensemble de sélections transitoires jusqu'à ce qu'elle se stabilise.

8.1.2. Updating States (Mise à jour des états)

Pour les agents contrôlants et contrôlés, l'état du traitement ICE dépend de la présence de paires de candidats nommées dans la liste valide et de l'état de la liste de vérification. Notez qu'à tout moment, plusieurs des cas suivants peuvent s'appliquer :

  • S'il n'y a pas de paires nommées dans la liste valide pour un flux média et que l'état de la liste de vérification est Running, le traitement ICE continue.

  • S'il y a au moins une paire nommée dans la liste valide pour un flux média et que l'état de la liste de vérification est Running :

    • L'agent MUST supprimer toutes les paires Waiting et Frozen dans la liste de vérification et la file d'attente des vérifications déclenchées pour le même composant que les paires nommées pour ce flux média.

    • Si une paire In-Progress dans la liste de vérification est pour le même composant qu'une paire nommée, l'agent SHOULD cesser les retransmissions pour sa vérification si sa priorité de paire est inférieure à la paire nommée la plus basse priorité pour ce composant.

  • Une fois qu'il y a au moins une paire nommée dans la liste valide pour chaque composant d'au moins un flux média et que l'état de la liste de vérification est Running :

    • L'agent MUST changer l'état de traitement pour sa liste de vérification pour ce flux média à Completed.

    • L'agent MUST continuer à répondre à toutes les vérifications qu'il peut encore recevoir pour ce flux média, et MUST effectuer des vérifications déclenchées si le traitement de la section 7.2 l'exige.

    • L'agent MUST continuer à retransmettre toutes les vérifications In-Progress pour cette liste de vérification.

    • L'agent MAY commencer à transmettre le média pour ce flux média comme décrit dans la section 11.1.

  • Une fois que l'état de chaque liste de vérification est Completed :

    • L'agent définit l'état du traitement ICE global à Completed.

    • Si un agent est contrôlant, il examine la paire de candidats nommée la plus prioritaire pour chaque composant de chaque flux média. Si l'une de ces paires de candidats diffère des paires de candidats par défaut dans l'échange offre/réponse le plus récent, l'agent contrôlant MUST générer une offre mise à jour comme décrit dans la section 9. Si l'agent contrôlant utilise un algorithme de nomination agressive, cela peut entraîner plusieurs offres mises à jour à mesure que les paires sélectionnées pour le média changent. Un agent MAY retarder l'envoi de l'offre pendant un bref intervalle (une seconde est RECOMMENDED) afin de permettre aux paires sélectionnées de se stabiliser.

  • Si l'état de la liste de vérification est Failed, ICE n'a pas pu se terminer pour ce flux média. Le comportement correct dépend de l'état des listes de vérification pour les autres flux média :

    • Si toutes les listes de vérification sont Failed, le traitement ICE global est considéré comme étant dans l'état Failed, et l'agent SHOULD considérer la session comme un échec, SHOULD NOT redémarrer ICE, et l'agent contrôlant SHOULD terminer la session entière.

    • Si au moins une des listes de vérification pour d'autres flux média est Completed, l'agent contrôlant SHOULD supprimer le flux média échoué de la session dans son offre mise à jour.

    • Si aucune des listes de vérification pour d'autres flux média n'est Completed, mais qu'au moins une est Running, l'agent SHOULD laisser ICE continuer.

8.2. Procedures for Lite Implementations (Procédures pour les implémentations Lite)

La conclusion d'ICE pour une implémentation Lite est relativement simple. Il y a deux cas à considérer :

L'implémentation est Lite, et son pair est Full.

L'implémentation est Lite, et son pair est Lite.

L'effet de la conclusion d'ICE est que l'agent peut libérer tous les candidats hôtes alloués qui n'ont pas été utilisés par ICE, comme décrit dans la section 8.3.

8.2.1. Peer Is Full (Le pair est Full)

Dans ce cas, l'agent recevra des vérifications de connectivité de son pair. Lorsqu'un agent a reçu une vérification de connectivité qui inclut l'attribut USE-CANDIDATE pour chaque composant d'un flux média, l'état du traitement ICE pour ce flux média passe de Running à Completed. Lorsque l'état du traitement ICE pour tous les flux média est Completed, l'état du traitement ICE global est Completed.

L'implémentation Lite ne déterminera jamais elle-même que le traitement ICE a échoué pour un flux média ; c'est plutôt le pair Full qui prendra cette détermination et supprimera ou redémarrera le flux média échoué dans une offre ultérieure.

8.2.2. Peer Is Lite (Le pair est Lite)

Une fois l'échange offre/réponse terminé, les deux agents examinent leurs candidats et ceux de leur pair. Pour chaque flux média, chaque agent apparie ses propres candidats avec les candidats de son pair pour ce flux média. Deux candidats sont appariés lorsqu'ils sont pour le même composant, utilisent le même protocole de transport (UDP dans cette spécification) et proviennent de la même famille d'adresses IP (IPv4 ou IPv6).

  • S'il y a une seule paire par composant, cette paire est ajoutée à la liste Valide. Si tous les composants d'un flux média avaient une paire, l'état du traitement ICE pour ce flux média est défini sur Completed. Si tous les flux média sont Completed, l'état du traitement ICE est défini sur Completed globalement. Ce sera toujours le cas pour les implémentations qui sont uniquement IPv4.

  • S'il y a plus d'une paire par composant :

    • L'agent MUST sélectionner une paire sur la base de la politique locale. Puisque ce cas ne se produit que pour IPv6, il est RECOMMENDED qu'un agent suive les procédures de la RFC 3484 [RFC3484] pour sélectionner une paire unique.

    • L'agent ajoute la paire sélectionnée pour chaque composant à la liste valide. Comme décrit dans la section 11.1, cela permettra au média de commencer à circuler. Cependant, il est possible (et en fait probable) que les deux agents aient choisi des paires différentes.

    • Pour concilier cela, l'agent contrôlant MUST envoyer une offre mise à jour comme décrit dans la section 9.1.3, qui inclura l'attribut remote-candidates.

    • L'agent MUST NOT mettre à jour l'état du traitement ICE lorsque l'offre est envoyée. Si cette offre ultérieure se termine, l'agent contrôlant MUST changer l'état du traitement ICE à Completed pour tous les flux média, et l'état du traitement ICE global à Completed. Les états pour l'agent contrôlé sont définis sur la base de la logique de la section 9.2.3.

8.3. Freeing Candidates (Libération des candidats)

8.3.1. Full Implementation Procedures (Procédures d'implémentation complète)

Les procédures de la section 8 exigent qu'un agent continue d'écouter les requêtes STUN et continue de générer des vérifications déclenchées pour un flux média, même une fois le traitement pour ce flux terminé. Les règles de cette section décrivent quand il est sûr pour un agent de cesser d'envoyer ou de recevoir des vérifications sur un candidat qui n'a pas été sélectionné par ICE, puis de libérer le candidat.

Lorsque ICE est utilisé avec SIP, et qu'une offre est bifurquée vers plusieurs destinataires, ICE se déroule en parallèle et indépendamment avec chaque répondeur, tous utilisant les mêmes candidats locaux. Une fois que le traitement ICE a atteint l'état Completed pour tous les pairs pour les flux média utilisant ces candidats, l'agent SHOULD attendre trois secondes supplémentaires, puis il MAY cesser de répondre aux vérifications ou de générer des vérifications déclenchées sur ce candidat. Il MAY libérer le candidat à ce moment-là. La libération des candidats réflexifs serveur n'est jamais explicite ; elle se produit par manque de keepalive. Le délai de trois secondes gère les cas où la nomination agressive est utilisée, et les paires sélectionnées peuvent changer rapidement après la fin d'ICE.

8.3.2. Lite Implementation Procedures (Procédures d'implémentation Lite)

Une implémentation Lite MAY libérer les candidats non sélectionnés par ICE dès que le traitement ICE a atteint l'état Completed pour tous les pairs pour tous les flux média utilisant ces candidats.