Dale,

On Thu, 2005-11-10 at 15:33 +0530, [EMAIL PROTECTED] wrote:
Can anybody expain me how looping is detected by the Proxy.

"Merging" is when a proxy or UA receives the same request through two
paths that are "cousins" of each other, descendant from different
branches of some fork.  "Looping" is when a proxy receives a request
that is a descendant of a copy of the request that that the proxy has
received before.

In principle, elements should reject merged (section 8.2.2.2) or looped
(section 16.3 item 4) requests with 482 Loop Detected.

But Dan Petrie has convinced me that proxies should not test for merged
or looped requests.  The reason is that it is impossible for a proxy to
accurately determine whether two requests are "the same".  Only the
recipient UA can determine whether two requests are "the same".


I disagree here. The proxy may not be able to determine whether the requests are perceived as being the same, but that is not what it should be looking at anyway. The loop check essentially determines if the proxy (and possibly its successors) would take the same routing decision the second time the request passes by. There is no 100% guarantee that they would (there could be a stateful proxy responsible for the request URI domain making arbitrary decisions), but a request with no changes in headers that affect routing has a high probability of looping a third, fourth, etc time.

It makes no difference what the receiving UA thinks, the proxy takes a decision based on the likeliness that routing would terminate within max-forwards hops

Spiraling commonly happens.  A proxy can easily see that a spiraled
request is different if the Request-URI is different.  But what if an
intermediate proxy has modified some of the minor headers?  The request
is "different" if and only if the ultimate recipient considers that
header significant for processing the call.

Similarly, two cousin requests that differ in a minor header might or
might not be different from the UA's point of view.  The proxy cannot
safely reject the second one unless it knows that the second request
would be accepted only if the first request would be accepted.  And it
cannot know that.

So a proxy should not do loop/merge detection.  (It can rely on Max-
Forwards to detect infinite loops.)  The UA rejects merged requests with
482 if it receives a second request that is functionally identical (as
the UA sees it) t a previous one.


A recent draft by Scott Lawrence (http://www.ietf.org/internet-drafts/draft-lawrence-maxforward-problems-00.txt) shows why that is not sufficient

Dale
o

_______________________________________________
Sip-implementors mailing list
[email protected]
http://lists.cs.columbia.edu/mailman/listinfo/sip-implementors

_______________________________________________
Sip-implementors mailing list
[email protected]
http://lists.cs.columbia.edu/mailman/listinfo/sip-implementors

Reply via email to