[reSIProcate] DUM based UAS is not robust against packet loss

Daniel Pocock daniel at readytechnology.co.uk
Wed Apr 19 15:37:36 CDT 2006



Dmitry Semyonov wrote:

>Hello All!
>
>Recently I encountered the following situation:
>
>SBC	DUM
>-------------
>INV-->
>	<--OK
>ACK-->	!this ACK has not arrived!
>reINV-->
>	<--481 Call/Transaction Does Not Exist
>	<--400 Bad request (for the initial INV)
>-------------
>
>SBC is used for NAT traversal. SBC knows by some means that DUM is 
>behind non-symmetric NAT. Therefore, SBC tries to release RTP stream, 
>and sends re-INVITE _immediately_ after ACK. Note that this is 
>entirely legal! ACK is lost (or reordered with re-INV) on the way to 
>DUM. DUM replies with 4xx for both re-INVITE and original INVITE.
>
>I could understand 481 reply, but why to send 400? Calling party 
>SHOULD (per RFC) terminate the session itself in case of 481 reply. 
>(Note the SHOULD, but not MUST!)
>
>I believe in this case DUM should understand that the ACK was lost, 
>and accept re-INVITE as if the ACK was received, instead of dropping 
>everything.
>  
>
The re-INVITE does imply that an ACK was sent (or that the client is 
poorly written, which is not the case here) - I would tend to agree that 
DUM should treat any other in-dialog requests (re-INVITE, BYE) as an 
implicit ACK, and should therefore act as if the ACK had been received.

>Note 1: The same applies to all possible in-dialog requests, but 
>not only to re-INVITEs. (There could be other scenarios, not 
>necessarily involving NAT and SBC.)
>
>Note 2: In the above example offer-answer exchange was completed 
>before the ACK, but what if DUM is waiting for answer in the ACK? For 
>me, the most appropriate solution would be to delay the in-dialog 
>request until the ACK is finally received, and then process the 
>request immediately after the ACK. (Or drop if on ACK timeout.) Does 
>DUM already have some means to implement such delaying of the incoming 
>in-dialog requests?
>
>  
>



More information about the resiprocate-devel mailing list