[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