< draft-ietf-dccp-spec-12.txt   draft-ietf-dccp-spec-13.txt >
Internet Engineering Task Force Eddie Kohler Internet Engineering Task Force Eddie Kohler
INTERNET-DRAFT UCLA INTERNET-DRAFT UCLA
draft-ietf-dccp-spec-12.txt Mark Handley draft-ietf-dccp-spec-13.txt Mark Handley
Expires: 28 May 2006 UCL Expires: 2 June 2006 UCL
Sally Floyd Sally Floyd
ICIR ICIR
28 November 2005 2 December 2005
Datagram Congestion Control Protocol (DCCP) Datagram Congestion Control Protocol (DCCP)
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware 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 becomes have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79. aware will be disclosed, in accordance with Section 6 of BCP 79.
skipping to change at page 1, line 35 skipping to change at page 1, line 35
months and may be updated, replaced, or obsoleted by other documents months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as at any time. It is inappropriate to use Internet-Drafts as
reference material or to cite them other than as "work in progress." reference 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 28 May 2006. This Internet-Draft will expire on 2 June 2006.
Abstract Abstract
The Datagram Congestion Control Protocol (DCCP) is a transport The Datagram Congestion Control Protocol (DCCP) is a transport
protocol that provides bidirectional unicast connections of protocol that provides bidirectional unicast connections of
congestion-controlled unreliable datagrams. DCCP is suitable for congestion-controlled unreliable datagrams. DCCP is suitable for
applications that transfer fairly large amounts of data, but can applications that transfer fairly large amounts of data, but can
benefit from control over the tradeoff between timeliness and benefit from control over the tradeoff between timeliness and
reliability. reliability.
skipping to change at page 6, line 35 skipping to change at page 6, line 35
15. Forward Compatibility. . . . . . . . . . . . . . . . . . . . 108 15. Forward Compatibility. . . . . . . . . . . . . . . . . . . . 108
16. Middlebox Considerations . . . . . . . . . . . . . . . . . . 108 16. Middlebox Considerations . . . . . . . . . . . . . . . . . . 108
17. Relations to Other Specifications. . . . . . . . . . . . . . 110 17. Relations to Other Specifications. . . . . . . . . . . . . . 110
17.1. RTP . . . . . . . . . . . . . . . . . . . . . . . . . . 110 17.1. RTP . . . . . . . . . . . . . . . . . . . . . . . . . . 110
17.2. Congestion Manager and Multiplexing . . . . . . . . . . 111 17.2. Congestion Manager and Multiplexing . . . . . . . . . . 111
18. Security Considerations. . . . . . . . . . . . . . . . . . . 111 18. Security Considerations. . . . . . . . . . . . . . . . . . . 111
18.1. Security Considerations for Partial 18.1. Security Considerations for Partial
Checksums . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Checksums . . . . . . . . . . . . . . . . . . . . . . . . . . 112
19. IANA Considerations. . . . . . . . . . . . . . . . . . . . . 113 19. IANA Considerations. . . . . . . . . . . . . . . . . . . . . 113
19.1. Packet Types Registry . . . . . . . . . . . . . . . . . 113 19.1. Packet Types Registry . . . . . . . . . . . . . . . . . 113
19.2. Reset Codes Registry. . . . . . . . . . . . . . . . . . 114 19.2. Reset Codes Registry. . . . . . . . . . . . . . . . . . 113
19.3. Option Types Registry . . . . . . . . . . . . . . . . . 114 19.3. Option Types Registry . . . . . . . . . . . . . . . . . 114
19.4. Feature Numbers Registry. . . . . . . . . . . . . . . . 114 19.4. Feature Numbers Registry. . . . . . . . . . . . . . . . 114
19.5. Congestion Control Identifiers Registry . . . . . . . . 115 19.5. Congestion Control Identifiers Registry . . . . . . . . 114
19.6. Ack Vector States Registry. . . . . . . . . . . . . . . 115 19.6. Ack Vector States Registry. . . . . . . . . . . . . . . 115
19.7. Drop Codes Registry . . . . . . . . . . . . . . . . . . 115 19.7. Drop Codes Registry . . . . . . . . . . . . . . . . . . 115
19.8. Service Codes Registry. . . . . . . . . . . . . . . . . 115 19.8. Service Codes Registry. . . . . . . . . . . . . . . . . 115
19.9. Port Numbers Registry . . . . . . . . . . . . . . . . . 116 19.9. Port Numbers Registry . . . . . . . . . . . . . . . . . 116
20. Thanks . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 20. Thanks . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
A. Appendix: Ack Vector Implementation Notes . . . . . . . . . . 118 A. Appendix: Ack Vector Implementation Notes . . . . . . . . . . 118
A.1. Packet Arrival . . . . . . . . . . . . . . . . . . . . . 120 A.1. Packet Arrival . . . . . . . . . . . . . . . . . . . . . 120
A.1.1. New Packets . . . . . . . . . . . . . . . . . . . . 121 A.1.1. New Packets . . . . . . . . . . . . . . . . . . . . 120
A.1.2. Old Packets . . . . . . . . . . . . . . . . . . . . 122 A.1.2. Old Packets . . . . . . . . . . . . . . . . . . . . 121
A.2. Sending Acknowledgements . . . . . . . . . . . . . . . . 122 A.2. Sending Acknowledgements . . . . . . . . . . . . . . . . 122
A.3. Clearing State . . . . . . . . . . . . . . . . . . . . . 123 A.3. Clearing State . . . . . . . . . . . . . . . . . . . . . 123
A.4. Processing Acknowledgements. . . . . . . . . . . . . . . 124 A.4. Processing Acknowledgements. . . . . . . . . . . . . . . 124
B. Appendix: Partial Checksumming Design Motivation. . . . . . . 125 B. Appendix: Partial Checksumming Design Motivation. . . . . . . 125
Normative References . . . . . . . . . . . . . . . . . . . . . . 127 Normative References . . . . . . . . . . . . . . . . . . . . . . 126
Informative References . . . . . . . . . . . . . . . . . . . . . 127 Informative References . . . . . . . . . . . . . . . . . . . . . 127
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 129 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 129
Full Copyright Statement . . . . . . . . . . . . . . . . . . . . 130 Full Copyright Statement . . . . . . . . . . . . . . . . . . . . 130
Intellectual Property. . . . . . . . . . . . . . . . . . . . . . 130 Intellectual Property. . . . . . . . . . . . . . . . . . . . . . 130
List of Tables List of Tables
Table 1: DCCP Packet Types . . . . . . . . . . . . . . . . . . . 25 Table 1: DCCP Packet Types . . . . . . . . . . . . . . . . . . . 25
Table 2: DCCP Reset Codes. . . . . . . . . . . . . . . . . . . . 32 Table 2: DCCP Reset Codes. . . . . . . . . . . . . . . . . . . . 32
Table 3: DCCP Options. . . . . . . . . . . . . . . . . . . . . . 34 Table 3: DCCP Options. . . . . . . . . . . . . . . . . . . . . . 34
Table 4: DCCP Feature Numbers. . . . . . . . . . . . . . . . . . 39 Table 4: DCCP Feature Numbers. . . . . . . . . . . . . . . . . . 39
skipping to change at page 32, line 30 skipping to change at page 32, line 30
10, "Bad Init Cookie" 10, "Bad Init Cookie"
The Init Cookie echoed by the client was incorrect or missing. The Init Cookie echoed by the client was incorrect or missing.
See Section 8.1.4. See Section 8.1.4.
11, "Aggression Penalty" 11, "Aggression Penalty"
This endpoint has detected congestion control-related This endpoint has detected congestion control-related
misbehavior on the part of the other endpoint. See Section misbehavior on the part of the other endpoint. See Section
12.3. 12.3.
12-127, Reserved 12-127, Reserved
Receivers should treat these codes like Reset Code 0, Receivers should treat these codes as they do Reset Code 0,
"Unspecified". "Unspecified".
128-255, CCID-specific codes 128-255, CCID-specific codes
Semantics depend on the connection's CCIDs. See Section 10.3. Semantics depend on the connection's CCIDs. See Section 10.3.
Receivers should treat unknown CCID-specific Reset Codes like Receivers should treat unknown CCID-specific Reset Codes as they
Reset Code 0, "Unspecified". do Reset Code 0, "Unspecified".
The following table summarizes this information. The following table summarizes this information.
Reset Reset
Code Name Data 1 Data 2 & 3 Code Name Data 1 Data 2 & 3
----- ---- ------ ---------- ----- ---- ------ ----------
0 Unspecified 0 0 0 Unspecified 0 0
1 Closed 0 0 1 Closed 0 0
2 Aborted 0 0 2 Aborted 0 0
3 No Connection 0 0 3 No Connection 0 0
skipping to change at page 63, line 36 skipping to change at page 63, line 36
the application running on a nonstandard port (assuming the DCCP the application running on a nonstandard port (assuming the DCCP
header has not been encrypted). header has not been encrypted).
Endpoints MUST associate a Service Code with every DCCP socket, both Endpoints MUST associate a Service Code with every DCCP socket, both
actively and passively opened. The application will generally actively and passively opened. The application will generally
supply this Service Code. Each active socket MUST have exactly one supply this Service Code. Each active socket MUST have exactly one
Service Code. Passive sockets MAY, at the implementation's Service Code. Passive sockets MAY, at the implementation's
discretion, be associated with more than one Service Code; this discretion, be associated with more than one Service Code; this
might let multiple applications, or multiple versions of the same might let multiple applications, or multiple versions of the same
application, listen on the same port, differentiated by Service application, listen on the same port, differentiated by Service
Code. If the DCCP-Request's Service Code doesn't match any of the Code. If the DCCP-Request's Service Code doesn't equal any of the
server's Service Codes for the given port, the server MUST reject server's Service Codes for the given port, the server MUST reject
the request by sending a DCCP-Reset packet with Reset Code 8, "Bad the request by sending a DCCP-Reset packet with Reset Code 8, "Bad
Service Code". A middlebox MAY also send such a DCCP-Reset in Service Code". A middlebox MAY also send such a DCCP-Reset in
response to packets whose Service Code is considered unsuitable. response to packets whose Service Code is considered unsuitable.
Service Codes are not intended to be DCCP-specific, and are Service Codes are not intended to be DCCP-specific, and are
allocated by IANA. Following the policies outlined in RFC 2434, allocated by IANA. Following the policies outlined in RFC 2434,
most Service Codes are allocated First Come First Served, subject to most Service Codes are allocated First Come First Served, subject to
the following guidelines. the following guidelines.
skipping to change at page 64, line 24 skipping to change at page 64, line 24
standards-track specifications, IETF or otherwise. (This set standards-track specifications, IETF or otherwise. (This set
consists of the ASCII digits, uppercase letters, and characters consists of the ASCII digits, uppercase letters, and characters
space, '-', '.', and '/'.) space, '-', '.', and '/'.)
o Service Codes whose high-order byte equals 63 (ASCII '?') are o Service Codes whose high-order byte equals 63 (ASCII '?') are
reserved for Private Use. reserved for Private Use.
o Service Code 0 represents the absence of a meaningful Service o Service Code 0 represents the absence of a meaningful Service
Code, and MUST NOT be allocated. Code, and MUST NOT be allocated.
o The value 4294967295 is an invalid Service Code, and MUST NOT o The value 4294967295 is an invalid Service Code. Servers MUST
appear in the Service Code field of a DCCP-Request or DCCP- reject any DCCP-Request with this Service Code value by sending a
Response packet. DCCP-Reset packet with Reset Code 8, "Bad Service Code".
This design for Service Code allocation is based on the allocation This design for Service Code allocation is based on the allocation
of 4-byte identifiers for Macintosh resources, PNG chunks, and of 4-byte identifiers for Macintosh resources, PNG chunks, and
TrueType and OpenType tables. TrueType and OpenType tables.
In text settings, we recommend that Service Codes be written in one In text settings, we recommend that Service Codes be written in one
of three forms, prefixed by the ASCII letters SC and either a colon of three forms, prefixed by the ASCII letters SC and either a colon
":" or equals sign "=". These forms are interpreted as follows. ":" or equals sign "=". These forms are interpreted as follows.
SC: Indicates a Service Code representable using a subset of the SC: Indicates a Service Code representable using a subset of the
skipping to change at page 72, line 36 skipping to change at page 72, line 36
If the packet type is not understood, drop packet and return If the packet type is not understood, drop packet and return
If P.Data Offset is too small for packet type, or too large for If P.Data Offset is too small for packet type, or too large for
packet, drop packet and return packet, drop packet and return
If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet
has short sequence numbers), drop packet and return has short sequence numbers), drop packet and return
If the header checksum is incorrect, drop packet and return If the header checksum is incorrect, drop packet and return
If P.CsCov is too large for the packet size, drop packet and If P.CsCov is too large for the packet size, drop packet and
return return
Step 2: Check ports and process TIMEWAIT state Step 2: Check ports and process TIMEWAIT state
/* Flow ID is <src addr, src port, dst addr, dst port> 4-tuple */
Look up flow ID in table and get corresponding socket Look up flow ID in table and get corresponding socket
If no socket, or S.state == TIMEWAIT, If no socket, or S.state == TIMEWAIT,
Generate Reset(No Connection) unless P.type == Reset Generate Reset(No Connection) unless P.type == Reset
Drop packet and return Drop packet and return
Step 3: Process LISTEN state Step 3: Process LISTEN state
If S.state == LISTEN, If S.state == LISTEN,
If P.type == Request or P contains a valid Init Cookie option, If P.type == Request or P contains a valid Init Cookie option,
/* Must scan the packet's options to check for an Init /* Must scan the packet's options to check for an Init
Cookie. Only the Init Cookie is processed here, Cookie. Only the Init Cookie is processed here,
skipping to change at page 111, line 32 skipping to change at page 111, line 32
the same headers currently defined. The 4 byte header cost is a the same headers currently defined. The 4 byte header cost is a
reasonable tradeoff for DCCP's congestion control features and reasonable tradeoff for DCCP's congestion control features and
access to ECN. Truly bandwidth-starved endpoints should use some access to ECN. Truly bandwidth-starved endpoints should use some
future header compression scheme. future header compression scheme.
17.2. Congestion Manager and Multiplexing 17.2. Congestion Manager and Multiplexing
Since DCCP doesn't provide reliable, ordered delivery, multiple Since DCCP doesn't provide reliable, ordered delivery, multiple
application sub-flows may be multiplexed over a single DCCP application sub-flows may be multiplexed over a single DCCP
connection with no inherent performance penalty. Thus, there is no connection with no inherent performance penalty. Thus, there is no
need for DCCP to provide built-in, SCTP-style support for multiple need for DCCP to provide built-in support for multiple sub-flows.
sub-flows. This differs from SCTP [RFC 2960].
Some applications might want to share congestion control state among Some applications might want to share congestion control state among
multiple DCCP flows that share the same source and destination multiple DCCP flows that share the same source and destination
addresses. This functionality could be provided by the Congestion addresses. This functionality could be provided by the Congestion
Manager [RFC 3124], a generic multiplexing facility. However, the Manager [RFC 3124], a generic multiplexing facility. However, the
CM would not fully support DCCP without change; it does not CM would not fully support DCCP without change; it does not
gracefully handle multiple congestion control mechanisms, for gracefully handle multiple congestion control mechanisms, for
example. example.
18. Security Considerations 18. Security Considerations
skipping to change at page 116, line 46 skipping to change at page 116, line 46
requested as early as possible. requested as early as possible.
Each port registration SHALL include the following information: Each port registration SHALL include the following information:
o A short port name, consisting entirely of letters (A-Z and a-z), o A short port name, consisting entirely of letters (A-Z and a-z),
digits (0-9), and punctuation characters from "-_+./*" (not digits (0-9), and punctuation characters from "-_+./*" (not
including the quotes). including the quotes).
o The port number that is requested to be registered. o The port number that is requested to be registered.
o A short English phrase describing the port's purpose. This o A short English phrase describing the port's purpose. This MUST
SHOULD include one or more space-separated textual Service Code include one or more space-separated textual Service Code
descriptors naming the port's corresponding Service Codes (see descriptors naming the port's corresponding Service Codes (see
Section 8.1.2). Section 8.1.2).
o Name and contact information for the person or entity performing o Name and contact information for the person or entity performing
the registration, and possibly a reference to a document defining the registration, and possibly a reference to a document defining
the port's use. Registrations coming from IETF working groups the port's use. Registrations coming from IETF working groups
need only name the working group, but it is also recommended to need only name the working group, but it is also recommended to
indicate a contact person. indicate a contact person.
Registrants are encouraged to follow these guidelines when Registrants are encouraged to follow these guidelines when
submitting a registration: submitting a registration. The guidelines may be violated at IANA's
discretion.
o A port name SHOULD NOT be registered for more than one DCCP port o A port name SHOULD NOT be registered for more than one DCCP port
number. number.
o A port name registered for UDP MAY be registered for DCCP as o A port name registered for UDP MAY be registered for DCCP as
well. Any such registration SHOULD use the same port number as well. Any such registration SHOULD use the same port number as
the existing UDP registration. the existing UDP registration.
o Concrete intent to use a port SHOULD precede port registration. o Concrete intent to use a port SHOULD precede port registration.
For example, existing UDP ports SHOULD NOT be registered in For example, existing UDP ports SHOULD NOT be registered in
skipping to change at page 119, line 30 skipping to change at page 119, line 30
We draw acknowledgement buffers like this: We draw acknowledgement buffers like this:
+---------------------------------------------------------------+ +---------------------------------------------------------------+
|S,L|S,L|S,L|S,L| | | | |S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L| |S,L|S,L|S,L|S,L| | | | |S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|
+---------------------------------------------------------------+ +---------------------------------------------------------------+
^ ^ ^ ^
buf_tail buf_head, buf_ackno = A buf_nonce = E buf_tail buf_head, buf_ackno = A buf_nonce = E
<=== buf_head and buf_tail move this way <=== <=== buf_head and buf_tail move this way <===
Each `S,L' represents a State/Run length byte. We will draw these Each "S,L" represents a State/Run length byte. We will draw these
buffers showing only their live portion, and will add an annotation buffers showing only their live portion, and will add an annotation
showing the Acknowledgement Number for the last live byte in the showing the Acknowledgement Number for the last live byte in the
buffer. For example: buffer. For example:
+-----------------------------------------------+ +-----------------------------------------------+
A |S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L| T BN[E] A |S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L|S,L| T BN[E]
+-----------------------------------------------+ +-----------------------------------------------+
Here, buf_nonce equals E and buf_ackno equals A. Here, buf_nonce equals E and buf_ackno equals A.
 End of changes. 17 change blocks. 
23 lines changed or deleted 25 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/