The ongoing discussion around parameter passing mechanisms is getting wrapped up in some concepts that we really haven't yet described well enough to be communicating clearly. This message is an attempt to develop a better understanding of the basic problem.

Even given something as simple as a "SIP proxy", we have three fundamentally different modes of operation, and one of those modes has two sub-cases that require different thinking.

In the first fundamental mode, the destination of the request is not changed by the proxy. The proxy gets the request, looks at it, and makes a best guess as to where the request should be sent so as to get the request closer to the destination encoded in that request. This is roughly analogous to IP routing, where the router does not change any of the addresses encoded in the packet. I call this fundamental mode "request routing".

In the second fundamental mode, the proxy alters the target of the request. Under RFC 3261 as-is, this means that the request-URI is changed by the action of the proxy. In general, I call this fundamental mode "request retargeting", except that our vocabulary isn't completely consistent here. Incidentally, while the first fundamental mode is roughly analogous to IP level routing, this second fundamental mode is more similar to IP-level network address translation. Yes, we've re-invented NAT. For the purpose of future clarity, I propose we start calling this fundamental mode "request translation".

There are two sub-cases of the second fundamental mode -- that is, two kinds of request translation.

In the first sub-case, the proxy transforms the request-URI in a way that preserves the identity of the target. That is, the request is still going to the same distinct entity, it's just using a different request URI to get there. This is what happens when a "home proxy" does what I have in the past called "contact routing" and the original request URI is transformed from an AOR into a contact URI registered against that AOR. The important thing here is that it is reasonable for the message sender to expect the message recipient to be able to authenticate using the identities expressed in the To: header field, which is in general the same as the identity expressed in the original Request URI -- that is, as the AOR. So for example: sip:[EMAIL PROTECTED] registers from sip:[EMAIL PROTECTED] Alice calls sip:[EMAIL PROTECTED] Bob's proxy transforms this to sip:[EMAIL PROTECTED] Bob gets the request, extracts the To" header field, and could reasonably insert an Identity header into the response claiming to be "sip:[EMAIL PROTECTED]".

As I said, I've previously called this first sub-case "contact routing". We probably shouldn't, since properly it is a translation (the request URI changes), not routing. I suggest that we call this "translation with preservation of target identity" until somebody comes up with a catchier name. The most common example of translation with preservation of identity is probably the "home proxy" applying a Contact:, which we might call "contact translation". Perhaps we could use "rerouting" as a short name, and use "contact rerouting" for the thing that a home proxy does.

In the second sub-case of the second fundamental mode, the proxy transforms the request URI in a way that does NOT preserve the identity of the target. That is, the request is going to a distinctly different entity from that indicated by the original request URI and the To: header field. Such a case arises if Bob forwards his calls to Charlie. Alice sends a request to "sip:[EMAIL PROTECTED]" and gets back a response can only be authenticated as being from "sip:[EMAIL PROTECTED]". It is this second case that gives rise to the unanticipated response problem and has lead people to propose that all retargeting be replaced with redirection. We might call this sub-case "translation without preservation of target identity". We've often called this sub-case "retargeting" in the past.

We also have a third fundamental mode, "redirection". In this mode, the proxy sends a response that encodes a new target for subsequent requests. The identity of this new target is independent from the identity of the original target -- it may or may not be the same, and the act of redirection says nothing about this relationship. As an example, Alice calls sip:[EMAIL PROTECTED] The proxy at example.com sends Alice a response redirecting her to "sip:[EMAIL PROTECTED]". Alice then calls "sip:[EMAIL PROTECTED]".


So to recap, we have three basic proxy operations in RFC 3261:

1) Request routing, which preserves the request URI.

2) Request rerouting, which changes the request URI but preserves the identity of the request's target.

3) Request retargeting, which changes the request URI and changes the identity of the request's target.

We also have a related operation:

4) Request redirection, which informs an upstream node about a new identity to target instead of the original.


As a further layer of complexity. note that these proxy operations can be stacked. That is, we might, in the process of dealing with one request, see multiple applications of the first three, followed by an application of the fourth.


Leaving the unanticipated response problem aside, we have two fundamental problems with both rerouting and retargeting. The various Called-Party-ID, Target, UA-Loose-Route,and other such mechanisms are attempting to solve these problems. History-Info provides a related set of solution that also encompasses request redirection.

Problem 1: Expressing the identity that was originally the target of the request.

Problem 2: Delivering any end-to-end parameters that might have been encoded in the original request URI. Note that this is complicated by the possibility of end-to-middle parameters that need to be stripped by a mid-path node.

We also have a related problem that, AFAIK, neither CPID, nor Target nor UA-Loose-Route attempt to solve, but that History-Info does attempt, which is:

Problem 3: Expressing what operations have occurred, and WHY they have occurred, in such a way that the target, mid-path boxes, and/or the requester can do something useful with this knowledge.

I've always held that this last problem is infinitely complex and that we should not try to solve it in the general case, which explains my reluctance to attack the History-Info problem (or indeed the old Diversion header, which also tickled part of this problem space). Building applications that require Ultimate Understanding seems to me to be a Bad Idea. Much as the invention of time travel will have made the concept of future-perfect tense untenable (the future will have been found not to have been perfect after all), so too is the concept of Ultimate Understanding untenable -- if you know everything, you can't possibly understand it since understanding requires knowledge outside the subject being considered, and if you understand everything you know, you'll understand you don't know everything. And that sums up the way I currently feel about the whole US-Loose-Route/CPID/Target discussion.

Conclusion:

New proposed vocabulary for proxy operations: request routing, rerouting, retargeting, and redirection.

Call for clarity on exactly which problems we're solving with UA- Loose-Routing, target, CPID, etc. Proposed: target identity, end-to- end parameters.


--
Dean Willis


_______________________________________________
Sip mailing list  https://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use [EMAIL PROTECTED] for questions on current sip
Use [EMAIL PROTECTED] for new developments on the application of sip

Reply via email to