Supporting Multiple Path Routing in the Session Initiation Protocol (SIP) Bluesocket Inc.
10 North Ave. Burlington MA 01803 US +1 781 229 0533 x173 dworley@pingtel.com http://www.pingtel.com
Transport SIP An increasing number of SIP architectures implement multiple path routing (MPR), which is the providing of more than one path for a call to reach a destination user agent (UA). To implement MPR well, the proxy which forks a request onto the redundant paths needs to be able to determine if a fork that failed reached the destination UA and was rejected by the UA (and so an alternate path should not be tried), or if the fork failed before reaching the UA (and so an alternate path should be attempted). This document is to begin a discussion of strategies for making this determination.
An increasing number of Session Initiation Protocol (SIP) system architectures implement multiple path routing (MPR), the feature of providing more than one path for a call to reach a destination user agent (UA). (MPR is also called path redundancy (PR) or alternate path retry (APR).) Typical situations are: multiple gateway devices that connect a SIP network to the PSTN, such that if one gateway is occupied to capacity, calls should be routed to the next gateway a PSTN gateway device as fallback when SIP connection over the public Internet fails sending a request to multiple services that determine how to reach a destination, with an order of precedence among the services as to which service is to be used (e.g., connecting to an ENUM contact, falling back to a PSTN gateway) From a protocol point of view, a proxy is presented with the situation where a request (typically an INVITE) should be serially forked to more than one SIP URI, and from an application-layer point of view, all of the URIs are expected to ultimately reach the same user agent (UA). Of course, if one fork of the request succeeds in reaching a destination UA, the proxy should not attempt any further forks. If the forked request failed and did not reach the destination UA, then in order implement MPR, the proxy must attempt the next fork. But if the request did reach the destination UA, and the UA returned a failure response, sending the request to the same UA via a different path is unlikely to yield success, and may even degrade the user experience. For example, if the first request was not accepted by the attending human (ring-no-answer), sending a second request to the UA by a different path, which will cause the UA to alert again, is not the desired behavior. The purpose of this document is to open the discussion of methods by which the proxy can implement the desired behavior. Two subordinate problems are contained in the main problem: One is how the proxy becomes aware that a request to be forked is a MPR situation. Another is the question of when two destinations are to be considered to be "the same", and so constitute an MPR set.
This section discusses proposed solutions to the problem. One possible solution is to split the failure response codes into two groups, one of which is only generated by proxies, the other is only generated by UAs. Then the response code from a failed fork should identify whether the call reached a destination UA or not. Most current failure response codes fall into one or the other of these two classes, but several of them can be generated by either proxies or user agents. In addition, the rules for choosing the response from among the set of responses from a set of forks must be adjusted to give preference to UA-generated responses, which causes difficulties in some situations where the UAC might be able to amend its request in ways that increase its chances of success. Other possible approaches to this problem are solicited.
Alternate path retry presents no security considerations that are known to the author beyond what is present in non-MPR SIP system architectures.
First version.
Add note that the new variant of 500 would be like "reorder" in the PSTN. Add note that dealing with 402 can be postponed to when 402 is standardized. Add section proposing how to split response codes.
Narrow the scope of the document to be a problem description.
SIP: Session Initiation Protocol