Sunday, June 22, 2014

SIP rport

The Session Initiation Protocol (SIP) operates over UDP and TCP,among others.  When used with UDP, responses to requests are returned to the source address the request came from, and to the port written into the topmost Via header field value of the request.  This behavior is not desirable in many cases, most notably, when the client is behind a Network Address Translator (NAT).  This extension defines a new parameter for the Via header field, called "rport",  that allows a client to request that the server send the response back to the source IP address and port from which the request originated.

 Example

   A client sends an INVITE to a proxy server which looks like, in part:

   INVITE sip:user@example.com SIP/2.0
   Via: SIP/2.0/UDP 10.1.1.1:4540;rport;branch=z9hG4bKkjshdyff

   This INVITE is sent with a source port of 4540 and a source IP
   address of 10.1.1.1.  The proxy is at 192.0.2.2 (proxy.example.com),
   listening on both port 5060 and 5070.  The client sends the request
   to port 5060.  The request passes through a NAT on the way to the
   proxy, so that the source IP address appears as 192.0.2.1 and the
   source port as 9988.  The proxy forwards the request, but not before
   appending a value to the "rport" parameter in the proxied request:

   INVITE sip:user@example.com SIP/2.0
   Via: SIP/2.0/UDP proxy.example.com;branch=z9hG4bKkjsh77
   Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988
    ;branch=z9hG4bKkjshdyff

   This request generates a response which arrives at the proxy:

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP proxy.example.com;branch=z9hG4bKkjsh77
   Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988
    ;branch=z9hG4bKkjshdyff

   The proxy strips its top Via header field value, and then examines
   the next one.  It contains both a "received" parameter and an "rport"
   parameter.  The server follows the rules specified in Section 4 and
   sends the response to IP address 192.0.2.1, port 9988, and sends it
   from port 5060 on 192.0.2.2:


   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988
    ;branch=z9hG4bKkjshdyff

   This packet matches the binding created by the initial request.
   Therefore, the NAT rewrites the destination address of this packet
   back to 10.1.1.1, and the destination port back to 4540.  It forwards
   this response to the client, which is listening for the response on
   that address and port.  The client properly receives the response.

-- From (rfc3581)

No comments:

Post a Comment