Network Working Group C. Huitema
Request for Comments: 3605 Microsoft
Category: Standards Track October 2003
Real Time Control Protocol (RTCP) attribute in
Session Description Protocol (SDP)
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2003). All Rights Reserved.
Abstract
The Session Description Protocol (SDP) is used to describe the
parameters of media streams used in multimedia sessions. When a
session requires multiple ports, SDP assumes that these ports have
consecutive numbers. However, when the session crosses a network
address translation device that also uses port mapping, the ordering
of ports can be destroyed by the translation. To handle this, we
propose an extension attribute to SDP.
1. Introduction
The session invitation protocol (SIP, [RFC3261]) is often used to
establish multi-media sessions on the Internet. There are often
cases today in which one or both ends of the connection are hidden
behind a network address translation device [RFC2766]. In this case,
the SDP text must document the IP addresses and UDP ports as they
appear on the "public Internet" side of the NAT. In this memo, we
will suppose that the host located behind a NAT has a way to obtain
these numbers. A possible way to learn these numbers is briefly
outlined in section 3, however, just learning the numbers is not
enough.
The SIP messages use the encoding defined in SDP [RFC2327] to
describe the IP addresses and TCP or UDP ports used by the various
media. Audio and video are typically sent using RTP [RFC3550], which
requires two UDP ports, one for the media and one for the control
protocol (RTCP). SDP carries only one port number per media, and
Huitema Standards Track [Page 1]RFC 3605 RTCP attribute in SDP October 2003
states that "other ports used by the media application (such as the
RTCP port) should be derived algorithmically from the base media
port." RTCP port numbers were necessarily derived from the base
media port in older versions of RTP (such as [RFC1889]), but now that
this restriction has been lifted, there is a need to specify RTCP
ports explicitly in SDP. Note, however, that implementations of RTP
adhering to the earlier [RFC1889] specification may not be able to
make use of the SDP attributes specified in this document.
When the NAT device performs port mapping, there is no guarantee that
the mappings of two separate ports reflects the sequencing and the
parity of the original port numbers; in fact, when the NAT manages a
pool of IP addresses, it is even possible that the RTP and the RTCP
ports may be mapped to different addresses. In order to successfully
establish connections despite the misordering of the port numbers and
the possible parity switches caused by the NAT, we propose to use a
specific SDP attribute to document the RTCP port and optionally the
RTCP address.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
2. Description of the Solution
The main part of our solution is the declaration of an SDP attribute
for documenting the port used by RTCP.
2.1. The RTCP Attribute
The RTCP attribute is used to document the RTCP port used for media
stream, when that port is not the next higher (odd) port number
following the RTP port described in the media line. The RTCP
attribute is a "value" attribute, and follows the general syntax
specified page 18 of [RFC2327]: "a=<attribute>:<value>". For the
RTCP attribute:
* the name is the ascii string "rtcp" (lower case),
* the value is the RTCP port number and optional address.
The formal description of the attribute is defined by the following
ABNF [RFC2234] syntax:
rtcp-attribute = "a=rtcp:" port [nettype space addrtype space
connection-address] CRLF