draft-ietf-mmusic-sdp-comedia-09.txt | draft-ietf-mmusic-sdp-comedia-10.txt | |||
---|---|---|---|---|
MMUSIC Working Group D. Yon | MMUSIC Working Group D. Yon | |||
Internet-Draft Tactical Software, LLC | Internet-Draft Tactical Software, LLC | |||
Expires: March 30, 2005 G. Camarillo | Expires: May 27, 2005 G. Camarillo | |||
Ericsson | Ericsson | |||
September 29, 2004 | November 26, 2004 | |||
Connection-Oriented Media Transport in the Session Description | TCP-Based Media Transport in the Session Description Protocol (SDP) | |||
Protocol (SDP) | draft-ietf-mmusic-sdp-comedia-10.txt | |||
draft-ietf-mmusic-sdp-comedia-09.txt | ||||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is subject to all provisions | This document is an Internet-Draft and is subject to all provisions | |||
of section 3 of RFC 3667. By submitting this Internet-Draft, each | of section 3 of RFC 3667. By submitting this Internet-Draft, each | |||
author represents that any applicable patent or other IPR claims of | author represents that any applicable patent or other IPR claims of | |||
which he or she is aware have been or will be disclosed, and any of | which he or she is aware have been or will be disclosed, and any of | |||
which he or she become aware will be disclosed, in accordance with | which he or she become aware will be disclosed, in accordance with | |||
RFC 3668. | RFC 3668. | |||
skipping to change at page 1, line 38 | skipping to change at page 1, line 36 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on March 30, 2005. | This Internet-Draft will expire on May 27, 2005. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society (2004). | Copyright (C) The Internet Society (2004). | |||
Abstract | Abstract | |||
This document describes how to express media transport over | This document describes how to express media transport over TCP using | |||
connection-oriented protocols using the Session Description Protocol | the Session Description Protocol (SDP). It defines the SDP 'TCP' | |||
(SDP). It defines the SDP TCP protocol identifier, the SDP setup | protocol identifier, the SDP 'setup' attribute, which describes the | |||
attribute, which describes the connection setup procedure, and the | connection setup procedure, and the SDP 'connection' attribute, which | |||
SDP connection attribute, which handles connection reestablishment. | handles connection reestablishment. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Protocol Identifier . . . . . . . . . . . . . . . . . . . . . 3 | 3. Protocol Identifier . . . . . . . . . . . . . . . . . . . . . 3 | |||
4. Setup Attribute . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Setup Attribute . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4.1 The Setup Attribute in the Offer/answer Model . . . . . . 4 | 4.1 The Setup Attribute in the Offer/answer Model . . . . . . 4 | |||
5. The Connection Attribute . . . . . . . . . . . . . . . . . . . 5 | 5. The Connection Attribute . . . . . . . . . . . . . . . . . . . 5 | |||
5.1 Offerer Behaviour . . . . . . . . . . . . . . . . . . . . 6 | 5.1 Offerer Behaviour . . . . . . . . . . . . . . . . . . . . 6 | |||
5.2 Answerer Behaviour . . . . . . . . . . . . . . . . . . . . 7 | 5.2 Answerer Behaviour . . . . . . . . . . . . . . . . . . . . 7 | |||
6. Connection Management . . . . . . . . . . . . . . . . . . . . 7 | 6. Connection Management . . . . . . . . . . . . . . . . . . . . 8 | |||
6.1 Connection Establishment . . . . . . . . . . . . . . . . . 7 | 6.1 Connection Establishment . . . . . . . . . . . . . . . . . 8 | |||
6.2 Connection Reestablishment . . . . . . . . . . . . . . . . 8 | 6.2 Connection Reestablishment . . . . . . . . . . . . . . . . 8 | |||
6.3 Connection Termination . . . . . . . . . . . . . . . . . . 8 | 6.3 Connection Termination . . . . . . . . . . . . . . . . . . 8 | |||
7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 7. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
7.1 Passive/Active . . . . . . . . . . . . . . . . . . . . . . 8 | 7.1 Passive/Active . . . . . . . . . . . . . . . . . . . . . . 9 | |||
7.2 Actpass/Passive . . . . . . . . . . . . . . . . . . . . . 9 | 7.2 Actpass/Passive . . . . . . . . . . . . . . . . . . . . . 9 | |||
7.3 Existing Connection Reuse . . . . . . . . . . . . . . . . 9 | 7.3 Existing Connection Reuse . . . . . . . . . . . . . . . . 10 | |||
7.4 Existing Connection Refusal . . . . . . . . . . . . . . . 10 | 7.4 Existing Connection Refusal . . . . . . . . . . . . . . . 10 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 8. Other Connection-Oriented Transport Protocols . . . . . . . . 11 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . 12 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | |||
11.1 Normative References . . . . . . . . . . . . . . . . . . . . 12 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
11.2 Informative References . . . . . . . . . . . . . . . . . . . 12 | 12.1 Normative References . . . . . . . . . . . . . . . . . . . . 12 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 13 | 12.2 Informative References . . . . . . . . . . . . . . . . . . . 13 | |||
Intellectual Property and Copyright Statements . . . . . . . . 14 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 14 | |||
Intellectual Property and Copyright Statements . . . . . . . . 15 | ||||
1. Introduction | 1. Introduction | |||
The Session Description Protocol [4] provides a general-purpose | The Session Description Protocol [4] provides a general-purpose | |||
format for describing multimedia sessions in announcements or | format for describing multimedia sessions in announcements or | |||
invitations. SDP uses an entirely textual data format (the US-ASCII | invitations. SDP uses an entirely textual data format (the US-ASCII | |||
subset of UTF-8 [11]) to maximize portability among transports. SDP | subset of UTF-8 [11]) to maximize portability among transports. SDP | |||
does not define a protocol, but only the syntax to describe a | does not define a protocol, but only the syntax to describe a | |||
multimedia session with sufficient information to participate in that | multimedia session with sufficient information to participate in that | |||
session. Session descriptions may be sent using arbitrary existing | session. Session descriptions may be sent using arbitrary existing | |||
application protocols for transport (e.g., SAP [9], SIP [10], RTSP | application protocols for transport (e.g., SAP [9], SIP [10], RTSP | |||
[6], email, HTTP [8], etc.). | [6], email, HTTP [8], etc.). | |||
SDP [4] defines two protocol identifiers: RTP/AVP and UDP, both of | SDP [4] defines two protocol identifiers: RTP/AVP and UDP, both of | |||
which represent unreliable connectionless protocols. While these | which represent unreliable connectionless protocols. While these | |||
transports are appropriate choices for multimedia streams, there are | transports are appropriate choices for multimedia streams, there are | |||
applications for which connection-oriented transports, such as TCP, | applications for which TCP is more appropriate. This document | |||
are more appropriate. This document defines a new protocol | defines a new protocol identifier, 'TCP', to describe TCP connetions | |||
identifier, TCP, to describe TCP connetions in SDP. | in SDP. | |||
Connection-oriented protocols introduce two new factor when | TCP introduces two new factors when describing a session: how and | |||
describing a session: how and when should endpoints perform the | when should endpoints perform the TCP connection setup procedure. | |||
connection setup procedure. This document defines two new attributes | This document defines two new attributes to describe TCP connection | |||
to describe connection setups: setup and connection. | setups: 'setup' and 'connection'. | |||
2. Terminology | 2. Terminology | |||
In this document, the key words "MUST", "MUST NOT", "REQUIRED", | In this document, the key words "MUST", "MUST NOT", "REQUIRED", | |||
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT | |||
RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as | RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as | |||
described in BCP 14, RFC 2119 [3] and indicate requirement levels for | described in BCP 14, RFC 2119 [3] and indicate requirement levels for | |||
compliant implementations. | compliant implementations. | |||
3. Protocol Identifier | 3. Protocol Identifier | |||
The following is the ABNF for an m= line, as specified by RFC 2327 | The following is the ABNF for an 'm' line, as specified by RFC 2327 | |||
[4]. | [4]. | |||
media-field = "m=" media space port ["/" integer] | media-field = "m=" media space port ["/" integer] | |||
space proto 1*(space fmt) CRLF | space proto 1*(space fmt) CRLF | |||
This document defines a new value for the proto field: TCP. | This document defines a new value for the proto field: 'TCP'. | |||
The TCP protocol identifier is similar to the UDP protocol identifier | ||||
in that it only describes the transport protocol, and not the | ||||
upper-layer protocol. An m= line that specifies "TCP" MUST further | ||||
qualify the application-layer protocol using an fmt identifier. | ||||
Media described using an m= lines containing the TCP protocol | ||||
identifier are carried using TCP [1]. | ||||
It is RECOMMENDED that documents defining new SDP protocol | ||||
identifiers that involve extra protocol layers between TCP and the | ||||
media itself (e.g., TLS [7] over TCP) start with the string "TCP/" | ||||
(e.g., TCP/TLS). | ||||
The following sections define the setup and the connection | The 'TCP' protocol identifier is similar to the 'UDP' protocol | |||
attributes. While both attributes are applicable to m= lines that | identifier in that it only describes the transport protocol, and not | |||
use the TCP protocol identifier, they are not limited to them. These | the upper-layer protocol. An 'm' line that specifies 'TCP' MUST | |||
attributes MAY be used in conjunction with any m= line which uses a | further qualify the application-layer protocol using an fmt | |||
connection- oriented transport protocol, even if the protocol | identifier. Media described using an 'm' line containing the 'TCP' | |||
identifier of the m= line is not TCP. | protocol identifier are carried using TCP [1]. | |||
4. Setup Attribute | 4. Setup Attribute | |||
The setup attribute indicates which of the end points should initiate | The 'setup' attribute indicates which of the end points should | |||
the connection establishment (e.g., send the initial TCP SYN). The | initiate the TCP connection establishment (i.e., send the initial TCP | |||
setup attribute is charset-independent and can be a session-level or | SYN). The 'setup' attribute is charset-independent and can be a | |||
a media-level attribute. The following is the ABNF of the setup | session-level or a media-level attribute. The following is the ABNF | |||
attribute: | of the 'setup' attribute: | |||
setup-attr = "a=setup:" role | setup-attr = "a=setup:" role | |||
role = "active" / "passive" / "actpass" | role = "active" / "passive" / "actpass" | |||
/ "holdconn" | / "holdconn" | |||
Active: The endpoint will initiate an outgoing connection. | 'active': The endpoint will initiate an outgoing connection. | |||
Passive: The endpoint will accept an incoming connection. | 'passive': The endpoint will accept an incoming connection. | |||
ActPass: The endpoint is willing to accept an incoming connection | 'actpass': The endpoint is willing to accept an incoming | |||
or to initiate an outgoing connection. | connection or to initiate an outgoing connection. | |||
Holdconn: The endpoint does not want the connection to be | 'holdconn': The endpoint does not want the connection to be | |||
established for the time being. | established for the time being. | |||
4.1 The Setup Attribute in the Offer/answer Model | 4.1 The Setup Attribute in the Offer/answer Model | |||
The offer/answer model, defined in RFC 3264 [5], provides endpoints | The offer/answer model, defined in RFC 3264 [5], provides endpoints | |||
with a means to obtain shared view of a session. Some session | with a means to obtain shared view of a session. Some session | |||
parameters are negotiated (e.g., codecs to use), while others are | parameters are negotiated (e.g., codecs to use), while others are | |||
simply communicated from one endpoint to the other (e.g., IP | simply communicated from one endpoint to the other (e.g., IP | |||
addresses). The value of the setup attribute falls into the first | addresses). The value of the 'setup' attribute falls into the first | |||
category. That is, both endpoints negotiate its value using the | category. That is, both endpoints negotiate its value using the | |||
offer/answer model. | offer/answer model. | |||
The negotiation of the value of the setup attribute takes places as | The negotiation of the value of the 'setup' attribute takes places as | |||
follows. The offerer states which role or roles it is willing to | follows. The offerer states which role or roles it is willing to | |||
perform and the answerer, taking the offerer's willingness into | perform and the answerer, taking the offerer's willingness into | |||
consideration, chooses which roles both endpoints will actually | consideration, chooses which roles both endpoints will actually | |||
perform during connection establishment. The following are the | perform during connection establishment. The following are the | |||
values that the setup attribute can take in an offer/answer exchange: | values that the 'setup' attribute can take in an offer/answer | |||
exchange: | ||||
Offer Answer | Offer Answer | |||
________________ | ________________ | |||
active passive / holdconn | active passive / holdconn | |||
passive active / holdconn | passive active / holdconn | |||
actpass active / passive / holdconn | actpass active / passive / holdconn | |||
holdconn holdconn | holdconn holdconn | |||
The active endpoint SHOULD initiate a connection to the port number | The active endpoint SHOULD initiate a connection to the port number | |||
on the m= line of the other endpoint. The port number on its own m= | on the 'm' line of the other endpoint. The port number on its own | |||
line is irrelevant, and the opposite endpoint MUST NOT attempt to | 'm' line is irrelevant, and the opposite endpoint MUST NOT attempt to | |||
initiate a connection to the port number specified there. | initiate a connection to the port number specified there. | |||
Nevertheless, since the m= line must contain a valid port number, the | Nevertheless, since the 'm' line must contain a valid port number, | |||
endpoint specifying using the value active SHOULD specify a port | the endpoint specifying using the value active SHOULD specify a port | |||
number of 9 (the discard port) on its m= line. The endpoint MUST NOT | number of 9 (the discard port) on its 'm' line. The endpoint MUST | |||
specify a port number of zero, except to denote an m= line that has | NOT specify a port number of zero, except to denote an 'm' line that | |||
been or is being refused. | has been or is being refused. | |||
The passive endpoint SHOULD be ready to accept a connection on the | The passive endpoint SHOULD be ready to accept a connection on the | |||
port number specified in the m= line. | port number specified in the 'm' line. | |||
A value of actpass indicates that the offerer can either initiate a | A value of 'actpass' indicates that the offerer can either initiate a | |||
connection to the port number on the m= line in the answer or accept | connection to the port number on the 'm' line in the answer or accept | |||
a connection on the port number specified in the m= line in the | a connection on the port number specified in the 'm' line in the | |||
offer. That is, the offerer has no preference as to whether it | offer. That is, the offerer has no preference as to whether it | |||
accepts or initiates the connection and, so, is letting the answerer | accepts or initiates the connection and, so, is letting the answerer | |||
choose. | choose. | |||
A value of holdconn indicates that the connection should not be | A value of 'holdconn' indicates that the connection should not be | |||
established for the time being. | established for the time being. | |||
The default value of the setup attribute in an offer/answer exchange | The default value of the setup attribute in an offer/answer exchange | |||
is active in the offer and passive in the answer. | is 'active' in the offer and 'passive' in the answer. | |||
5. The Connection Attribute | 5. The Connection Attribute | |||
The preceding description of the setup attribute has been in the | The preceding description of the 'setup' attribute is placed in the | |||
context of using SDP to initiate a session. Still, SDP may be | context of using SDP to initiate a session. Still, SDP may be | |||
exchanged between endpoints at various stages of a session to | exchanged between endpoints at various stages of a session to | |||
accomplish tasks such as terminating a session, redirecting media to | accomplish tasks such as terminating a session, redirecting media to | |||
a new endpoint, or renegotiating the media parameters for a session. | a new endpoint, or renegotiating the media parameters for a session. | |||
After the initial session has been established, it may be ambiguous | After the initial session has been established, it may be ambiguous | |||
as to whether subsequent SDP exchange represents a confirmation that | as to whether subsequent SDP exchange represents a confirmation that | |||
the endpoint is to continue using the current media connection | the endpoint is to continue using the current TCP connection | |||
unchanged, or is a request to make a new media connection. The | unchanged, or is a request to make a new TCP connection. The | |||
media-level connection attribute, which is charset-independent, is | media-level 'connection' attribute, which is charset-independent, is | |||
used to disambiguate these two scenarios. The following is the ABNF | used to disambiguate these two scenarios. The following is the ABNF | |||
of the connection attribute: | of the connection attribute: | |||
connection-attr = "a=connection:" conn-value | connection-attr = "a=connection:" conn-value | |||
conn-value = "new" / "existing" | conn-value = "new" / "existing" | |||
5.1 Offerer Behaviour | 5.1 Offerer Behaviour | |||
Offerers and answerers use the connection attribute to decide whether | Offerers and answerers use the 'connection' attribute to decide | |||
a new transport connection needs to be established or, on the other | whether a new transport connection needs to be established or, on the | |||
hand, the existing transport connection should still be used. The | other hand, the existing TCP connection should still be used. When | |||
connection value resulting from an offer/answer exchange is the | an offerer generates an 'm' line which uses TCP, it SHOULD provide a | |||
connection value in the answer. If the connection value in the | connection attribute for the 'm' line unless the application using | |||
answer is "new", the end-points SHOULD establish a new connection. | the 'm' line has other means to deal with connection reestablishment. | |||
If the connection value in the answer is "existing", the end-points | ||||
SHOULD continue using the exiting connection. | ||||
When an offerer generates an m= line which uses a connection-oriented | ||||
transport, it SHOULD provide a connection attribute for the m= line | ||||
unless the application using the m= line has other means to deal with | ||||
connection reestablishment. The connection attribute in an initial | ||||
offer (i.e., no transport connection has been established yet) takes | ||||
the value of "new". | ||||
After the initial offer/answer exchange, any of the endpoints can | After the initial offer/answer exchange, any of the endpoints can | |||
generate a new offer to change some characteristics of the session | generate a new offer to change some characteristics of the session | |||
(e.g., the direction attribute). If such an offerer wants to | (e.g., the direction attribute). If such an offerer wants to | |||
continue using the previously-established transport-layer connection | continue using the previously-established transport-layer connection | |||
for the m= line, the offerer MUST use use a connection value of | for the 'm' line, the offerer MUST use a connection value of | |||
"existing" for the m= line. If, on the other hand, the offerer wants | 'existing' for the 'm' line. If, on the other hand, the offerer | |||
to establish a new transport-layer connection for the m= line, it | wants to establish a new transport-layer connection for the 'm' line, | |||
MUST use a connection value of "new". | it MUST use a connection value of 'new'. | |||
Note that, according to the rules in this section, an offer that | Note that, according to the rules in this section, an offer that | |||
changes the transport address (IP address or port number) of an m= | changes the transport address (IP address or port number) of an | |||
line will have a connection value of "new". | 'm' line will have a connection value of 'new'. The same way, the | |||
'connection' attribute in an initial offer (i.e., no transport | ||||
connection has been established yet) takes the value of 'new'. | ||||
The default value of the connection attribute in an offer/answer | The 'connection' value resulting from an offer/answer exchange is the | |||
exchange is "new". | 'connection' value in the answer. If the 'connection' value in the | |||
answer is 'new', the end-points SHOULD establish a new connection. | ||||
If the connection value in the answer is 'existing', the end-points | ||||
SHOULD continue using the exiting connection. | ||||
Taking into consideration the rules in Section 5.2, the following are | ||||
the values that the 'connetion' attribute can take in an offer/answer | ||||
exchange: | ||||
Offer Answer | ||||
________________ | ||||
new new | ||||
existing existing / new | ||||
If the connection value resulting from an offer/answer exchange is | ||||
'existing', the end-points continue using the existing connection. | ||||
Consequently, the port numbers, IP addresses, and 'setup' attributes | ||||
negotiated in the offer/answer exchange are ignored because there is | ||||
no need to establish a new connection. | ||||
The previous rule implies that an offerer generating an offer with a | ||||
connection value of 'existing' and a setup value of 'passive' needs | ||||
to be ready (i.e., needs to allocate resources) to receive a | ||||
connection request from the answerer just in case the answerer | ||||
chooses a connection value of 'new' for the answer. However, if the | ||||
answerer uses a connection value of 'existing' in the answer, the | ||||
offerer would need to deallocate the previously allocated resources | ||||
which were never used because no connection request was received. | ||||
To avoid allocating resources unnecessary, offerers using a | ||||
connection value of 'existing' in their offers may choose to use a | ||||
setup value of 'holdconn'. Nevertheless, offerers using this | ||||
strategy should be aware that in the case the answerer chooses a | ||||
connection value of 'new', a new offer/answer exchange (typically | ||||
initiated by the previous offerer) with setup value different than | ||||
'holdconn' will be needed to establish the new connection. This may, | ||||
of course, cause delays in the application using the TCP connection. | ||||
The default value of the connection attribute in both offers and | ||||
answers is 'new'. | ||||
5.2 Answerer Behaviour | 5.2 Answerer Behaviour | |||
The connection value for an m= line is negotiated using the offer/ | The connection value for an 'm' line is negotiated using the offer/ | |||
answer model. The resulting connection value after an offer/answer | answer model. The resulting connection value after an offer/answer | |||
exchange is the connection value in the answer. If the connection | exchange is the connection value in the answer. If the connection | |||
value in the offer is "new", the answerer MUST also use a value of | value in the offer is 'new', the answerer MUST also use a value of | |||
"new" in the answer. If the connection value in the offer is | 'new' in the answer. If the connection value in the offer is | |||
"existing", the answerer uses a value of "existing" in the answer if | 'existing', the answerer uses a value of 'existing' in the answer if | |||
it wishes to continue using the existing connection and a value of | it wishes to continue using the existing connection and a value of | |||
"new" if it wants a new connection to be established. | 'new' if it wants a new connection to be established. | |||
In some scenarios where third party call control [12] is used, an | In some scenarios where third party call control [12] is used, an | |||
endpoint may receive an initial offer with a connection value of | endpoint may receive an initial offer with a connection value of | |||
"existing". Following the previous rules, such an answerer would | 'existing'. Following the previous rules, such an answerer would | |||
use a connection value of "new" in the answer. | use a connection value of 'new' in the answer. | |||
If the connection value for an m= line resulting from an offer/answer | If the connection value for an 'm' line resulting from an offer/ | |||
exchange is "new", the endpoints SHOULD establish a new | answer exchange is 'new', the endpoints SHOULD establish a new TCP | |||
transport-layer connection as indicated by the setup attribute. If a | connection as indicated by the 'setup' attribute. If a previous TCP | |||
previous connection is still up, the endpoints SHOULD close it as | connection is still up, the endpoints SHOULD close it as soon as the | |||
soon as the offer/answer exchange is completed. It is up to the | offer/answer exchange is completed. It is up to the application to | |||
application to ensure proper data synchornization between the two | ensure proper data synchornization between the two TCP connections. | |||
connections. | ||||
If the connection value for an m= line resulting from an offer/answer | If the connection value for an 'm' line resulting from an offer/ | |||
exchange is "existing", the endpoints SHOULD continue using the | answer exchange is 'existing', the endpoints SHOULD continue using | |||
existing connection. | the existing TCP connection. | |||
6. Connection Management | 6. Connection Management | |||
This section addresses connection establishment, connection | This section addresses connection establishment, connection | |||
reestablishment, and connection termination. | reestablishment, and connection termination. | |||
6.1 Connection Establishment | 6.1 Connection Establishment | |||
An endpoint that according to an offer/answer exchange is supposed to | An endpoint that according to an offer/answer exchange is supposed to | |||
initiate a new connection SHOULD initiate it as soon as it is able | initiate a new TCP connection SHOULD initiate it as soon as it is | |||
to, even if the endpoint does not intend to immediately begin sending | able to, even if the endpoint does not intend to immediately begin | |||
media to the remote endpoint. This allows media to flow from the | sending media to the remote endpoint. This allows media to flow from | |||
remote endpoint if needed. | the remote endpoint if needed. | |||
Note that some endpoints need to wait for some event to happen | Note that some endpoints need to wait for some event to happen | |||
before being able to establish the connection. For example, a | before being able to establish the connection. For example, a | |||
wireless terminal may need to set up a radio bearer before being | wireless terminal may need to set up a radio bearer before being | |||
able to initiate a connection. | able to initiate a TCP connection. | |||
6.2 Connection Reestablishment | 6.2 Connection Reestablishment | |||
If an endpoint determines that the transport-connection for an m= | If an endpoint determines that the TCP for an 'm' line has been | |||
line has been closed and it should be reestablished, it SHOULD | closed and it should be reestablished, it SHOULD perform a new offer/ | |||
perform a new offer/answer exchange using a connection value of "new" | answer exchange using a connection value of 'new' for this 'm' line. | |||
for this m= line. | ||||
Note that the SDP direction attribute (e.g., a=sendonly) deals | Note that the SDP direction attribute (e.g., 'a=sendonly') deals | |||
with the media sent over the transport-connection, but has no | with the media sent over the TCP connection, but has no impact on | |||
impact on the transport-connection itself. | the TCP connection itself. | |||
6.3 Connection Termination | 6.3 Connection Termination | |||
Typically, endpoints do not close the connection until the session | Typically, endpoints do not close the TCP connection until the | |||
has expired, been explicitly terminated, or a new connection value | session has expired, been explicitly terminated, or a new connection | |||
has been provided for the m= line. Additionaly, specific | value has been provided for the 'm' line. Additionaly, specific | |||
applications can describe further scenarios where an end-point may | applications can describe further scenarios where an end-point may | |||
close a given connection. As soon as an end-point notices that it | close a given TCP connection (e.g., whenever a connection is in the | |||
needs to terminate a connection, it SHOULD do so. | half-close state). As soon as an end-point notices that it needs to | |||
terminate a TCP connection, it SHOULD do so. | ||||
While in TCP both end-points need to close a connection, other | ||||
connection-oriented transport protocols may not have the concept of | ||||
half-close connections. In this case, a connection would be | ||||
terminated as soon as one of the end-points closed it, making it | ||||
unnecessary for the other end-point to perform any further action to | ||||
terminate the connection. | ||||
In any case, individual applications may provide further | In any case, individual applications may provide further | |||
considerations on how to achieve a graceful connection termination. | considerations on how to achieve a graceful connection termination. | |||
For example, a file application using TCP receiving a FIN from the | For example, a file application using TCP receiving a FIN from the | |||
remote endpoint may need to finish the ongoing transmission of a file | remote endpoint may need to finish the ongoing transmission of a file | |||
before sending its own FIN. | before sending its own FIN. | |||
7. Examples | 7. Examples | |||
The following examples show the most common usage of the setup | The following examples show the most common usage of the 'setup' | |||
attribute combined with TCP-based media descriptions. For the | attribute combined with TCP-based media descriptions. For the | |||
purpose of brevity, the main portion of the session description is | purpose of brevity, the main portion of the session description is | |||
omitted in the examples, which only show m= lines and their | omitted in the examples, which only show 'm' lines and their | |||
attributes (including c= lines). | attributes (including 'c' lines). | |||
7.1 Passive/Active | 7.1 Passive/Active | |||
An offerer at 192.0.2.2 signals its availability for a T.38 fax | An offerer at 192.0.2.2 signals its availability for a T.38 fax | |||
session at port 54111: | session at port 54111: | |||
m=image 54111 TCP t38 | m=image 54111 TCP t38 | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=setup:passive | a=setup:passive | |||
a=connection:new | a=connection:new | |||
skipping to change at page 10, line 18 | skipping to change at page 10, line 28 | |||
The endpoint at 192.0.2.2 also wishes to use the existing connection | The endpoint at 192.0.2.2 also wishes to use the existing connection | |||
and responds with the following description: | and responds with the following description: | |||
m=image 9 TCP t38 | m=image 9 TCP t38 | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=setup:active | a=setup:active | |||
a=connection:existing | a=connection:existing | |||
The existing connection from 192.0.2.2 to 192.0.2.1 will be reused. | The existing connection from 192.0.2.2 to 192.0.2.1 will be reused. | |||
Note that the endpoint at 192.0.2.2 uses setup:active in response | Note that the endpoint at 192.0.2.2 uses 'setup:active' in | |||
to the offer of setup:passive, and uses port 9 because it is | response to the offer of 'setup:passive', and uses port 9 because | |||
active. | it is active. | |||
7.4 Existing Connection Refusal | 7.4 Existing Connection Refusal | |||
Subsequent to the exchange in Section 7.3, another offer/answer | Subsequent to the exchange in Section 7.3, another offer/answer | |||
exchange is initiated by the endpoint at 192.0.2.2, again wishing to | exchange is initiated by the endpoint at 192.0.2.2, again wishing to | |||
reuse the existing connection: | reuse the existing connection: | |||
m=image 54111 TCP t38 | m=image 54111 TCP t38 | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=setup:actpass | a=setup:passive | |||
a=connection:existing | a=connection:existing | |||
However, this time the answerer is unaware of the old connection and | However, this time the answerer is unaware of the old connection and | |||
so wishes to establish a new one. (This could be the result of a | so wishes to establish a new one. (This could be the result of a | |||
transfer via 3pcc.) It is unable to act in the passive mode so | transfer via third-party call control.) It is unable to act in the | |||
responds as active: | 'passive' mode so responds as 'active': | |||
m=image 9 TCP t38 | m=image 9 TCP t38 | |||
c=IN IP4 192.0.2.3 | c=IN IP4 192.0.2.3 | |||
a=setup:active | a=setup:active | |||
a=connection:new | a=connection:new | |||
The endpoint at 192.0.2.3 then initiates the TCP connection to port | The endpoint at 192.0.2.3 then initiates the TCP connection to port | |||
54111 at 192.0.2.2, and the endpoint at 192.0.2.2 closes the old | 54111 at 192.0.2.2, and the endpoint at 192.0.2.2 closes the old | |||
connection. | connection. | |||
Note that the endpoint at 192.0.2.2, while specifying connection: | Note that the endpoint at 192.0.2.2, while using a connection | |||
existing has reverted to setup:actpass and its real port number, | value of 'existing' has used a setup value of 'passive'. Had it | |||
rather than repeating setup:active and port 9 from the previous | not done this and used a setup value of 'holdconn' instead | |||
cycle. Had it not done this, this negotiation would have failed. | (probably to avoid allocating resources as described in Section | |||
5.1), a new offer/answer exchange would have been needed in order | ||||
to establish the new connection. | ||||
8. Security Considerations | 8. Other Connection-Oriented Transport Protocols | |||
This document specifies how to describe TCP-based media streams using | ||||
SDP. Still, some of the attributes defined here could possibly be | ||||
used to describe media streams based on other connection-oriented | ||||
transport protocols as well. This section provides advice to authors | ||||
of specifications of SDP extensions which deal with | ||||
connetion-oriented transport protocols other than TCP. | ||||
It is recommended that documents defining new SDP protocol | ||||
identifiers that involve extra protocol layers between TCP and the | ||||
media itself (e.g., TLS [7] over TCP) start with the string 'TCP/' | ||||
(e.g., 'TCP/TLS'). | ||||
The 'setup' and the 'connection' attributes are specified in Section | ||||
4 and Section 5 respectively. While both attributes are applicable | ||||
to 'm' lines that use the 'TCP' protocol identifier, they are general | ||||
enough to be reused in 'm' lines with other connection-oriented | ||||
transport protocols. Therefore, it is recommended that the 'setup' | ||||
and 'connection' attributes are reused, as long as it is possible, | ||||
for new proto values associated with connection-oriented transport | ||||
protocols. | ||||
Section 6 deals with TCP connection management. It should be noted | ||||
that while in TCP both end-points need to close a connection, other | ||||
connection-oriented transport protocols may not have the concept of | ||||
half-close connections. In such a case, a connection would be | ||||
terminated as soon as one of the end-points closed it, making it | ||||
unnecessary for the other end-point to perform any further action to | ||||
terminate the connection. So, specifications dealing with such | ||||
transport protocols may need to specify slightly different procedures | ||||
regarding connection termination. | ||||
9. Security Considerations | ||||
See RFC 2327 [4] for security and other considerations specific to | See RFC 2327 [4] for security and other considerations specific to | |||
the Session Description Protocol in general. | the Session Description Protocol in general. | |||
An attacker may attempt to modify the values of the connection and | An attacker may attempt to modify the values of the connection and | |||
setup attributes to have endpoints reestablish connections | setup attributes to have endpoints reestablish connections | |||
unnecesaryly or to keep them from establishing a connection. So, it | unnecesaryly or to keep them from establishing a connection. So, it | |||
is STRONGLY RECOMMENDED that integrity protection be applied to the | is strongly RECOMMENDED that integrity protection be applied to the | |||
SDP session descriptions. For session descriptions carried in SIP | SDP session descriptions. For session descriptions carried in SIP | |||
[10], S/MIME is the natural choice to provide such end-to-end | [10], S/MIME is the natural choice to provide such end-to-end | |||
integrity protection, as described in RFC 3261 [10]. Other | integrity protection, as described in RFC 3261 [10]. Other | |||
applications MAY use a different form of integrity protection. | applications MAY use a different form of integrity protection. | |||
9. IANA Considerations | 10. IANA Considerations | |||
This document defines two session and media level SDP attributes: | This document defines two session and media level SDP attributes: | |||
setup and connection. Their formats are defined in Section 4 and | setup and connection. Their formats are defined in Section 4 and | |||
Section 5 respectively. These two attributes should be registered by | Section 5 respectively. These two attributes should be registered by | |||
the IANA on | the IANA under "Session Description Protocol (SDP) Parameters" under | |||
"att-field (both session and media level)". | ||||
http://www.iana.org/assignments/sdp-parameters | ||||
under "att-field (both session and media level)". | ||||
This document defines a proto value: TCP. Its format is defined in | This document defines a proto value: TCP. Its format is defined in | |||
Section 3. This proto value should be registered by the IANA on | Section 3. This proto value should be registered by the IANA under | |||
"Session Description Protocol (SDP) Parameters" under "proto". | ||||
http://www.iana.org/assignments/sdp-parameters | ||||
under "proto". | ||||
Specifications defining new proto values, like this one, must define | The SDP specification, RFC2327, states that specifications defining | |||
the rules by which their media format (fmt) namespace is managed. | new proto values, like the TCP proto value defined in this RFC, must | |||
For the TCP protocol, new formats SHOULD have an associated MIME | define the rules by which their media format (fmt) namespace is | |||
registration. Use of an existing MIME subtype for the format is | managed. For the TCP protocol, new formats SHOULD have an associated | |||
MIME registration. Use of an existing MIME subtype for the format is | ||||
encouraged. If no MIME subtype exists, it is RECOMMENDED that a | encouraged. If no MIME subtype exists, it is RECOMMENDED that a | |||
suitable one is registered through the IETF process [2] by production | suitable one is registered through the IETF process [2] by production | |||
of, or reference to, a standards-track RFC that defines the transport | of, or reference to, a standards-track RFC that defines the transport | |||
protocol for the format. | protocol for the format. | |||
10. Acknowledgements | 11. Acknowledgements | |||
Jonathan Rosenberg, Rohan Mahy, Anders Kristensen, Joerg Ott, Paul | Jonathan Rosenberg, Rohan Mahy, Anders Kristensen, Joerg Ott, Paul | |||
Kyzivat, Robert Fairlie-Cuninghame, Colin Perkins, and Christer | Kyzivat, Robert Fairlie-Cuninghame, Colin Perkins, and Christer | |||
Holmberg provided valuable insights and contributions. | Holmberg provided valuable insights and contributions. | |||
11. References | 12. References | |||
11.1 Normative References | 12.1 Normative References | |||
[1] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, | [1] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, | |||
September 1981. | September 1981. | |||
[2] Freed, N., Klensin, J. and J. Postel, "Multipurpose Internet | [2] Freed, N., Klensin, J. and J. Postel, "Multipurpose Internet | |||
Mail Extensions (MIME) Part Four: Registration Procedures", BCP | Mail Extensions (MIME) Part Four: Registration Procedures", BCP | |||
13, RFC 2048, November 1996. | 13, RFC 2048, November 1996. | |||
[3] Bradner, S., "Key words for use in RFCs to Indicate Requirement | [3] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
Levels", BCP 14, RFC 2119, March 1997. | Levels", BCP 14, RFC 2119, March 1997. | |||
[4] Handley, M. and V. Jacobson, "SDP: Session Description | [4] Handley, M. and V. Jacobson, "SDP: Session Description | |||
Protocol", RFC 2327, April 1998. | Protocol", RFC 2327, April 1998. | |||
[5] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with | [5] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with | |||
Session Description Protocol (SDP)", RFC 3264, June 2002. | Session Description Protocol (SDP)", RFC 3264, June 2002. | |||
11.2 Informative References | 12.2 Informative References | |||
[6] Schulzrinne, H., Rao, A. and R. Lanphier, "Real Time Streaming | [6] Schulzrinne, H., Rao, A. and R. Lanphier, "Real Time Streaming | |||
Protocol (RTSP)", RFC 2326, April 1998. | Protocol (RTSP)", RFC 2326, April 1998. | |||
[7] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC | [7] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC | |||
2246, January 1999. | 2246, January 1999. | |||
[8] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., | [8] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., | |||
Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- | Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- | |||
HTTP/1.1", RFC 2616, June 1999. | HTTP/1.1", RFC 2616, June 1999. | |||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |