| < draft-eddy-rfc793bis-02.txt | draft-eddy-rfc793bis-03.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force W. Eddy, Ed. | Internet Engineering Task Force W. Eddy, Ed. | |||
| Internet-Draft MTI Systems | Internet-Draft MTI Systems | |||
| Obsoletes: 793 (if approved) March 27, 2014 | Obsoletes: 793, 6093 (if approved) August 12, 2014 | |||
| Updates: 1122 (if approved) | ||||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: September 28, 2014 | Expires: February 13, 2015 | |||
| Transmission Control Protocol Specification | Transmission Control Protocol Specification | |||
| draft-eddy-rfc793bis-02 | draft-eddy-rfc793bis-03 | |||
| Abstract | Abstract | |||
| This document specifies the Internet's Transmission Control Protocol | This document specifies the Internet's Transmission Control Protocol | |||
| (TCP). TCP is an important transport layer protocol in the Internet | (TCP). TCP is an important transport layer protocol in the Internet | |||
| stack, and has continuously evolved over decades of use and growth of | stack, and has continuously evolved over decades of use and growth of | |||
| the Internet. Over this time, a number of changes have been made to | the Internet. Over this time, a number of changes have been made to | |||
| TCP as it was specified in RFC 793, though these have only been | TCP as it was specified in RFC 793, though these have only been | |||
| documented in a piecemeal fashion. This document collects and brings | documented in a piecemeal fashion. This document collects and brings | |||
| those changes together with the protocol specification from RFC 793. | those changes together with the protocol specification from RFC 793. | |||
| skipping to change at page 1, line 48 ¶ | skipping to change at page 1, line 49 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| 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." | |||
| This Internet-Draft will expire on September 28, 2014. | This Internet-Draft will expire on February 13, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 47 ¶ | skipping to change at page 2, line 47 ¶ | |||
| 3.1. Header Format . . . . . . . . . . . . . . . . . . . . . . 5 | 3.1. Header Format . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3. Sequence Numbers . . . . . . . . . . . . . . . . . . . . 13 | 3.3. Sequence Numbers . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.4. Establishing a connection . . . . . . . . . . . . . . . . 19 | 3.4. Establishing a connection . . . . . . . . . . . . . . . . 19 | |||
| 3.5. Closing a Connection . . . . . . . . . . . . . . . . . . 26 | 3.5. Closing a Connection . . . . . . . . . . . . . . . . . . 26 | |||
| 3.6. Precedence and Security . . . . . . . . . . . . . . . . . 28 | 3.6. Precedence and Security . . . . . . . . . . . . . . . . . 28 | |||
| 3.7. Data Communication . . . . . . . . . . . . . . . . . . . 29 | 3.7. Data Communication . . . . . . . . . . . . . . . . . . . 29 | |||
| 3.8. Interfaces . . . . . . . . . . . . . . . . . . . . . . . 33 | 3.8. Interfaces . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 3.8.1. User/TCP Interface . . . . . . . . . . . . . . . . . 33 | 3.8.1. User/TCP Interface . . . . . . . . . . . . . . . . . 33 | |||
| 3.8.2. TCP/Lower-Level Interface . . . . . . . . . . . . . . 40 | 3.8.2. TCP/Lower-Level Interface . . . . . . . . . . . . . . 40 | |||
| 3.9. Event Processing . . . . . . . . . . . . . . . . . . . . 40 | 3.9. Event Processing . . . . . . . . . . . . . . . . . . . . 41 | |||
| 3.10. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 63 | 3.10. Glossary . . . . . . . . . . . . . . . . . . . . . . . . 64 | |||
| 4. Changes from RFC 793 . . . . . . . . . . . . . . . . . . . . 68 | 4. Changes from RFC 793 . . . . . . . . . . . . . . . . . . . . 69 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 70 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 72 | |||
| 6. Security and Privacy Considerations . . . . . . . . . . . . . 70 | 6. Security and Privacy Considerations . . . . . . . . . . . . . 72 | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 71 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 72 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 71 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 73 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 71 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 73 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 71 | 8.2. Informative References . . . . . . . . . . . . . . . . . 73 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 72 | Appendix A. TCP Requirement Summary . . . . . . . . . . . . . . 73 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 76 | ||||
| 1. Purpose and Scope | 1. Purpose and Scope | |||
| In 1981, RFC 793 [2] was released, documenting the Transmission | In 1981, RFC 793 [2] was released, documenting the Transmission | |||
| Control Protocol (TCP), and replacing earlier specifications for TCP | Control Protocol (TCP), and replacing earlier specifications for TCP | |||
| that had been published in the past. | that had been published in the past. | |||
| Since that time, TCP has been implemented many times, and has been | Since then, TCP has been implemented many times, and has been used as | |||
| used as a transport protocol for numerous applications on the | a transport protocol for numerous applications on the Internet. | |||
| Internet. | ||||
| For several decades, RFC 793 plus a number of other documents have | For several decades, RFC 793 plus a number of other documents have | |||
| combined to serve as the specification for TCP [3]. Over time, a | combined to serve as the specification for TCP [4]. Over time, a | |||
| number of errata have been identified on RFC 793, as well as | number of errata have been identified on RFC 793, as well as | |||
| deficiencies in security, performance, and other aspects. A number | deficiencies in security, performance, and other aspects. A number | |||
| of enhancements has grown and been documented separately. These were | of enhancements has grown and been documented separately. These were | |||
| never accumulated together into an update to the base specification. | never accumulated together into an update to the base specification. | |||
| The purpose of this document is to bring together all of the IETF | The purpose of this document is to bring together all of the IETF | |||
| Standards Track changes that have been made to the basic TCP | Standards Track changes that have been made to the basic TCP | |||
| functional specification and unify them into an update of the RFC 793 | functional specification and unify them into an update of the RFC 793 | |||
| protocol specification. Some companion documents are referenced for | protocol specification. Some companion documents are referenced for | |||
| important algorithms that TCP uses (e.g. for congestion control), but | important algorithms that TCP uses (e.g. for congestion control), but | |||
| skipping to change at page 4, line 30 ¶ | skipping to change at page 4, line 30 ¶ | |||
| provide explanation of the theory of operation, rationale, and | provide explanation of the theory of operation, rationale, and | |||
| detailed discussion of design decisions. This document only focuses | detailed discussion of design decisions. This document only focuses | |||
| on the normative behavior of the protocol. | on the normative behavior of the protocol. | |||
| TEMPORARY EDITOR'S NOTE: This is an early revision in the process of | TEMPORARY EDITOR'S NOTE: This is an early revision in the process of | |||
| updating RFC 793. Many planned changes are not yet incorporated. | updating RFC 793. Many planned changes are not yet incorporated. | |||
| ***Please do not use this revision as a basis for any work or | ***Please do not use this revision as a basis for any work or | |||
| reference.*** | reference.*** | |||
| TODO: describe the subsequent structure of the document to-be (e.g. | A list of changes from RFC 793 is contained in Section 4. | |||
| will it follow the newtcp BSD implementation?), and mention that a | ||||
| list of changes from RFC 793 will be kept in the final section | ||||
| TEMPORARY EDITOR'S NOTE: the current revision of this document does | TEMPORARY EDITOR'S NOTE: the current revision of this document does | |||
| not yet collect all of the changes that will be in the final version. | not yet collect all of the changes that will be in the final version. | |||
| The set of content changes planned for future revisions is roughly: | The set of content changes planned for each revision is roughly: | |||
| -00 was a proposal for the scope of the document and description | -00 was a proposal for the scope of the document and description | |||
| of the need for an update to RFC 793 | of the need for an update to RFC 793 | |||
| -01 incorporated the RFC 793 section 3 content with no additional | -01 incorporated the RFC 793 section 3 content with no additional | |||
| changes into XML2RFC format for easy tracking of the changes | changes into XML2RFC format for easy tracking of the changes | |||
| between RFC 793 and future revisions of the document | between RFC 793 and future revisions of the document | |||
| -02 incorporates the verified errata on RFC 793 as of March 20, | -02 incorporates the verified errata on RFC 793 as of March 20, | |||
| 2014 | 2014 | |||
| -03 and beyond are intended to incorporate changes from other RFCs | -03 incorporates urgent pointer changes from RFC 6093 | |||
| -04 will incorporate RFC 6528 | ||||
| -05 and beyond are intended to incorporate changes from other RFCs | ||||
| that updated 793 | that updated 793 | |||
| 3. Functional Specification | 3. Functional Specification | |||
| 3.1. Header Format | 3.1. Header Format | |||
| TCP segments are sent as internet datagrams. The Internet Protocol | TCP segments are sent as internet datagrams. The Internet Protocol | |||
| header carries several information fields, including the source and | header carries several information fields, including the source and | |||
| destination host addresses [2]. A TCP header follows the internet | destination host addresses [2]. A TCP header follows the internet | |||
| header, supplying information specific to the TCP protocol. This | header, supplying information specific to the TCP protocol. This | |||
| skipping to change at page 7, line 27 ¶ | skipping to change at page 7, line 27 ¶ | |||
| The TCP Length is the TCP header length plus the data length in | The TCP Length is the TCP header length plus the data length in | |||
| octets (this is not an explicitly transmitted quantity, but is | octets (this is not an explicitly transmitted quantity, but is | |||
| computed), and it does not count the 12 octets of the pseudo | computed), and it does not count the 12 octets of the pseudo | |||
| header. | header. | |||
| Urgent Pointer: 16 bits | Urgent Pointer: 16 bits | |||
| This field communicates the current value of the urgent pointer as | This field communicates the current value of the urgent pointer as | |||
| a positive offset from the sequence number in this segment. The | a positive offset from the sequence number in this segment. The | |||
| urgent pointer points to the sequence number of the last octet in a | urgent pointer points to the sequence number of the octet following | |||
| sequence of urgent data. This field is only be interpreted in | the urgent data. This field is only be interpreted in segments | |||
| segments with the URG control bit set. EDITOR'S NOTE: TODO need to | with the URG control bit set. | |||
| incorporate RFC 6093 here. | ||||
| Options: variable | Options: variable | |||
| Options may occupy space at the end of the TCP header and are a | Options may occupy space at the end of the TCP header and are a | |||
| multiple of 8 bits in length. All options are included in the | multiple of 8 bits in length. All options are included in the | |||
| checksum. An option may begin on any octet boundary. There are | checksum. An option may begin on any octet boundary. There are | |||
| two cases for the format of an option: | two cases for the format of an option: | |||
| Case 1: A single octet of option-kind. | Case 1: A single octet of option-kind. | |||
| skipping to change at page 30, line 40 ¶ | skipping to change at page 30, line 40 ¶ | |||
| RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]] | RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]] | |||
| where UBOUND is an upper bound on the timeout (e.g., 1 minute), | where UBOUND is an upper bound on the timeout (e.g., 1 minute), | |||
| LBOUND is a lower bound on the timeout (e.g., 1 second), ALPHA is | LBOUND is a lower bound on the timeout (e.g., 1 second), ALPHA is | |||
| a smoothing factor (e.g., .8 to .9), and BETA is a delay variance | a smoothing factor (e.g., .8 to .9), and BETA is a delay variance | |||
| factor (e.g., 1.3 to 2.0). | factor (e.g., 1.3 to 2.0). | |||
| The Communication of Urgent Information | The Communication of Urgent Information | |||
| As a result of implementation differences and middlebox interactions, | ||||
| new applications SHOULD NOT employ the TCP urgent mechanism. | ||||
| However, TCP implementations MUST still include support for the | ||||
| urgent mechanism. Details can be found in RFC 6093 [5]. | ||||
| The objective of the TCP urgent mechanism is to allow the sending | The objective of the TCP urgent mechanism is to allow the sending | |||
| user to stimulate the receiving user to accept some urgent data and | user to stimulate the receiving user to accept some urgent data and | |||
| to permit the receiving TCP to indicate to the receiving user when | to permit the receiving TCP to indicate to the receiving user when | |||
| all the currently known urgent data has been received by the user. | all the currently known urgent data has been received by the user. | |||
| This mechanism permits a point in the data stream to be designated as | This mechanism permits a point in the data stream to be designated as | |||
| the end of urgent information. Whenever this point is in advance of | the end of urgent information. Whenever this point is in advance of | |||
| the receive sequence number (RCV.NXT) at the receiving TCP, that TCP | the receive sequence number (RCV.NXT) at the receiving TCP, that TCP | |||
| must tell the user to go into "urgent mode"; when the receive | must tell the user to go into "urgent mode"; when the receive | |||
| sequence number catches up to the urgent pointer, the TCP must tell | sequence number catches up to the urgent pointer, the TCP must tell | |||
| skipping to change at page 31, line 16 ¶ | skipping to change at page 31, line 21 ¶ | |||
| transmitted. The URG control flag indicates that the urgent field is | transmitted. The URG control flag indicates that the urgent field is | |||
| meaningful and must be added to the segment sequence number to yield | meaningful and must be added to the segment sequence number to yield | |||
| the urgent pointer. The absence of this flag indicates that there is | the urgent pointer. The absence of this flag indicates that there is | |||
| no urgent data outstanding. | no urgent data outstanding. | |||
| To send an urgent indication the user must also send at least one | To send an urgent indication the user must also send at least one | |||
| data octet. If the sending user also indicates a push, timely | data octet. If the sending user also indicates a push, timely | |||
| delivery of the urgent information to the destination process is | delivery of the urgent information to the destination process is | |||
| enhanced. | enhanced. | |||
| A TCP MUST support a sequence of urgent data of any length. [3] | ||||
| A TCP MUST inform the application layer asynchronously whenever it | ||||
| receives an Urgent pointer and there was previously no pending urgent | ||||
| data, or whenvever the Urgent pointer advances in the data stream. | ||||
| There MUST be a way for the application to learn how much urgent data | ||||
| remains to be read from the connection, or at least to determine | ||||
| whether or not more urgent data remains to be read. [3] | ||||
| Managing the Window | Managing the Window | |||
| The window sent in each segment indicates the range of sequence | The window sent in each segment indicates the range of sequence | |||
| numbers the sender of the window (the data receiver) is currently | numbers the sender of the window (the data receiver) is currently | |||
| prepared to accept. There is an assumption that this is related to | prepared to accept. There is an assumption that this is related to | |||
| the currently available data buffer space available for this | the currently available data buffer space available for this | |||
| connection. | connection. | |||
| Indicating a large window encourages transmissions. If more data | Indicating a large window encourages transmissions. If more data | |||
| arrives than can be accepted, it will be discarded. This will result | arrives than can be accepted, it will be discarded. This will result | |||
| skipping to change at page 35, line 43 ¶ | skipping to change at page 36, line 11 ¶ | |||
| which case, an automatic OPEN would be done. If the calling | which case, an automatic OPEN would be done. If the calling | |||
| process is not authorized to use this connection, an error is | process is not authorized to use this connection, an error is | |||
| returned. | returned. | |||
| If the PUSH flag is set, the data must be transmitted promptly | If the PUSH flag is set, the data must be transmitted promptly | |||
| to the receiver, and the PUSH bit will be set in the last TCP | to the receiver, and the PUSH bit will be set in the last TCP | |||
| segment created from the buffer. If the PUSH flag is not set, | segment created from the buffer. If the PUSH flag is not set, | |||
| the data may be combined with data from subsequent SENDs for | the data may be combined with data from subsequent SENDs for | |||
| transmission efficiency. | transmission efficiency. | |||
| New applications SHOULD NOT set the URGENT flag [5] due to | ||||
| implementation differences and middlebox issues. | ||||
| If the URGENT flag is set, segments sent to the destination TCP | If the URGENT flag is set, segments sent to the destination TCP | |||
| will have the urgent pointer set. The receiving TCP will | will have the urgent pointer set. The receiving TCP will | |||
| signal the urgent condition to the receiving process if the | signal the urgent condition to the receiving process if the | |||
| urgent pointer indicates that data preceding the urgent pointer | urgent pointer indicates that data preceding the urgent pointer | |||
| has not been consumed by the receiving process. The purpose of | has not been consumed by the receiving process. The purpose of | |||
| urgent is to stimulate the receiver to process the urgent data | urgent is to stimulate the receiver to process the urgent data | |||
| and to indicate to the receiver when all the currently known | and to indicate to the receiver when all the currently known | |||
| urgent data has been received. The number of times the sending | urgent data has been received. The number of times the sending | |||
| user's TCP signals urgent will not necessarily be equal to the | user's TCP signals urgent will not necessarily be equal to the | |||
| number of times the receiving user will be notified of the | number of times the receiving user will be notified of the | |||
| skipping to change at page 44, line 42 ¶ | skipping to change at page 45, line 42 ¶ | |||
| resources". | resources". | |||
| ESTABLISHED STATE | ESTABLISHED STATE | |||
| CLOSE-WAIT STATE | CLOSE-WAIT STATE | |||
| Segmentize the buffer and send it with a piggybacked | Segmentize the buffer and send it with a piggybacked | |||
| acknowledgment (acknowledgment value = RCV.NXT). If there is | acknowledgment (acknowledgment value = RCV.NXT). If there is | |||
| insufficient space to remember this buffer, simply return | insufficient space to remember this buffer, simply return | |||
| "error: insufficient resources". | "error: insufficient resources". | |||
| If the urgent flag is set, then SND.UP <- SND.NXT-1 and set the | If the urgent flag is set, then SND.UP <- SND.NXT and set the | |||
| urgent pointer in the outgoing segments. | urgent pointer in the outgoing segments. | |||
| FIN-WAIT-1 STATE | FIN-WAIT-1 STATE | |||
| FIN-WAIT-2 STATE | FIN-WAIT-2 STATE | |||
| CLOSING STATE | CLOSING STATE | |||
| LAST-ACK STATE | LAST-ACK STATE | |||
| TIME-WAIT STATE | TIME-WAIT STATE | |||
| Return "error: connection closing" and do not service request. | Return "error: connection closing" and do not service request. | |||
| skipping to change at page 69, line 28 ¶ | skipping to change at page 70, line 28 ¶ | |||
| indentation is not exactly the same. | indentation is not exactly the same. | |||
| The -02 revision of this document incorporates errata that have been | The -02 revision of this document incorporates errata that have been | |||
| verified: | verified: | |||
| Errata ID 573: Reported by Bob Braden (note: This errata basically | Errata ID 573: Reported by Bob Braden (note: This errata basically | |||
| is just a reminder that RFC 1122 updates 793. Some of the | is just a reminder that RFC 1122 updates 793. Some of the | |||
| associated changes are left pending to a separate revision that | associated changes are left pending to a separate revision that | |||
| incorporates 1122. Bob's mention of PUSH in 793 section 2.8 was | incorporates 1122. Bob's mention of PUSH in 793 section 2.8 was | |||
| not applicable here because that section was not part of the | not applicable here because that section was not part of the | |||
| "functional specification" and the note on the urgent pointer will | "functional specification". Also the 1122 text on the | |||
| be revised when changes to account for RFC 6093 are incorporated. | retransmission timeout also has been updated by subsequent RFCs, | |||
| Also the 1122 text on the retransmission timeout also has been | so the change here deviates from Bob's suggestion to apply the | |||
| updated by subsequent RFCs, so the change here deviates from Bob's | 1122 text.) | |||
| suggestion to apply the 1122 text.) | ||||
| Errata ID 574: Reported by Yin Shuming | Errata ID 574: Reported by Yin Shuming | |||
| Errata ID 700: Reported by Yin Shuming | Errata ID 700: Reported by Yin Shuming | |||
| Errata ID 701: Reported by Yin Shuming | Errata ID 701: Reported by Yin Shuming | |||
| Errata ID 1283: Reported by Pei-chun Cheng | Errata ID 1283: Reported by Pei-chun Cheng | |||
| Errata ID 1561: Reported by Constantin Hagemeier | Errata ID 1561: Reported by Constantin Hagemeier | |||
| Errata ID 1562: Reported by Constantin Hagemeier | Errata ID 1562: Reported by Constantin Hagemeier | |||
| Errata ID 1564: Reported by Constantin Hagemeier | Errata ID 1564: Reported by Constantin Hagemeier | |||
| Errata ID 1565: Reported by Constantin Hagemeier | Errata ID 1565: Reported by Constantin Hagemeier | |||
| Errata ID 1571: Reported by Constantin Hagemeier | Errata ID 1571: Reported by Constantin Hagemeier | |||
| Errata ID 1572: Reported by Constantin Hagemeier | Errata ID 1572: Reported by Constantin Hagemeier | |||
| skipping to change at page 70, line 19 ¶ | skipping to change at page 71, line 19 ¶ | |||
| There is an errata 3305 currently reported that need to be | There is an errata 3305 currently reported that need to be | |||
| verified, held, or rejected by the ADs; it is addressing the same | verified, held, or rejected by the ADs; it is addressing the same | |||
| issue as draft-gont-tcpm-tcp-seq-validation and was not attempted | issue as draft-gont-tcpm-tcp-seq-validation and was not attempted | |||
| to be applied to this document. | to be applied to this document. | |||
| Not related to RFC 793 content, this revision also makes small tweaks | Not related to RFC 793 content, this revision also makes small tweaks | |||
| to the introductory text, fixes indentation of the pseudoheader | to the introductory text, fixes indentation of the pseudoheader | |||
| diagram, and notes that the Security Considerations should also | diagram, and notes that the Security Considerations should also | |||
| include privacy, when this section is written. | include privacy, when this section is written. | |||
| The -03 revision of this document revises all discussion of the | ||||
| urgent pointer in order to comply with RFC 6093, 1122, and 1011. | ||||
| Since 1122 held requirements on the urgent pointer, the full list of | ||||
| requirements was brought into an appendix of this document, so that | ||||
| it can be updated as-needed. | ||||
| TODO: Incomplete list of planned changes - these need to be added to | TODO: Incomplete list of planned changes - these need to be added to | |||
| and made more specific, as the document proceeds: | and made more specific, as the document proceeds: | |||
| 1. incorporate 1122 additions | 1. incorporate 1122 additions | |||
| 2. point to major additional docs like 1323bis and 5681 | 2. point to major additional docs like 1323bis and 5681 | |||
| 3. incorporate relevant parts of 3168 (ECN) | 3. incorporate relevant parts of 3168 (ECN) | |||
| 4. incorporate 6093 (urgent pointer) | 4. incorporate 6528 (sequence number) | |||
| 5. incorporate 6528 (sequence number) | 5. incorporate Fernando's new number-checking fixes (if past the | |||
| 6. incorporate Fernando's new number-checking fixes (if past the | ||||
| IESG in time) | IESG in time) | |||
| 7. point to PMTUD? | 6. point to PMTUD? | |||
| 8. point to 5461 (soft errors) | 7. point to 5461 (soft errors) | |||
| 9. mention 5961 state machine option | 8. mention 5961 state machine option | |||
| 10. mention 6161 (reducing TIME-WAIT) | 9. mention 6161 (reducing TIME-WAIT) | |||
| 11. incorporate 6429 (ZWP/persist) | 10. incorporate 6429 (ZWP/persist) | |||
| 12. incorporate 6691 (MSS) | 11. incorporate 6691 (MSS) | |||
| 12. look at Tony Sabatini suggestion for describing DO field | ||||
| 13. clearly specify treatment of reserved bits (see TCPM thread on | ||||
| EDO draft April 25, 2014) | ||||
| 14. look at possible mention of draft-minshall-nagle (e.g. as in | ||||
| Linux) | ||||
| 15. make sure that clarifications in RFC 1011 are captured | ||||
| 16. per TCPM discussion, discussion of checking reserved bits may | ||||
| need to be altered from 793 | ||||
| 5. IANA Considerations | 5. IANA Considerations | |||
| This memo includes no request to IANA. Existing IANA registries for | This memo includes no request to IANA. Existing IANA registries for | |||
| TCP parameters are sufficient. | TCP parameters are sufficient. | |||
| TODO: check whether entries pointing to 793 and other documents | TODO: check whether entries pointing to 793 and other documents | |||
| obsoleted by this one should be updated to point to this one instead. | obsoleted by this one should be updated to point to this one instead. | |||
| 6. Security and Privacy Considerations | 6. Security and Privacy Considerations | |||
| TODO | TODO | |||
| See RFC 6093 [5] for discussion of security considerations related to | ||||
| the urgent pointer field. | ||||
| Editor's Note: Scott Brim mentioned that this should include a | Editor's Note: Scott Brim mentioned that this should include a | |||
| PERPASS/privacy review. | PERPASS/privacy review. | |||
| 7. Acknowledgements | 7. Acknowledgements | |||
| This document is largely a revision of RFC 793, which Jon Postel was | This document is largely a revision of RFC 793, which Jon Postel was | |||
| the editor of. Due to his excellent work, it was able to last for | the editor of. Due to his excellent work, it was able to last for | |||
| three decades before we felt the need to revise it. | three decades before we felt the need to revise it. | |||
| Andre Oppermann was a contributor and helped to edit the first | Andre Oppermann was a contributor and helped to edit the first | |||
| skipping to change at page 71, line 28 ¶ | skipping to change at page 72, line 46 ¶ | |||
| Yoshifumi Nishida | Yoshifumi Nishida | |||
| Pasi Sarolahti | Pasi Sarolahti | |||
| On the TCPM mailing list, and at the IETF 88 meeting in Vancouver, | On the TCPM mailing list, and at the IETF 88 meeting in Vancouver, | |||
| helpful comments, critiques, and reviews were received from (listed | helpful comments, critiques, and reviews were received from (listed | |||
| alphebetically): David Borman, Yuchung Cheng, Martin Duke, Kevin | alphebetically): David Borman, Yuchung Cheng, Martin Duke, Kevin | |||
| Lahey, Kevin Mason, Matt Mathis, Hagen Paul Pfeifer, Anthony | Lahey, Kevin Mason, Matt Mathis, Hagen Paul Pfeifer, Anthony | |||
| Sabatini, Joe Touch, Reji Varghese, Lloyd Wood, and Alex Zimmermann. | Sabatini, Joe Touch, Reji Varghese, Lloyd Wood, and Alex Zimmermann. | |||
| This document includes content from errata that were reported by | This document includes content from errata that were reported by | |||
| (listed chronologically): Yin Shuming, Bob Braden, Morris M. Keesan, | (listed chronologically): Yin Shuming, Bob Braden, Morris M. Keesan, | |||
| Pei-chun Cheng, Constantin Hagemeier, Vishwas Manral, Mykyta | Pei-chun Cheng, Constantin Hagemeier, Vishwas Manral, Mykyta | |||
| Yevstifeyev, EungJun Yi, Botong Huang. | Yevstifeyev, EungJun Yi, Botong Huang. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [1] Bradner, S., "Key words for use in RFCs to Indicate | [1] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [2] Postel, J., "Transmission Control Protocol", STD 7, RFC | [2] Postel, J., "Transmission Control Protocol", STD 7, RFC | |||
| 793, September 1981. | 793, September 1981. | |||
| [3] Duke, M., Braden, R., Eddy, W., Blanton, E., and A. | [3] Braden, R., "Requirements for Internet Hosts - | |||
| Communication Layers", STD 3, RFC 1122, October 1989. | ||||
| [4] Duke, M., Braden, R., Eddy, W., Blanton, E., and A. | ||||
| Zimmermann, "A Roadmap for Transmission Control Protocol | Zimmermann, "A Roadmap for Transmission Control Protocol | |||
| (TCP) Specification Documents", draft-ietf-tcpm-tcp- | (TCP) Specification Documents", draft-ietf-tcpm-tcp- | |||
| rfc4614bis-00 (work in progress), August 2013. | rfc4614bis-07 (work in progress), July 2014. | |||
| [5] Gont, F. and A. Yourtchenko, "On the Implementation of the | ||||
| TCP Urgent Mechanism", RFC 6093, January 2011. | ||||
| Appendix A. TCP Requirement Summary | ||||
| This section is adapted from RFC 1122. | ||||
| TODO: this needs to be seriously redone, to use 793bis section | ||||
| numbers instead of 1122 ones, and all 1122 requirements need to be | ||||
| reflected in 793bis text. | ||||
| | | | | |S| | | ||||
| | | | | |H| |F | ||||
| | | | | |O|M|o | ||||
| | | |S| |U|U|o | ||||
| | | |H| |L|S|t | ||||
| | |M|O| |D|T|n | ||||
| | |U|U|M| | |o | ||||
| | |S|L|A|N|N|t | ||||
| |1122 |T|D|Y|O|O|t | ||||
| FEATURE |SECTION | | | |T|T|e | ||||
| -------------------------------------------------|--------|-|-|-|-|-|-- | ||||
| | | | | | | | | ||||
| Push flag | | | | | | | | ||||
| Aggregate or queue un-pushed data |4.2.2.2 | | |x| | | | ||||
| Sender collapse successive PSH flags |4.2.2.2 | |x| | | | | ||||
| SEND call can specify PUSH |4.2.2.2 | | |x| | | | ||||
| If cannot: sender buffer indefinitely |4.2.2.2 | | | | |x| | ||||
| If cannot: PSH last segment |4.2.2.2 |x| | | | | | ||||
| Notify receiving ALP of PSH |4.2.2.2 | | |x| | |1 | ||||
| Send max size segment when possible |4.2.2.2 | |x| | | | | ||||
| | | | | | | | | ||||
| Window | | | | | | | | ||||
| Treat as unsigned number |4.2.2.3 |x| | | | | | ||||
| Handle as 32-bit number |4.2.2.3 | |x| | | | | ||||
| Shrink window from right |4.2.2.16| | | |x| | | ||||
| Robust against shrinking window |4.2.2.16|x| | | | | | ||||
| Receiver's window closed indefinitely |4.2.2.17| | |x| | | | ||||
| Sender probe zero window |4.2.2.17|x| | | | | | ||||
| First probe after RTO |4.2.2.17| |x| | | | | ||||
| Exponential backoff |4.2.2.17| |x| | | | | ||||
| Allow window stay zero indefinitely |4.2.2.17|x| | | | | | ||||
| Sender timeout OK conn with zero wind |4.2.2.17| | | | |x| | ||||
| | | | | | | | | ||||
| Urgent Data | | | | | | | | ||||
| Pointer indicates first non-urgent octet |4.2.2.4 |x| | | | | | ||||
| Arbitrary length urgent data sequence |4.2.2.4 |x| | | | | | ||||
| Inform ALP asynchronously of urgent data |4.2.2.4 |x| | | | |1 | ||||
| ALP can learn if/how much urgent data Q'd |4.2.2.4 |x| | | | |1 | ||||
| | | | | | | | | ||||
| TCP Options | | | | | | | | ||||
| Receive TCP option in any segment |4.2.2.5 |x| | | | | | ||||
| Ignore unsupported options |4.2.2.5 |x| | | | | | ||||
| Cope with illegal option length |4.2.2.5 |x| | | | | | ||||
| Implement sending & receiving MSS option |4.2.2.6 |x| | | | | | ||||
| Send MSS option unless 536 |4.2.2.6 | |x| | | | | ||||
| Send MSS option always |4.2.2.6 | | |x| | | | ||||
| Send-MSS default is 536 |4.2.2.6 |x| | | | | | ||||
| Calculate effective send seg size |4.2.2.6 |x| | | | | | ||||
| | | | | | | | | ||||
| TCP Checksums | | | | | | | | ||||
| Sender compute checksum |4.2.2.7 |x| | | | | | ||||
| Receiver check checksum |4.2.2.7 |x| | | | | | ||||
| | | | | | | | | ||||
| Use clock-driven ISN selection |4.2.2.9 |x| | | | | | ||||
| | | | | | | | | ||||
| Opening Connections | | | | | | | | ||||
| Support simultaneous open attempts |4.2.2.10|x| | | | | | ||||
| SYN-RCVD remembers last state |4.2.2.11|x| | | | | | ||||
| Passive Open call interfere with others |4.2.2.18| | | | |x| | ||||
| Function: simultan. LISTENs for same port |4.2.2.18|x| | | | | | ||||
| Ask IP for src address for SYN if necc. |4.2.3.7 |x| | | | | | ||||
| Otherwise, use local addr of conn. |4.2.3.7 |x| | | | | | ||||
| OPEN to broadcast/multicast IP Address |4.2.3.14| | | | |x| | ||||
| Silently discard seg to bcast/mcast addr |4.2.3.14|x| | | | | | ||||
| | | | | | | | | ||||
| Closing Connections | | | | | | | | ||||
| RST can contain data |4.2.2.12| |x| | | | | ||||
| Inform application of aborted conn |4.2.2.13|x| | | | | | ||||
| Half-duplex close connections |4.2.2.13| | |x| | | | ||||
| Send RST to indicate data lost |4.2.2.13| |x| | | | | ||||
| In TIME-WAIT state for 2xMSL seconds |4.2.2.13|x| | | | | | ||||
| Accept SYN from TIME-WAIT state |4.2.2.13| | |x| | | | ||||
| | | | | | | | | ||||
| Retransmissions | | | | | | | | ||||
| Jacobson Slow Start algorithm |4.2.2.15|x| | | | | | ||||
| Jacobson Congestion-Avoidance algorithm |4.2.2.15|x| | | | | | ||||
| Retransmit with same IP ident |4.2.2.15| | |x| | | | ||||
| Karn's algorithm |4.2.3.1 |x| | | | | | ||||
| Jacobson's RTO estimation alg. |4.2.3.1 |x| | | | | | ||||
| Exponential backoff |4.2.3.1 |x| | | | | | ||||
| SYN RTO calc same as data |4.2.3.1 | |x| | | | | ||||
| Recommended initial values and bounds |4.2.3.1 | |x| | | | | ||||
| | | | | | | | | ||||
| Generating ACK's: | | | | | | | | ||||
| Queue out-of-order segments |4.2.2.20| |x| | | | | ||||
| Process all Q'd before send ACK |4.2.2.20|x| | | | | | ||||
| Send ACK for out-of-order segment |4.2.2.21| | |x| | | | ||||
| Delayed ACK's |4.2.3.2 | |x| | | | | ||||
| Delay < 0.5 seconds |4.2.3.2 |x| | | | | | ||||
| Every 2nd full-sized segment ACK'd |4.2.3.2 |x| | | | | | ||||
| Receiver SWS-Avoidance Algorithm |4.2.3.3 |x| | | | | | ||||
| | | | | | | | | ||||
| Sending data | | | | | | | | ||||
| Configurable TTL |4.2.2.19|x| | | | | | ||||
| Sender SWS-Avoidance Algorithm |4.2.3.4 |x| | | | | | ||||
| Nagle algorithm |4.2.3.4 | |x| | | | | ||||
| Application can disable Nagle algorithm |4.2.3.4 |x| | | | | | ||||
| | | | | | | | | ||||
| Connection Failures: | | | | | | | | ||||
| Negative advice to IP on R1 retxs |4.2.3.5 |x| | | | | | ||||
| Close connection on R2 retxs |4.2.3.5 |x| | | | | | ||||
| ALP can set R2 |4.2.3.5 |x| | | | |1 | ||||
| Inform ALP of R1<=retxs<R2 |4.2.3.5 | |x| | | |1 | ||||
| Recommended values for R1, R2 |4.2.3.5 | |x| | | | | ||||
| Same mechanism for SYNs |4.2.3.5 |x| | | | | | ||||
| R2 at least 3 minutes for SYN |4.2.3.5 |x| | | | | | ||||
| | | | | | | | | ||||
| Send Keep-alive Packets: |4.2.3.6 | | |x| | | | ||||
| - Application can request |4.2.3.6 |x| | | | | | ||||
| - Default is "off" |4.2.3.6 |x| | | | | | ||||
| - Only send if idle for interval |4.2.3.6 |x| | | | | | ||||
| - Interval configurable |4.2.3.6 |x| | | | | | ||||
| - Default at least 2 hrs. |4.2.3.6 |x| | | | | | ||||
| - Tolerant of lost ACK's |4.2.3.6 |x| | | | | | ||||
| | | | | | | | | ||||
| IP Options | | | | | | | | ||||
| Ignore options TCP doesn't understand |4.2.3.8 |x| | | | | | ||||
| Time Stamp support |4.2.3.8 | | |x| | | | ||||
| Record Route support |4.2.3.8 | | |x| | | | ||||
| Source Route: | | | | | | | | ||||
| ALP can specify |4.2.3.8 |x| | | | |1 | ||||
| Overrides src rt in datagram |4.2.3.8 |x| | | | | | ||||
| Build return route from src rt |4.2.3.8 |x| | | | | | ||||
| Later src route overrides |4.2.3.8 | |x| | | | | ||||
| | | | | | | | | ||||
| Receiving ICMP Messages from IP |4.2.3.9 |x| | | | | | ||||
| Dest. Unreach (0,1,5) => inform ALP |4.2.3.9 | |x| | | | | ||||
| Dest. Unreach (0,1,5) => abort conn |4.2.3.9 | | | | |x| | ||||
| Dest. Unreach (2-4) => abort conn |4.2.3.9 | |x| | | | | ||||
| Source Quench => slow start |4.2.3.9 | |x| | | | | ||||
| Time Exceeded => tell ALP, don't abort |4.2.3.9 | |x| | | | | ||||
| Param Problem => tell ALP, don't abort |4.2.3.9 | |x| | | | | ||||
| | | | | | | | | ||||
| Address Validation | | | | | | | | ||||
| Reject OPEN call to invalid IP address |4.2.3.10|x| | | | | | ||||
| Reject SYN from invalid IP address |4.2.3.10|x| | | | | | ||||
| Silently discard SYN to bcast/mcast addr |4.2.3.10|x| | | | | | ||||
| | | | | | | | | ||||
| TCP/ALP Interface Services | | | | | | | | ||||
| Error Report mechanism |4.2.4.1 |x| | | | | | ||||
| ALP can disable Error Report Routine |4.2.4.1 | |x| | | | | ||||
| ALP can specify TOS for sending |4.2.4.2 |x| | | | | | ||||
| Passed unchanged to IP |4.2.4.2 | |x| | | | | ||||
| ALP can change TOS during connection |4.2.4.2 | |x| | | | | ||||
| Pass received TOS up to ALP |4.2.4.2 | | |x| | | | ||||
| FLUSH call |4.2.4.3 | | |x| | | | ||||
| Optional local IP addr parm. in OPEN |4.2.4.4 |x| | | | | | ||||
| -------------------------------------------------|--------|-|-|-|-|-|-- | ||||
| FOOTNOTES: (1) "ALP" means Application-Layer program. | ||||
| Author's Address | Author's Address | |||
| Wesley M. Eddy (editor) | Wesley M. Eddy (editor) | |||
| MTI Systems | MTI Systems | |||
| US | US | |||
| Email: wes@mti-systems.com | Email: wes@mti-systems.com | |||
| End of changes. 23 change blocks. | ||||
| 45 lines changed or deleted | 244 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/ | ||||