--- Begin Message ---
(The example figures I sent was very confusing, so I modified the
figure. Please discard the previous mail and look at this one, sorry.)
Dear all,
I'm very sorry that I found several bugs in the current mtrace2 spec.
Section 9.3 of the current draft (-03) says that upon NO_SPACE error
a new mtrace2 request will be continued by the router that encountered
NO_SPACE error. And regarding the new mtrace2 query header, the draft
says "The # hops field must be decreased according to the number of
standard response blocks in the mtrace2 request received by the
router." However, this is contradict to the spec saying "The header is
only filled in by the originator of the mtrace2 Query; intermediate
routers MUST NOT modify any of the fields." in section 5.
In addition, while the current draft does not distinguish the
following two cases, "a router cannot insert any response block in the
mtrace2 request due to MTU issue" and "a router is a NAT or firewall
whose outgoing interface is non-routable from outside or that needs to
hide information inside network", for NO_SPACE error. However, the
router's behavior must be different between these two cases.
In the former case (Case-1, hereafter), when the router (B in the
following figure) recognizes NO_SPACE problem, it sends response back
with NO_SPACE code in the standard response block of the
"previous-hop" router and continues mtrace2 request "with the same
mtrace2 query header". Since routers toward S need to know the limited
hop count without changing mtrace2 query header, the router (B)
inserts "augmented response block" to specify "how many routers (hops)
were passed".
Q: mtrace2 querier, A-D: router, S: data source,
X: previous-hop router addr or appropriate multicast addr
[ ]: IP header, ( ): mtrace2 header and data
Case-1 (B encounteres NO_SPACE):
Q --> A --> B --> C --> D --> S
---> query [src:Q,dst:X](src:S,dst:Q,hop:n)
---> request [src:A,dst:X](src:S,dst:Q,hop:n,std-blk:A)
<---------- response [src:B,dst:Q](src:S,dst:Q,std-blk:A,NO_SPACE)
----> request [src:B,dst:X]
(src:S,dst:Q,hop:n,std-blk:B,aug-blk)
----> request [src:C,dst:X]
(src:S,dst:Q,hop:n,std-blk:B,aug-blk,
std-blk:C)
<---------------------- response [src:D,dst:Q]
(src:S,dst:Q,std-blk:B,aug-blk,
std-blk:C,std-blk:D)
In the latter case (Case-2, hereafter), when the router (B in the
following figure) is a NAT/gateway, it hides the information between Q
and B. The router (B) sends back the response with REACHED_GW and then
creates a new mtrace2 request with "new mtrace2 query header". The new
query header includes "# hops" that is the original # hops minus the
number of standard response blocks returned to Q. The router (B) takes
a role as a proxy and sends back the response from the first-hop router
to the original querier Q.
Case-2 (B proxies mtrace2 query):
Q --> A --> B --> C --> D --> S
---> query [src:Q,dst:X](src:S,dst:Q,hop:n)
---> request [src:A,dst:X](src:S,dst:Q,hop:n,std-blk:A)
<---------- response [src:B,dst:Q]
(src:S,dst:Q,std-blk:A,std-blk:B,REACHED_GW)
----> query [src:B,dst:X](src:S,dst:B,hop:n-2)
----> request [src:C,dst:X]
(src:S,dst:B,hop:n-2,std-blk:C)
<---------- response [src:D,dst:B]
(src:S,dst:B,hop:n-2,std-blk:C,
std-blk:D)
<---------- response [src:B,dst:Q](src:S,dst:Q,std-blk:C,std-blk:D)
So far, I updated the current draft and you can fetch the pre-release
-04 version from;
http://www.sfc.wide.ad.jp/~asaeda/paper/draft-ietf-mboned-mtrace-v2-04-pre2.txt
The corresponding explanations of Case-1 and Case-2 are described in
section 9.3 of above draft.
And the new augmented response block used for Case-1 is mentined in
section 8.
For Case-2, I explicitly mentioned the scenario in section 9.5
"Proxying Mtrace2 Queries".
Thanks for your attention.
See you soon in San Francisco,
--
Hitoshi Asaeda
_______________________________________________
MBONED mailing list
MBONED at ietf.org
https://www.ietf.org/mailman/listinfo/mboned
--- End Message ---