📄 rfc2710.txt
字号:
that address, thus suppressing duplicate reports on the link. When a router receives a Report from a link, if the reported address is not already present in the router's list of multicast address having listeners on that link, the reported address is added to the list, its timer is set to [Multicast Listener Interval], and its appearance is made known to the router's multicast routing component. If a Report is received for a multicast address that is already present in the router's list, the timer for that address is reset to [Multicast Listener Interval]. If an address's timer expires, it is assumed that there are no longer any listeners for that address present on the link, so it is deleted from the list and its disappearance is made known to the multicast routing component. When a node starts listening to a multicast address on an interface, it should immediately transmit an unsolicited Report for that address on that interface, in case it is the first listener on the link. To cover the possibility of the initial Report being lost or damaged, it is recommended that it be repeated once or twice after short delays [Unsolicited Report Interval]. (A simple way to accomplish this is to send the initial Report and then act as if a Multicast-Address- Specific Query was received for that address, and set a timer appropriately).Deering, et al. Standards Track [Page 6]RFC 2710 Multicast Listener Discovery for IPv6 October 1999 When a node ceases to listen to a multicast address on an interface, it SHOULD send a single Done message to the link-scope all-routers multicast address (FF02::2), carrying in its Multicast Address field the address to which it is ceasing to listen. If the node's most recent Report message was suppressed by hearing another Report message, it MAY send nothing, as it is highly likely that there is another listener for that address still present on the same link. If this optimization is implemented, it MUST be able to be turned off but SHOULD default to on. When a router in Querier state receives a Done message from a link, if the Multicast Address identified in the message is present in the Querier's list of addresses having listeners on that link, the Querier sends [Last Listener Query Count] Multicast-Address-Specific Queries, one every [Last Listener Query Interval] to that multicast address. These Multicast-Address-Specific Queries have their Maximum Response Delay set to [Last Listener Query Interval]. If no Reports for the address are received from the link after the response delay of the last query has passed, the routers on the link assume that the address no longer has any listeners there; the address is therefore deleted from the list and its disappearance is made known to the multicast routing component. This process is continued to its resolution (i.e. until a Report is received or the last Multicast- Address-Specific Query is sent with no response) despite any transition from Querier to Non-Querier on this link. Routers in Non-Querier state MUST ignore Done messages. When a router in Non-Querier state receives a Multicast-Address- Specific Query, if its timer value for the identified multicast address is greater than [Last Listener Query Count] times the Maximum Response Delay specified in the message, it sets the address's timer to that latter value.5. Node State Transition Diagram Node behavior is more formally specified by the state transition diagram below. A node may be in one of three possible states with respect to any single IPv6 multicast address on any single interface: - "Non-Listener" state, when the node is not listening to the address on the interface (i.e., no upper-layer protocol or application has requested reception of packets to that multicast address). This is the initial state for all multicast addresses on all interfaces; it requires no storage in the node.Deering, et al. Standards Track [Page 7]RFC 2710 Multicast Listener Discovery for IPv6 October 1999 - "Delaying Listener" state, when the node is listening to the address on the interface and has a report delay timer running for that address. - "Idle Listener" state, when the node is listening to the address on the interface and does not have a report delay timer running for that address. There are five significant events that can cause MLD state transitions: - "start listening" occurs when the node starts listening to the address on the interface. It may occur only in the Non-Listener state. - "stop listening" occurs when the node stops listening to the address on the interface. It may occur only in the Delaying Listener and Idle Listener states. - "query received" occurs when the node receives either a valid General Query message, or a valid Multicast-Address-Specific Query message. To be valid, the Query message MUST come from a link- local IPv6 Source Address, be at least 24 octets long, and have a correct MLD checksum. The Multicast Address field in the MLD message must contain either zero (a General Query) or a valid multicast address (a Multicast- Address-Specific Query). A General Query applies to all multicast addresses on the interface from which the Query is received. A Multicast-Address-Specific Query applies to a single multicast address on the interface from which the Query is received. Queries are ignored for addresses in the Non-Listener state. - "report received" occurs when the node receives a valid MLD Report message. To be valid, the Report message MUST come from a link- local IPv6 Source Address, be at least 24 octets long, and have a correct MLD checksum. A Report applies only to the address identified in the Multicast Address field of the Report, on the interface from which the Report is received. It is ignored in the Non-Listener or Idle Listener state. - "timer expired" occurs when the report delay timer for the address on the interface expires. It may occur only in the Delaying Listener state.Deering, et al. Standards Track [Page 8]RFC 2710 Multicast Listener Discovery for IPv6 October 1999 All other events, such as receiving invalid MLD messages or MLD message types other than Query or Report, are ignored in all states. There are seven possible actions that may be taken in response to the above events: - "send report" for the address on the interface. The Report message is sent to the address being reported. - "send done" for the address on the interface. If the flag saying we were the last node to report is cleared, this action MAY be skipped. The Done message is sent to the link-scope all-routers address (FF02::2). - "set flag" that we were the last node to send a report for this address. - "clear flag" since we were not the last node to send a report for this address. - "start timer" for the address on the interface, using a delay value chosen uniformly from the interval [0, Maximum Response Delay], where Maximum Response Delay is specified in the Query. If this is an unsolicited Report, the timer is set to a delay value chosen uniformly from the interval [0, [Unsolicited Report Interval] ]. - "reset timer" for the address on the interface to a new value, using a delay value chosen uniformly from the interval [0, Maximum Response Delay], as described in "start timer". - "stop timer" for the address on the interface. In all of the following state transition diagrams, each state transition arc is labeled with the event that causes the transition, and, in parentheses, any actions taken during the transition. Note that the transition is always triggered by the event; even if the action is conditional, the transition still occurs.Deering, et al. Standards Track [Page 9]RFC 2710 Multicast Listener Discovery for IPv6 October 1999 ________________ | | | | | | | | --------->| Non-Listener |<--------- | | | | | | | | | | | | | |________________| | | | | | stop listening | start listening | stop listening | (stop timer, |(send report, | (send done if | send done if | set flag, | flag set) | flag set) | start timer) | ________|________ | ________|________ | |<--------- | | | | | | | |<-------------------| | | | query received | | | Delaying | (start timer) | Idle | ---->| Listener |------------------->| Listener | | | | report received | | | | | (stop timer, | | | | | clear flag) | | | |_________________|------------------->|_________________| | query received | timer expired | (reset timer if | (send report, | Max Resp Delay | set flag) | < current timer) | ------------------- The link-scope all-nodes address (FF02::1) is handled as a special case. The node starts in Idle Listener state for that address on every interface, never transitions to another state, and never sends a Report or Done for that address. MLD messages are never sent for multicast addresses whose scope is 0 (reserved) or 1 (node-local). MLD messages ARE sent for multicast addresses whose scope is 2 (link-local), including Solicited-Node multicast addresses [ADDR- ARCH], except for the link-scope, all-nodes address (FF02::1).Deering, et al. Standards Track [Page 10]RFC 2710 Multicast Listener Discovery for IPv6 October 19996. Router State Transition Diagram Router behavior is more formally specified by the state transition diagrams below. A router may be in one of two possible states with respect to any single attached link: - "Querier", when this router is designated to transmit MLD Queries on this link. - "Non-Querier", when there is another router designated to transmit MLD Queries on this link. The following three events can cause the router to change states: - "query timer expired" occurs when the timer set for query transmission expires. This event is significant only when in the Querier state. - "query received from a router with a lower IP address" occurs when a valid MLD Query is received from a router on the same link with a lower IPv6 Source Address. To be valid, the Query message MUST come from a link-local IPv6 Source Address, be at least 24 octets long, and have a correct MLD checksum. - "other querier present timer expired" occurs when the timer set to note the presence of another querier with a lower IP address on the link expires. This event is significant only when in the Non-Querier state. There are three actions that may be taken in response to the above events: - "start general query timer" for the attached link to [Query Interval]. - "start other querier present timer" for the attached link to [Other Querier Present Interval]. - "send general query" on the attached link. The General Query is sent to the link-scope all-nodes address (FF02::1), and has a Maximum Response Delay of [Query Response Interval].Deering, et al. Standards Track [Page 11]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -