draft-ietf-mboned-mtrace-v2-08.txt | draft-ietf-mboned-mtrace-v2-09.txt | |||
---|---|---|---|---|
MBONED Working Group H. Asaeda | MBONED Working Group H. Asaeda | |||
Internet-Draft Keio University | Internet-Draft NICT | |||
Intended status: Standards Track T. Jinmei | Intended status: Standards Track W. Lee, Ed. | |||
Expires: July 11, 2011 ISC | Expires: April 25, 2013 Juniper Networks, Inc. | |||
W. Fenner | October 22, 2012 | |||
Arastra, Inc. | ||||
S. Casner | ||||
Packet Design, Inc. | ||||
January 7, 2011 | ||||
Mtrace Version 2: Traceroute Facility for IP Multicast | Mtrace Version 2: Traceroute Facility for IP Multicast | |||
draft-ietf-mboned-mtrace-v2-08 | draft-ietf-mboned-mtrace-v2-09 | |||
Abstract | Abstract | |||
This document describes the IP multicast traceroute facility. Unlike | This document describes the IP multicast traceroute facility, named | |||
unicast traceroute, multicast traceroute requires special | Mtrace version 2 (Mtrace2). Unlike unicast traceroute, Mtrace2 | |||
implementations on the part of routers. This specification describes | requires special implementations on the part of routers. This | |||
the required functionality in multicast routers, as well as how | specification describes the required functionality in multicast | |||
management applications can use the router functionality. | routers, as well as how an Mtrace2 client invokes a query and | |||
receives a reply. | ||||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on July 11, 2011. | This Internet-Draft will expire on April 25, 2013. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2012 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
This document may contain material from IETF Documents or IETF | ||||
Contributions published or made publicly available before November | ||||
10, 2008. The person(s) controlling the copyright in some of this | ||||
material may not have granted the IETF Trust the right to allow | ||||
modifications of such material outside the IETF Standards Process. | ||||
Without obtaining an adequate license from the person(s) controlling | ||||
the copyright in such materials, this document may not be modified | ||||
outside the IETF Standards Process, and derivative works of it may | ||||
not be created outside the IETF Standards Process, except to format | ||||
it for publication as an RFC or to translate it into languages other | ||||
than English. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4. Packet Formats . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3. Packet Formats . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.1. Mtrace2 TLV format . . . . . . . . . . . . . . . . . . . . 10 | 3.1. Mtrace2 TLV format . . . . . . . . . . . . . . . . . . . . 8 | |||
4.2. Defined TLVs . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.2. Defined TLVs . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
5. Mtrace2 Query Header . . . . . . . . . . . . . . . . . . . . . 12 | 3.2.1. Mtrace2 Query . . . . . . . . . . . . . . . . . . . . 9 | |||
5.1. # hops: 8 bits . . . . . . . . . . . . . . . . . . . . . . 12 | 3.2.2. Mtrace2 Extended Query Block . . . . . . . . . . . . . 10 | |||
5.2. Multicast Address . . . . . . . . . . . . . . . . . . . . 13 | 3.2.3. Mtrace2 Request . . . . . . . . . . . . . . . . . . . 11 | |||
5.3. Source Address . . . . . . . . . . . . . . . . . . . . . . 13 | 3.2.4. Mtrace2 Reply . . . . . . . . . . . . . . . . . . . . 11 | |||
5.4. Mtrace2 Client Address . . . . . . . . . . . . . . . . . . 13 | 3.2.5. IPv4 Mtrace2 Standard Response Block . . . . . . . . . 12 | |||
5.5. Query ID: 16 bits . . . . . . . . . . . . . . . . . . . . 13 | 3.2.6. IPv6 Mtrace2 Standard Response Block . . . . . . . . . 16 | |||
5.6. Client Port # . . . . . . . . . . . . . . . . . . . . . . 13 | 3.2.7. Mtrace2 Augmented Response Block . . . . . . . . . . . 19 | |||
6. IPv4 Mtrace2 Standard Response Block . . . . . . . . . . . . . 14 | 4. Router Behavior . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
6.1. MBZ: 8 bit . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.1. Receiving Mtrace2 Query . . . . . . . . . . . . . . . . . 20 | |||
6.2. Query Arrival Time: 32 bits . . . . . . . . . . . . . . . 14 | 4.1.1. Query Packet Verification . . . . . . . . . . . . . . 20 | |||
6.3. Incoming Interface Address: 32 bits . . . . . . . . . . . 15 | 4.1.2. Query Normal Processing . . . . . . . . . . . . . . . 21 | |||
6.4. Outgoing Interface Address: 32 bits . . . . . . . . . . . 15 | 4.2. Receiving Mtrace2 Request . . . . . . . . . . . . . . . . 21 | |||
6.5. Previous-Hop Router Address: 32 bits . . . . . . . . . . . 15 | 4.2.1. Request Packet Verification . . . . . . . . . . . . . 21 | |||
6.6. Input packet count on incoming interface: 64 bits . . . . 15 | 4.2.2. Request Normal Processing . . . . . . . . . . . . . . 22 | |||
6.7. Output packet count on outgoing interface: 64 bits . . . . 16 | 4.3. Forwarding Mtrace2 Request . . . . . . . . . . . . . . . . 23 | |||
6.8. Total number of packets for this source-group pair: 64 | 4.3.1. Destination Address . . . . . . . . . . . . . . . . . 24 | |||
bits . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.3.2. Source Address . . . . . . . . . . . . . . . . . . . . 24 | |||
6.9. Rtg Protocol: 16 bits . . . . . . . . . . . . . . . . . . 16 | 4.3.3. Appending Standard Response Block . . . . . . . . . . 24 | |||
6.10. Multicast Rtg Protocol: 16 bits . . . . . . . . . . . . . 16 | 4.4. Sending Mtrace2 Reply . . . . . . . . . . . . . . . . . . 24 | |||
6.11. Fwd TTL: 8 bits . . . . . . . . . . . . . . . . . . . . . 16 | 4.4.1. Destination Address . . . . . . . . . . . . . . . . . 25 | |||
6.12. S: 1 bit . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 4.4.2. Source Address . . . . . . . . . . . . . . . . . . . . 25 | |||
6.13. Src Mask: 7 bits . . . . . . . . . . . . . . . . . . . . . 17 | 4.4.3. Appending Standard Response Block . . . . . . . . . . 25 | |||
6.14. Forwarding Code: 8 bits . . . . . . . . . . . . . . . . . 17 | 4.5. Proxying Mtrace2 Query . . . . . . . . . . . . . . . . . . 25 | |||
7. IPv6 Mtrace2 Standard Response Block . . . . . . . . . . . . . 19 | 4.6. Hiding Information . . . . . . . . . . . . . . . . . . . . 26 | |||
7.1. MBZ: 8 bit . . . . . . . . . . . . . . . . . . . . . . . . 19 | 5. Client Behavior . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
7.2. Query Arrival Time: 32 bits . . . . . . . . . . . . . . . 20 | 5.1. Sending Mtrace2 Query . . . . . . . . . . . . . . . . . . 26 | |||
7.3. Incoming Interface ID: 32 bits . . . . . . . . . . . . . . 20 | 5.1.1. Destination Address . . . . . . . . . . . . . . . . . 26 | |||
7.4. Outgoing Interface ID: 32 bits . . . . . . . . . . . . . . 20 | 5.1.2. Source Address . . . . . . . . . . . . . . . . . . . . 26 | |||
7.5. Local Address . . . . . . . . . . . . . . . . . . . . . . 20 | 5.2. Determining the Path . . . . . . . . . . . . . . . . . . . 26 | |||
7.6. Remote Address . . . . . . . . . . . . . . . . . . . . . . 20 | 5.3. Collecting Statistics . . . . . . . . . . . . . . . . . . 27 | |||
7.7. Input packet count on incoming interface . . . . . . . . . 20 | 5.4. Last Hop Router (LHR) . . . . . . . . . . . . . . . . . . 27 | |||
7.8. Output packet count on outgoing interface . . . . . . . . 21 | 5.5. First Hop Router (FHR) . . . . . . . . . . . . . . . . . . 27 | |||
7.9. Total number of packets for this source-group pair . . . . 21 | 5.6. Broken Intermediate Router . . . . . . . . . . . . . . . . 27 | |||
7.10. Rtg Protocol: 16 bits . . . . . . . . . . . . . . . . . . 21 | 5.7. Non-Supported Router . . . . . . . . . . . . . . . . . . . 28 | |||
7.11. Multicast Rtg Protocol: 16 bits . . . . . . . . . . . . . 21 | 5.8. Mtrace2 Termination . . . . . . . . . . . . . . . . . . . 28 | |||
7.12. S: 1 bit . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 5.8.1. Arriving at Source . . . . . . . . . . . . . . . . . . 28 | |||
7.13. Src Prefix Len: 8 bits . . . . . . . . . . . . . . . . . . 21 | 5.8.2. Fatal Error . . . . . . . . . . . . . . . . . . . . . 28 | |||
7.14. Forwarding Code: 8 bits . . . . . . . . . . . . . . . . . 21 | 5.8.3. No Upstream Router . . . . . . . . . . . . . . . . . . 28 | |||
8. Mtrace2 Augmented Response Block . . . . . . . . . . . . . . . 22 | 5.8.4. Reply Timeout . . . . . . . . . . . . . . . . . . . . 28 | |||
9. Router Behavior . . . . . . . . . . . . . . . . . . . . . . . 23 | 5.9. Continuing after an Error . . . . . . . . . . . . . . . . 28 | |||
9.1. Receiving Mtrace2 Query . . . . . . . . . . . . . . . . . 23 | 6. Protocol-Specific Considerations . . . . . . . . . . . . . . . 29 | |||
9.1.1. Packet Verification . . . . . . . . . . . . . . . . . 23 | 6.1. PIM-SM . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
9.1.2. Normal Processing . . . . . . . . . . . . . . . . . . 23 | 6.2. Bi-Directional PIM . . . . . . . . . . . . . . . . . . . . 29 | |||
9.1.3. Mtrace2 Query Received by Non-Supported Router . . . . 23 | 6.3. PIM-DM . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
9.2. Receiving Mtrace2 Request . . . . . . . . . . . . . . . . 24 | 6.4. IGMP/MLD Proxy . . . . . . . . . . . . . . . . . . . . . . 30 | |||
9.2.1. Packet Verification . . . . . . . . . . . . . . . . . 24 | 7. Problem Diagnosis . . . . . . . . . . . . . . . . . . . . . . 30 | |||
9.2.2. Normal Processing . . . . . . . . . . . . . . . . . . 24 | 7.1. Forwarding Inconsistencies . . . . . . . . . . . . . . . . 30 | |||
9.2.3. Mtrace2 Request Received by Non-Supported Router . . . 26 | 7.2. TTL or Hop Limit Problems . . . . . . . . . . . . . . . . 30 | |||
9.3. Forwarding Mtrace2 Request . . . . . . . . . . . . . . . . 26 | 7.3. Packet Loss . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
9.3.1. Destination Address . . . . . . . . . . . . . . . . . 26 | 7.4. Link Utilization . . . . . . . . . . . . . . . . . . . . . 31 | |||
9.3.2. Source Address . . . . . . . . . . . . . . . . . . . . 26 | 7.5. Time Delay . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
9.4. Sending Mtrace2 Reply . . . . . . . . . . . . . . . . . . 27 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 | |||
9.4.1. Destination Address . . . . . . . . . . . . . . . . . 27 | 8.1. Forwarding Codes . . . . . . . . . . . . . . . . . . . . . 32 | |||
9.4.2. Source Address . . . . . . . . . . . . . . . . . . . . 27 | 8.2. UDP Destination Port . . . . . . . . . . . . . . . . . . . 32 | |||
9.5. Proxying Mtrace2 Query . . . . . . . . . . . . . . . . . . 27 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 32 | |||
9.6. Hiding Information . . . . . . . . . . . . . . . . . . . . 28 | 9.1. Addresses in Mtrace2 Header . . . . . . . . . . . . . . . 32 | |||
10. Client Behavior . . . . . . . . . . . . . . . . . . . . . . . 29 | 9.2. Topology Discovery . . . . . . . . . . . . . . . . . . . . 32 | |||
10.1. Sending Mtrace2 Query . . . . . . . . . . . . . . . . . . 29 | 9.3. Characteristics of Multicast Channel . . . . . . . . . . . 32 | |||
10.1.1. Destination Address . . . . . . . . . . . . . . . . . 29 | 9.4. Limiting Query/Request Rates . . . . . . . . . . . . . . . 33 | |||
10.1.2. Source Address . . . . . . . . . . . . . . . . . . . . 29 | 9.5. Limiting Reply Rates . . . . . . . . . . . . . . . . . . . 33 | |||
10.2. Determining the Path . . . . . . . . . . . . . . . . . . . 29 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
10.3. Collecting Statistics . . . . . . . . . . . . . . . . . . 29 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
10.4. Last Hop Router . . . . . . . . . . . . . . . . . . . . . 29 | 11.1. Normative References . . . . . . . . . . . . . . . . . . . 33 | |||
10.5. First Hop Router . . . . . . . . . . . . . . . . . . . . . 30 | 11.2. Informative References . . . . . . . . . . . . . . . . . . 34 | |||
10.6. Broken Intermediate Router . . . . . . . . . . . . . . . . 30 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
10.7. Mtrace2 Termination . . . . . . . . . . . . . . . . . . . 30 | ||||
10.7.1. Arriving at source . . . . . . . . . . . . . . . . . . 30 | ||||
10.7.2. Fatal error . . . . . . . . . . . . . . . . . . . . . 30 | ||||
10.7.3. No previous hop . . . . . . . . . . . . . . . . . . . 30 | ||||
10.7.4. Traceroute shorter than requested . . . . . . . . . . 30 | ||||
10.8. Continuing after an error . . . . . . . . . . . . . . . . 31 | ||||
11. Protocol-Specific Considerations . . . . . . . . . . . . . . . 32 | ||||
11.1. PIM-SM . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
11.2. Bi-Directional PIM . . . . . . . . . . . . . . . . . . . . 32 | ||||
11.3. PIM-DM . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
11.4. IGMP/MLD Proxy . . . . . . . . . . . . . . . . . . . . . . 32 | ||||
11.5. AMT . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
12. Problem Diagnosis . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
12.1. Forwarding Inconsistencies . . . . . . . . . . . . . . . . 34 | ||||
12.2. TTL or Hop Limit Problems . . . . . . . . . . . . . . . . 34 | ||||
12.3. Packet Loss . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
12.4. Link Utilization . . . . . . . . . . . . . . . . . . . . . 35 | ||||
12.5. Time Delay . . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 | ||||
13.1. Forwarding Codes . . . . . . . . . . . . . . . . . . . . . 36 | ||||
13.2. UDP Destination Port and IPv6 Address . . . . . . . . . . 36 | ||||
14. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | ||||
14.1. Topology Discovery . . . . . . . . . . . . . . . . . . . . 37 | ||||
14.2. Traffic Rates . . . . . . . . . . . . . . . . . . . . . . 37 | ||||
14.3. Limiting Query/Request Rates . . . . . . . . . . . . . . . 37 | ||||
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 38 | ||||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | ||||
16.1. Normative References . . . . . . . . . . . . . . . . . . . 39 | ||||
16.2. Informative References . . . . . . . . . . . . . . . . . . 39 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 41 | ||||
1. Introduction | 1. Introduction | |||
Given a multicast distribution tree, tracing from a multicast source | ||||
to a receiver is difficult, since we do not know which branch of the | ||||
multicast tree the receiver lies. This means that we have to flood | ||||
the whole tree to find the path from a source to a receiver. On the | ||||
other hand, walking up the tree from a receiver to a source is easy, | ||||
as most existing multicast routing protocols know the upstream router | ||||
for each source. Tracing from a receiver to a source can involve | ||||
only the routers on the direct path. | ||||
This document specifies the multicast traceroute facility named | This document specifies the multicast traceroute facility named | |||
mtrace version 2 or mtrace2. Mtrace2 allows the tracing of an IP | Mtrace version 2 or Mtrace2 which allows the tracing of an IP | |||
multicast routing paths. Mtrace2 provides additional information | multicast routing path. Mtrace2 is usually initiated from a Mtrace2 | |||
about packet rates and losses, or other diagnosis information. For | client towards a specified source, or a Rendezvous Point (RP) if no | |||
instance, mtrace2 is used for the following purposes. | source address is specified. RP is a special router where the source | |||
and receiver meet in PIM-SM [1]. Moreover, Mtrace2 provides | ||||
additional information such as the packet rates and losses, as well | ||||
as other diagnosis information. Especially, Mtrace2 can be used for | ||||
the following purposes: | ||||
o To trace the path that a packet would take from some source to | o To trace the path that a packet would take from a source to a | |||
some destination. | receiver. | |||
o To isolate packet loss problems (e.g., congestion). | o To isolate packet loss problems (e.g., congestion). | |||
o To isolate configuration problems (e.g., TTL threshold). | o To isolate configuration problems (e.g., TTL threshold). | |||
Mtrace2 consists of the client and router programs. The mtrace2 | Figure 1 shows a typical case on how Mtrace2 is used. FHR represents | |||
client program is invoked from somewhere in the multicast tree, on a | the first-hop router, LHR represents the last-hop router, and the | |||
host, router, or proxy such as IGMP/MLD proxy [8]. The node invoking | arrow lines represent the Mtrace2 messages that are sent from one | |||
the program is called the mtrace2 client. | node to another. The numbers before the Mtrace2 messages represent | |||
the sequence of the messages that would happen. Source, Receiver and | ||||
Mtrace2 client are typically a host on the Internet. | ||||
The mtrace2 client program creates the mtrace2 Query message, which | 2. Request 2. Request | |||
includes a source and multicast address specified by the client, and | +----+ +----+ | |||
forwards the message to its neighbor router or proxy. This initiates | | | | | | |||
a trace of a multicast routing path from the client toward the | v | v | | |||
specified source, or if no source address is specified, toward a core | +--------+ +-----+ +-----+ +----------+ | |||
router if such a router exists. In the case of PIM-SM [6], the core | | Source |----| FHR |----- The Internet -----| LHR |----| Receiver | | |||
router is an RP maintaining the specified multicast address. | +--------+ +-----+ | +-----+ +----------+ | |||
\ | ^ | ||||
\ | / | ||||
\ | / | ||||
\ | / | ||||
3. Reply \ | / 1. Query | ||||
\ | / | ||||
\ | / | ||||
\ +---------+ / | ||||
v | Mtrace2 |/ | ||||
| client | | ||||
+---------+ | ||||
When a router or proxy receives an mtrace2 Query message and has the | Figure 1 | |||
corresponding routing state regarding the source and multicast | ||||
addresses specified in the Query, the router or proxy invokes the | ||||
mtrace2 router program. The mtrace2 router program creates an | ||||
mtrace2 Request message corresponding to the query and forwards the | ||||
Request toward the specified source or the core router. | ||||
When a first-hop router or proxy (a single hop from the source | When an Mtrace2 client initiates a multicast trace anywhere on the | |||
specified in the request) or the core router receives an mtrace2 | Internet, it sends an Mtrace2 Query packet to the LHR for a multicast | |||
Query or Request message, the router or proxy invokes the mtrace2 | group and a source address. The LHR turns the Query packet into a | |||
router program. The mtrace2 router program creates an mtrace2 Reply | Request, appends a standard response block containing its interface | |||
message. The Reply message is forwarded to the mtrace2 client, thus | addresses and packet statistics to the Request packet, then forwards | |||
completing the mtrace2 Request. | the packet towards the source. The Request packet is either | |||
unicasted to its upstream router towards the source, or multicasted | ||||
to the group if the upsteam router's IP address is not known. In a | ||||
similar fashion, each router along the path to the source appends a | ||||
standard response block to the end of the Request packet before | ||||
forwarding it to its upstream router. When the FHR receives the | ||||
Request packet, it appends its own standard response block, turns the | ||||
Request packet into a Reply, and unicasts the Reply back to the | ||||
Mtrace2 client. | ||||
The mtrace2 client program waits for the mtrace2 Reply message and | The Mtrace2 Reply may be returned before reaching the FHR if it | |||
displays the results. When an mtrace2 Reply message does not come | reaches the RP first, or a fatal error condition such as "no route" | |||
due to network congestion, a broken router (see Section 10.6) or a | is encountered along the path, or the hop count is exceeded. | |||
non-responding router (see Section 10.8), the mtrace2 client program | ||||
can resend an mtrace2 Query with a lower hop count (see Section 5.1) | ||||
and repeat the process until it receives an mtrace2 Reply message. | ||||
The mtrace2 client should also be aware that the mtrace2 Query may | The Mtrace2 client waits for the Mtrace2 Reply message and displays | |||
follow the control path on the routers, in the case of a router's | the results. When not receiving an Mtrace2 Reply message due to | |||
control plane and forwarding plane are not synchronized, e.g., a | network congestion, a broken router (see Section 5.6), or a non- | |||
buggy implementation. In this case, mtrace2 Requests will be | responding router (see Section 5.7), the Mtrace2 client may resend | |||
forwarded toward the specified source or the core router because the | another Mtrace2 Query with a lower hop count (see Section 3.2.1), and | |||
router does not have any forwarding state for the query. | repeat the process until it receives an Mtrace2 Reply message. The | |||
details are Mtrace2 client specific, and it is outside the scope of | ||||
this document. | ||||
The mtrace2 supports both IPv4 and IPv6 multicast traceroute | Note that when a router's control plane and forwarding plane are out | |||
facility. The protocol design, concept, and program behavior are | of sync, the Mtrace2 Requests might be forwarded based on the control | |||
same between IPv4 and IPv6 mtrace2. While the original IPv4 | states instead. In which case, the traced path might not represent | |||
multicast traceroute, mtrace, the query and response messages are | the real path the data packets would follow. | |||
implemented as IGMP messages [10], all mtrace2 messages are carried | ||||
on UDP. The packet formats of IPv4 and IPv6 mtrace2 are different | Mtrace2 supports both IPv4 and IPv6. Unlike the previous version of | |||
because of the different address families, but the syntax is similar. | Mtrace, which implements its query and response as IGMP messages [8], | |||
all Mtrace2 messages are UDP-based. Although the packet formats of | ||||
IPv4 and IPv6 Mtrace2 are different because of the address families, | ||||
the syntax between them is similar. | ||||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | In this document, the key words "MUST", "MUST NOT", "REQUIRED", | |||
NOT","SHOULD", "SHOULD NOT", "RECOMMENDED","MAY", and "OPTIONAL" in | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | |||
this document are to be interpreted as described in RFC 2119 [1]. | and "OPTIONAL" are to be interpreted as described in RFC 2119 [2], | |||
and indicate requirement levels for compliant Mtrace2 | ||||
implementations. | ||||
Since multicast traceroutes flow in the opposite direction to the | 2.1. Definitions | |||
data flow, we refer to "upstream" and "downstream" with respect to | ||||
data, unless explicitly specified. | ||||
Incoming interface: | Since Mtrace2 Queries and Requests flow in the opposite direction to | |||
The interface on which traffic is expected from the specified source | the data flow, we refer to "upstream" and "downstream" with respect | |||
and group. | to data, unless explicitly specified. | |||
Outgoing interface: | Incoming interface | |||
The interface on which traffic is forwarded from the specified source | The interface on which data is expected to arrive from the | |||
and group toward the destination. It is the interface on which the | specified source and group. | |||
mtrace2 Query or Request was received. | ||||
Previous-hop router: | Outgoing interface | |||
The router that is on the link attached to the Incoming interface and | The interface to which data from the source or RP is expected to | |||
is responsible for forwarding traffic for the specified source and | transmit for the specified source and group. It is also the | |||
group. | interface on which the Mtrace2 Request will be received. | |||
Last-hop router: | Upstream router | |||
The router that is on the link attached to the Outgoing interface and | The router, connecting to the Incoming interface of the current | |||
receives the mtrace2 Query from the adjacent mtrace2 client. | router, which is responsible for forwarding data for the specified | |||
source and group to the current router. | ||||
Group state: | First-hop router (FHR) | |||
It is the state in which a shared-tree protocol (e.g., PIM-SM [6]) | The router that is directly connected to the source the Mtrace2 | |||
running on a router chooses the previous-hop router toward the core | Query specifies. | |||
router or Rendezvous Point (RP) as its parent router. In this state, | ||||
source-specific state is not available for the corresponding | ||||
multicast address on the router. | ||||
Source-specific state: | Last-hop router (LHR) | |||
It is the state in which a routing protocol running on a router | The router that is directly connected to the receivers. It is | |||
chooses the path that would be followed for a source-specific join. | also the router that receives the Mtrace2 Query from an Mtrace2 | |||
client. | ||||
ALL-[protocol]-ROUTERS.MCAST.NET: | Group state | |||
It is a dedicated multicast address for a multicast router to | It is the state a shared-tree protocol, such as PIM-SM [1], uses | |||
communicate with other routers that are working with the same routing | to choose the upstream router towards the RP for the specified | |||
protocol. For instance, the address of ALL-PIM-ROUTERS.MCAST.NET [6] | group. In this state, source-specific state is not available for | |||
is '224.0.0.13' for IPv4 and 'ff02::d' for IPv6. | the corresponding group address on the router. | |||
3. Overview | Source-specific state | |||
It is the state that is used to choose the path towards the source | ||||
for the specified source and group. | ||||
Given a multicast distribution tree, tracing from a source to a | ALL-[protocol]-ROUTERS.MCAST.NET | |||
multicast destination is hard, since you do not know down which | It is a link-local multicast address for multicast routers to | |||
branch of the multicast tree the destination lies. This means that | communicate with their adjacent routers that are running the same | |||
you have to flood the whole tree to find the path from one source to | routing protocol. For instance, the address of ALL-PIM- | |||
one destination. However, walking up the tree from destination to | ROUTERS.MCAST.NET [1] is '224.0.0.13' for IPv4 and 'ff02::d' for | |||
source is easy, as most existing multicast routing protocols know the | IPv6. | |||
previous hop for each source. Tracing from destination to source can | ||||
involve only routers on the direct path. | ||||
The party requesting the multicast traceroute sends a traceroute | 3. Packet Formats | |||
Query packet to the last-hop multicast router for the given multicast | ||||
address. The last-hop router turns the Query into a Request packet | ||||
by changing the packet type and adding a response data block | ||||
containing its interface addresses and packet statistics, and then | ||||
forwards the Request packet via unicast to the router that the last- | ||||
hop router believes is the proper previous hop for the given source | ||||
and group. Each hop adds its response data to the end of the Request | ||||
packet, then unicast forwards it to the previous hop. The first-hop | ||||
router (the router that believes that packets from the source | ||||
originate on one of its directly connected networks) changes the | ||||
packet type to indicate a Reply packet and sends the completed Reply | ||||
to the mtrace2 client address specified in the Query header. The | ||||
Reply may be returned before reaching the first-hop router if a fatal | ||||
error condition such as "no route" is encountered along the path or | ||||
hop count is exceeded. | ||||
Multicast traceroute uses any information available to it in the | This section describes the details of the packet formats for Mtrace2 | |||
router to attempt to determine a previous hop to forward the trace | messages. | |||
towards. Multicast routing protocols vary in the type and amount of | ||||
state they keep; multicast traceroute endeavors to work with all of | ||||
them by using whatever is available. For example, if a PIM-SM router | ||||
is on the (*,G) tree, it chooses the parent towards the RP as the | ||||
previous hop. In these cases, no source/group-specific state is | ||||
available, but the path may still be traced. | ||||
4. Packet Formats | All Mtrace2 messages are encoded in TLV format (see Section 3.1). If | |||
an implementation receives an unknown TLV, it SHOULD ignored and | ||||
silently discarded the unknown TLV. If the length of a TLV exceeds | ||||
the length specified in the TLV, the TLV SHOULD be accepted; however, | ||||
any additional data after the TLV SHOULD be ignored. | ||||
The mtrace2 message is carried as a UDP packet. The destination | All Mtrace2 messages are UDP packets. For IPv4, Mtrace2 Query and | |||
address of mtrace2 Query messages is either the last-hop router | Request messages MUST NOT be fragmented. For IPv6, the packet size | |||
unicast address or multicast address if the mtrace2 client does not | for the Mtrace2 messages MUST NOT exceed 1280 bytes, which is the | |||
know the proper last-hop router address. The destination address of | smallest MTU for an IPv6 interface [3]. The source port is uniquely | |||
mtrace2 Report messages is the address specified in Previous-Hop | selected by the local host operating system. The destination port is | |||
Router Address field in the last appended mtrace2 Standard Response | the IANA reserved Mtrace2 port number (see Section 8). All Mtrace2 | |||
Block, which is either the previous-hop router unicast address or | messages MUST have a valid UDP checksum. | |||
multicast address. Detailed in Section 9.3. | ||||
Mtrace2 message is encoded in TLV format. If an implementation | Additionally, Mtrace2 supports both IPv4 and IPv6, but not mixed. | |||
receives a TLV whose length exceeds the TLV length specified in the | For example, if an Mtrace2 Query or Reply message arrives in as an | |||
Length field, the TLV SHOULD be accepted but any additional data | IPv4 packet, all addresses specified in the Mtrace2 messages MUST be | |||
SHOULD be ignored. If an implementation receives a TLV whose type | IPv4 as well. Same rule applies to IPv6 Mtrace2 messages. | |||
value is unknown, the mtrace2 message SHOULD be ignored and silently | ||||
dropped. | ||||
4.1. Mtrace2 TLV format | 3.1. Mtrace2 TLV format | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Length | Value .... | | | Type | Length | Value .... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Type (8 bits) | Type: 8 bits | |||
Length (16 bits) | Describes the format of the Value field. For all the available | |||
types, please see Section 3.2 | ||||
Value (variable length) | Length: 16 bits | |||
4.2. Defined TLVs | Length of Type, Length, and Value fields in octets. Minimum | |||
length required is 6 octets. The maximum TLV length is not | ||||
defined; however the entired Mtrace2 packet length should not | ||||
exceeed the available MTU. | ||||
The following TLV Types are defined: | Value: variable length | |||
Code Type | The format is based on the Type value. The length of the value | |||
====== ====================================== | field is Length field minus 3. All reserved fields in the Value | |||
1 Mtrace2 Query | field MUST be transmitted as zeros and ignored on receipt. | |||
2 Mtrace2 Request | ||||
3 Mtrace2 Reply | ||||
4 Mtrace2 Standard Response Block | ||||
5 Mtrace2 Augmented Response Block | ||||
An mtrace2 message MUST contain exactly one Mtrace2 Query header. A | 3.2. Defined TLVs | |||
multicast router that sends an mtrace2 Request or Reply message MUST | ||||
add one mtrace2 Standard Response block to given mtrace2 message but | ||||
MUST NOT add multiple mtrace2 Standard Response blocks to it. A | ||||
multicast router that adds one mtrace2 Standard Response block to | ||||
given mtrace2 message MAY append one or multiple Augmented Response | ||||
blocks. | ||||
The TLV type field is defined to be "0x1" and "0x2" for mtrace2 | The following TLV Types are defined: | |||
Queries and Requests, respectively. An mtrace2 message containing | ||||
the type "0x1" is an mtrace2 Query. It is sent by an mtrace2 querier | ||||
(i.e., an mtrace2 client). It is changed to "0x2" by the proper | ||||
last-hop router. The type field is changed to "0x3" when the packet | ||||
is completed and sent as an mtrace2 Reply from the first-hop router | ||||
to the querier. | ||||
5. Mtrace2 Query Header | Code Type | |||
==== ================================ | ||||
0x01 Mtrace2 Query | ||||
0x02 Mtrace2 Request | ||||
0x03 Mtrace2 Reply | ||||
0x04 Mtrace2 Standard Response Block | ||||
0x05 Mtrace2 Augmented Response Block | ||||
0x06 Mtrace2 Extended Query Block | ||||
The mtrace2 supports both IPv4 and IPv6. If the mtrace2 Query or | Each Mtrace2 message MUST begin with either a Query, Request or Reply | |||
Reply arrives in an IPv4 packet, all addresses specified in the | TLV. The first TLV determines the type of each Mtrace2 message. | |||
mtrace2 messages must be with IPv4 addresses. | Following this TLV, there can be a sequence of optional Extended | |||
Query Blocks. In the case of the Request and Reply message, it is | ||||
then followed by a sequence of Standard Response Blocks, each from a | ||||
multicast router on the path towards the source or the RP. In the | ||||
case more information is needed, a Standard Response Block can be | ||||
followed by one or multiple Augmented Response Blocks. | ||||
The mtrace2 message is carried as a UDP packet. The UDP source port | We will describe each message type in details in the next few | |||
is uniquely selected by the local host operating system. The UDP | sections. | |||
destination port is the IANA reserved mtrace2 port number (see | ||||
Section 13). The UDP checksum MUST be valid in mtrace2 messages. | ||||
The mtrace2 message includes the common mtrace2 Query header as | 3.2.1. Mtrace2 Query | |||
follows. The header is only filled in by the originator of the | ||||
mtrace2 Query; intermediate routers MUST NOT modify any of the | ||||
fields. | ||||
0 1 2 3 | An Mtrace2 query is usually originated by an Mtrace2 client which | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | sends an Mtrace2 Query message to the LHR. When tracing towards the | |||
+-+-+-+-+-+-+-+-+ | source or the RP, the intermediate routers MUST NOT modify the Query | |||
| # hops | | message except the Type field. | |||
An Mtrace2 Query message is shown as follows: | ||||
0 1 2 3 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Type | Length | # Hops | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Multicast Address | | | Multicast Address | | |||
| | | | | | |||
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | |||
| | | | | | |||
| Source Address | | | Source Address | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
| Mtrace2 Client Address | | | Mtrace2 Client Address | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Query ID | Client Port # | | | Query ID | Client Port # | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 1 | Figure 2 | |||
5.1. # hops: 8 bits | # Hops: 8 bits | |||
This field specifies the maximum number of hops that the Mtrace2 | ||||
client wants to trace. If there are some error conditions in the | ||||
middle of the path that prevent an Mtrace2 Reply from being | ||||
received by the client, the client MAY issues another Mtrace2 | ||||
Query with the lower number of hops until it receives a Reply from | ||||
the FHR. | ||||
This field specifies the maximum number of hops that the mtrace2 | Multicast Address: 32 bits or 128 bits | |||
client wants to trace. If there is some error condition in the | This field specifies an IPv4 or IPv6 address, which can be either: | |||
middle of the path that prevents an mtrace2 Reply from being received | ||||
by the client, the client issues another mtrace2 Query with the lower | ||||
number of hops until it receives a Reply from the first-hop router. | ||||
5.2. Multicast Address | m-1: a multicast group address to be traced; or, | |||
This field specifies the 32 bits length IPv4 or 128 bits length IPv6 | m-2: all 1's in case of IPv4 or the unspecified address (::) in | |||
multicast address to be traced, or is filled with "all 1" in case of | case of IPv6 if no group-specific information is desired. | |||
IPv4 or with the unspecified address (::) in case of IPv6 if no | ||||
group-specific information is desired. Note that non-group-specific | ||||
mtrace2 MUST specify source address. | ||||
5.3. Source Address | Source Address: 32 bits or 128 bits | |||
This field specifies an IPv4 or IPv6 address, which can be either: | ||||
This field specifies the 32 bits length IPv4 or 128 bits length IPv6 | s-1: an unicast address of the source to be traced; or, | |||
address of the multicast source for the path being traced, or is | ||||
filled with "all 1" in case of IPv4 or with the unspecified address | ||||
(::) in case of IPv6 if no source-specific information such as a | ||||
trace for RPT in PIM-SM is desired. Note that non-source-specific | ||||
traceroutes may not be possible with certain multicast routing | ||||
protocols. | ||||
5.4. Mtrace2 Client Address | s-2: all 1's in case of IPv4 or the unspecified address (::) in | |||
case of IPv6 if no source-specific information is desired. | ||||
For example, the client is tracing a (*,g) group state. | ||||
This field specifies the 32 bits length IPv4 or 128 bits length IPv6 | Note that it is invalid to have a source-group combination of | |||
global address of the mtrace2 client. The trace starts at this | (s-2, m-2). If a router receives such combination in an Mtrace2 | |||
client address and proceeds toward the traffic source. | Query, it MUST silently discard the Query. | |||
5.5. Query ID: 16 bits | Mtrace2 Client Address: 32 bits or 128 bits | |||
This field specifies the Mtrace2 client's IPv4 address or IPv6 | ||||
global address. This address MUST be a valid unicast address, and | ||||
therefore, MUST NOT be all 1's or an unspecified address. The | ||||
Mtrace2 Reply will be sent to this address. | ||||
This field is used as a unique identifier for this mtrace2 Request so | Query ID: 16 bits | |||
that duplicate or delayed Replies may be detected. | This field is used as a unique identifier for this Mtrace2 Query | |||
so that duplicate or delayed Reply messages may be detected. | ||||
5.6. Client Port # | Client Port #: 16 bits | |||
This field specifies the destination UDP port number for receiving | ||||
the Mtrace2 Reply packet. | ||||
Mtrace2 Reply is sent back to the address specified in an Mtrace2 | 3.2.2. Mtrace2 Extended Query Block | |||
Client Address field. This field specifies the UDP port number the | ||||
router will send Mtrace2 Reply. This client port number MUST NOT be | ||||
changed by any router. | ||||
6. IPv4 Mtrace2 Standard Response Block | There may be a sequence of optional Extended Query Blocks that follow | |||
an Mtrace2 Query to further specify any information needed for the | ||||
Query. For example, an Mtrace2 client might be interested in tracing | ||||
the path the specified source and group would take based on a certain | ||||
topology. In which case, the client can pass in the multi-topology | ||||
ID as the Value for an Extended Query Type (see below). The Extended | ||||
Query Type is extensible and the behavior of the new types will be | ||||
addressed by seperate documents. | ||||
Each intermediate IPv4 router in a trace path appends "response data | The Mtrace2 Extended Query Block is formatted as follows: | |||
block" to the forwarded trace packet. The standard response data | ||||
block looks as follows. | ||||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| MBZ | | | Type | Length | MBZ |T| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Extended Query Type | Value .... | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
MBZ: 7 bits | ||||
This field must be zeroed on transmission and ignored on | ||||
reception. | ||||
T-bit (Transitive Attribute): 1 bit | ||||
If the TLV type is unrecognized by the receiving router, then this | ||||
TLV is either discarded or forwarded along with the Query, | ||||
depending on the value of this bit. If this bit is set, then the | ||||
router MUST forward this TLV. If this bit is clear, the router | ||||
MUST send an mtrace2 Reply with an UNKNOWN_QUERY error. | ||||
Extended Query Type: 16 bits | ||||
This field specifies the type of the Extended Query Block. | ||||
Value: 16 bits | ||||
This field specifies the value of this Extended Query. | ||||
3.2.3. Mtrace2 Request | ||||
The format of an Mtrace2 Request message is similar to an Mtrace2 | ||||
Query except the Type field is 0x02. | ||||
When a LHR receives an Mtrace2 Query message, it would turn the Query | ||||
into a Request by changing the Type field of the Query from 0x01 to | ||||
0x02. The LHR would then append an Mtrace2 Standard Response Block | ||||
(see Section 3.2.5) of its own to the Request message before sending | ||||
it upstream. The upstream routers would do the same without changing | ||||
the Type field until one of them is ready to send a Reply. | ||||
3.2.4. Mtrace2 Reply | ||||
The format of an Mtrace2 Reply message is similar to an Mtrace2 Query | ||||
except the Type field is 0x03. | ||||
When a FHR or a RP receives an Mtrace2 Request message which is | ||||
destined to itself, it would append an Mtrace2 Standard Response | ||||
Block (see Section 3.2.5) of its own to the Request message. Next, | ||||
it would turn the Request message into a Reply by changing the Type | ||||
field of the Request from 0x02 to 0x03. The Reply message would then | ||||
be unicated to the Mtrace2 client specified in the Mtrace2 Client | ||||
Address field. | ||||
There are a number of cases an intermediate router might return a | ||||
Reply before a Request reaches the FHR or the RP. See Section 4.1.1, | ||||
Section 4.2.2, Section 4.3.3, and Section 4.5 for more details. | ||||
3.2.5. IPv4 Mtrace2 Standard Response Block | ||||
This section describes the message format of an IPv4 Mtrace2 Standard | ||||
Response Block. The Type field is 0x04. | ||||
0 1 2 3 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Type | Length | MBZ | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Query Arrival Time | | | Query Arrival Time | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Incoming Interface Address | | | Incoming Interface Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Outgoing Interface Address | | | Outgoing Interface Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Previous-Hop Router Address | | | Upstream Router Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. Input packet count on incoming interface . | . Input packet count on incoming interface . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. Output packet count on outgoing interface . | . Output packet count on outgoing interface . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. Total number of packets for this source-group pair . | . Total number of packets for this source-group pair . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Rtg Protocol | Multicast Rtg Protocol | | | Rtg Protocol | Multicast Rtg Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Fwd TTL | MBZ |S| Src Mask |Forwarding Code| | | Fwd TTL | MBZ |S| Src Mask |Forwarding Code| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
6.1. MBZ: 8 bit | MBZ: 8 bits | |||
This field must be zeroed on transmission and ignored on | ||||
Must be zeroed on transmission and ignored on reception. | reception. | |||
6.2. Query Arrival Time: 32 bits | ||||
The Query Arrival Time is a 32-bit NTP timestamp specifying the | ||||
arrival time of the mtrace2 Request packet at this router. The 32- | ||||
bit form of an NTP timestamp consists of the middle 32 bits of the | ||||
full 64-bit form; that is, the low 16 bits of the integer part and | ||||
the high 16 bits of the fractional part. | ||||
The following formula converts from a UNIX timeval to a 32-bit NTP | ||||
timestamp: | ||||
query_arrival_time | ||||
= (tv.tv_sec + 32384) << 16 + ((tv.tv_usec << 10) / 15625) | ||||
The constant 32384 is the number of seconds from Jan 1, 1900 to Jan | ||||
1, 1970 truncated to 16 bits. ((tv.tv_usec << 10) / 15625) is a | ||||
reduction of ((tv.tv_usec / 100000000) << 16). | ||||
However, mtrace2 does not require synchronizing NTP timestamp among | ||||
all routers along paths to measure one-way latency. The use of Query | ||||
Arrival Time is useful to measure the packets per second (PPS). | ||||
Suppose that a client issues two queries Q1 and Q2, and the | ||||
corresponding requests R1 and R2 arrive at router X at t1 and t2, | ||||
then the client would be able to calculate the PPS at router X by | ||||
using the packet count results at t1 and t2. | ||||
6.3. Incoming Interface Address: 32 bits | ||||
This field specifies the address of the interface on which packets | ||||
from this source and group are expected to arrive, or 0 if unknown or | ||||
unnumbered. | ||||
6.4. Outgoing Interface Address: 32 bits | ||||
This field specifies the address of the interface on which packets | ||||
from this source and group flow to the specified destination, or 0 if | ||||
unknown or unnumbered. | ||||
6.5. Previous-Hop Router Address: 32 bits | ||||
This field specifies the router from which this router expects | ||||
packets from this source. This may be a multicast group (e.g. ALL- | ||||
[protocol]-ROUTERS.MCAST.NET) if the previous hop is not known | ||||
because of the workings of the multicast routing protocol. However, | ||||
it should be 0 if the incoming interface address is unknown or | ||||
unnumbered. | ||||
6.6. Input packet count on incoming interface: 64 bits | ||||
This field contains the number of multicast packets received for all | ||||
groups and sources on the incoming interface, or "all 1" if no count | ||||
can be reported. This counter may have the same value as | ||||
ifHCInMulticastPkts from the IF-MIB [12] for this interface. | ||||
6.7. Output packet count on outgoing interface: 64 bits | ||||
This field contains the number of multicast packets that have been | ||||
transmitted or queued for transmission for all groups and sources on | ||||
the outgoing interface, or "all 1" if no count can be reported. This | ||||
counter may have the same value as ifHCOutMulticastPkts from the IF- | ||||
MIB for this interface. | ||||
6.8. Total number of packets for this source-group pair: 64 bits | ||||
This field counts the number of packets from the specified source | ||||
forwarded by this router to the specified group, or "all 1" if no | ||||
count can be reported. If the S bit is set, the count is for the | ||||
source network, as specified by the Src Mask field. If the S bit is | ||||
set and the Src Mask field is 63, indicating no source-specific | ||||
state, the count is for all sources sending to this group. This | ||||
counter should have the same value as ipMcastRoutePkts from the | ||||
IPMROUTE-STD-MIB [13] for this forwarding entry. | ||||
6.9. Rtg Protocol: 16 bits | ||||
This field describes the routing protocol used to decide an RPF | ||||
interface for the requested source. This value should have the same | ||||
value as ipMcastRouteRtProtocol from the IPMROUTE-STD-MIB [13] for | ||||
this entry. If the router is not able to obtain this value, "all 0" | ||||
must be specified. | ||||
6.10. Multicast Rtg Protocol: 16 bits | ||||
This field describes the multicast routing protocol in use between | ||||
this router and the previous-hop router. This value should have the | ||||
same value as ipMcastRouteProtocol from the IPMROUTE-STD-MIB [13] for | ||||
this entry. If the router does not able to obtain this value, "all | ||||
0" must be specified. | ||||
6.11. Fwd TTL: 8 bits | ||||
This field contains the TTL that a packet is required to have before | ||||
it will be forwarded over the outgoing interface. | ||||
6.12. S: 1 bit | ||||
This S bit indicates that the packet count for the source-group pair | ||||
is for the source network, as determined by masking the source | ||||
address with the Src Mask field. | ||||
6.13. Src Mask: 7 bits | ||||
This field contains the number of 1's in the netmask this router has | ||||
for the source (i.e. a value of 24 means the netmask is 0xffffff00). | ||||
If the router is forwarding solely on group state, this field is set | ||||
to 127 (0x7f). | ||||
6.14. Forwarding Code: 8 bits | ||||
This field contains a forwarding information/error code. Section 9.2 | ||||
explains how and when the forwarding code is filled. Defined values | ||||
are as follows; | ||||
Value Name Description | Query Arrival Time: 32 bits | |||
The Query Arrival Time is a 32-bit NTP timestamp specifying the | ||||
arrival time of the Mtrace2 Query or Request packet at this | ||||
router. The 32-bit form of an NTP timestamp consists of the | ||||
middle 32 bits of the full 64-bit form; that is, the low 16 bits | ||||
of the integer part and the high 16 bits of the fractional part. | ||||
----- -------------- ------------------------------------------- | The following formula converts from a UNIX timeval to a 32-bit NTP | |||
timestamp: | ||||
0x00 NO_ERROR No error | query_arrival_time | |||
= (tv.tv_sec + 32384) << 16 + ((tv.tv_usec << 10) / 15625) | ||||
0x01 WRONG_IF Mtrace2 Request arrived on an interface | The constant 32384 is the number of seconds from Jan 1, 1900 to | |||
to which this router would not forward for | Jan 1, 1970 truncated to 16 bits. ((tv.tv_usec << 10) / 15625) is | |||
this source, group, destination. | a reduction of ((tv.tv_usec / 100000000) << 16). | |||
0x02 PRUNE_SENT This router has sent a prune upstream which | Note that Mtrace2 does not require all the routers on the path to | |||
applies to the source and group in the | have synchronized clocks in order to measure one-way latency. | |||
mtrace2 Request. | ||||
0x03 PRUNE_RCVD This router has stopped forwarding for this | Additionally, Query Arrival Time is useful for measuring the | |||
source and group in response to a request | packet rate. For example, suppose that a client issues two | |||
from the next hop router. | queries, and the corresponding requests R1 and R2 arrive at router | |||
X at time T1 and T2, then the client would be able to compute the | ||||
packet rate on router X by using the packet count information | ||||
stored in the R1 and R2, and the time T1 and T2. | ||||
0x04 SCOPED The group is subject to administrative | Incoming Interface Address: 32 bits | |||
scoping at this hop. | This field specifies the address of the interface on which packets | |||
from the source or the RP are expected to arrive, or 0 if unknown | ||||
or unnumbered. | ||||
0x05 NO_ROUTE This router has no route for the source or | Outgoing Interface Address: 32 bits | |||
group and no way to determine a potential | This field specifies the address of the interface on which packets | |||
route. | from the source or the RP are expected to transmit towards the | |||
receiver, or 0 if unknown or unnumbered. This is also the address | ||||
of the interface on which the Mtrace2 Query or Request arrives. | ||||
0x06 WRONG_LAST_HOP This router is not the proper last-hop | Upstream Router Address: 32 bits | |||
router. | This field specifies the address of the upstream router from which | |||
this router expects packets from this source. This may be a | ||||
multicast group (e.g. ALL-[protocol]-ROUTERS.MCAST.NET) if the | ||||
upstream router is not known because of the workings of the | ||||
multicast routing protocol. However, it should be 0 if the | ||||
incoming interface address is unknown or unnumbered. | ||||
0x07 NOT_FORWARDING This router is not forwarding this source, | Input packet count on incoming interface: 64 bits | |||
group out the outgoing interface for an | This field contains the number of multicast packets received for | |||
unspecified reason. | all groups and sources on the incoming interface, or all 1's if no | |||
count can be reported. This counter may have the same value as | ||||
ifHCInMulticastPkts from the IF-MIB [9] for this interface. | ||||
0x08 REACHED_RP Reached Rendezvous Point or Core | Output packet count on outgoing interface: 64 bit | |||
This field contains the number of multicast packets that have been | ||||
transmitted or queued for transmission for all groups and sources | ||||
on the outgoing interface, or all 1's if no count can be reported. | ||||
This counter may have the same value as ifHCOutMulticastPkts from | ||||
the IF-MIB [9] for this interface. | ||||
0x09 RPF_IF Mtrace2 Request arrived on the expected | Total number of packets for this source-group pair: 64 bits | |||
RPF interface for this source and group. | This field counts the number of packets from the specified source | |||
forwarded by the router to the specified group, or all 1's if no | ||||
count can be reported. If the S bit is set (see below), the count | ||||
is for the source network, as specified by the Src Mask field (see | ||||
below). If the S bit is set and the Src Mask field is 63, | ||||
indicating no source-specific state, the count is for all sources | ||||
sending to this group. This counter should have the same value as | ||||
ipMcastRoutePkts from the IPMROUTE-STD-MIB [10] for this | ||||
forwarding entry. | ||||
0x0A NO_MULTICAST Mtrace2 Request arrived on an interface | Rtg Protocol: 16 bits | |||
which is not enabled for multicast. | This field describes the unicast routing protocol running between | |||
this router and the upstream router, and it is used to determine | ||||
the RPF interface for the specified source or RP. This value | ||||
should have the same value as ipMcastRouteRtProtocol from the | ||||
IPMROUTE-STD-MIB [10] for this entry. If the router is not able | ||||
to obtain this value, all 0's must be specified. | ||||
0x0B INFO_HIDDEN One or more hops have been hidden from this | Multicast Rtg Protocol: 16 bits | |||
trace. | This field describes the multicast routing protocol in use between | |||
the router and the upstream router. This value should have the | ||||
same value as ipMcastRouteProtocol from the IPMROUTE-STD-MIB [10] | ||||
for this entry. If the router cannot obtain this value, all 0's | ||||
must be specified. | ||||
0x0C REACHED_GW Mtrace2 Request arrived on a gateway (e.g., | Fwd TTL: 8 bits | |||
a NAT or firewall) that hides the | This field contains the TTL in which an Mtrace2 Request packet can | |||
information between this router and the | be forwarded towards the source or the RP. | |||
mtrace2 querier | ||||
0x81 NO_SPACE There was not enough room to insert another | S: 1 bit | |||
response data block in the packet. | If this bit is set, it indicates that the packet count for the | |||
source-group pair is for the source network, as determined by | ||||
masking the source address with the Src Mask field. | ||||
0x82 ADMIN_PROHIB Mtrace2 is administratively prohibited. | Src Mask: 7 bits | |||
This field contains the number of 1's in the netmask the router | ||||
has for the source (i.e. a value of 24 means the netmask is | ||||
0xffffff00). If the router is forwarding solely on group state, | ||||
this field is set to 127 (0x7f). | ||||
Note that if a router discovers there is not enough room in a packet | Forwarding Code: 8 bits | |||
to insert its response, it puts the NO_SPACE code value in the | This field contains a forwarding information/error code. | |||
previous router's Forwarding Code field, overwriting any error the | Section 4.1 and Section 4.2 will explain how and when the | |||
previous router placed there. After the router sends the Reply to | Forwarding Code is filled. Defined values are as follows: | |||
the Mtrace2 Client Address in the header, the router continues the | ||||
mtrace2 Query by sending an mtrace2 Request containing the same | ||||
mtrace2 Query header. Section 9.3 and Section 10.8 include the | ||||
details. | ||||
The 0x80 bit of the Forwarding Code is used to indicate a fatal | Value Name Description | |||
error. A fatal error is one where the router may know the previous | ----- -------------- ---------------------------------------------- | |||
hop but cannot forward the message to it. | 0x00 NO_ERROR No error | |||
0x01 WRONG_IF Mtrace2 Request arrived on an interface | ||||
to which this router would not forward for | ||||
the specified group towards the source or RP. | ||||
0x02 PRUNE_SENT This router has sent a prune upstream which | ||||
applies to the source and group in the | ||||
Mtrace2 Request. | ||||
0x03 PRUNE_RCVD This router has stopped forwarding for this | ||||
source and group in response to a request | ||||
from the downstream router. | ||||
0x04 SCOPED The group is subject to administrative | ||||
scoping at this router. | ||||
0x05 NO_ROUTE This router has no route for the source or | ||||
group and no way to determine a potential | ||||
route. | ||||
0x06 WRONG_LAST_HOP This router is not the proper LHR. | ||||
0x07 NOT_FORWARDING This router is not forwarding this source and | ||||
group out the outgoing interface for an | ||||
unspecified reason. | ||||
0x08 REACHED_RP Reached the Rendezvous Point. | ||||
0x09 RPF_IF Mtrace2 Request arrived on the expected | ||||
RPF interface for this source and group. | ||||
0x0A NO_MULTICAST Mtrace2 Request arrived on an interface | ||||
which is not enabled for multicast. | ||||
0x0B INFO_HIDDEN One or more hops have been hidden from this | ||||
trace. | ||||
0x0C REACHED_GW Mtrace2 Request arrived on a gateway (e.g., | ||||
a NAT or firewall) that hides the | ||||
information between this router and the | ||||
Mtrace2 client. | ||||
0x0D UNKNOWN_QUERY A non-transitive Extended Query Type was | ||||
received by a router which does not support | ||||
the type. | ||||
0x80 FATAL_ERROR A fatal error is one where the router may | ||||
know the upstream router but cannot forward | ||||
the message to it. | ||||
0x81 NO_SPACE There was not enough room to insert another | ||||
Standard Response Block in the packet. | ||||
0x83 ADMIN_PROHIB Mtrace2 is administratively prohibited. | ||||
7. IPv6 Mtrace2 Standard Response Block | 3.2.6. IPv6 Mtrace2 Standard Response Block | |||
Each intermediate IPv6 router in a trace path appends "response data | This section describes the message format of an IPv6 Mtrace2 Standard | |||
block" to the forwarded trace packet. The standard response data | Response Block. The Type field is also 0x04. | |||
block looks as follows. | ||||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| MBZ | | | Type | Length | MBZ | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Query Arrival Time | | | Query Arrival Time | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Incoming Interface ID | | | Incoming Interface ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Outgoing Interface ID | | | Outgoing Interface ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
* Local Address * | * Local Address * | |||
| | | | | | |||
skipping to change at page 19, line 44 | skipping to change at page 17, line 38 | |||
| | | | | | |||
. Output packet count on outgoing interface . | . Output packet count on outgoing interface . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. Total number of packets for this source-group pair . | . Total number of packets for this source-group pair . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Rtg Protocol | Multicast Rtg Protocol | | | Rtg Protocol | Multicast Rtg Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| MBZ |S|Src Prefix Len |Forwarding Code| | | MBZ 2 |S|Src Prefix Len |Forwarding Code| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
7.1. MBZ: 8 bit | MBZ: 8 bits | |||
This field must be zeroed on transmission and ignored on | ||||
Must be zeroed on transmission and ignored on reception. | reception. | |||
7.2. Query Arrival Time: 32 bits | ||||
Same definition described in Section 6.2 | ||||
7.3. Incoming Interface ID: 32 bits | ||||
This field specifies the interface ID on which packets from this | ||||
source and group are expected to arrive, or 0 if unknown. This ID | ||||
should be the value taken from InterfaceIndex of the IF-MIB [12] for | ||||
this interface. This field is carried in network byte order. | ||||
7.4. Outgoing Interface ID: 32 bits | ||||
This field specifies the interface ID on which packets from this | ||||
source and group flow to the specified destination, or 0 if unknown. | ||||
This ID should be the value taken from InterfaceIndex of the IF-MIB | ||||
for this interface. This field is carried in network byte order. | ||||
7.5. Local Address | Query Arrival Time: 32 bits | |||
Same definition as in IPv4. | ||||
This field specifies a global IPv6 address that uniquely identifies | Incoming Interface ID: 32 bits | |||
the router. A unique local unicast address [11] SHOULD NOT be used | This field specifies the interface ID on which packets from the | |||
unless the router is only assigned link-local and unique local | source or RP are expected to arrive, or 0 if unknown. This ID | |||
addresses. If the router is only assigned link-local addresses, its | should be the value taken from InterfaceIndex of the IF-MIB [9] | |||
link-local address can be specified in this field. | for this interface. | |||
7.6. Remote Address | Outgoing Interface ID: 32 bits | |||
This field specifies the interface ID to which packets from the | ||||
source or RP are expected to transmit, or 0 if unknown. This ID | ||||
should be the value taken from InterfaceIndex of the IF-MIB [9] | ||||
for this interface | ||||
This field specifies the address of the previous-hop router, which, | Local Address: 128 bits | |||
in most cases, is a link-local unicast address for the queried source | This field specifies a global IPv6 address that uniquely | |||
and destination addresses. | identifies the router. An unique local unicast address [11] | |||
SHOULD NOT be used unless the router is only assigned link-local | ||||
and unique local addresses. If the router is only assigned link- | ||||
local addresses, its link-local address can be specified in this | ||||
field. | ||||
Although a link-local address does not have enough information to | Remote Address: 128 bits | |||
identify a node, it is possible to detect the previous-hop router | This field specifies the address of the upstream router, which, in | |||
with the assistance of Incoming Interface ID and the current router | most cases, is a link-local unicast address for the upstream | |||
address (i.e., Local Address). | router. | |||
This may be a multicast group (e.g., ALL-[protocol]- | Although a link-local address does not have enough information to | |||
ROUTERS.MCAST.NET) if the previous hop is not known because of the | identify a node, it is possible to detect the upstream router with | |||
workings of the multicast routing protocol. However, it should be | the assistance of Incoming Interface ID and the current router | |||
the unspecified address (::) if the incoming interface address is | address (i.e., Local Address). | |||
unknown. | ||||
7.7. Input packet count on incoming interface | Note that this may be a multicast group (e.g., ALL-[protocol]- | |||
ROUTERS.MCAST.NET) if the upstream router is not known because of | ||||
the workings of a multicast routing protocol. However, it should | ||||
be the unspecified address (::) if the incoming interface address | ||||
is unknown. | ||||
Same definition described in Section 6.6 | Input packet count on incoming interface: 64 bits | |||
Same definition as in IPv4. | ||||
7.8. Output packet count on outgoing interface | Output packet count on outgoing interface: 64 bits | |||
Same definition as in IPv4. | ||||
Same definition described in Section 6.7 | Total number of packets for this source-group pair: 64 bits | |||
Same definition as in IPv4, except if the S bit is set (see | ||||
below), the count is for the source network, as specified by the | ||||
Src Prefix Len field. If the S bit is set and the Src Prefix Len | ||||
field is 255, indicating no source-specific state, the count is | ||||
for all sources sending to this group. This counter should have | ||||
the same value as ipMcastRoutePkts from the IPMROUTE-STD-MIB [10] | ||||
for this forwarding entry. | ||||
7.9. Total number of packets for this source-group pair | Rtg Protocol: 16 bits | |||
Same definition as in IPv4. | ||||
This field counts the number of packets from the specified source | Multicast Rtg Protocol: 16 bits | |||
forwarded by this router to the specified group, or "all 1" if no | Same definition as in IPv4. | |||
count can be reported. If the S bit is set, the count is for the | ||||
source network, as specified by the Src Prefix Len field. If the S | ||||
bit is set and the Src Prefix Len field is 255, indicating no source- | ||||
specific state, the count is for all sources sending to this group. | ||||
This counter should have the same value as ipMcastRoutePkts from the | ||||
IPMROUTE-STD-MIB for this forwarding entry. | ||||
7.10. Rtg Protocol: 16 bits | MBZ 2: 15 bits | |||
This field must be zeroed on transmission and ignored on | ||||
reception. | ||||
Same definition described in Section 6.9 | S: 1 bit | |||
Same definition as in IPv4, except the Src Prefix Len field is | ||||
used to mask the source address. | ||||
7.11. Multicast Rtg Protocol: 16 bits | Src Prefix Len: 8 bits | |||
This field contains the prefix length this router has for the | ||||
source. If the router is forwarding solely on group state, this | ||||
field is set to 255 (0xff). | ||||
Same definition described in Section 6.10 | Forwarding Code: 8 bits | |||
Same definition as in IPv4. | ||||
7.12. S: 1 bit | 3.2.7. Mtrace2 Augmented Response Block | |||
This S bit indicates that the packet count for the source-group pair | In addition to the Standard Response Block, a multicast router on the | |||
is for the source network, as determined by masking the source | traced path can optionally add one or multiple Augmented Response | |||
address with the Src Prefix Len field. | Blocks before sending the Request to its upstream router. | |||
7.13. Src Prefix Len: 8 bits | The Augmented Response Block is flexible for various purposes such as | |||
providing diagnosis information (see Section 7) and protocol | ||||
verification. It's Type field is 0x05, and its format is as follows: | ||||
This field contains the prefix length this router has for the source. | 0 1 2 3 | |||
If the router is forwarding solely on group state, this field is set | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
to 255 (0xff) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | Length | MBZ | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Augmented Response Type | Value .... | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
7.14. Forwarding Code: 8 bits | MBZ: 8 bits | |||
This field must be zeroed on transmission and ignored on | ||||
reception. | ||||
Same definition described in Section 6.14 | Augmented Response Type: 16 bits | |||
This field specifies the type of various responses from a | ||||
multicast router that might need to communicate back to the | ||||
Mtrace2 client as well as the multicast routers on the traced | ||||
path. | ||||
8. Mtrace2 Augmented Response Block | The Augmented Response Type is defined as follows: | |||
In addition to the standard response block, a multicast router on the | Code Type | |||
path will be able to add "augumented response block" when it sends | ==== =============================================== | |||
the mtrace2 Request to its upstream router or sends the Reply to the | 0x01 # of the returned Standard Response Blocks | |||
Mtrace2 Client Address. This augmented response block is flexible to | ||||
add various information. | ||||
0 1 2 3 | When the NO_SPACE error occurs on a router, the router should send | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | the original Mtrace2 Request received from the downstream router | |||
+-+-+-+-+-+-+-+-+ | as a Reply back to the Mtrace2 client, and continue with a new | |||
| MBZ | | Mtrace2 Request. In the new Request, the router would add a | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Standard Response Block followed by an Augmented Response Block | |||
| Type | Value .... | | with 0x01 as the Augmented Response Type, and the number of the | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | returned Mtrace2 Standard Response Blocks as the Value. | |||
The augmented response block is always appended to mtrace2 TLV header | Each upstream router would recognize the total number of hops the | |||
(0x04). The 16 bits Type filed of the augmented response block is | Request has been traced so far by adding this number and the | |||
defined for various purposes, such as diagnosis (as in Section 12) | number of the Standard Response Block in the current Request | |||
and protocol verification. The packet length of the augmented | message. | |||
response block is specified in the augmented response block TLV | ||||
header as seen in Section 4.1. | ||||
The following augmented response block type is defined: | This document only defines one Augmented Response Type in the | |||
Augmented Response Block. The description on how to provide | ||||
diagnosis information using the Augmented Response Block is out of | ||||
the scope of this document, and will be addressed in separate | ||||
documents. | ||||
Code Type | Value: variable length | |||
====== ================================================= | The format is based on the Augmented Response Type value. The | |||
0x01 # Mtrace2 Standard Response Blocks Returned | length of the value field is Length field minus 6. | |||
When the NO_SPACE error occurs, the router sends back the mtrace2 | 4. Router Behavior | |||
Reply with contained data (i.e., all appended response blocks), and | ||||
continues the mtrace2 Query by sending an mtrace2 Request as will be | ||||
described in Section 9.3. In this mtrace2 Request, the router | ||||
appends the augmented response block with the code "0x01" and the | ||||
number of returned mtrace2 response blocks. Every router between | ||||
this router and the first-hop router can recognize the limit number | ||||
of hops by referring this number and the # hops in the header. | ||||
This document only defines the above augmented response block type | This section describes the router behavior in the context of Mtrace2 | |||
and does not define other augmented response block types. Specifing | in details. | |||
how to deal with diagnosis information will be also described in | ||||
separate documents. | ||||
9. Router Behavior | 4.1. Receiving Mtrace2 Query | |||
All of these actions are performed in addition to (NOT instead of) | An Mtrace2 Query message is an Mtrace2 message with no response | |||
forwarding the packet, if applicable. E.g. a multicast packet that | blocks filled in, and uses TLV type of 0x01. | |||
has TTL or the hop limit remaining MUST be forwarded normally, as | ||||
MUST a unicast packet that has TTL or the hop limit remaining and is | ||||
not addressed to this router. | ||||
9.1. Receiving Mtrace2 Query | 4.1.1. Query Packet Verification | |||
An mtrace2 Query message is an mtrace2 message with no response | Upon receiving an Mtrace2 Query message, a router MUST examine | |||
blocks filled in, and uses TLV type 0x1 for IPv4 and IPv6 mtrace2. | whether the Multicast Address and the Source Address are a valid | |||
combination as specified in Section 3.2.1, and whether the Mtrace2 | ||||
Client Address is a valid IP unicast address. If either one is | ||||
invalid, the Query MUST be silently ignored. | ||||
9.1.1. Packet Verification | Mtrace2 supports non-local client to the LHR. It is up to the | |||
implementation to filter out such queries. | ||||
Upon receiving an mtrace2 Query message, a router must examine the | In the case when it is a local client, the router must then examine | |||
Query to see if it is the proper last-hop router for the destination | the Query to see if it is the proper LHR for the destination address | |||
address in the packet. It is the proper last-hop router if it has a | in the packet. It is the proper LHR if it has a multicast-capable | |||
multicast-capable interface on the same subnet as the Mtrace2 Client | interface on the same subnet as the Mtrace2 Client Address and is the | |||
Address and is the router that would forward traffic from the given | router that would forward traffic from the given (S,G) or (*,G) onto | |||
(S,G) or (*,G) onto that subnet. | that subnet. | |||
If the router determines that it is not the proper last-hop router, | If the router determines that it is not the proper LHR, or it cannot | |||
or it cannot make that determination, it does one of two things | make that determination, it does one of two things depending on | |||
depending if the Query was received via multicast or unicast. If the | whether the Query was received via multicast or unicast. If the | |||
Query was received via multicast, then it MUST be silently dropped. | Query was received via multicast, then it MUST be silently discarded. | |||
If it was received via unicast, a forwarding code of WRONG_LAST_HOP | If it was received via unicast, the router turns the Query into a | |||
is noted and processing continues as in Section 9.2. | Reply message by changing the TLV type to 0x03 and appending a | |||
Standard Response Block with a Forwarding Code of WRONG_LAST_HOP. | ||||
The rest of the fields in the Standard Response Block MUST be zeroed. | ||||
The router then sends the Reply message to the Mtrace2 Client Address | ||||
on the Client Port # as specified in the Mtrace2 Query. | ||||
Duplicate Query messages as identified by the tuple (Mtrace2 Client | Duplicate Query messages as identified by the tuple (Mtrace2 Client | |||
Address, Query ID) SHOULD be ignored. This MAY be implemented using | Address, Query ID) SHOULD be ignored. This MAY be implemented using | |||
a simple 1-back cache (i.e. remembering the Mtrace2 Client Address | a cache of previously processed queries keyed by the Mtrace2 Client | |||
and Query ID of the previous Query message that was processed, and | Address and Query ID pair. The duration of the cached entries is | |||
ignoring future messages with the same Mtrace2 Client Address and | implementation specific. Duplicate Request messages MUST NOT be | |||
Query ID). Duplicate Request messages MUST NOT be ignored in this | ignored in this manner. | |||
manner. | ||||
9.1.2. Normal Processing | 4.1.2. Query Normal Processing | |||
When a router receives an mtrace2 Query and it determines that it is | When a router receives an Mtrace2 Query and it determines that it is | |||
the proper last-hop router, it it changes the TLV type to 0x2 and | the proper LHR, it turns the Query to a Request by changing the TLV | |||
treats it like an mtrace2 Request and performs the steps listed in | type from 0x01 to 0x02, and performs the steps listed in Section 4.2. | |||
Section 9.2. | ||||
9.1.3. Mtrace2 Query Received by Non-Supported Router | 4.2. Receiving Mtrace2 Request | |||
When a router that does not support mtrace2 receives an mtrace2 Query | An Mtrace2 Request is an Mtrace2 message that uses TLV type of 0x02. | |||
message whose destination address is multicast, the router will | With the exception of the LHR, whose Request was just converted from | |||
silently discard the message. When the router receives an mtrace2 | a Query, each Request received by a router should have at least one | |||
Query message whose destination address is the router's interface | Standard Response Block filled in. | |||
address, the router returns an ICMP Port unreachable to the Mtrace2 | ||||
Client Address. | ||||
9.2. Receiving Mtrace2 Request | 4.2.1. Request Packet Verification | |||
An mtrace2 Request is a traceroute message with some number of | If the Mtrace2 Request does not come from an adjacent router, or if | |||
response blocks filled in, and uses TLV type 0x2 for IPv4 and IPv6 | the Request is not addressed to this router, or if the Request is | |||
mtrace2. | addressed to a multicast group which is not a link-scoped group (i.e. | |||
9.2.1. Packet Verification | 224/24 for IPv4, FFx2::/16 [4] for IPv6), it MUST be silently | |||
ignored. GTSM [12] SHOULD be used by the router to determine whether | ||||
the router is adjacent or not. | ||||
If the mtrace2 Request does not come from an adjacent host or router, | If the sum of the number of the Standard Response Blocks in the | |||
it MUST be silently ignored. If the mtrace2 Request is not addressed | received Mtrace2 Request and the value of the Augmented Response Type | |||
to this router, or if the Request is addressed to a multicast group | of 0x01, if any, is equal or more than the # Hops in the Mtrace2 | |||
which is not a link-scoped group (i.e. 224/24 for IPv4, FFx2::/16 [3] | Request, it MUST be silently ignored. | |||
for IPv6), it MUST be silently ignored. GTSM [14] SHOULD be used by | ||||
the router to determine whether the host or router is adjacent or | ||||
not. | ||||
9.2.2. Normal Processing | 4.2.2. Request Normal Processing | |||
When a router receives an mtrace2 Request, it performs the following | When a router receives an Mtrace2 Request message, it performs the | |||
steps. Note that it is possible to have multiple situations covered | following steps. Note that it is possible to have multiple | |||
by the Forwarding Codes. The first one encountered is the one that | situations covered by the Forwarding Codes. The first one | |||
is reported, i.e. all "note forwarding code N" should be interpreted | encountered is the one that is reported, i.e. all "note Forwarding | |||
as "if forwarding code is not already set, set forwarding code to N". | Code N" should be interpreted as "if Forwarding Code is not already | |||
set, set Forwarding Code to N". | ||||
1. If there is room in the current buffer (or the router can | 1. Prepare a Standard Response Block to be appended to the packet | |||
efficiently allocate more space to use), insert a new response | and fill in the Query Arrival Time, Outgoing Interface Address | |||
block into the packet and fill in the Query Arrival Time, | (for IPv4) or Outgoing Interface ID (for IPv6), Output Packet | |||
Outgoing Interface Address (for IPv4 mtrace2) or Outgoing | Count, and Fwd TTL (for IPv4). Note that the Outgoing Interface | |||
Interface ID (for IPv6 mtrace2), Output Packet Count, and Fwd | is the one on which the Mtrace2 Request message arrives. | |||
TTL (for IPv4 mtrace2). If there was no room, fill in the | ||||
forwarding code "NO_SPACE" in the *previous* hop's response | ||||
block, and forward the packet to the address specified in the | ||||
Mtrace2 Client Address field and continue the trace as described | ||||
in Section 9.3. | ||||
2. Attempt to determine the forwarding information for the source | 2. Attempt to determine the forwarding information for the | |||
and group specified, using the same mechanisms as would be used | specified source and group, using the same mechanisms as would | |||
when a packet is received from the source destined for the | be used when a packet is received from the source destined for | |||
group. A state need not be instantiated, it can be "phantom" | the group. A state need not be instantiated, it can be a | |||
state created only for the purpose of the trace, such as "dry- | "phantom" state created only for the purpose of the trace, such | |||
run". | as "dry-run." | |||
If using a shared-tree protocol and there is no source-specific | If using a shared-tree protocol and there is no source-specific | |||
state, or if no source-specific information is desired (i.e., | state, or if no source-specific information is desired (i.e., | |||
"all 1" for IPv4 or unspecified address (::) for IPv6), group | all 1's for IPv4 or unspecified address (::) for IPv6), group | |||
state should be used. If there is no group state or no group- | state should be used. If there is no group state or no group- | |||
specific information is desired, potential source state (i.e., | specific information is desired, potential source state (i.e., | |||
the path that would be followed for a source-specific Join) | the path that would be followed for a source-specific Join) | |||
should be used. If this router is the Core or RP and no source- | should be used. | |||
specific state is available (e.g., this router has been | ||||
receiving PIM Register messages from the first-hop router), note | ||||
a code of REACHED_RP. | ||||
3. If no forwarding information can be determined, the router notes | 3. If no forwarding information can be determined, the router notes | |||
a forwarding code of NO_ROUTE, sets the remaining fields that | a Forwarding Code of NO_ROUTE, sets the remaining fields that | |||
have not yet been filled in to zero, and then forwards the | have not yet been filled in to zero, and then sends an Mtrace2 | |||
packet to the mtrace2 client as described in Section 9.3. | Reply back to the Mtrace2 client. | |||
4. Fill in the Incoming Interface Address, Previous-Hop Router | 4. Fill in the Incoming Interface Address, Upstream Router Address, | |||
Address, Input Packet Count, Total Number of Packets, Routing | Input Packet Count, Total Number of Packets, Routing Protocol, | |||
Protocol, S, and Src Mask from the forwarding information that | S, and Src Mask (or Src Prefix Len for IPv6) using the | |||
was determined. | forwarding information determined by the step 2. | |||
5. If mtrace2 is administratively prohibited, note the appropriate | 5. If Mtrace2 is administratively prohibited, note the Forwarding | |||
forwarding code (ADMIN_PROHIB). If mtrace2 is administratively | Code of ADMIN_PROHIB. If Mtrace2 is administratively prohibited | |||
prohibited and any of the fields as filled in step 4 are | and any of the fields as filled in the step 4 are considered | |||
considered private information, zero out the applicable fields. | private information, zero out the applicable fields. | |||
Then the packet is forwarded to the mtrace2 client as described | ||||
in Section 9.3. | ||||
6. If the reception interface is not enabled for multicast, note | 6. If the Outgoing interface is not enabled for multicast, note | |||
forwarding code NO_MULTICAST. If the reception interface is the | Forwarding Code of NO_MULTICAST. If the Outgoing interface is | |||
interface from which the router would expect data to arrive from | the interface from which the router would expect data to arrive | |||
the source, note forwarding code RPF_IF. Otherwise, if the | from the source, note forwarding code RPF_IF. If the Outgoing | |||
reception interface is not one to which the router would forward | interface is not one to which the router would forward data from | |||
data from the source to the group, a forwarding code of WRONG_IF | the source or RP to the group, a Forwarding code of WRONG_IF is | |||
is noted. | noted. In the above three cases, the router will return an | |||
Mtrace2 Reply and terminate the trace. | ||||
7. If the group is subject to administrative scoping on either the | 7. If the group is subject to administrative scoping on either the | |||
Outgoing or Incoming interfaces, a forwarding code of SCOPED is | Outgoing or Incoming interfaces, a Forwarding Code of SCOPED is | |||
noted. | noted. | |||
8. If this router is the Rendezvous Point or Core for the group, a | 8. If this router is the RP for the group, note a Forwarding Code | |||
forwarding code of REACHED_RP is noted. | of REACHED_RP. The router will send an Mtrace2 Reply and | |||
terminate the trace. | ||||
9. If this router has sent a prune upstream which applies to the | 9. If this router has sent a prune upstream which applies to the | |||
source and group in the mtrace2 Request, it notes forwarding | source and group in the Mtrace2 Request, it notes Forwarding | |||
code PRUNE_SENT. If the router has stopped forwarding | Code of PRUNE_SENT. If the router has stopped forwarding | |||
downstream in response to a prune sent by the next hop router, | downstream in response to a prune sent by the downstream router, | |||
it notes forwarding code PRUNE_RCVD. If the router should | it notes Forwarding Code of PRUNE_RCVD. If the router should | |||
normally forward traffic for this source and group downstream | normally forward traffic downstream for this source and group | |||
but is not, it notes forwarding code NOT_FORWARDING. | but is not, it notes Forwarding Code of NOT_FORWARDING. | |||
10. If this router is a gateway (e.g., a NAT or firewall) that hides | 10. If this router is a gateway (e.g., a NAT or firewall) that hides | |||
the information between this router and the mtrace2 querier, it | the information between this router and the Mtrace2 client, it | |||
notes forwarding code REACHED_GW. | notes Forwarding Code of REACHED_GW. The router continues the | |||
processing as described in Section 4.5. | ||||
11. The packet is then sent on to the previous hop or the Mtrace2 | 11. If the total number of the Standard Response Blocks, including | |||
Client Address as described in Section 9.3. | the newly prepared one, and the value of the Augmented Response | |||
Type of 0x01, if any, is less than the # Hops in the Request, | ||||
the packet is then forwarded to the upstream router as described | ||||
in Section 4.3; otherwise, the packet is sent as an Mtrace2 | ||||
Reply to the Mtrace2 client as described in Section 4.4. | ||||
9.2.3. Mtrace2 Request Received by Non-Supported Router | 4.3. Forwarding Mtrace2 Request | |||
When a router that does not understand mtrace2 Request messages | This section describes how an Mtrace2 Request should be forwarded. | |||
receives an mtrace2 Request message whose destination address is | ||||
multicast, the router will silently discard the message. When the | ||||
router receives an mtrace2 Request message whose destination address | ||||
is the router's interface address, the router returns an ICMP Port | ||||
unreachable to the Mtrace2 Client Address, and the mtrace2 client may | ||||
then issue another mtrace2 Query with the lower number of # hops. | ||||
9.3. Forwarding Mtrace2 Request | 4.3.1. Destination Address | |||
9.3.1. Destination Address | If the upstream router for the Mtrace2 Request is known for this | |||
request, the Mtrace2 Request is sent to that router. If the Incoming | ||||
interface is known but the upstream router is not, the Mtrace2 | ||||
Request is sent to an appropriate multicast address on the Incoming | ||||
interface. The multicast address SHOULD depend on the multicast | ||||
routing protocol in use, such as ALL-[protocol]-ROUTERS.MCAST.NET. | ||||
It MUST be a link-scoped group (i.e. 224/24 for IPv4, FF02::/16 for | ||||
IPv6), and MUST NOT be ALL-SYSTEMS.MCAST.NET (224.0.0.1) for IPv4 and | ||||
All Nodes Address (FF02::1) for IPv6. It MAY also be ALL- | ||||
ROUTERS.MCAST.NET (224.0.0.2) for IPv4 or All Routers Address | ||||
(FF02::2) for IPv6 if the routing protocol in use does not define a | ||||
more appropriate multicast address. | ||||
If the Previous-hop router for the mtrace2 Request is known for this | 4.3.2. Source Address | |||
request and the number of response blocks is less than the number | ||||
requested (i.e., the "# hops" field in the mtrace2 Query header), the | ||||
packet is sent to that router. If the Incoming Interface is known | ||||
but the Previous-hop router is not known, the packet is sent to an | ||||
appropriate multicast address on the Incoming Interface. The | ||||
appropriate multicast address may depend on the routing protocol in | ||||
use, MUST be a link-scoped group (i.e. 224/24 for IPv4, FF02::/16 for | ||||
IPv6), MUST NOT be ALL-SYSTEMS.MCAST.NET (224.0.0.1) for IPv4 and All | ||||
Nodes Address (FF02::1) for IPv6, and MAY be ALL-ROUTERS.MCAST.NET | ||||
(224.0.0.2) for IPv4 or All Routers Address (FF02::2) for IPv6 if the | ||||
routing protocol in use does not define a more appropriate group. | ||||
Otherwise, it is sent to the Mtrace2 Client Address in the header. | ||||
9.3.2. Source Address | An Mtrace2 Request should be sent with the address of the Incoming | |||
interface. However, if the Incoming interface is unnumbered, the | ||||
router can use one of its numbered interface address as the source | ||||
address. | ||||
An mtrace2 Request should be sent with the address of the router's | 4.3.3. Appending Standard Response Block | |||
reception interface. However, if the router's interface address is | ||||
unnumbered, the router can use one of its numbered interface address | ||||
as the source address. | ||||
When the REACHED_GW code is noted, the router sends back the mtrace2 | An Mtrace2 Request MUST be sent upstream towards the source or the RP | |||
Reply as in Section 9.4. In addition to that, it must continue the | after appending a Standard Response Block to the end of the received | |||
mtrace2 Query by proxying the original querier as in Section 9.5. | Mtrace2 Request. The Standard Response Block includes the multicast | |||
states and statistics information of the router described in | ||||
Section 3.2.5. | ||||
When the NO_SPACE error occurs, the router sends back the mtrace2 | If appending the Standard Response Block would make the Mtrace2 | |||
Reply with contained data and the NO_SPACE error code as in | Request packet longer than the MTU of the Incoming Interface, or, in | |||
Section 9.4, and continues the mtrace2 Query by sending an mtrace2 | the case of IPv6, longer than 1280 bytes, the router MUST change the | |||
Request containing the same mtrace2 Query header and its standard and | Forwarding Code in the last Standard Response Block of the received | |||
augmented response blocks. The corresponding augmented response | Mtrace2 Request into NO_SPACE. The router then turns the Request | |||
block type is "# Mtrace2 Response Blocks Returned" described in | into a Reply, and sends the Reply as described in Section 4.4. | |||
Section 8. | ||||
9.4. Sending Mtrace2 Reply | The router will continue with a new Request by copying from the old | |||
Request excluding all the response blocks, followed by the previously | ||||
prepared Standard Response Block, and an Augmented Response Block | ||||
with Augmented Response Type of 0x01 and the number of the returned | ||||
Standard Response Blocks as the value. The new Request is then | ||||
forwarded upstream. | ||||
9.4.1. Destination Address | 4.4. Sending Mtrace2 Reply | |||
An mtrace2 Reply must be sent to the address specified in the Mtrace2 | An Mtrace2 Reply MUST be returned to the client by a router if the | |||
Client Address field in the mtrace2 Query header. | total number of the traced routers is equal to the # Hops in the | |||
Request. The total number of the traced routers is the sum of the | ||||
Standard Response Blocks in the Request (including the one just | ||||
added) and the number of the returned blocks, if any. | ||||
9.4.2. Source Address | 4.4.1. Destination Address | |||
An mtrace2 Reply should be sent with the address of the router's | An Mtrace2 Reply MUST be sent to the address specified in the Mtrace2 | |||
reception interface. However, if the router's interface address is | Client Address field in the Mtrace2 Request. | |||
4.4.2. Source Address | ||||
An Mtrace2 Reply SHOULD be sent with the address of the router's | ||||
Outgoing interface. However, if the Outgoing interface address is | ||||
unnumbered, the router can use one of its numbered interface address | unnumbered, the router can use one of its numbered interface address | |||
as the source address. | as the source address. | |||
9.5. Proxying Mtrace2 Query | 4.4.3. Appending Standard Response Block | |||
When a gateway (e.g., a NAT or firewall) that needs to block unicast | An Mtrace2 Reply MUST be sent with the prepared Standard Response | |||
packets to the mtrace2 querier or hide information between the | Block appended at the end of the received Mtrace2 Request except in | |||
gateway and the mtrace2 querier receives mtrace2 Query from an | the case of NO_SPACE forwarding code. | |||
adjacent host or mtrace2 Request from an adjacent router, it sends | ||||
back the mtrace2 Reply with contained data and the REACHED_GW code to | ||||
the address specified in the Mtrace2 Client Address field in the | ||||
mtrace2 Query header. | ||||
At the same time, the gateway prepares a new mtrace2 Query message. | 4.5. Proxying Mtrace2 Query | |||
The gateway uses the original mtrace2 Query header as the base for | ||||
the new mtrace2 Query; it sets the Mtrace2 Client Address to its | ||||
Incoming Interface address and the Client Port # to its own port | ||||
(which may be the same as the mtrace2 port as the gateway is | ||||
listening on that port), and decreases # hops according to the number | ||||
of standard response blocks in the returned mtrace2 Reply from the | ||||
gateway. The mtrace2 Query message is sent to the previous-hop | ||||
router or to an appropriate multicast address on the Incoming | ||||
Interface. | ||||
When the gateway receives the mtrace2 Reply from the first-hop router | When a gateway (e.g., a NAT or firewall), which needs to block | |||
or any intermediate router, it MUST forward the mtrace2 Reply back to | unicast packets to the Mtrace2 client, or hide information between | |||
the mtrace2 querier with the original mtrace2 Query header. | the gateway and the Mtrace2 client, receives an Mtrace2 Query from an | |||
adjacent host or Mtrace2 Request from an adjacent router, it appends | ||||
a Standard Response Block with REACHED_GW as the Forwarding Code, and | ||||
turns the Query or Request as a Reply, and sends the Reply back to | ||||
the client. | ||||
9.6. Hiding Information | At the same time, the gateway originates a new Mtrace2 Query message | |||
by copying the original Mtrace2 header (the Query or Request without | ||||
any of the response blocks), and makes the changes as follows: | ||||
o sets the RPF interface's address as the Mtrace2 Client Address; | ||||
o uses its own port number as the Client Port #; and, | ||||
o decreases # Hops by the number of the Standard Response Block that | ||||
was just returned as a Reply. | ||||
The new Mtrace2 Query message is then sent to the upstream router or | ||||
to an appropriate multicast address on the RPF interface. | ||||
When the gateway receives an Mtrace2 Reply whose Query ID matches the | ||||
one in the original Mtrace2 header, it MUST relay the Mtrace2 Reply | ||||
back to the Mtrace2 client by replacing the Reply's header with the | ||||
original Mtrace2 header. If the gateway does not receive the | ||||
corresponding Mtrace2 Reply within the [Mtrace Reply Timeout] period | ||||
(see Section 5.8.4), then it silently discards the original Mtrace2 | ||||
Query or Request message, and terminates the trace. | ||||
4.6. Hiding Information | ||||
Information about a domain's topology and connectivity may be hidden | Information about a domain's topology and connectivity may be hidden | |||
from mtrace2 Requests. The INFO_HIDDEN forwarding code may be used | from the Mtrace2 Requests. The Forwarding Code of INFO_HIDDEN may be | |||
to note that, for example, the incoming interface address and packet | used to note that. For example, the incoming interface address and | |||
count are for the entrance to the domain and the outgoing interface | packet count on the ingress router of a domain, and the outgoing | |||
address and packet count are the exit from the domain by specifying | interface address and packet count on the egress router of the domain | |||
"all 1". The source-group packet count (Section 6.8 and Section 7.9) | can be specified as all 1's. Additionally, the source-group packet | |||
is from router, but may be "all 1" if it is hidden. | count (see Section 3.2.5 and Section 3.2.6) within the domain may be | |||
all 1's if it is hidden. | ||||
10. Client Behavior | 5. Client Behavior | |||
10.1. Sending Mtrace2 Query | This section describes the behavior of an Mtrace2 client in details. | |||
10.1.1. Destination Address | 5.1. Sending Mtrace2 Query | |||
Mtrace2 Query packet can be sent to the ALL-ROUTERS.MCAST.NET | An Mtrace2 client initiates an Mtrace2 Query by sending the Query to | |||
(224.0.0.2) for IPv4 or All Routers Address (FF02::2) for IPv6. This | the LHR of interest. | |||
will ensure that the packet is received by the last-hop router on the | ||||
subnet. Otherwise, if the proper last-hop router is known for the | ||||
mtrace2 destination, the Query is unicasted to that router. | ||||
See also Section 10.4 on determining the last-hop router. | 5.1.1. Destination Address | |||
10.1.2. Source Address | If an Mtrace2 client knows the proper LHR, it unicasts an Mtrace2 | |||
Query packet to that router; otherwise, it MAY send the Mtrace2 Query | ||||
packet to the ALL-ROUTERS.MCAST.NET (224.0.0.2) for IPv4 or All | ||||
Routers Address (FF02::2) for IPv6. This will ensure that the packet | ||||
is received by the LHR on the subnet. | ||||
An mtrace2 Query must be sent with the address of the mtrace2 | See also Section 5.4 on determining the LHR. | |||
querier's reception interface, which would be the Mtrace2 Client | ||||
Address. | ||||
10.2. Determining the Path | 5.1.2. Source Address | |||
The client could send a small number of initial query messages with a | An Mtrace2 Query MUST be sent with the client's interface address, | |||
large "# hops" field, in order to try to trace the full path. If | which would be the Mtrace2 Client Address. | |||
this attempt fails, one strategy is to perform a linear search (as | ||||
the traditional unicast traceroute program does); set the "# hops" | ||||
field to 1 and try to get a Reply, then 2, and so on. If no Reply is | ||||
received at a certain hop, the hop count can continue past the non- | ||||
responding hop, in the hopes that further hops may respond. These | ||||
attempts should continue until a user-defined timeout has occurred. | ||||
See also Section 10.6 on receiving the results of a trace. | 5.2. Determining the Path | |||
10.3. Collecting Statistics | An Mtrace2 client could send an initial Query messages with a large # | |||
Hops, in order to try to trace the full path. If this attempt fails, | ||||
one strategy is to perform a linear search (as the traditional | ||||
unicast traceroute program does); set the # Hops field to 1 and try | ||||
to get a Reply, then 2, and so on. If no Reply is received at a | ||||
certain hop, the hop count can continue past the non-responding hop, | ||||
in the hopes that further hops may respond. These attempts should | ||||
continue until the [Mtrace Reply Timeout] timeout has occurred. | ||||
See also Section 5.6 on receiving the results of a trace. | ||||
5.3. Collecting Statistics | ||||
After a client has determined that it has traced the whole path or as | After a client has determined that it has traced the whole path or as | |||
much as it can expect to (see Section 10.7), it might collect | much as it can expect to (see Section 5.8), it might collect | |||
statistics by waiting a short time and performing a second trace. If | statistics by waiting a short time and performing a second trace. If | |||
the path is the same in the two traces, statistics can be displayed | the path is the same in the two traces, statistics can be displayed | |||
as described in Section 12.3 and Section 12.4. | as described in Section 7.3 and Section 7.4. | |||
10.4. Last Hop Router | 5.4. Last Hop Router (LHR) | |||
The mtrace2 querier may not know which is the last-hop router, or | The Mtrace2 client may not know which is the last-hop router, or that | |||
that router may be behind a firewall that blocks unicast packets but | router may be behind a firewall that blocks unicast packets but | |||
passes multicast packets. In these cases, the mtrace2 Request should | passes multicast packets. In these cases, the Mtrace2 Request should | |||
be multicasted to ALL-ROUTERS.MCAST.NET (224.0.0.2) for IPv4 or All | be multicasted to ALL-ROUTERS.MCAST.NET (224.0.0.2) for IPv4 or All | |||
Routers Address (FF02::2) for IPv6. All routers except the correct | Routers Address (FF02::2) for IPv6. All routers except the correct | |||
last-hop router SHOULD ignore any mtrace2 Request received via | last-hop router SHOULD ignore any Mtrace2 Request received via | |||
multicast. | multicast. | |||
10.5. First Hop Router | 5.5. First Hop Router (FHR) | |||
The IANA assigned 224.0.1.32, MTRACE.MCAST.NET as the default | The IANA assigned 224.0.1.32, MTRACE.MCAST.NET as the default | |||
multicast group for old IPv4 mtrace (v1) responses, in order to | multicast group for old IPv4 mtrace (v1) responses, in order to | |||
support mtrace queriers that are not unicast reachable from the | support mtrace clients that are not unicast reachable from the first- | |||
first-hop router. However, mtrace2 does not reserve any IPv4/IPv6 | hop router. Mtrace2, however, does not require any IPv4/IPv6 | |||
multicast addresses for mtrace2 Replies. Every mtrace2 Reply is sent | multicast addresses for the Mtrace2 Replies. Every Mtrace2 Reply is | |||
to the unicast address specified in the Mtrace2 Client Address field | sent to the unicast address specified in the Mtrace2 Client Address | |||
of the mtrace2 Query header. | field of the Mtrace2 Reply. | |||
10.6. Broken Intermediate Router | 5.6. Broken Intermediate Router | |||
A broken intermediate router might simply not understand mtrace2 | A broken intermediate router might simply not understand Mtrace2 | |||
packets, and drop them. The querier would then get no Reply at all | packets, and drop them. The Mtrace2 client will get no Reply at all | |||
from its mtrace2 Requests. It should then perform a hop-by-hop | as a result. It should then perform a hop-by-hop search by setting | |||
search by setting the number of hops field until it gets a Reply | the # Hops field until it gets an Mtrace2 Reply. The client may use | |||
(both linear and binary search are options, but binary is likely to | linear or binary search; however, the latter is likely to be slower | |||
be slower because a failure requires waiting for a timeout). | because a failure requires waiting for the [Mtrace Reply Timeout] | |||
period. | ||||
10.7. Mtrace2 Termination | 5.7. Non-Supported Router | |||
When a non-supported router receives an Mtrace2 Query or Request | ||||
message whose destination address is a multicast address, the router | ||||
will silently discard the message. | ||||
When the router receives an Mtrace2 Query which is destined to | ||||
itself, the router would return an ICMP port unreachable to the | ||||
Mtrace2 client. On the other hand, when the router receives an | ||||
Mtrace2 Request which is destined to itself, the router would return | ||||
an ICMP port unreachable to its adjacent router from which the | ||||
Request receives. Therefore, the Mtrace2 client needs to terminate | ||||
the trace when the [Mtrace Reply Timeout] timeout has occurred, and | ||||
may then issue another Query with a lower number of # Hops. | ||||
5.8. Mtrace2 Termination | ||||
When performing an expanding hop-by-hop trace, it is necessary to | When performing an expanding hop-by-hop trace, it is necessary to | |||
determine when to stop expanding. | determine when to stop expanding. | |||
10.7.1. Arriving at source | 5.8.1. Arriving at Source | |||
A trace can be determined to have arrived at the source if the | A trace can be determined to have arrived at the source if the | |||
Incoming Interface of the last router in the trace is non-zero, but | Incoming Interface of the last router in the trace is non-zero, but | |||
the Previous-hop router is zero. | the Upstream Router is zero. | |||
10.7.2. Fatal error | 5.8.2. Fatal Error | |||
A trace has encountered a fatal error if the last Forwarding Error in | A trace has encountered a fatal error if the last Forwarding Error in | |||
the trace has the 0x80 bit set. | the trace has the 0x80 bit set. | |||
10.7.3. No previous hop | 5.8.3. No Upstream Router | |||
A trace can not continue if the last Previous-hop in the trace is set | A trace can not continue if the last Upstream Router in the trace is | |||
to 0. | set to 0. | |||
10.7.4. Traceroute shorter than requested | 5.8.4. Reply Timeout | |||
If the trace that is returned is shorter than requested (i.e. the | This document defines the [Mtrace Reply Timeout] value, which is used | |||
number of response blocks is smaller than the "# hops" field), the | to time out an Mtrace2 Reply as seen in Section 4.5, Section 5.2, and | |||
trace encountered an error and could not continue. | Section 5.7. The default [Mtrace Reply Timeout] value is 10 | |||
(seconds), and can be manually changed on the Mtrace2 client and | ||||
routers. | ||||
10.8. Continuing after an error | 5.9. Continuing after an Error | |||
When the NO_SPACE error occurs, as described in Section 9.3, the | When the NO_SPACE error occurs, as described in Section 4.2, a router | |||
multicast routers sends back the mtrace2 Reply to the address | will send back an Mtrace2 Reply to the Mtrace2 client, and continue | |||
specified in the Mtrace2 Client Address field in the mtrace2 Query | with a new Request (see Section 4.3.3). In which case, the Mtrace2 | |||
header. In this case, the mtrace2 client may receive multiple | client may receive multiple Mtrace2 Replies from different routers | |||
mtrace2 Replies from different routers (along the path). After the | along the path. When this happens, the client MUST treat them as a | |||
client receives multiple mtrace2 Reply messages, it integrates (i.e. | single Mtrace2 Reply message. | |||
constructs) them as a single mtrace2 Reply message. | ||||
If a trace times out, it is likely to be because a router in the | If a trace times out, it is very likely that a router in the middle | |||
middle of the path does not support mtrace2. That router's address | of the path does not support Mtrace2. That router's address will be | |||
will be in the Previous-hop router field of the last entry in the | in the Upstream Router field of the last Standard Response Block in | |||
last response packet received. A client may be able to determine | the last received Reply. A client may be able to determine (via | |||
(via mrinfo or SNMP [11][13]) a list of neighbors of the non- | mrinfo or SNMP [11][10]) a list of neighbors of the non-responding | |||
responding router. If desired, each of those neighbors could be | router. If desired, each of those neighbors could be probed to | |||
probed to determine the remainder of the path. Unfortunately, this | determine the remainder of the path. Unfortunately, this heuristic | |||
heuristic may end up with multiple paths, since there is no way of | may end up with multiple paths, since there is no way of knowing what | |||
knowing what the non-responding router's algorithm for choosing a | the non-responding router's algorithm for choosing an upstream router | |||
previous-hop router is. However, if all paths but one flow back | is. However, if all paths but one flow back towards the non- | |||
towards the non-responding router, it is possible to be sure that | responding router, it is possible to be sure that this is the correct | |||
this is the correct path. | path. | |||
11. Protocol-Specific Considerations | 6. Protocol-Specific Considerations | |||
11.1. PIM-SM | This section describes the Mtrace2 behavior with the present of | |||
different multicast protocols. | ||||
When an mtrace2 reaches a PIM-SM RP and the RP does not forward the | 6.1. PIM-SM | |||
When an Mtrace2 reaches a PIM-SM RP, and the RP does not forward the | ||||
trace on, it means that the RP has not performed a source-specific | trace on, it means that the RP has not performed a source-specific | |||
join so there is no more state to trace. However, the path that | join so there is no more state to trace. However, the path that | |||
traffic would use if the RP did perform a source-specific join can be | traffic would use if the RP did perform a source-specific join can be | |||
traced by setting the trace destination to the RP, the trace source | traced by setting the trace destination to the RP, the trace source | |||
to the traffic source, and the trace group to 0. This trace Query | to the traffic source, and the trace group to 0. This Mtrace2 Query | |||
may be unicasted to the RP. | may be unicasted to the RP. | |||
11.2. Bi-Directional PIM | 6.2. Bi-Directional PIM | |||
Bi-directional PIM [7] is a variant of PIM-SM that builds bi- | Bi-directional PIM [5] is a variant of PIM-SM that builds bi- | |||
directional shared trees connecting multicast sources and receivers. | directional shared trees connecting multicast sources and receivers. | |||
Along the bi-directional shared trees, multicast data is natively | Along the bi-directional shared trees, multicast data is natively | |||
forwarded from sources to the RPA (Rendezvous Point Address) and from | forwarded from the sources to the Rendezvous Point Link (RPL), and | |||
the RPA to receivers without requiring source-specific state. In | from which, to receivers without requiring source-specific state. In | |||
contrast to PIM-SM, RP always has the state to trace. | contrast to PIM-SM, Bi-directional PIM always has the state to trace. | |||
A Designated Forwarder (DF) for a given RPA is in charge of | A Designated Forwarder (DF) for a given Rendezvous Point Address | |||
forwarding downstream traffic onto its link, and forwarding upstream | (RPA) is in charge of forwarding downstream traffic onto its link, | |||
traffic from its link towards the RPL (Rendezvous Point Link) that | and forwarding upstream traffic from its link towards the RPL that | |||
the RPA belongs to. Hence mtrace2 reports DF addresses or RPA along | the RPA belongs to. Hence Mtrace2 Reply reports DF addresses or RPA | |||
the path. | along the path. | |||
11.3. PIM-DM | 6.3. PIM-DM | |||
Routers running PIM Dense Mode [15] do not know the path packets | Routers running PIM Dense Mode [13] do not know the path packets | |||
would take unless traffic is flowing. Without some extra protocol | would take unless traffic is flowing. Without some extra protocol | |||
mechanism, this means that in an environment with multiple possible | mechanism, this means that in an environment with multiple possible | |||
paths with branch points on shared media, mtrace2 can only trace | paths with branch points on shared media, Mtrace2 can only trace | |||
existing paths, not potential paths. When there are multiple | existing paths, not potential paths. When there are multiple | |||
possible paths but the branch points are not on shared media, the | possible paths but the branch points are not on shared media, the | |||
previous hop router is known, but the last-hop router may not know | upstream router is known, but the LHR may not know that it is the | |||
that it is the appropriate last hop. | appropriate last hop. | |||
When traffic is flowing, PIM Dense Mode routers know whether or not | When traffic is flowing, PIM Dense Mode routers know whether or not | |||
they are the last-hop forwarder for the link (because they won or | they are the LHR for the link (because they won or lost an Assert | |||
lost an Assert battle) and know who the previous hop is (because it | battle) and know who the upstream router is (because it won an Assert | |||
won an Assert battle). Therefore, mtrace2 is always able to follow | battle). Therefore, Mtrace2 is always able to follow the proper path | |||
the proper path when traffic is flowing. | when traffic is flowing. | |||
11.4. IGMP/MLD Proxy | ||||
When an mtrace2 Query packet reaches an incoming interface of IGMP/ | 6.4. IGMP/MLD Proxy | |||
MLD Proxy [8], it puts a WRONG_IF (0x01) value in Forwarding Code of | ||||
mtrace2 standard response block (as in Section 6.14) and sends the | ||||
mtrace2 Reply back to the Mtrace2 Client Address. When an mtrace2 | ||||
Query packet reaches an outgoing interface of IGMP/MLD proxy, it is | ||||
forwarded through its incoming interface towards the upstream router. | ||||
11.5. AMT | When an IGMP/MLD Proxy [6] receives an Mtrace2 Query packet on an | |||
incoming interface, it notes a WRONG_IF in the Forwarding Code of the | ||||
last Standard Response Block (see Section 3.2.5), and sends the | ||||
Mtrace2 Reply back to the Mtrace2 client. On the other hand, when an | ||||
Mtrace2 Query packet reaches an outgoing interface of the IGMP/MLD | ||||
proxy, it is forwarded onto its incoming interface towards the | ||||
upstream router. | ||||
AMT [9] provides the multicast connectivity to the unicast-only | 7. Problem Diagnosis | |||
inter-network. To do this, multicast packets being sent to or from a | ||||
site are encapsulated in unicast packets. When an mtrace2 Query | ||||
packet reaches an AMT pseudo-interface of an AMT gateway, the AMT | ||||
gateway encapsulats it to a particular AMT relay reachable across the | ||||
unicast-only infrastructure. Then the AMT relay decapsulates the | ||||
mtrace2 Query packet and forwards the mtrace2 Request to the | ||||
appropriate multicast router. | ||||
12. Problem Diagnosis | This section describes different scenarios Mtrace2 can be used to | |||
diagnose the multicast problems. | ||||
12.1. Forwarding Inconsistencies | 7.1. Forwarding Inconsistencies | |||
The forwarding error code can tell if a group is unexpectedly pruned | The Forwarding Error code can tell if a group is unexpectedly pruned | |||
or administratively scoped. | or administratively scoped. | |||
12.2. TTL or Hop Limit Problems | 7.2. TTL or Hop Limit Problems | |||
By taking the maximum of hops (from source + forwarding TTL (or hop | By taking the maximum of hops from the source and forwarding TTL | |||
limit) threshold) over all hops, it is possible to discover the TTL | threshold over all hops, it is possible to discover the TTL or hop | |||
or hop limit required for the source to reach the destination. | limit required for the source to reach the destination. | |||
12.3. Packet Loss | 7.3. Packet Loss | |||
By taking two traces, it is possible to find packet loss information | By taking two traces, it is possible to find packet loss information | |||
by comparing the difference in input packet counts to the difference | by comparing the difference in input packet counts to the difference | |||
in output packet counts for the specified source-group address pair | in output packet counts for the specified source-group address pair | |||
at the previous hop. On a point-to-point link, any difference in | at the previous hop. On a point-to-point link, any difference in | |||
these numbers implies packet loss. Since the packet counts may be | these numbers implies packet loss. Since the packet counts may be | |||
changing as the mtrace2 Query is propagating, there may be small | changing as the Mtrace2 Request is propagating, there may be small | |||
errors (off by 1 or 2 or more) in these statistics. However, these | errors (off by 1 or 2 or more) in these statistics. However, these | |||
errors will not accumulate if multiple traces are taken to expand the | errors will not accumulate if multiple traces are taken to expand the | |||
measurement period. On a shared link, the count of input packets can | measurement period. On a shared link, the count of input packets can | |||
be larger than the number of output packets at the previous hop, due | be larger than the number of output packets at the previous hop, due | |||
to other routers or hosts on the link injecting packets. This | to other routers or hosts on the link injecting packets. This | |||
appears as "negative loss" which may mask real packet loss. | appears as "negative loss" which may mask real packet loss. | |||
In addition to the counts of input and output packets for all | In addition to the counts of input and output packets for all | |||
multicast traffic on the interfaces, the response data includes a | multicast traffic on the interfaces, the Standard Response Block | |||
count of the packets forwarded by a node for the specified source- | includes a count of the packets forwarded by a node for the specified | |||
group pair. Taking the difference in this count between two traces | source-group pair. Taking the difference in this count between two | |||
and then comparing those differences between two hops gives a measure | traces and then comparing those differences between two hops gives a | |||
of packet loss just for traffic from the specified source to the | measure of packet loss just for traffic from the specified source to | |||
specified receiver via the specified group. This measure is not | the specified receiver via the specified group. This measure is not | |||
affected by shared links. | affected by shared links. | |||
On a point-to-point link that is a multicast tunnel, packet loss is | On a point-to-point link that is a multicast tunnel, packet loss is | |||
usually due to congestion in unicast routers along the path of that | usually due to congestion in unicast routers along the path of that | |||
tunnel. On native multicast links, loss is more likely in the output | tunnel. On native multicast links, loss is more likely in the output | |||
queue of one hop, perhaps due to priority dropping, or in the input | queue of one hop, perhaps due to priority dropping, or in the input | |||
queue at the next hop. The counters in the response data do not | queue at the next hop. The counters in the Standard Response Block | |||
allow these cases to be distinguished. Differences in packet counts | do not allow these cases to be distinguished. Differences in packet | |||
between the incoming and outgoing interfaces on one node cannot | counts between the incoming and outgoing interfaces on one node | |||
generally be used to measure queue overflow in the node. | cannot generally be used to measure queue overflow in the node. | |||
12.4. Link Utilization | 7.4. Link Utilization | |||
Again, with two traces, you can divide the difference in the input or | Again, with two traces, you can divide the difference in the input or | |||
output packet counts at some hop by the difference in time stamps | output packet counts at some hop by the difference in time stamps | |||
from the same hop to obtain the packet rate over the link. If the | from the same hop to obtain the packet rate over the link. If the | |||
average packet size is known, then the link utilization can also be | average packet size is known, then the link utilization can also be | |||
estimated to see whether packet loss may be due to the rate limit or | estimated to see whether packet loss may be due to the rate limit or | |||
the physical capacity on a particular link being exceeded. | the physical capacity on a particular link being exceeded. | |||
12.5. Time Delay | 7.5. Time Delay | |||
If the routers have synchronized clocks, it is possible to estimate | If the routers have synchronized clocks, it is possible to estimate | |||
propagation and queuing delay from the differences between the | propagation and queuing delay from the differences between the | |||
timestamps at successive hops. However, this delay includes control | timestamps at successive hops. However, this delay includes control | |||
processing overhead, so is not necessarily indicative of the delay | processing overhead, so is not necessarily indicative of the delay | |||
that data traffic would experience. | that data traffic would experience. | |||
13. IANA Considerations | 8. IANA Considerations | |||
The following new assignments can only be made via a Standards Action | The following new assignments can only be made via a Standards Action | |||
as specified in [4]. | as specified in [7]. | |||
13.1. Forwarding Codes | 8.1. Forwarding Codes | |||
New Forwarding codes must only be created by an RFC that modifies | New Forwarding Codes must only be created by an RFC that modifies | |||
this document's Section 10, fully describing the conditions under | this document's Section 3.2.5 and Section 3.2.6, fully describing the | |||
which the new forwarding code is used. The IANA may act as a central | conditions under which the new Forwarding Code is used. The IANA may | |||
repository so that there is a single place to look up forwarding | act as a central repository so that there is a single place to look | |||
codes and the document in which they are defined. | up Forwarding Codes and the document in which they are defined. | |||
13.2. UDP Destination Port and IPv6 Address | 8.2. UDP Destination Port | |||
The IANA should allocate UDP destination port for multicast | The IANA should allocate UDP destination port for Mtrace2 upon | |||
traceroute version 2 upon publication of the first RFC. | publication of the first RFC. | |||
14. Security Considerations | 9. Security Considerations | |||
14.1. Topology Discovery | This section addresses some of the security considerations related to | |||
Mtrace2. | ||||
9.1. Addresses in Mtrace2 Header | ||||
An Mtrace2 header includes three addresses, source address, multicast | ||||
address, and Mtrace2 client address. These addresses MUST be | ||||
congruent with the definition defined in Section 3.2.1 and forwarding | ||||
Mtrace2 messages having invalid addresses MUST be prohibited. For | ||||
instance, if Mtrace2 Client Address specified in an Mtrace header is | ||||
a multicast address, then a router that receives the Mtrace2 message | ||||
MUST silently discard it. | ||||
9.2. Topology Discovery | ||||
Mtrace2 can be used to discover any actively-used topology. If your | Mtrace2 can be used to discover any actively-used topology. If your | |||
network topology is a secret, mtrace2 may be restricted at the border | network topology is a secret, Mtrace2 may be restricted at the border | |||
of your domain, using the ADMIN_PROHIB forwarding code. | of your domain, using the ADMIN_PROHIB forwarding code. | |||
14.2. Traffic Rates | 9.3. Characteristics of Multicast Channel | |||
Mtrace2 can be used to discover what sources are sending to what | Mtrace2 can be used to discover what sources are sending to what | |||
groups and at what rates. If this information is a secret, mtrace2 | groups and at what rates. If this information is a secret, Mtrace2 | |||
may be restricted at the border of your domain, using the | may be restricted at the border of your domain, using the | |||
ADMIN_PROHIB forwarding code. | ADMIN_PROHIB forwarding code. | |||
14.3. Limiting Query/Request Rates | 9.4. Limiting Query/Request Rates | |||
Routers should limit mtrace2 Queries and Requests by ignoring the | A router may limit Mtrace2 Queries and Requests by ignoring some of | |||
received messages. Routers MAY randomly ignore the received messages | the consecutive messages. The router MAY randomly ignore the | |||
to minimize the processing overhead, i.e., to keep fairness in | received messages to minimize the processing overhead, i.e., to keep | |||
processing queries. The rate limit is left to the router's | fairness in processing queries, or prevent traffic amplification. | |||
implementation. | The rate limit is left to the router's implementation. | |||
15. Acknowledgements | 9.5. Limiting Reply Rates | |||
The proxying and NO_SPACE behaviors may result in one Query returning | ||||
multiple Reply messages. In order to prevent abuse, the routers in | ||||
the traced MAY need to rate-limit the Replies. The rate limit | ||||
function is left to the router's implementation. | ||||
10. Acknowledgements | ||||
This specification started largely as a transcription of Van | This specification started largely as a transcription of Van | |||
Jacobson's slides from the 30th IETF, and the implementation in | Jacobson's slides from the 30th IETF, and the implementation in | |||
mrouted 3.3 by Ajit Thyagarajan. Van's original slides credit Steve | mrouted 3.3 by Ajit Thyagarajan. Van's original slides credit Steve | |||
Casner, Steve Deering, Dino Farinacci and Deb Agrawal. The original | Casner, Steve Deering, Dino Farinacci and Deb Agrawal. The original | |||
multicast traceroute client, mtrace (version 1), has been implemented | multicast traceroute client, mtrace (version 1), has been implemented | |||
by Ajit Thyagarajan, Steve Casner and Bill Fenner. The idea of the | by Ajit Thyagarajan, Steve Casner and Bill Fenner. The idea of the | |||
"S" bit to allow statistics for a source subnet is due to Tom | "S" bit to allow statistics for a source subnet is due to Tom | |||
Pusateri. | Pusateri. | |||
For the mtrace version 2 specification, extensive comments were | For the Mtrace version 2 specification, the authors would like to | |||
received from Ronald Bonica, Yiqun Cai, Liu Hui, Bharat Joshi, Pekka | give special thanks to Tatsuya Jinmei, Bill Fenner, and Steve Casner. | |||
Savola, Shinsuke Suzuki, Dave Thaler, Achmad Husni Thamrin, and Cao | Also, extensive comments were received from David L. Black, Ronald | |||
Wei. | Bonica, Yiqun Cai, Liu Hui, Bharat Joshi, Robert W. Kebler, Heidi Ou, | |||
Pekka Savola, Shinsuke Suzuki, Dave Thaler, Achmad Husni Thamrin, and | ||||
Cao Wei. | ||||
16. References | 11. References | |||
16.1. Normative References | 11.1. Normative References | |||
[1] Bradner, S., "Key words for use in RFCs to indicate requirement | [1] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, | |||
"Protocol Independent Multicast - Sparse Mode (PIM-SM): | ||||
Protocol Specification (Revised)", RFC 4601, August 2006. | ||||
[2] Bradner, S., "Key words for use in RFCs to indicate requirement | ||||
levels", RFC 2119, March 1997. | levels", RFC 2119, March 1997. | |||
[2] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) | [3] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) | |||
Specification", RFC 2460, December 1998. | Specification", RFC 2460, December 1998. | |||
[3] Hinden, R. and S. Deering, "IP Version 6 Addressing | [4] Hinden, R. and S. Deering, "IP Version 6 Addressing | |||
Architecture", RFC 2373, July 1998. | Architecture", RFC 4291, February 2006. | |||
[4] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA | ||||
Considerations Section in RFCs", RFC 2434, October 1998. | ||||
[5] Braden, B., Borman, D., and C. Partridge, "Computing the | ||||
Internet Checksum", RFC 1071, September 1988. | ||||
[6] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, | ||||
"Protocol Independent Multicast - Sparse Mode (PIM-SM): | ||||
Protocol Specification (Revised)", RFC 4601, August 2006. | ||||
[7] Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano, | [5] Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano, | |||
"Bidirectional Protocol Independent Multicast (BIDIR-PIM)", | "Bidirectional Protocol Independent Multicast (BIDIR-PIM)", | |||
RFC 5015, October 2007. | RFC 5015, October 2007. | |||
[8] Fenner, B., He, H., Haberman, B., and H. Sandick, "Internet | [6] Fenner, B., He, H., Haberman, B., and H. Sandick, "Internet | |||
Group Management Protocol (IGMP) / Multicast Listener Discovery | Group Management Protocol (IGMP) / Multicast Listener Discovery | |||
(MLD)-Based Multicast Forwarding ("IGMP/MLD Proxying")", | (MLD)-Based Multicast Forwarding ("IGMP/MLD Proxying")", | |||
RFC 4605, August 2006. | RFC 4605, August 2006. | |||
[9] Thaler, D., Talwar, M., Aggarwal, A., Vicisano, L., and T. | [7] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA | |||
Pusateri, "Automatic IP Multicast Without Explicit Tunnels | Considerations Section in RFCs", RFC 5226, May 2008. | |||
(AMT)", draft-ietf-mboned-auto-multicast-08.txt (work in | ||||
progress), October 2007. | ||||
16.2. Informative References | 11.2. Informative References | |||
[10] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | [8] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | |||
Thyagarajan, "Internet Group Management Protocol, Version 3", | Thyagarajan, "Internet Group Management Protocol, Version 3", | |||
RFC 3376, October 2002. | RFC 3376, October 2002. | |||
[11] Draves, R. and D. Thaler, "Default Router Preferences and More- | [9] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", | |||
Specific Routes", RFC 4191, November 2005. | ||||
[12] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", | ||||
RFC 2863, June 2000. | RFC 2863, June 2000. | |||
[13] McWalter, D., Thaler, D., and A. Kessler, "IP Multicast MIB", | [10] McWalter, D., Thaler, D., and A. Kessler, "IP Multicast MIB", | |||
RFC 5132, December 2007. | RFC 5132, December 2007. | |||
[14] Gill, V., Heasley, J., Meyer, D., Savola, P., and C. Pignataro, | [11] Draves, R. and D. Thaler, "Default Router Preferences and More- | |||
Specific Routes", RFC 4191, November 2005. | ||||
[12] Gill, V., Heasley, J., Meyer, D., Savola, P., and C. Pignataro, | ||||
"The Generalized TTL Security Mechanism (GTSM)", RFC 5082, | "The Generalized TTL Security Mechanism (GTSM)", RFC 5082, | |||
October 2007. | October 2007. | |||
[15] Adams, A., Nicholas, J., and W. Siadak, "Protocol Independent | [13] Adams, A., Nicholas, J., and W. Siadak, "Protocol Independent | |||
Multicast - Dense Mode (PIM-DM): Protocol Specification | Multicast - Dense Mode (PIM-DM): Protocol Specification | |||
(Revised)", RFC 3973, January 2005. | (Revised)", RFC 3973, January 2005. | |||
Authors' Addresses | Authors' Addresses | |||
Hitoshi Asaeda | Hitoshi Asaeda | |||
Keio University | National Institute of Information and Communications Technology | |||
Graduate School of Media and Governance | 4-2-1 Nukui-Kitamachi | |||
Fujisawa, Kanagawa 252-0882 | Koganei, Tokyo 184-8795 | |||
Japan | Japan | |||
Email: asaeda@wide.ad.jp | Email: asaeda@nict.go.jp | |||
URI: http://www.sfc.wide.ad.jp/~asaeda/ | ||||
Tatuya Jinmei | ||||
Internet Systems Consortium | ||||
Redwood City, CA 94063 | ||||
US | ||||
Email: Jinmei_Tatuya@isc.org | ||||
William C. Fenner | ||||
Arastra, Inc. | ||||
Menlo Park, CA 94025 | ||||
US | ||||
Email: fenner@fenron.net | ||||
Stephen L. Casner | WeeSan Lee (editor) | |||
Packet Design, Inc. | Juniper Networks, Inc. | |||
Palo Alto, CA 94304 | 1194 North Mathilda Avenue | |||
Sunnyvale, CA 94089-1206 | ||||
US | US | |||
Email: casner@packetdesign.com | Email: weesan@juniper.net | |||
End of changes. 261 change blocks. | ||||
1018 lines changed or deleted | 1061 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |