draft-mcquistin-augmented-tcp-example-00.txt | draft-mcquistin-augmented-tcp-example-01.txt | |||
---|---|---|---|---|
Network Working Group S. McQuistin | Network Working Group S. McQuistin | |||
Internet-Draft V. Band | Internet-Draft V. Band | |||
Intended status: Experimental D. Jacob | Intended status: Experimental D. Jacob | |||
Expires: 6 May 2021 C. S. Perkins | Expires: 6 November 2021 C. S. Perkins | |||
University of Glasgow | University of Glasgow | |||
2 November 2020 | 5 May 2021 | |||
Describing TCP with Augmented Packet Header Diagrams | Describing TCP with Augmented Packet Header Diagrams | |||
draft-mcquistin-augmented-tcp-example-00 | draft-mcquistin-augmented-tcp-example-01 | |||
Abstract | Abstract | |||
This document describes TCP, and a number of its extensions, using | This document describes TCP, and a number of its extensions, using | |||
Augmented Packet Header Diagrams. This document is an example of the | Augmented Packet Header Diagrams. This document is an example of the | |||
Augmented Packet Header Diagram language: it is not intended as a | Augmented Packet Header Diagram language: it is not intended as a | |||
contribution to any ongoing or future work on maintaining or | contribution to any ongoing or future work on maintaining or | |||
extending TCP. | extending TCP. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 1, line 36 ¶ | skipping to change at page 1, line 36 ¶ | |||
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 https://datatracker.ietf.org/drafts/current/. | Drafts is at https://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 6 May 2021. | This Internet-Draft will expire on 6 November 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Simplified BSD License text | extracted from this document must include Simplified BSD License text | |||
as described in Section 4.e of the Trust Legal Provisions and are | as described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. TCP Header . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 2. TCP Header . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
3. TCP Options . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. TCP Options . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Comparison with draft-ietf-tcpm-rfc793bis . . . . . . . . . . 7 | 4. Comparison with draft-ietf-tcpm-rfc793bis . . . . . . . . . . 8 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 | |||
8. Informative References . . . . . . . . . . . . . . . . . . . 8 | 8. Informative References . . . . . . . . . . . . . . . . . . . 8 | |||
Appendix A. Source code repository . . . . . . . . . . . . . . . 9 | Appendix A. Source code repository . . . . . . . . . . . . . . . 9 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
1. Introduction | 1. Introduction | |||
This document uses Augmented Packet Header Diagrams | This document uses Augmented Packet Header Diagrams | |||
skipping to change at page 3, line 5 ¶ | skipping to change at page 3, line 5 ¶ | |||
this document does not necessarily reflect TCP, and its extensions, | this document does not necessarily reflect TCP, and its extensions, | |||
as presently standardised. | as presently standardised. | |||
2. TCP Header | 2. TCP Header | |||
This document describes the TCP protocol. The TCP protocol uses TCP | This document describes the TCP protocol. The TCP protocol uses TCP | |||
Headers. | Headers. | |||
A TCP Header is formatted as follows: | A TCP Header is formatted as follows: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Source Port | Destination Port | | | Source Port | Destination Port | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Sequence Number | | | Sequence Number | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Acknowledgment Number | | | Acknowledgment Number | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Data | |C|E|U|A|P|R|S|F| | | | Data | |C|E|U|A|P|R|S|F| | | |||
| Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window Size | | | Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window Size | | |||
| | |R|E|G|K|H|T|N|N| | | | | |R|E|G|K|H|T|N|N| | | |||
skipping to change at page 3, line 43 ¶ | skipping to change at page 3, line 43 ¶ | |||
Sequence Number: 32 bits. The sequence number of the first data | Sequence Number: 32 bits. The sequence number of the first data | |||
octet in this segment (except when the SYN flag is set). If SYN | octet in this segment (except when the SYN flag is set). If SYN | |||
is set the sequence number is the initial sequence number (ISN) | is set the sequence number is the initial sequence number (ISN) | |||
and the first data octet is ISN+1. | and the first data octet is ISN+1. | |||
Acknowledgment Number: 32 bits. If the ACK control bit is set, this | Acknowledgment Number: 32 bits. If the ACK control bit is set, this | |||
field contains the value of the next sequence number the sender of | field contains the value of the next sequence number the sender of | |||
the segment is expecting to receive. Once a connection is | the segment is expecting to receive. Once a connection is | |||
established, this is always sent. | established, this is always sent. | |||
Data Offset (DOffset): 4 bits. The number of 32 bit words in the TCP | Data Offset (DOffset): 4 bits; DOffset >= 5. The number of 32 bit | |||
Header. This indicates where the data begins. The TCP header | words in the TCP Header. This indicates where the data begins. | |||
(even one including options) is an integral number of 32 bits | The TCP header (even one including options) is an integral number | |||
long. | of 32 bits long. | |||
Reserved (Rsrvd): 4 bits. A set of control bits reserved for future | Reserved (Rsrvd): 4 bits; Rsrvd == 0. A set of control bits reserved | |||
use. Must be zero in generated segments and must be ignored in | for future use. Must be zero in generated segments and must be | |||
received segments, if corresponding future features are | ignored in received segments, if corresponding future features are | |||
unimplemented by the sending or receiving host. | unimplemented by the sending or receiving host. | |||
CWR: 1 bit. Congestion Window Reduced | CWR: 1 bit. Congestion Window Reduced | |||
ECE: 1 bit. ECN-Echo | ECE: 1 bit. ECN-Echo | |||
URG: 1 bit. Urgent Pointer field significant | URG: 1 bit. Urgent Pointer field significant | |||
ACK: 1 bit. Acknowledgment field significant. | ACK: 1 bit. Acknowledgment field significant. | |||
PSH: 1 bit. Push Function (see the Send Call description) | PSH: 1 bit. Push Function (see the Send Call description) | |||
RST: 1 bit. Reset the connection | RST: 1 bit. Reset the connection | |||
SYN: 1 bit. Synchronize sequence numbers | SYN: 1 bit. Synchronize sequence numbers | |||
FIN: 1 bit. No more data from sender. | FIN: 1 bit; (FIN == 0) || (SYN == 0). No more data from sender. | |||
Window Size: 16 bits. The number of data octets beginning with the | Window Size: 16 bits. The number of data octets beginning with the | |||
one indicated in the acknowledgment field that the sender of this | one indicated in the acknowledgment field that the sender of this | |||
segment is willing to accept. | segment is willing to accept. | |||
The window size MUST be treated as an unsigned number, or else | The window size MUST be treated as an unsigned number, or else | |||
large window sizes will appear like negative windows and TCP will | large window sizes will appear like negative windows and TCP will | |||
not work (MUST-1). It is RECOMMENDED that implementations will | not work (MUST-1). It is RECOMMENDED that implementations will | |||
reserve 32-bit fields for the send and receive window sizes in the | reserve 32-bit fields for the send and receive window sizes in the | |||
connection record and do all window computations with 32 bits | connection record and do all window computations with 32 bits | |||
skipping to change at page 5, line 11 ¶ | skipping to change at page 5, line 11 ¶ | |||
only when DOffset > 5. Options may occupy space at the end of the | only when DOffset > 5. Options may occupy space at the end of the | |||
TCP header and are a multiple of 8 bits in length. All options | TCP header and are a multiple of 8 bits in length. All options | |||
are included in the checksum. | are included in the checksum. | |||
Payload. Payload. | Payload. Payload. | |||
3. TCP Options | 3. TCP Options | |||
A TCP Option is one of: a EOL Option, a NOOP Option, a Maximum | A TCP Option is one of: a EOL Option, a NOOP Option, a Maximum | |||
Segment Size Option, a Window Scale Factor Option, a Timestamp | Segment Size Option, a Window Scale Factor Option, a Timestamp | |||
Option, or a SACK Permitted Option. | Option, a SACK Permitted Option, or a SACK Range Option. | |||
An EOL Option is formatted as follows: | An EOL Option is formatted as follows: | |||
0 1 2 3 | 0 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| 0 | | | 0 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
where: | where: | |||
Option Kind (Kind): 1 byte; Kind == 0. This option code indicates | Option Kind (Kind): 1 byte; Kind == 0. This option code indicates | |||
the end of the option list. | the end of the option list. | |||
A NOOP Option is formatted as follows: | A NOOP Option is formatted as follows: | |||
0 1 2 3 | 0 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| 1 | | | 1 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
where: | where: | |||
Option Kind (Kind): 1 byte; Kind == 1. This option code can be used | Option Kind (Kind): 1 byte; Kind == 1. This option code can be used | |||
between options, for example, to align the beginning of a | between options, for example, to align the beginning of a | |||
subsequent option on a word boundary. | subsequent option on a word boundary. | |||
A Maximum Segment Size Option is formatted as follows: | A Maximum Segment Size Option is formatted as follows: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 2 | Length | Maximum Segment Size (MSS) | | | 2 | Length | Maximum Segment Size (MSS) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
where: | where: | |||
Option Kind (Kind): 1 byte; Kind == 2. If this option is present, | Option Kind (Kind): 1 byte; Kind == 2. If this option is present, | |||
then it communicates the maximum receive segment size at the TCP | then it communicates the maximum receive segment size at the TCP | |||
endpoint that sends this segment. | endpoint that sends this segment. | |||
Option Length (Length): 1 byte; Length == 4. Option length. | Option Length (Length): 1 byte; Length == 4. Option length. | |||
Maximum Segment Size (MSS): 2 bytes. The maximum segment size | Maximum Segment Size (MSS): 2 bytes. The maximum segment size | |||
allowed. | allowed. | |||
A Window Scale Factor Option is formatted as follows: | A Window Scale Factor Option is formatted as follows: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 3 | Length | Window Scale Factor | | | 3 | Length | Window Scale Factor | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
where: | where: | |||
Option Kind (Kind): 1 byte; Kind == 3. If present, this option | Option Kind (Kind): 1 byte; Kind == 3. If present, this option | |||
carries the window scale factor. | carries the window scale factor. | |||
Option Length (Length): 1 byte; Length == 3. Option length. | Option Length (Length): 1 byte; Length == 3. Option length. | |||
Window Scale Factor: 1 byte. Window scale factor. | Window Scale Factor: 1 byte. Window scale factor. | |||
A Timestamp Option is formatted as follows: | A Timestamp Option is formatted as follows: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 8 | Length | | | 8 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Timestamp value (TSval) | | | Timestamp value (TSval) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Timestamp echo reply (TSecr) | | | Timestamp echo reply (TSecr) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
where: | where: | |||
skipping to change at page 7, line 5 ¶ | skipping to change at page 7, line 5 ¶ | |||
carries a timestamp and an echoed timestamp. | carries a timestamp and an echoed timestamp. | |||
Option Length (Length): 1 byte; Length == 10. Option length. | Option Length (Length): 1 byte; Length == 10. Option length. | |||
Timestamp value (TSval): 4 bytes. TSval. | Timestamp value (TSval): 4 bytes. TSval. | |||
Timestamp echo reply (TSecr): 4 bytes. TSecr. | Timestamp echo reply (TSecr): 4 bytes. TSecr. | |||
A SACK Permitted Option is formatted as follows: | A SACK Permitted Option is formatted as follows: | |||
0 1 2 3 | 0 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 4 | Length | | | 4 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
where: | where: | |||
Option Kind (Kind): 1 byte; Kind == 4. If present, this option | Option Kind (Kind): 1 byte; Kind == 4. If present, this option | |||
indicates that SACK is permitted. | indicates that SACK is permitted. | |||
Option Length (Length): 1 byte; Length == 2. Option length. | Option Length (Length): 1 byte; Length == 2. Option length. | |||
4. Comparison with draft-ietf-tcpm-rfc793bis | A SACK Range Option is formatted as follows: | |||
While the purpose of this document is to give an example use of the | 0 1 2 3 | |||
Augmented Packet Header Diagrams, and not to contribute to ongoing or | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
future TCP standardisation efforts, it is instructive to draw | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
comparisons with documents that describe the same protocol. In | | 5 | Length | | |||
particular, the descriptions of the TCP header (Section 2) and TCP | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
options (Section 3) from this document can be compared with | | [Blocks] | | |||
Section 3.1 of [draft-ietf-tcpm-rfc793bis]. We have adopted the same | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
field descriptions to help with this comparison. | ||||
Beyond the broad similarities, there are a number of elements where | where: | |||
this document describes the protocol differently. For example, the | ||||
TCP header as defined in [draft-ietf-tcpm-rfc793bis] contains a | ||||
variable-length padding field which is not present in the description | ||||
contained in this document. The Padding field is used to pad the TCP | ||||
header to a 32-bit boundary, and to ensure that the Payload begins on | ||||
a 32-bit boundary. The length of the Padding field is the difference | ||||
between the value of the Data Offset field and the length of the | ||||
Options field. However, the length of the Options field is itself | ||||
dependent on the value of the Data Offset field and the particular | ||||
set of options contained within an instance of the TCP header. The | ||||
Augmented Packet Header Diagram format cannot express this logic: the | ||||
lengths of both the Padding and Payload fields would be variable. To | ||||
overcome this, as shown in Section 2, the description of TCP given in | ||||
this document relies upon End of List options being syntactically | ||||
identical to Padding (i.e., being all zeroes). This highlights the | ||||
limitations of the Augmented Packet Header Diagram format: prose text | ||||
is much more expressive. | ||||
However, the precision required by the Augmented Packet Header | Option Kind (Kind): 1 byte; Kind == 5. If present, this option | |||
Diagram can be beneficial. For example, the description of the | contains one or more SACK blocks. | |||
Options field in this document sets out an explicit length and | ||||
presence constraint, where [draft-ietf-tcpm-rfc793bis] indicates that | ||||
it is "variable". Similar constraints exist in the description given | ||||
in [draft-ietf-tcpm-rfc793bis], but they are contained with the prose | ||||
description of the field. | ||||
In summary, the most striking comparison to be made is that the | Option Length (Length): 1 byte. Option length. | |||
description of TCP given in this document is largely similar to that | ||||
given in [draft-ietf-tcpm-rfc793bis]. By retaining the overall | Blocks: (Length-2)/8 SACK Blocks. SACK blocks. | |||
structure of a packet header diagram and an accommpanying list of | ||||
descriptions for each field, the Augmented Packet Header Diagram | A SACK Block is formatted as follows: | |||
format is close to that already in use. This is encouraging: it | ||||
indicates that the Augmented Packet Header Diagram language can be | 0 1 2 3 | |||
used to describe realistic protocols, without introducing a format | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
that is unfamiliar or difficult to write. | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Left Edge | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Right Edge | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
where: | ||||
Left Edge: 4 bytes. This is the first sequence number of this block. | ||||
Right Edge: 4 bytes. This is the sequence number immediately | ||||
following the last sequence number of this block. | ||||
4. Comparison with draft-ietf-tcpm-rfc793bis | ||||
The Augmented Packet Header Diagram format used in this example has | ||||
also been adopted within [draft-ietf-tcpm-rfc793bis]. This example | ||||
goes beyond [draft-ietf-tcpm-rfc793bis], and includes a number of TCP | ||||
options that are not defined as part of that document, including the | ||||
Window Scale Factor, Timestamp, SACK permitted, and SACK block | ||||
options. In addition, the definition of the TCP header (Section 2) | ||||
in this document includes a number of field constraints that are not | ||||
specified in [draft-ietf-tcpm-rfc793bis]. | ||||
The purpose of this document is to give an example use of the | ||||
Augmented Packet Header Diagrams, and not to contribute to ongoing or | ||||
future TCP standardisation efforts. We include additional | ||||
constraints and TCP options to demonstrate the ease with which these | ||||
can be expressed in our format, and that these are then supported by | ||||
the generated parser code. | ||||
5. IANA Considerations | 5. IANA Considerations | |||
This document contains no actions for IANA. | This document contains no actions for IANA. | |||
6. Security Considerations | 6. Security Considerations | |||
The security implications of the Augmented Packet Header Diagrams | The security implications of the Augmented Packet Header Diagrams | |||
format are considered in [AUGMENTED-DIAGRAMS]. | format are considered in [AUGMENTED-DIAGRAMS]. | |||
skipping to change at page 8, line 43 ¶ | skipping to change at page 8, line 43 ¶ | |||
This work has received funding from the UK Engineering and Physical | This work has received funding from the UK Engineering and Physical | |||
Sciences Research Council under grant EP/R04144X/1. | Sciences Research Council under grant EP/R04144X/1. | |||
8. Informative References | 8. Informative References | |||
[AUGMENTED-DIAGRAMS] | [AUGMENTED-DIAGRAMS] | |||
McQuistin, S., Band, V., Jacob, D., and C. S. Perkins, | McQuistin, S., Band, V., Jacob, D., and C. S. Perkins, | |||
"Describing Protocol Data Units with Augmented Packet | "Describing Protocol Data Units with Augmented Packet | |||
Header Diagrams", Work in Progress, Internet-Draft, draft- | Header Diagrams", Work in Progress, Internet-Draft, draft- | |||
mcquistin-augmented-ascii-diagrams-07, 2 November 2020, | mcquistin-augmented-ascii-diagrams-08, 5 May 2021, | |||
<http://www.ietf.org/internet-drafts/draft-mcquistin- | <http://www.ietf.org/internet-drafts/draft-mcquistin- | |||
augmented-ascii-diagrams-07.txt>. | augmented-ascii-diagrams-08.txt>. | |||
[RFC793] Postel, J., "Transmission Control Protocol", RFC 793, | [RFC793] Postel, J., "Transmission Control Protocol", RFC 793, | |||
September 1981, <https://www.rfc-editor.org/info/rfc793>. | September 1981, <https://www.rfc-editor.org/info/rfc793>. | |||
[draft-ietf-tcpm-rfc793bis] | [draft-ietf-tcpm-rfc793bis] | |||
Eddy, W., "Transmission Control Protocol (TCP) | Eddy, W., "Transmission Control Protocol (TCP) | |||
Specification", Work in Progress, Internet-Draft, draft- | Specification", Work in Progress, Internet-Draft, draft- | |||
ietf-tcpm-rfc793bis-19, 27 October 2020, | ietf-tcpm-rfc793bis-21, 3 May 2021, <http://www.ietf.org/ | |||
<http://www.ietf.org/internet-drafts/draft-ietf-tcpm- | internet-drafts/draft-ietf-tcpm-rfc793bis-21.txt>. | |||
rfc793bis-19.txt>. | ||||
Appendix A. Source code repository | Appendix A. Source code repository | |||
The source code for tooling that can be used to parse this document, | The source code for tooling that can be used to parse this document, | |||
and generate parser code for the protocol it describes, is available | and generate parser code for the protocol it describes, is available | |||
from https://github.com/glasgow-ipl/ips-protodesc-code. | from https://github.com/glasgow-ipl/ips-protodesc-code. | |||
Authors' Addresses | Authors' Addresses | |||
Stephen McQuistin | Stephen McQuistin | |||
End of changes. 28 change blocks. | ||||
83 lines changed or deleted | 88 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |