3. Multicast Reception State Maintained by Systems (État de réception multidiffusion maintenu par les systèmes)
3. Multicast Reception State Maintained by Systems (État de réception multidiffusion maintenu par les systèmes)
3.1. Socket State (État du socket)
For each socket on which IPMulticastListen has been invoked, the system records the desired multicast reception state for that socket. That state conceptually consists of a set of records of the form:
Pour chaque socket sur lequel IPMulticastListen a été invoqué, le système enregistre l'état de réception multidiffusion souhaité pour ce socket. Cet état consiste conceptuellement en un ensemble d'enregistrements de la forme :
(interface, multicast-address, filter-mode, source-list)
The socket state evolves in response to each invocation of IPMulticastListen on the socket, as follows:
L'état du socket évolue en réponse à chaque invocation d'IPMulticastListen sur le socket, comme suit :
-
If the requested filter mode is INCLUDE and the requested source list is empty, then the entry corresponding to the requested interface and multicast address is deleted if present. If no such entry is present, the request is ignored.
-
Si le mode de filtrage demandé est INCLUDE et que la liste de sources demandée est vide, alors l'entrée correspondant à l'interface et à l'adresse de multidiffusion demandées est supprimée si elle est présente. Si aucune entrée de ce type n'est présente, la demande est ignorée.
-
If the requested filter mode is EXCLUDE or the requested source list is non-empty, then the entry corresponding to the requested interface and multicast address, if present, is changed to contain the requested filter mode and source list. If no such entry is present, a new entry is created, using the parameters specified in the request.
-
Si le mode de filtrage demandé est EXCLUDE ou que la liste de sources demandée n'est pas vide, alors l'entrée correspondant à l'interface et à l'adresse de multidiffusion demandées, si elle est présente, est modifiée pour contenir le mode de filtrage et la liste de sources demandés. Si aucune entrée de ce type n'est présente, une nouvelle entrée est créée, en utilisant les paramètres spécifiés dans la demande.
3.2. Interface State (État de l'interface)
In addition to the per-socket multicast reception state, a system must also maintain or compute multicast reception state for each of its interfaces. That state conceptually consists of a set of records of the form:
En plus de l'état de réception multidiffusion par socket, un système doit également maintenir ou calculer l'état de réception multidiffusion pour chacune de ses interfaces. Cet état consiste conceptuellement en un ensemble d'enregistrements de la forme :
(multicast-address, filter-mode, source-list)
At most one record per multicast-address exists for a given interface. This per-interface state is derived from the per-socket state, but may differ from the per-socket state when different sockets have differing filter modes and/or source lists for the same multicast address and interface. For example, suppose one application or process invokes the following operation on socket s1:
Il existe au plus un enregistrement par adresse de multidiffusion pour une interface donnée. Cet état par interface est dérivé de l'état par socket, mais peut différer de l'état par socket lorsque différents sockets ont des modes de filtrage et/ou des listes de sources différents pour la même adresse de multidiffusion et la même interface. Par exemple, supposons qu'une application ou un processus invoque l'opération suivante sur le socket s1 :
IPMulticastListen ( s1, i, m, INCLUDE, {a, b, c} )
requesting reception on interface i of packets sent to multicast address m, only if they come from source a, b, or c. Suppose another application or process invokes the following operation on socket s2:
demandant la réception sur l'interface i des paquets envoyés à l'adresse de multidiffusion m, uniquement s'ils proviennent de la source a, b ou c. Supposons qu'une autre application ou un autre processus invoque l'opération suivante sur le socket s2 :
IPMulticastListen ( s2, i, m, INCLUDE, {b, c, d} )
requesting reception on the same interface i of packets sent to the same multicast address m, only if they come from sources b, c, or d. In order to satisfy the reception requirements of both sockets, it is necessary for interface i to receive packets sent to m from any one of the sources a, b, c, or d. Thus, in this example, the reception state of interface i for multicast address m has filter mode INCLUDE and source list {a, b, c, d}.
demandant la réception sur la même interface i des paquets envoyés à la même adresse de multidiffusion m, uniquement s'ils proviennent des sources b, c ou d. Afin de satisfaire les exigences de réception des deux sockets, il est nécessaire que l'interface i reçoive les paquets envoyés à m depuis l'une quelconque des sources a, b, c ou d. Ainsi, dans cet exemple, l'état de réception de l'interface i pour l'adresse de multidiffusion m a le mode de filtrage INCLUDE et la liste de sources {a, b, c, d}.
After a multicast packet has been accepted from an interface by the IP layer, its subsequent delivery to the application or process listening on a particular socket depends on the multicast reception state of that socket [and possibly also on other conditions, such as what transport-layer port the socket is bound to]. So, in the above example, if a packet arrives on interface i, destined to multicast address m, with source address a, it will be delivered on socket s1 but not on socket s2. Note that IGMP Queries and Reports are not subject to source filtering and must always be processed by hosts and routers.
Une fois qu'un paquet multidiffusion a été accepté depuis une interface par la couche IP, sa livraison ultérieure à l'application ou au processus écoutant sur un socket particulier dépend de l'état de réception multidiffusion de ce socket [et éventuellement aussi d'autres conditions, telles que le port de la couche transport auquel le socket est lié]. Ainsi, dans l'exemple ci-dessus, si un paquet arrive sur l'interface i, destiné à l'adresse de multidiffusion m, avec l'adresse source a, il sera livré sur le socket s1 mais pas sur le socket s2. Notez que les requêtes et rapports IGMP ne sont pas soumis au filtrage de source et doivent toujours être traités par les hôtes et les routeurs.
Filtering of packets based upon a socket's multicast reception state is a new feature of this service interface. The previous service interface [RFC1112] described no filtering based upon multicast join state; rather, a join on a socket simply caused the host to join a group on the given interface, and packets destined for that group could be delivered to all sockets whether they had joined or not.
Le filtrage des paquets basé sur l'état de réception multidiffusion d'un socket est une nouvelle fonctionnalité de cette interface de service. L'interface de service précédente [RFC1112] ne décrivait aucun filtrage basé sur l'état de jonction multidiffusion ; au contraire, une jonction sur un socket amenait simplement l'hôte à rejoindre un groupe sur l'interface donnée, et les paquets destinés à ce groupe pouvaient être livrés à tous les sockets, qu'ils aient rejoint ou non.
The general rules for deriving the per-interface state from the per-socket state are as follows: For each distinct (interface, multicast-address) pair that appears in any socket state, a per-interface record is created for that multicast address on that interface. Considering all socket records containing the same (interface, multicast-address) pair,
Les règles générales pour dériver l'état par interface à partir de l'état par socket sont les suivantes : Pour chaque paire distincte (interface, adresse de multidiffusion) qui apparaît dans un état de socket, un enregistrement par interface est créé pour cette adresse de multidiffusion sur cette interface. En considérant tous les enregistrements de socket contenant la même paire (interface, adresse de multidiffusion),
-
if any such record has a filter mode of EXCLUDE, then the filter mode of the interface record is EXCLUDE, and the source list of the interface record is the intersection of the source lists of all socket records in EXCLUDE mode, minus those source addresses that appear in any socket record in INCLUDE mode. For example, if the socket records for multicast address m on interface i are:
-
si un tel enregistrement a un mode de filtrage EXCLUDE, alors le mode de filtrage de l'enregistrement d'interface est EXCLUDE, et la liste de sources de l'enregistrement d'interface est l'intersection des listes de sources de tous les enregistrements de socket en mode EXCLUDE, moins les adresses sources qui apparaissent dans tout enregistrement de socket en mode INCLUDE. Par exemple, si les enregistrements de socket pour l'adresse de multidiffusion m sur l'interface i sont :
from socket s1: ( i, m, EXCLUDE, {a, b, c, d} )
from socket s2: ( i, m, EXCLUDE, {b, c, d, e} )
from socket s3: ( i, m, INCLUDE, {d, e, f} )
then the corresponding interface record on interface i is:
alors l'enregistrement d'interface correspondant sur l'interface i est :
( m, EXCLUDE, {b, c} )
If a fourth socket is added, such as:
Si un quatrième socket est ajouté, tel que :
from socket s4: ( i, m, EXCLUDE, {} )
then the interface record becomes:
alors l'enregistrement d'interface devient :
( m, EXCLUDE, {} )
-
if all such records have a filter mode of INCLUDE, then the filter mode of the interface record is INCLUDE, and the source list of the interface record is the union of the source lists of all the socket records. For example, if the socket records for multicast address m on interface i are:
-
si tous ces enregistrements ont un mode de filtrage INCLUDE, alors le mode de filtrage de l'enregistrement d'interface est INCLUDE, et la liste de sources de l'enregistrement d'interface est l'union des listes de sources de tous les enregistrements de socket. Par exemple, si les enregistrements de socket pour l'adresse de multidiffusion m sur l'interface i sont :
from socket s1: ( i, m, INCLUDE, {a, b, c} )
from socket s2: ( i, m, INCLUDE, {b, c, d} )
from socket s3: ( i, m, INCLUDE, {e, f} )
then the corresponding interface record on interface i is:
alors l'enregistrement d'interface correspondant sur l'interface i est :
( m, INCLUDE, {a, b, c, d, e, f} )
An implementation MUST NOT use an EXCLUDE interface record to represent a group when all sockets for this group are in INCLUDE state. If system resource limits are reached when an interface state source list is calculated, an error MUST be returned to the application which requested the operation.
Une implémentation NE DOIT PAS utiliser un enregistrement d'interface EXCLUDE pour représenter un groupe lorsque tous les sockets de ce groupe sont à l'état INCLUDE. Si les limites des ressources système sont atteintes lors du calcul d'une liste de sources d'état d'interface, une erreur DOIT être renvoyée à l'application qui a demandé l'opération.
The above rules for deriving the interface state are (re-)evaluated whenever an IPMulticastListen invocation modifies the socket state by adding, deleting, or modifying a per-socket state record. Note that a change of socket state does not necessarily result in a change of interface state.
Les règles ci-dessus pour dériver l'état de l'interface sont (ré)évaluées chaque fois qu'une invocation IPMulticastListen modifie l'état du socket en ajoutant, supprimant ou modifiant un enregistrement d'état par socket. Notez qu'un changement d'état du socket n'entraîne pas nécessairement un changement d'état de l'interface.