Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - Record-Route and tranaction state model.
Paul Kyzivat <pkyzivat@cisco.com> Tue, 18 August 2009 21:28 UTC
Return-Path: <pkyzivat@cisco.com>
X-Original-To: sipcore@core3.amsl.com
Delivered-To: sipcore@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 2F6A628C31D for <sipcore@core3.amsl.com>; Tue, 18 Aug 2009 14:28:44 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.541
X-Spam-Level:
X-Spam-Status: No, score=-6.541 tagged_above=-999 required=5 tests=[AWL=0.058, BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id G5ypLTWa1Rot for <sipcore@core3.amsl.com>; Tue, 18 Aug 2009 14:28:42 -0700 (PDT)
Received: from sj-iport-5.cisco.com (sj-iport-5.cisco.com [171.68.10.87]) by core3.amsl.com (Postfix) with ESMTP id A763E3A6E17 for <sipcore@ietf.org>; Tue, 18 Aug 2009 14:28:42 -0700 (PDT)
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: ApoEAPu5ikqrR7PE/2dsb2JhbAC/U4gtkGAFhBk
X-IronPort-AV: E=Sophos;i="4.43,404,1246838400"; d="scan'208";a="90600704"
Received: from sj-dkim-4.cisco.com ([171.71.179.196]) by sj-iport-5.cisco.com with ESMTP; 18 Aug 2009 21:28:36 +0000
Received: from sj-core-1.cisco.com (sj-core-1.cisco.com [171.71.177.237]) by sj-dkim-4.cisco.com (8.12.11/8.12.11) with ESMTP id n7ILSaLS004693; Tue, 18 Aug 2009 14:28:36 -0700
Received: from xbh-rtp-211.amer.cisco.com (xbh-rtp-211.cisco.com [64.102.31.102]) by sj-core-1.cisco.com (8.13.8/8.14.3) with ESMTP id n7ILS12S001660; Tue, 18 Aug 2009 21:28:36 GMT
Received: from xfe-rtp-202.amer.cisco.com ([64.102.31.21]) by xbh-rtp-211.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 18 Aug 2009 17:28:32 -0400
Received: from [161.44.174.156] ([161.44.174.156]) by xfe-rtp-202.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 18 Aug 2009 17:28:32 -0400
Message-ID: <4A8B1D01.7090403@cisco.com>
Date: Tue, 18 Aug 2009 17:28:33 -0400
From: Paul Kyzivat <pkyzivat@cisco.com>
User-Agent: Thunderbird 2.0.0.22 (Windows/20090605)
MIME-Version: 1.0
To: Ian Elz <ian.elz@ericsson.com>
References: <C0E80510684FE94DBDE3A4AF6B968D2D06311DBD@esealmw118.eemea.ericsson.se> <4A85C195.4060903@nostrum.com> <C0E80510684FE94DBDE3A4AF6B968D2D06312609@esealmw118.eemea.ericsson.se> <4A89DF9E.9010807@cisco.com> <C0E80510684FE94DBDE3A4AF6B968D2D0634799C@esealmw118.eemea.ericsson.se>
In-Reply-To: <C0E80510684FE94DBDE3A4AF6B968D2D0634799C@esealmw118.eemea.ericsson.se>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-OriginalArrivalTime: 18 Aug 2009 21:28:32.0761 (UTC) FILETIME=[D63F1E90:01CA204A]
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; l=12657; t=1250630916; x=1251494916; c=relaxed/simple; s=sjdkim4002; h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version; d=cisco.com; i=pkyzivat@cisco.com; z=From:=20Paul=20Kyzivat=20<pkyzivat@cisco.com> |Subject:=20Re=3A=20[sipcore]=20draft-roach-sipcore-rfc3265 bis-00=20-=20Record-Route=20and=0A=20tranaction=20state=20mo del. |Sender:=20; bh=qjLF0hQ6SKR4PJ/5lkwRJcK/BFc0u7rKNG2h5rOSr+c=; b=gdtn0gfycTvsgzvC9j6ocBBxb/N6yCox5P9efEEVPQIR6DhepeuhUdwLY/ G0NiaQNfE5xroPyaIuiOHR+zHKY1gN+kdbPpzv8we92ZupVL+A2aQVmvqza3 4TFkZJhn+j;
Authentication-Results: sj-dkim-4; header.From=pkyzivat@cisco.com; dkim=pass ( sig from cisco.com/sjdkim4002 verified; );
Cc: sipcore@ietf.org
Subject: Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - Record-Route and tranaction state model.
X-BeenThere: sipcore@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: SIP Core Working Group <sipcore.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/sipcore>
List-Post: <mailto:sipcore@ietf.org>
List-Help: <mailto:sipcore-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 18 Aug 2009 21:28:44 -0000
Ian Elz wrote: > Paul, > > Agreed. > > Where the establishment of a SUBSCRIBE dialog is different from other > dialog types I think that the draft should be explicit. E.g. It should > indicate that all the UAS actions for the 200 Ok should be taken but the > UAC will ignore this for establishing the dialog. That the NOTIFY > headers will be used for establishing the dialog, record-route, contact > etc. That is the one thing I don't like about this approach - that it makes entirely new rules for dialog establishment for SUBSCRIBE. But interestingly, this makes it more consistent with REFER. And it was already a special case because of the NOTIFY forking. Thanks, Paul > Ian > > -----Original Message----- > From: Paul Kyzivat [mailto:pkyzivat@cisco.com] > Sent: 17 August 2009 23:54 > To: Ian Elz > Cc: Adam Roach; sipcore@ietf.org > Subject: Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 - Record-Route > and tranaction state model. > > Ian, > > 3265 wasn't very explicit about some of this, and the end result was > that for several things there were two different mechanisms for > obtaining information, and no clear rules about which took precedence. > This typically isn't a problem *as long as both mechanisms yield the > same result*. But whenever you "replicate" something there is always the > possibility that the results aren't really replicas, and then questions > about which is the *true* one. > > For instance, > > 1) suppose the first NOTIFY arrives before the 200 (SUBSCRIBE) does. > and suppose the two contain different Contact URIs. After both > have been received, which value is the remote target for the dialog? > > 2) Similar to (1), but for Record-Route. > > By eliminating one source of information for the dialog (the 200), there > are a number of questions than then need not be either asked or > answered. > > Thanks, > Paul > > Ian Elz wrote: >> Adam. >> >> I understand that most of what I commented on was included in RFC3265. >> The problem with RFC3265 was that a lot of the detail was missing. The > >> concept of the new draft is to correct those omissions and to simplify > >> and clarify what was included in RFC3265. >> >> RFC3265 does not include anything about how the subscriber (I will use > >> subscriber and notifier as UAC/UAS reverse for the SUBSCRIBE and >> NOTIFY.) obtains his route set. If the new RFC does not explicitly >> state that the subscriber route set is obtained from the Record-Route >> header contained in the NOTIFY then RFC3261 applies the subscriber >> route set is obtained form the 2xx to the SUBSCRIBE. This will make >> for an interesting dialog if the 2xx to the SUSCRIBE is never > received. >> Specific responses in-line [ige]. >> >> Ian >> >> -----Original Message----- >> From: Adam Roach [mailto:adam@nostrum.com] >> Sent: 14 August 2009 20:57 >> To: Ian Elz >> Cc: sipcore@ietf.org; Christer Holmberg >> Subject: Re: draft-roach-sipcore-rfc3265bis-00 >> >> Ian Elz wrote: >> >>> Now a more complex issue: >>> >>> You are proposing that the first NOTIFY establishes the SUBSCRIBE >>> dialog. What impact does this have on the establishment of the route >>> set at the UAC as defined in RFC3261? >>> >> From a practical perspective, it's the same as what we have in 3265 >> -- except that it's a little easier to implement at the subscriber. >> >> Keep in mind that 3265 describes dialogs being established by NOTIFY >> requests -- this is not new in the 3265bis draft. The only difference >> in dialog establishment is that we're removing the ability for a >> SUBSCRIBE 200 response to create a dialog. >> >> This is an extremely important point, so I'll repeat it: this change >> is not *ADDING* new behavior. It is *REMOVING* unnecessary behavior >> that has been shown to cause problems. >> >> [ige] I understand that you are not adding any functionality which is >> different from RFC3265. The problem is that what was in RFC3265 >> changed the actions specified in RFC3261 but did not state how they >> hade been changed. This is part of what caused the problems in >> RFC3265. The updated RFC MUST include this detail or we will end up >> with inconsistent implementations. >> >>> Normal RFC3261 has the UAS route set taken from Record-Route in the >>> initial request. The UAS then copies the Record-Route back into the >>> 2xx response (or reliable provisional response) which is then used by > >>> the UAC to set its the route set. This ensures that the route sets in > >>> the UAC and UAS align. >>> >>> Section 4.3 of the draft proposes that the initial SUBSCRIBE has the >>> normal Record-Route which establishes the UAS route set but that the >>> NOTIFY also has Record-Route performed by proxies. This leaves the >>> possibility that the route set at the UAC and UAS may not align. >>> >> Actually, it doesn't. As long as proxies follow the guidance in 4.3, >> then the route set in the SUBSCRIBE will be precisely identical to the > >> route set established by the NOTIFY. Because of the Record-Route in >> the SUBSCRIBE, the NOTIFY will contain Route header fields that >> guarantee that the NOTIFY traverses the proxies that Record-Route the > SUBSCRIBE. >> These proxies, by the normative requirement in 4.3, will then >> Record-Route the NOTIFY, which guarantees that the route set in the >> subscriber matches that of the notifier. >> >> If you think I'm confused about this in some way, please describe a >> concrete set of compliant proxy behaviors that can result in an >> asymmetrical route set, preferably using a sequence diagram. >> >> [ige] The problem we have is backward compatibility. If the subscriber > >> and notifier support the proposed new functionality but an >> intermediate proxies does not then this may result in an asymmetric >> route sets. The SUBSCRIBE will be seen by the proxy as a dialog >> initiating request and will add itself to the Record-Route in the >> SUBSCRIBE. When the NOTIFY is handled however there is no requirement >> in RFC3261 to include itself in the Record-route as RFC3261 is >> explicit in the fact that any Record-route added to the NOTIFY will >> NOT update the route set. Thus asymmetric route sets will result. This > >> will result in SUSCRIBE messages being passed via different proxies >> than the NOTIFY with the result that some proxies will see a >> subscription termination resulting from a SUBSCRIBE but not from a >> NOTIFY or as the result of a rejection of a NOTIFY. >> >> >>> I also have a concern as to what will happen with the route set if >>> the SUBSCRIBE Record-Route is returned in the 2xx and the NOTIFY also > >>> includes a Record-Route. Which one is used to establish the route set > >>> at the subscriber. Do we take the one which arrives first? Do we take > >>> the one which arrives second? There is no issue if they are the same >>> but what if they differ? >>> >> As I mention above: In a compliant system, they can't differ. However, > >> as we all know, systems don't always do the right thing. SBCs can >> tinker with Route/Record-Route in ways that create asymmetric route >> sets, even for normal INVITE/200/ACK transactions. >> >> With 3265, if there *were* a difference, your question is highly >> relevant: the answer to "but what if they differ?" was a resounding "I > >> have no clue!" >> >> Which is one of the key reasons why we made this change. >> >> In 3265bis, the answer is straightforward: since the NOTIFY >> establishes the dialog, the NOTIFY is where the route set comes from. >> >> Really, the 200 response is kind of a throw-away message anyway. Even >> with legacy 3265 behavior, if I have a SUBSCRIBE fork, and it >> establishes two dialogs, I'm going to have to take the route set for >> at least one of the dialogs from the NOTIFY -- so I may as well always > >> take it from the NOTIFY. >> >> [ige] Agree that with forking only a single 200 OK will mean that >> NOTIFY will be used to establish other SUBSCRIBE dialogs. This appears > >> to be an issue with forking and RFC3261 where only a single 2xx >> response is returned. If I subscribe and multiple nodes accept the > subscription e.g. >> I subscribe to the dialog-event mechanism for all dialogs for a user, >> why shouldn't multiple 2xx responses to the SUBSCRIBE be returned to >> establish multiple dialogs and to set up the route sets for each of >> those dialogs. >> >>> Should there be a requirement that proxies MUST include themselves in > >>> the NOTIFY Record-Route if they included themselves in the SUBSCRIBE >>> Record-Route and to exclude themselves in the NOTUFY if they were not > >>> in the SUBSCRIBE Record-Route. >>> >> That's certainly the intention of 4.3. It's a bit tortured to imagine >> that a proxy might be on the path of the NOTIFY without having >> Record-Routing the SUBSCRIBE. Nonetheless, I'm okay with prohibiting >> Record-Routing a NOTIFY unless you've also Record-Routed the >> associated SUBSCRIBE; I'll add: >> >> Proxies that did not add a Record-Route header field to the >> initial SUBSCRIBE request MUST NOT add a Record-Route header >> field to any of the associated NOTIFY requests. >> >> [ige] But there is nothing to indicate that proxies which did add >> themselves to the Record-Route in the SUBSCRIBE MUST add themselves to > >> the Record-Route in subsequent NOTIFY requests for the same dialog > (?). >> This does not remove the compatibility issue where the proxy does not >> support the updates included in the draft. >> >> >>> If we are to use the Record-Route in the NOTIFY then the draft should > >>> explicitly state what should happen at the subscriber end. Should the > >>> 2xx response to the NOTIFY include a copy of the Record-Route taken >>> from the NOTIFY? >>> >> It doesn't matter. >> >> [ige] If you don't include normative text which specifies that the >> route set is established from the Record-Route in the NOTIFY then >> RFC3261 applies and the route set at the subscriber is obtained from >> the 2xx to the SUBSCRIBE. >> >>> What does the notifier end do if it then receives this Record-Route? >>> >> It ignores it. There is no way to change a dialog route set (other >> than the remote target) mid-dialog. >> >> [ige] Is what you are saying is that for one dialog you may take the >> route set from the 2xx to the SUBSCRIBE, depending upon whether the >> NOTIFY or 2xx arrives first, and for other dialogs it is taken from >> the NOTIFY. In the forked case you may then end up with one symmetric >> route set and multiple asymmetric route sets; i.e. all the proxies may > >> see subsequent SUBSCRIBE requests for one dialog but not for the >> others. I am not sure what this will do to the proxies handling of the > >> dialogs if anything but we need to consider it to be sure. >> >> >>> There is one more related issue: >>> >>> What happens if the 2xx to the SUBSCRIBE transaction is never >>> received by the subscriber. Based upon the non-INVITE client >>> transaction in >>> RFC3261 the termination of the transaction upon expiry of Timer F >>> will inform the TU. In normal cases the TU would terminate the >>> transaction and drop the dialog In this case if the NOTIFY has been >>> received before the 2xx then this should be treated as the 2xx from >>> the transaction perspective. This almost goes as far as defining a >>> separate client SUBSCRIBE transaction. >>> >> Again, this behavior was present in 3265, and quite deliberately so. >> Keep in mind: for any network that has even a single proxy that >> doesn't Record-Route, the vast majority of SUBSCRIBE dialogs will be >> established by the NOTIFY, not the 200 (since the NOTIFY will follow a > >> shorter path than the 200). And, with forking, all but one of the 200 >> responses will be discarded by the proxy anyway. You *really* don't >> want the system behavior to vary based on which 200 response wins the > race to the proxy. >> [ige] No we don't want the behaviour based upon whether the 2xx of the > >> NOTIFY wins the race. This is why the draft needs to be explicit upon >> how the route set is determined at the subscriber end. >> >> /a >> >> >> _______________________________________________ >> sipcore mailing list >> sipcore@ietf.org >> https://www.ietf.org/mailman/listinfo/sipcore >> >
- [sipcore] draft-roach-sipcore-rfc3265bis-00 Ian Elz
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 Adam Roach
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Ian Elz
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 Christer Holmberg
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Ian Elz
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Adam Roach
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 Adam Roach
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 Christer Holmberg
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Paul Kyzivat
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 DRAGE, Keith (Keith)
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 Christer Holmberg
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Christer Holmberg
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Ian Elz
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Ian Elz
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Paul Kyzivat
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Ian Elz
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Paul Kyzivat
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Christer Holmberg
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Paul Kyzivat
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 -… Christer Holmberg
- Re: [sipcore] draft-roach-sipcore-rfc3265bis-00 Dale Worley