[Sip] loop detection measurements (was Fwd: [Sipping] comments on loop detection anddraft-campen-sipping-stack-loop-detect-00)

Robert Sparks <rjsparks@nostrum.com> Wed, 05 July 2006 14:55 UTC

Received: from [127.0.0.1] (helo=stiedprmman1.va.neustar.com) by megatron.ietf.org with esmtp (Exim 4.43) id 1Fy8mR-0001WJ-G2; Wed, 05 Jul 2006 10:55:07 -0400
Received: from [10.91.34.44] (helo=ietf-mx.ietf.org) by megatron.ietf.org with esmtp (Exim 4.43) id 1Fy8mQ-0001WE-A1 for sip@ietf.org; Wed, 05 Jul 2006 10:55:06 -0400
Received: from shaman.nostrum.com ([72.232.15.10] helo=nostrum.com) by ietf-mx.ietf.org with esmtp (Exim 4.43) id 1Fy8mM-0001fx-S4 for sip@ietf.org; Wed, 05 Jul 2006 10:55:05 -0400
Received: from [172.17.2.252] (dsl001-129-070.dfw1.dsl.speakeasy.net [72.1.129.70]) (authenticated bits=0) by nostrum.com (8.13.6/8.13.6) with ESMTP id k65Erj7A092754 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NO) for <sip@ietf.org>; Wed, 5 Jul 2006 09:53:46 -0500 (CDT) (envelope-from rjsparks@nostrum.com)
Mime-Version: 1.0 (Apple Message framework v752.2)
To: IETF SIP List <sip@ietf.org>
Message-Id: <EBB60F9C-CDED-44F5-8FD3-E2175D43167B@nostrum.com>
References: <446DCEAB.3080606@alcatel.fr>
From: Robert Sparks <rjsparks@nostrum.com>
Date: Wed, 05 Jul 2006 09:53:44 -0500
X-Mailer: Apple Mail (2.752.2)
Received-SPF: pass (nostrum.com: 72.1.129.70 is authenticated by a trusted mechanism)
X-Spam-Score: 0.0 (/)
X-Scan-Signature: 9724479da43a8325ad975c1a9b841870
Subject: [Sip] loop detection measurements (was Fwd: [Sipping] comments on loop detection anddraft-campen-sipping-stack-loop-detect-00)
X-BeenThere: sip@ietf.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Session Initiation Protocol <sip.ietf.org>
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/sip>, <mailto:sip-request@ietf.org?subject=unsubscribe>
List-Post: <mailto:sip@ietf.org>
List-Help: <mailto:sip-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/sip>, <mailto:sip-request@ietf.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1930963806=="
Errors-To: sip-bounces@ietf.org

Copying forward an older thread from SIPPING in case those  
participating in the fork-loop-fix conversation here hadn't seen it.

RjS


Begin forwarded message:

> From: Thomas Froment <Thomas.Froment@alcatel.fr>
> Date: May 19, 2006 8:56:59 AM CDT
> To: Jeroen van Bemmel <jbemmel@zonnet.nl>
> Cc: sipping@ietf.org
> Subject: Re: [Sipping] comments on loop detection anddraft-campen- 
> sipping-stack-loop-detect-00
>
> Jeroen van Bemmel wrote:
>
>> Thomas,
>>
>> Very interesting to have some numbers here
>>
>> 260/305 ~ 15% less calls/sec with loop detection. That would be ~  
>> 15% CPU, iff it is at 100% for the whole test - is it? (you say  
>> 13%, so perhaps you already compensated for this - I just want to  
>> understand how you came to this conclusion)
>
> You are right, when doing a test, CPU is not busy at 100%, it is  
> approximately between 85 and 90%.
> It is to notice we perform this kind of tests on our implementation  
> for a long time (based on sipstone, http://www.sipstone.org/),
> and I am really confident in injector system and in the results and  
> in general...
>
>>
>> RFC3261 is wrong in many aspects of loop detection.
>
> Is it documented somewhere? did you find a bug describing these  
> problems?
>
>> Could you run the same test, but this time only including the  
>> request URI and the topmost Route header (if any) in the hash?
>
> The current version *already* includes the usage of request URI and  
> the topmost Route header (only!) ... I did not even try to
> test the previous algorithm....
>
>> ----- Original Message ----- From: "Thomas Froment"  
>> <Thomas.Froment@alcatel.fr>
>> To: <sipping@ietf.org>
>> Sent: Friday, May 19, 2006 12:43 PM
>> Subject: [Sipping] comments on loop detection anddraft-campen- 
>> sipping-stack-loop-detect-00
>>
>>
>> Taking into account draft-ietf-sip-fork-loop-fix-01.txt which  
>> recommends
>> the support of RFC3261 loop detection algorithm (instead
>> of the Max-Forwards mechanism), I would like to make some comments:
>>
>> 1/ The loop detection mechanism described in RFC 3261 seems  
>> confusing in
>> some points:
>>
>> - Section 16.6, §8 (when sending the request, adding the loop  
>> detection
>> hash on branch parameter) says:
>>
>> " Loop detection is performed by verifying that, when a request  
>> returns to a proxy,
>> those fields having an impact on the processing of the request  
>> have not changed.
>> The value placed in this part of the branch parameter SHOULD  
>> reflect all of
>> those fields (including any Route, Proxy-Require and Proxy- 
>> Authorization header fields).
>> This is to ensure that if the
>> request is routed back to the proxy and one of those fields
>> changes, it is treated as a spiral and not a loop (see Section
>> 16.3). (...)"
>>
>> First of all the "*fields having an impact on the processing of  
>> the request have not changed*" is confusing
>> for some people, because you really need to have a deep knowledge  
>> of SIP protocol to be sure on this point. (And
>> what about SIP extensions like Service Route?)
>>
>> Then "any Route" is, in my opinion confusing, is it really any  
>> Route or only top most Route?
>> I imagine this is only the top most route, and it would match the  
>> statement "
>> fields having an impact on the processing of the request", am I  
>> wrong?
>>
>> Third, the last paragraph is even more confusing:
>> "A common way to create this value is to compute a
>> cryptographic hash of the To tag, From tag, Call-ID header
>> field, the Request-URI of the request received (before
>> translation), the topmost Via header, and the sequence number
>> from the CSeq header field, in addition to any Proxy-Require"
>>
>> - Here, no Route header is mentionned anymore (neither Proxy- 
>> Authorization), should be clarified...
>> - the "topmost Via header":  this assertion is FALSE, if you take  
>> the "branch parameter" of Via Header, to compute your hash,
>> you will never detect any loop, since the generated branch will  
>> always be different !
>>
>> I first tried to find a bug in database, and only found one  
>> problem related to loop detection:
>> http://bugs.sipit.net/show_bug.cgi?id=648
>> "branch hash calculacation needs explicit comment for loop- 
>> detecting proxies"
>> Which is not pointing out the problem...
>>
>> Correct wording of the second paragraph may look like:
>> "A common way to create this value is to compute a
>> cryptographic hash of the To tag, From tag, Call-ID header
>> field, the Request-URI of the request received (before
>> translation), the topmost Via header *without branch parameter*,  
>> the sequence number
>> from the CSeq header field, in addition to *the top most Route*  
>> and any Proxy-Require or Proxy-Authorization header(s)*"
>>
>>
>> 2/ Looking at "draft-campen-sipping-stack-loop-detect-00", we also  
>> decided to bench the *existing* RFC 3261 algorithm
>> to be able to evaluate if an optimization is needed.
>> It is to mentionned, this bench was performed on a really  
>> optimized SIP stack and the loop detection, as well,
>> has been really carefully coded in order to minimize processing  
>> and memory usage
>> (just to anticipate objections like "is your algorithm really well  
>> coded?): as an illustration, loop detection is not performed if
>> a request is recognized as being a retransmission, and an  
>> optimized MD5 implementation is used as hash algorithm...
>>
>> Doing a simple proxying scenario,
>> using in injector the following "CALL ATTEMPT PER SECOND" (CAPS)  
>> scenario:
>>
>> injector
>> INVITE --------------> Proxy (under test) ---------------> server  
>> (UAS test)
>>
>> 100 TRYING  <---------- Proxy (under test)
>> 180 RINGING <---------- Proxy (under test) <-------------- server
>> 200 OK      <---------- Proxy (under test) <-------------- server
>>
>> ACK ------------------> Proxy (under test) ------------->  server
>> BYE ------------------> Proxy (under test) ------------->  server
>>
>> on a basic configuration,
>> WITHOUT loop detection, result is ~ 305 CAPS
>> WITH loop detection, result is ~ 260 CAPS
>> It means, ~13% of CPU is used for this fonction for a basic  
>> proxying scenario...
>>
>> We will try to provide the figures if we decide to implement draft- 
>> campen-sipping-stack-loop-detect-00
>> algorithm but, at first, it seems valuable to think of clarifying  
>> and/or optimizing current RFC 3261 algorithm...
>>
>> Thomas
>>
>>
>>
>>
>>
>> _______________________________________________
>> Sipping mailing list  https://www1.ietf.org/mailman/listinfo/sipping
>> This list is for NEW development of the application of SIP
>> Use sip-implementors@cs.columbia.edu for questions on current sip
>> Use sip@ietf.org for new developments of core SIP
>
>
>
> _______________________________________________
> Sipping mailing list  https://www1.ietf.org/mailman/listinfo/sipping
> This list is for NEW development of the application of SIP
> Use sip-implementors@cs.columbia.edu for questions on current sip
> Use sip@ietf.org for new developments of core SIP

_______________________________________________
Sip mailing list  https://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use sip-implementors@cs.columbia.edu for questions on current sip
Use sipping@ietf.org for new developments on the application of sip