draft-ietf-taps-interface-11.txt | draft-ietf-taps-interface-12.txt | |||
---|---|---|---|---|
TAPS Working Group B. Trammell, Ed. | TAPS Working Group B. Trammell, Ed. | |||
Internet-Draft Google Switzerland GmbH | Internet-Draft Google Switzerland GmbH | |||
Intended status: Standards Track M. Welzl, Ed. | Intended status: Standards Track M. Welzl, Ed. | |||
Expires: August 26, 2021 University of Oslo | Expires: 11 October 2021 University of Oslo | |||
T. Enghardt | T. Enghardt | |||
Netflix | Netflix | |||
G. Fairhurst | G. Fairhurst | |||
University of Aberdeen | University of Aberdeen | |||
M. Kuehlewind | M. Kuehlewind | |||
Ericsson | Ericsson | |||
C. Perkins | C. Perkins | |||
University of Glasgow | University of Glasgow | |||
P. Tiesel | P. Tiesel | |||
TU Berlin | SAP SE | |||
C. Wood | C.A. Wood | |||
Cloudflare | Cloudflare | |||
T. Pauly | T. Pauly | |||
Apple Inc. | Apple Inc. | |||
K. Rose | K. Rose | |||
Akamai Technologies, Inc. | Akamai Technologies, Inc. | |||
February 22, 2021 | 9 April 2021 | |||
An Abstract Application Layer Interface to Transport Services | An Abstract Application Layer Interface to Transport Services | |||
draft-ietf-taps-interface-11 | draft-ietf-taps-interface-12 | |||
Abstract | Abstract | |||
This document describes an abstract application programming | This document describes an abstract application programming | |||
interface, API, to the transport layer, following the Transport | interface, API, to the transport layer, following the Transport | |||
Services Architecture. It supports the asynchronous, atomic | Services Architecture. It supports the asynchronous, atomic | |||
transmission of messages over transport protocols and network paths | transmission of messages over transport protocols and network paths | |||
dynamically selected at runtime. It is intended to replace the | dynamically selected at runtime. It is intended to replace the | |||
traditional BSD sockets API as the common interface to the transport | traditional BSD sockets API as the common interface to the transport | |||
layer, in an environment where endpoints could select from multiple | layer, in an environment where endpoints could select from multiple | |||
skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
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 August 26, 2021. | This Internet-Draft will expire on 11 October 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 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 | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
(https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. Terminology and Notation . . . . . . . . . . . . . . . . 5 | 1.1. Terminology and Notation . . . . . . . . . . . . . . . . 5 | |||
1.2. Specification of Requirements . . . . . . . . . . . . . . 6 | 1.2. Specification of Requirements . . . . . . . . . . . . . . 6 | |||
2. Overview of Interface Design . . . . . . . . . . . . . . . . 6 | 2. Overview of Interface Design . . . . . . . . . . . . . . . . 7 | |||
3. API Summary . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. API Summary . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.1. Usage Examples . . . . . . . . . . . . . . . . . . . . . 8 | 3.1. Usage Examples . . . . . . . . . . . . . . . . . . . . . 8 | |||
3.1.1. Server Example . . . . . . . . . . . . . . . . . . . 9 | 3.1.1. Server Example . . . . . . . . . . . . . . . . . . . 9 | |||
3.1.2. Client Example . . . . . . . . . . . . . . . . . . . 10 | 3.1.2. Client Example . . . . . . . . . . . . . . . . . . . 10 | |||
3.1.3. Peer Example . . . . . . . . . . . . . . . . . . . . 11 | 3.1.3. Peer Example . . . . . . . . . . . . . . . . . . . . 11 | |||
3.2. Transport Properties . . . . . . . . . . . . . . . . . . 12 | 3.2. Transport Properties . . . . . . . . . . . . . . . . . . 12 | |||
3.2.1. Transport Property Names . . . . . . . . . . . . . . 12 | 3.2.1. Transport Property Names . . . . . . . . . . . . . . 12 | |||
3.2.2. Transport Property Types . . . . . . . . . . . . . . 13 | 3.2.2. Transport Property Types . . . . . . . . . . . . . . 13 | |||
3.3. Scope of the Interface Definition . . . . . . . . . . . . 14 | 3.3. Scope of the Interface Definition . . . . . . . . . . . . 14 | |||
4. Pre-Establishment Phase . . . . . . . . . . . . . . . . . . . 15 | 4. Pre-Establishment Phase . . . . . . . . . . . . . . . . . . . 15 | |||
skipping to change at page 3, line 5 ¶ | skipping to change at page 3, line 4 ¶ | |||
4.1.1. Using Multicast Endpoints . . . . . . . . . . . . . . 17 | 4.1.1. Using Multicast Endpoints . . . . . . . . . . . . . . 17 | |||
4.1.2. Endpoint Aliases . . . . . . . . . . . . . . . . . . 17 | 4.1.2. Endpoint Aliases . . . . . . . . . . . . . . . . . . 17 | |||
4.1.3. Endpoint Examples . . . . . . . . . . . . . . . . . . 18 | 4.1.3. Endpoint Examples . . . . . . . . . . . . . . . . . . 18 | |||
4.2. Specifying Transport Properties . . . . . . . . . . . . . 19 | 4.2. Specifying Transport Properties . . . . . . . . . . . . . 19 | |||
4.2.1. Reliable Data Transfer (Connection) . . . . . . . . . 22 | 4.2.1. Reliable Data Transfer (Connection) . . . . . . . . . 22 | |||
4.2.2. Preservation of Message Boundaries . . . . . . . . . 22 | 4.2.2. Preservation of Message Boundaries . . . . . . . . . 22 | |||
4.2.3. Configure Per-Message Reliability . . . . . . . . . . 22 | 4.2.3. Configure Per-Message Reliability . . . . . . . . . . 22 | |||
4.2.4. Preservation of Data Ordering . . . . . . . . . . . . 22 | 4.2.4. Preservation of Data Ordering . . . . . . . . . . . . 22 | |||
4.2.5. Use 0-RTT Session Establishment with a Safely | 4.2.5. Use 0-RTT Session Establishment with a Safely | |||
Replayable Message . . . . . . . . . . . . . . . . . 23 | Replayable Message . . . . . . . . . . . . . . . . . 23 | |||
4.2.6. Multistream Connections in Group . . . . . . . . . . 23 | 4.2.6. Multistream Connections in Group . . . . . . . . . . 23 | |||
4.2.7. Full Checksum Coverage on Sending . . . . . . . . . . 23 | 4.2.7. Full Checksum Coverage on Sending . . . . . . . . . . 23 | |||
4.2.8. Full Checksum Coverage on Receiving . . . . . . . . . 23 | 4.2.8. Full Checksum Coverage on Receiving . . . . . . . . . 23 | |||
4.2.9. Congestion control . . . . . . . . . . . . . . . . . 24 | 4.2.9. Congestion control . . . . . . . . . . . . . . . . . 24 | |||
4.2.10. Keep alive . . . . . . . . . . . . . . . . . . . . . 24 | 4.2.10. Keep alive . . . . . . . . . . . . . . . . . . . . . 24 | |||
4.2.11. Interface Instance or Type . . . . . . . . . . . . . 24 | 4.2.11. Interface Instance or Type . . . . . . . . . . . . . 24 | |||
4.2.12. Provisioning Domain Instance or Type . . . . . . . . 25 | 4.2.12. Provisioning Domain Instance or Type . . . . . . . . 25 | |||
4.2.13. Use Temporary Local Address . . . . . . . . . . . . . 26 | 4.2.13. Use Temporary Local Address . . . . . . . . . . . . . 26 | |||
4.2.14. Multi-Paths Transport . . . . . . . . . . . . . . . . 27 | 4.2.14. Multipath Transport . . . . . . . . . . . . . . . . . 27 | |||
4.2.15. Advertisement of Alternative Addresses . . . . . . . 28 | 4.2.15. Advertisement of Alternative Addresses . . . . . . . 28 | |||
4.2.16. Direction of communication . . . . . . . . . . . . . 28 | 4.2.16. Direction of communication . . . . . . . . . . . . . 28 | |||
4.2.17. Notification of ICMP soft error message arrival . . . 29 | 4.2.17. Notification of ICMP soft error message arrival . . . 29 | |||
4.2.18. Initiating side is not the first to write . . . . . . 29 | 4.2.18. Initiating side is not the first to write . . . . . . 29 | |||
4.3. Specifying Security Parameters and Callbacks . . . . . . 29 | 4.3. Specifying Security Parameters and Callbacks . . . . . . 29 | |||
4.3.1. Pre-Connection Parameters . . . . . . . . . . . . . . 30 | 4.3.1. Pre-Connection Parameters . . . . . . . . . . . . . . 30 | |||
4.3.2. Connection Establishment Callbacks . . . . . . . . . 31 | 4.3.2. Connection Establishment Callbacks . . . . . . . . . 31 | |||
5. Establishing Connections . . . . . . . . . . . . . . . . . . 31 | 5. Establishing Connections . . . . . . . . . . . . . . . . . . 31 | |||
5.1. Active Open: Initiate . . . . . . . . . . . . . . . . . . 31 | 5.1. Active Open: Initiate . . . . . . . . . . . . . . . . . . 31 | |||
5.2. Passive Open: Listen . . . . . . . . . . . . . . . . . . 33 | 5.2. Passive Open: Listen . . . . . . . . . . . . . . . . . . 33 | |||
skipping to change at page 3, line 35 ¶ | skipping to change at page 3, line 35 ¶ | |||
5.4. Connection Groups . . . . . . . . . . . . . . . . . . . . 36 | 5.4. Connection Groups . . . . . . . . . . . . . . . . . . . . 36 | |||
6. Managing Connections . . . . . . . . . . . . . . . . . . . . 37 | 6. Managing Connections . . . . . . . . . . . . . . . . . . . . 37 | |||
6.1. Generic Connection Properties . . . . . . . . . . . . . . 39 | 6.1. Generic Connection Properties . . . . . . . . . . . . . . 39 | |||
6.1.1. Required Minimum Corruption Protection Coverage for | 6.1.1. Required Minimum Corruption Protection Coverage for | |||
Receiving . . . . . . . . . . . . . . . . . . . . . . 39 | Receiving . . . . . . . . . . . . . . . . . . . . . . 39 | |||
6.1.2. Connection Priority . . . . . . . . . . . . . . . . . 39 | 6.1.2. Connection Priority . . . . . . . . . . . . . . . . . 39 | |||
6.1.3. Timeout for Aborting Connection . . . . . . . . . . . 40 | 6.1.3. Timeout for Aborting Connection . . . . . . . . . . . 40 | |||
6.1.4. Timeout for keep alive packets . . . . . . . . . . . 40 | 6.1.4. Timeout for keep alive packets . . . . . . . . . . . 40 | |||
6.1.5. Connection Group Transmission Scheduler . . . . . . . 40 | 6.1.5. Connection Group Transmission Scheduler . . . . . . . 40 | |||
6.1.6. Capacity Profile . . . . . . . . . . . . . . . . . . 41 | 6.1.6. Capacity Profile . . . . . . . . . . . . . . . . . . 41 | |||
6.1.7. Policy for using Multi-Path Transports . . . . . . . 42 | 6.1.7. Policy for using Multipath Transports . . . . . . . . 42 | |||
6.1.8. Bounds on Send or Receive Rate . . . . . . . . . . . 43 | 6.1.8. Bounds on Send or Receive Rate . . . . . . . . . . . 43 | |||
6.1.9. Group Connection Limit . . . . . . . . . . . . . . . 43 | 6.1.9. Group Connection Limit . . . . . . . . . . . . . . . 43 | |||
6.1.10. Isolate Session . . . . . . . . . . . . . . . . . . . 44 | 6.1.10. Isolate Session . . . . . . . . . . . . . . . . . . . 44 | |||
6.1.11. Read-only Connection Properties . . . . . . . . . . . 44 | 6.1.11. Read-only Connection Properties . . . . . . . . . . . 44 | |||
6.2. TCP-specific Properties: User Timeout Option (UTO) . . . 45 | 6.2. TCP-specific Properties: User Timeout Option (UTO) . . . 45 | |||
6.2.1. Advertised User Timeout . . . . . . . . . . . . . . . 46 | 6.2.1. Advertised User Timeout . . . . . . . . . . . . . . . 46 | |||
6.2.2. User Timeout Enabled . . . . . . . . . . . . . . . . 46 | 6.2.2. User Timeout Enabled . . . . . . . . . . . . . . . . 46 | |||
6.2.3. Timeout Changeable . . . . . . . . . . . . . . . . . 46 | 6.2.3. Timeout Changeable . . . . . . . . . . . . . . . . . 46 | |||
6.3. Connection Lifecycle Events . . . . . . . . . . . . . . . 46 | 6.3. Connection Lifecycle Events . . . . . . . . . . . . . . . 46 | |||
6.3.1. Soft Errors . . . . . . . . . . . . . . . . . . . . . 47 | 6.3.1. Soft Errors . . . . . . . . . . . . . . . . . . . . . 47 | |||
skipping to change at page 4, line 21 ¶ | skipping to change at page 4, line 19 ¶ | |||
7.2.6. Priority in TAPS . . . . . . . . . . . . . . . . . . 59 | 7.2.6. Priority in TAPS . . . . . . . . . . . . . . . . . . 59 | |||
7.3. Receiving Data . . . . . . . . . . . . . . . . . . . . . 60 | 7.3. Receiving Data . . . . . . . . . . . . . . . . . . . . . 60 | |||
7.3.1. Enqueuing Receives . . . . . . . . . . . . . . . . . 60 | 7.3.1. Enqueuing Receives . . . . . . . . . . . . . . . . . 60 | |||
7.3.2. Receive Events . . . . . . . . . . . . . . . . . . . 61 | 7.3.2. Receive Events . . . . . . . . . . . . . . . . . . . 61 | |||
7.3.3. Receive Message Properties . . . . . . . . . . . . . 63 | 7.3.3. Receive Message Properties . . . . . . . . . . . . . 63 | |||
8. Connection Termination . . . . . . . . . . . . . . . . . . . 64 | 8. Connection Termination . . . . . . . . . . . . . . . . . . . 64 | |||
9. Connection State and Ordering of Operations and Events . . . 65 | 9. Connection State and Ordering of Operations and Events . . . 65 | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 66 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 66 | |||
11. Privacy and Security Considerations . . . . . . . . . . . . . 66 | 11. Privacy and Security Considerations . . . . . . . . . . . . . 66 | |||
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 68 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 68 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 69 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 68 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 69 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 69 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 70 | 13.2. Informative References . . . . . . . . . . . . . . . . . 69 | |||
Appendix A. Implementation Mapping . . . . . . . . . . . . . . . 72 | Appendix A. Implementation Mapping . . . . . . . . . . . . . . . 73 | |||
A.1. Types . . . . . . . . . . . . . . . . . . . . . . . . . . 73 | A.1. Types . . . . . . . . . . . . . . . . . . . . . . . . . . 73 | |||
A.2. Events and Errors . . . . . . . . . . . . . . . . . . . . 73 | A.2. Events and Errors . . . . . . . . . . . . . . . . . . . . 73 | |||
A.3. Time Duration . . . . . . . . . . . . . . . . . . . . . . 73 | A.3. Time Duration . . . . . . . . . . . . . . . . . . . . . . 73 | |||
Appendix B. Convenience Functions . . . . . . . . . . . . . . . 73 | Appendix B. Convenience Functions . . . . . . . . . . . . . . . 74 | |||
B.1. Adding Preference Properties . . . . . . . . . . . . . . 74 | B.1. Adding Preference Properties . . . . . . . . . . . . . . 74 | |||
B.2. Transport Property Profiles . . . . . . . . . . . . . . . 74 | B.2. Transport Property Profiles . . . . . . . . . . . . . . . 74 | |||
B.2.1. reliable-inorder-stream . . . . . . . . . . . . . . . 74 | B.2.1. reliable-inorder-stream . . . . . . . . . . . . . . . 74 | |||
B.2.2. reliable-message . . . . . . . . . . . . . . . . . . 74 | B.2.2. reliable-message . . . . . . . . . . . . . . . . . . 75 | |||
B.2.3. unreliable-datagram . . . . . . . . . . . . . . . . . 75 | B.2.3. unreliable-datagram . . . . . . . . . . . . . . . . . 75 | |||
Appendix C. Relationship to the Minimal Set of Transport | Appendix C. Relationship to the Minimal Set of Transport Services | |||
Services for End Systems . . . . . . . . . . . . . . 75 | for End Systems . . . . . . . . . . . . . . . . . . . . . 76 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 79 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 79 | |||
1. Introduction | 1. Introduction | |||
This document specifies a modern abstract application programming | This document specifies a modern abstract application programming | |||
interface (API) atop the high-level architecture for transport | interface (API) atop the high-level architecture for transport | |||
services defined in [I-D.ietf-taps-arch]. It supports the | services defined in [I-D.ietf-taps-arch]. It supports the | |||
asynchronous, atomic transmission of messages over transport | asynchronous, atomic transmission of messages over transport | |||
protocols and network paths dynamically selected at runtime. It is | protocols and network paths dynamically selected at runtime. It is | |||
intended to replace the traditional BSD sockets API as the common | intended to replace the traditional BSD sockets API as the common | |||
skipping to change at page 5, line 31 ¶ | skipping to change at page 5, line 30 ¶ | |||
1.1. Terminology and Notation | 1.1. Terminology and Notation | |||
This API is described in terms of Objects with which an application | This API is described in terms of Objects with which an application | |||
can interact; Actions the application can perform on these Objects; | can interact; Actions the application can perform on these Objects; | |||
Events, which an Object can send to an application asynchronously; | Events, which an Object can send to an application asynchronously; | |||
and Parameters associated with these Actions and Events. | and Parameters associated with these Actions and Events. | |||
The following notations, which can be combined, are used in this | The following notations, which can be combined, are used in this | |||
document: | document: | |||
o An Action creates an Object: | * An Action creates an Object: | |||
Object := Action() | Object := Action() | |||
o An Action creates an array of Objects: | * An Action creates an array of Objects: | |||
[]Object := Action() | []Object := Action() | |||
o An Action is performed on an Object: | * An Action is performed on an Object: | |||
Object.Action() | Object.Action() | |||
o An Object sends an Event: | * An Object sends an Event: | |||
Object -> Event<> | Object -> Event<> | |||
o An Action takes a set of Parameters; an Event contains a set of | * An Action takes a set of Parameters; an Event contains a set of | |||
Parameters. Action and Event parameters whose names are suffixed | Parameters. Action and Event parameters whose names are suffixed | |||
with a question mark are optional. | with a question mark are optional. | |||
Action(param0, param1?, ...) / Event<param0, param1, ...> | Action(param0, param1?, ...) / Event<param0, param1, ...> | |||
Actions associated with no Object are Actions on the abstract | Actions associated with no Object are Actions on the abstract | |||
interface itself; they are equivalent to Actions on a per-application | interface itself; they are equivalent to Actions on a per-application | |||
global context. | global context. | |||
We also make use of the following basic types: | We also make use of the following basic types: | |||
o Boolean: Instances take the value "true" or "false". | * Boolean: Instances take the value "true" or "false". | |||
o Integer: Instances take positive or negative numeric integer | * Integer: Instances take positive or negative numeric integer | |||
values, or sometimes special non-numeric (symbolic) values. | values, or sometimes special non-numeric (symbolic) values. | |||
o Numeric: Instances take positive or negative numeric values, or | * Numeric: Instances take positive or negative numeric values, or | |||
sometimes special non-numeric (symbolic) values. | sometimes special non-numeric (symbolic) values. | |||
o Enumeration: A family of types in which each instance takes one of | * Enumeration: A family of types in which each instance takes one of | |||
a fixed, predefined set of values specific to a given enumerated | a fixed, predefined set of values specific to a given enumerated | |||
type. | type. | |||
o Tuple: An ordered grouping of multiple value types, represented as | * Tuple: An ordered grouping of multiple value types, represented as | |||
a comma-separated list in parentheses, e.g., "(Enumeration, | a comma-separated list in parentheses, e.g., "(Enumeration, | |||
Preference)". Instances take a sequence of values each valid for | Preference)". Instances take a sequence of values each valid for | |||
the corresponding value type. The composition of types and their | the corresponding value type. The composition of types and their | |||
order depends on the property and is fixed for the property. | order depends on the property and is fixed for the property. | |||
o Array: Denoted []Type, an instance takes a value for each of zero | * Array: Denoted []Type, an instance takes a value for each of zero | |||
or more elements in a sequence of the given Type. An array may be | or more elements in a sequence of the given Type. An array may be | |||
of fixed or variable length. | of fixed or variable length. | |||
o Collection: An unordered grouping of one or more values of the | * Collection: An unordered grouping of one or more values of the | |||
same type. | same type. | |||
For guidance on how these abstract concepts may be implemented in | For guidance on how these abstract concepts may be implemented in | |||
languages in accordance with native design patterns and language and | languages in accordance with native design patterns and language and | |||
platform features, see Appendix A. | platform features, see Appendix A. | |||
1.2. Specification of Requirements | 1.2. Specification of Requirements | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
skipping to change at page 7, line 7 ¶ | skipping to change at page 7, line 12 ¶ | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Overview of Interface Design | 2. Overview of Interface Design | |||
The design of the interface specified in this document is based on a | The design of the interface specified in this document is based on a | |||
set of principles, themselves an elaboration on the architectural | set of principles, themselves an elaboration on the architectural | |||
design principles defined in [I-D.ietf-taps-arch]. The interface | design principles defined in [I-D.ietf-taps-arch]. The interface | |||
defined in this document provides: | defined in this document provides: | |||
o Access to a variety of transport protocols, independent of the the | * Access to a variety of transport protocols, independent of the the | |||
Protocol Stacks that will be used at runtime, such that all common | Protocol Stacks that will be used at runtime, such that all common | |||
features of these protocol stacks are made available to the | features of these protocol stacks are made available to the | |||
application in a transport-independent way to the degree possible, | application in a transport-independent way to the degree possible, | |||
enabling applications written to a single API to make use of | enabling applications written to a single API to make use of | |||
transport protocols in terms of the features they provide; | transport protocols in terms of the features they provide; | |||
o Message-orientation, as opposed to stream-orientation, using | * Message-orientation, as opposed to stream-orientation, using | |||
application-assisted framing and deframing where the underlying | application-assisted framing and deframing where the underlying | |||
transport does not provide these; | transport does not provide these; | |||
o Asynchronous Connection establishment, transmission, and | * Asynchronous Connection establishment, transmission, and | |||
reception, allowing concurrent operations during establishment and | reception, allowing concurrent operations during establishment and | |||
supporting event-driven application interactions with the | supporting event-driven application interactions with the | |||
transport layer, in line with developments in modern platforms and | transport layer, in line with developments in modern platforms and | |||
programming languages; | programming languages; | |||
o Explicit support for transport-specific features to be applied | * Explicit support for transport-specific features to be applied | |||
should that particular transport be part of a chosen Protocol | should that particular transport be part of a chosen Protocol | |||
Stack. | Stack. | |||
o Explicit support for security properties as first-order transport | * Explicit support for security properties as first-order transport | |||
features, and for configuration of cryptographic identities and | features, and for configuration of cryptographic identities and | |||
transport security parameters persistent across multiple | transport security parameters persistent across multiple | |||
Connections; and | Connections; and | |||
o Explicit support for multistreaming and multipath transport | * Explicit support for multistreaming and multipath transport | |||
protocols, and the grouping of related Connections into Connection | protocols, and the grouping of related Connections into Connection | |||
Groups through cloning of Connections, to allow applications to | Groups through cloning of Connections, to allow applications to | |||
take full advantage of new transport protocols supporting these | take full advantage of new transport protocols supporting these | |||
features. | features. | |||
3. API Summary | 3. API Summary | |||
The Transport Services API is the basic common abstract application | The Transport Services API is the basic common abstract application | |||
programming interface to the Transport Services Architecture defined | programming interface to the Transport Services Architecture defined | |||
in the TAPS Architecture [I-D.ietf-taps-arch]. | in the TAPS Architecture [I-D.ietf-taps-arch]. | |||
skipping to change at page 8, line 8 ¶ | skipping to change at page 8, line 12 ¶ | |||
Preconnections and Connections. A Preconnection represents a set of | Preconnections and Connections. A Preconnection represents a set of | |||
properties and constraints on the selection and configuration of | properties and constraints on the selection and configuration of | |||
paths and protocols to establish a Connection with a Remote Endpoint. | paths and protocols to establish a Connection with a Remote Endpoint. | |||
A Connection represents a transport Protocol Stack on which data can | A Connection represents a transport Protocol Stack on which data can | |||
be sent to and/or received from a Remote Endpoint (i.e., depending on | be sent to and/or received from a Remote Endpoint (i.e., depending on | |||
the kind of transport, connections can be bi-directional or | the kind of transport, connections can be bi-directional or | |||
unidirectional). Connections can be created from Preconnections in | unidirectional). Connections can be created from Preconnections in | |||
three ways: by initiating the Preconnection (i.e., actively opening, | three ways: by initiating the Preconnection (i.e., actively opening, | |||
as in a client), through listening on the Preconnection (i.e., | as in a client), through listening on the Preconnection (i.e., | |||
passively opening, as in a server), or rendezvousing on the | passively opening, as in a server), or rendezvousing on the | |||
Preconnection (i.e. peer to peer establishment). | Preconnection (i.e. peer to peer establishment). | |||
Once a Connection is established, data can be sent and received on it | Once a Connection is established, data can be sent and received on it | |||
in the form of Messages. The interface supports the preservation of | in the form of Messages. The interface supports the preservation of | |||
message boundaries both via explicit Protocol Stack support, and via | message boundaries both via explicit Protocol Stack support, and via | |||
application support through a Message Framer which finds message | application support through a Message Framer which finds message | |||
boundaries in a stream. Messages are received asynchronously through | boundaries in a stream. Messages are received asynchronously through | |||
event handlers registered by the application. Errors and other | event handlers registered by the application. Errors and other | |||
notifications also happen asynchronously on the Connection. It is | notifications also happen asynchronously on the Connection. It is | |||
not necessary for an application to handle all Events; some Events | not necessary for an application to handle all Events; some Events | |||
may have implementation-specific default handlers. The application | may have implementation-specific default handlers. The application | |||
skipping to change at page 8, line 32 ¶ | skipping to change at page 8, line 36 ¶ | |||
describe the details of application interaction with Objects through | describe the details of application interaction with Objects through | |||
Actions and Events in each phase of a Connection, following the | Actions and Events in each phase of a Connection, following the | |||
phases (Pre-Establishment, Establishment, Data Transfer, and | phases (Pre-Establishment, Establishment, Data Transfer, and | |||
Termination) described in Section 4.1 of [I-D.ietf-taps-arch]. | Termination) described in Section 4.1 of [I-D.ietf-taps-arch]. | |||
3.1. Usage Examples | 3.1. Usage Examples | |||
The following usage examples illustrate how an application might use | The following usage examples illustrate how an application might use | |||
a Transport Services Interface to: | a Transport Services Interface to: | |||
o Act as a server, by listening for incoming connections, receiving | * Act as a server, by listening for incoming connections, receiving | |||
requests, and sending responses, see Section 3.1.1. | requests, and sending responses, see Section 3.1.1. | |||
o Act as a client, by connecting to a Remote Endpoint using | * Act as a client, by connecting to a Remote Endpoint using | |||
Initiate, sending requests, and receiving responses, see | Initiate, sending requests, and receiving responses, see | |||
Section 3.1.2. | Section 3.1.2. | |||
o Act as a peer, by connecting to a Remote Endpoint using Rendezvous | * Act as a peer, by connecting to a Remote Endpoint using Rendezvous | |||
while simultaneously waiting for incoming Connections, sending | while simultaneously waiting for incoming Connections, sending | |||
Messages, and receiving Messages, see Section 3.1.3. | Messages, and receiving Messages, see Section 3.1.3. | |||
The examples in this section presume that a transport protocol is | The examples in this section presume that a transport protocol is | |||
available between the Local and Remote Endpoints that provides | available between the Local and Remote Endpoints that provides | |||
Reliable Data Transfer, Preservation of data ordering, and | Reliable Data Transfer, Preservation of data ordering, and | |||
Preservation of Message Boundaries. In this case, the application | Preservation of Message Boundaries. In this case, the application | |||
can choose to receive only complete messages. | can choose to receive only complete messages. | |||
If none of the available transport protocols provides Preservation of | If none of the available transport protocols provides Preservation of | |||
skipping to change at page 12, line 12 ¶ | skipping to change at page 12, line 12 ¶ | |||
// Close the Connection in a Receive event handler | // Close the Connection in a Receive event handler | |||
Connection.Close() | Connection.Close() | |||
3.2. Transport Properties | 3.2. Transport Properties | |||
Each application using the Transport Services Interface declares its | Each application using the Transport Services Interface declares its | |||
preferences for how the transport service should operate using | preferences for how the transport service should operate using | |||
properties at each stage of the lifetime of a connection using | properties at each stage of the lifetime of a connection using | |||
Transport Properties, as defined in [I-D.ietf-taps-arch]. | Transport Properties, as defined in [I-D.ietf-taps-arch]. | |||
Transport Properties are divided into Selection, Connection, and | Transport Properties are divided into Selection, Connection, and | |||
Message Properties. Selection Properties (see Section 4.2) can only | Message Properties. Selection Properties (see The behavior of the | |||
be set during pre-establishment. They are only used to specify which | selected protocol stack(s) when sending Messages is controlled by | |||
paths and protocol stacks can be used and are preferred by the | Message Properties (see Section 4.2) can only be set during pre- | |||
application. Although Connection Properties (see Section 6.1) can be | establishment. They are only used to specify which paths and | |||
set during pre-establishment, they may be changed later. They are | protocol stacks can be used and are preferred by the application. | |||
used to inform decisions made during establishment and to fine-tune | Although Connection Properties (see Section 6.1) can be set during | |||
the established connection. | pre-establishment, they may be changed later. They are used to | |||
The behavior of the selected protocol stack(s) when sending Messages | inform decisions made during establishment and to fine-tune the | |||
is controlled by Message Properties (see Section 7.1.3). | established connection.Section 7.1.3). | |||
All Transport Properties, regardless of the phase in which they are | All Transport Properties, regardless of the phase in which they are | |||
used, are organized within a single namespace. This enables setting | used, are organized within a single namespace. This enables setting | |||
them as defaults at earlier stages and querying them in later stages: | them as defaults at earlier stages and querying them in later stages: | |||
o Connection Properties can be set on Preconnections and Connections | * Connection Properties can be set on Preconnections and Connections | |||
o Message Properties can be set on Preconnections, Connections and | * Message Properties can be set on Preconnections, Connections and | |||
Messages | Messages | |||
o The effect of Selection Properties can be queried on Connections | * The effect of Selection Properties can be queried on Connections | |||
and Messages | and Messages | |||
Note that configuring Connection Properties and Message Properties on | Note that configuring Connection Properties and Message Properties on | |||
Preconnections is preferred over setting them later. Early | Preconnections is preferred over setting them later. Early | |||
specification of Connection Properties allows their use as additional | specification of Connection Properties allows their use as additional | |||
input to the selection process. Protocol Specific Properties, which | input to the selection process. Protocol Specific Properties, which | |||
enable configuration of specialized features of a specific protocol, | enable configuration of specialized features of a specific protocol, | |||
see Section 3.2 of [I-D.ietf-taps-arch], are not used as an input to | see Section 3.2 of [I-D.ietf-taps-arch], are not used as an input to | |||
the selection process but only support configuration if the | the selection process but only support configuration if the | |||
respective protocol has been selected. | respective protocol has been selected. | |||
3.2.1. Transport Property Names | 3.2.1. Transport Property Names | |||
Transport Properties are referred to by property names. For the | Transport Properties are referred to by property names. For the | |||
purposes of this document, these names are alphanumeric strings in | purposes of this document, these names are alphanumeric strings in | |||
which words may be separated by hyphens. These names serve two | which words may be separated by hyphens. These names serve two | |||
purposes: | purposes: | |||
o Allowing different components of a TAPS implementation to pass | * Allowing different components of a TAPS implementation to pass | |||
Transport Properties, e.g., between a language frontend and a | Transport Properties, e.g., between a language frontend and a | |||
policy manager, or as a representation of properties retrieved | policy manager, or as a representation of properties retrieved | |||
from a file or other storage. | from a file or other storage. | |||
o Making the code of different TAPS implementations look similar. | * Making the code of different TAPS implementations look similar. | |||
While individual programming languages may preclude strict | While individual programming languages may preclude strict | |||
adherence to the aforementioned naming convention (for instance, | adherence to the aforementioned naming convention (for instance, | |||
by prohibiting the use of hyphens in symbols), users interacting | by prohibiting the use of hyphens in symbols), users interacting | |||
with multiple implementations will still benefit from the | with multiple implementations will still benefit from the | |||
consistency resulting from the use of visually similar symbols. | consistency resulting from the use of visually similar symbols. | |||
Transport Property Names are hierarchically organized in the form | Transport Property Names are hierarchically organized in the form | |||
[<Namespace>.]<PropertyName>. | [<Namespace>.]<PropertyName>. | |||
o The Namespace component MUST be empty for well-known, generic | * The Namespace component MUST be empty for well-known, generic | |||
properties, i.e., for properties that are not specific to a | properties, i.e., for properties that are not specific to a | |||
protocol and are defined in an RFC. | protocol and are defined in an RFC. | |||
o Protocol Specific Properties MUST use the protocol acronym as the | * Protocol Specific Properties MUST use the protocol acronym as the | |||
Namespace, e.g., "tcp" for TCP specific Transport Properties. For | Namespace, e.g., "tcp" for TCP specific Transport Properties. For | |||
IETF protocols, property names under these namespaces SHOULD be | IETF protocols, property names under these namespaces SHOULD be | |||
defined in an RFC. | defined in an RFC. | |||
o Vendor or implementation specific properties MUST use a string | * Vendor or implementation specific properties MUST use a string | |||
identifying the vendor or implementation as the Namespace. | identifying the vendor or implementation as the Namespace. | |||
Namespaces for each of the keywords provided in the IANA protocol | Namespaces for each of the keywords provided in the IANA protocol | |||
numbers registry (see https://www.iana.org/assignments/protocol- | numbers registry (see https://www.iana.org/assignments/protocol- | |||
numbers/protocol-numbers.xhtml), reformatted where necessary to | numbers/protocol-numbers.xhtml), reformatted where necessary to | |||
conform to an implementation's naming conventions, are reserved for | conform to an implementation's naming conventions, are reserved for | |||
Protocol Specific Properties and MUST NOT be used for vendor or | Protocol Specific Properties and MUST NOT be used for vendor or | |||
implementation-specific properties. | implementation-specific properties. | |||
3.2.2. Transport Property Types | 3.2.2. Transport Property Types | |||
Transport Properties each have a type, which can be: | Transport Properties each have a type, which can be: | |||
o One of the basic types described in Section 1.1; or | * One of the basic types described in Section 1.1; or | |||
o Preference, which is an Enumeration with five possible values: | * Preference, which is an Enumeration with five possible values: | |||
Prohibit, Avoid, Ignore, Prefer, or Require. Each of these | Prohibit, Avoid, Ignore, Prefer, or Require. Each of these | |||
denotes a level of preference of a given property during protocol | denotes a level of preference of a given property during protocol | |||
selection. (See Section 4.2.) The Preference type is used only | selection. (See Section 4.2.) The Preference type is used only | |||
on Preconnections, and only for Selection Properties. | on Preconnections, and only for Selection Properties. | |||
3.3. Scope of the Interface Definition | 3.3. Scope of the Interface Definition | |||
This document defines a language- and platform-independent interface | This document defines a language- and platform-independent interface | |||
to a Transport Services system. Given the wide variety of languages | to a Transport Services system. Given the wide variety of languages | |||
and language conventions used to write applications that use the | and language conventions used to write applications that use the | |||
skipping to change at page 14, line 22 ¶ | skipping to change at page 14, line 22 ¶ | |||
There is no interoperability benefit in tightly defining how the | There is no interoperability benefit in tightly defining how the | |||
interface is presented to application programmers across diverse | interface is presented to application programmers across diverse | |||
platforms. However, maintaining the "shape" of the abstract | platforms. However, maintaining the "shape" of the abstract | |||
interface across different platforms reduces the effort for | interface across different platforms reduces the effort for | |||
programmers who learn the transport services interface to then apply | programmers who learn the transport services interface to then apply | |||
their knowledge to another platform. | their knowledge to another platform. | |||
We therefore make the following recommendations: | We therefore make the following recommendations: | |||
o Actions, Events, and Errors in implementations of this interface | * Actions, Events, and Errors in implementations of this interface | |||
SHOULD use the names given for them in the document, subject to | SHOULD use the names given for them in the document, subject to | |||
capitalization, punctuation, and other typographic conventions in | capitalization, punctuation, and other typographic conventions in | |||
the language of the implementation, unless the implementation | the language of the implementation, unless the implementation | |||
itself uses different names for substantially equivalent objects | itself uses different names for substantially equivalent objects | |||
for networking by convention. | for networking by convention. | |||
o Implementations of this interface SHOULD implement each Selection | * Implementations of this interface SHOULD implement each Selection | |||
Property, Connection Property, and Message Context Property | Property, Connection Property, and Message Context Property | |||
specified in this document. Each interface SHOULD be implemented | specified in this document. Each interface SHOULD be implemented | |||
even when in a specific implementation/platform it will always | even when in a specific implementation/platform it will always | |||
result in no operation, e.g. there is no action when the API | result in no operation, e.g. there is no action when the API | |||
specifies a Property that is not available in a transport protocol | specifies a Property that is not available in a transport protocol | |||
implemented on a specific platform. For example, if TCP is the | implemented on a specific platform. For example, if TCP is the | |||
only underlying transport protocol, the Message Property | only underlying transport protocol, the Message Property | |||
"msgOrdered" can be implemented (trivially, as a no-op) as | "msgOrdered" can be implemented (trivially, as a no-op) as | |||
disabling the requirement for ordering will not have any effect on | disabling the requirement for ordering will not have any effect on | |||
delivery order for Connections over TCP. Similarly, the "msg- | delivery order for Connections over TCP. Similarly, the "msg- | |||
lifetime" Message Property can be implemented but ignored, as the | lifetime" Message Property can be implemented but ignored, as the | |||
description of this Property states that "it is not guaranteed | description of this Property states that "it is not guaranteed | |||
that a Message will not be sent when its Lifetime has expired". | that a Message will not be sent when its Lifetime has expired". | |||
o Implementations may use other representations for Transport | * Implementations may use other representations for Transport | |||
Property Names, e.g., by providing constants, but should provide a | Property Names, e.g., by providing constants, but should provide a | |||
straight-forward mapping between their representation and the | straight-forward mapping between their representation and the | |||
property names specified here. | property names specified here. | |||
4. Pre-Establishment Phase | 4. Pre-Establishment Phase | |||
The Pre-Establishment phase allows applications to specify properties | The Pre-Establishment phase allows applications to specify properties | |||
for the Connections that they are about to make, or to query the API | for the Connections that they are about to make, or to query the API | |||
about potential Connections they could make. | about potential Connections they could make. | |||
skipping to change at page 15, line 22 ¶ | skipping to change at page 15, line 22 ¶ | |||
state that describes the properties of a Connection that might exist | state that describes the properties of a Connection that might exist | |||
in the future. This state comprises Local Endpoint and Remote | in the future. This state comprises Local Endpoint and Remote | |||
Endpoint Objects that denote the endpoints of the potential | Endpoint Objects that denote the endpoints of the potential | |||
Connection (see Section 4.1), the Selection Properties (see | Connection (see Section 4.1), the Selection Properties (see | |||
Section 4.2), any preconfigured Connection Properties (Section 6.1), | Section 4.2), any preconfigured Connection Properties (Section 6.1), | |||
and the security parameters (see Section 4.3): | and the security parameters (see Section 4.3): | |||
Preconnection := NewPreconnection([]LocalEndpoint, | Preconnection := NewPreconnection([]LocalEndpoint, | |||
[]RemoteEndpoint, | []RemoteEndpoint, | |||
TransportProperties, | TransportProperties, | |||
SecurityParameters) | SecurityParameters?) | |||
At least one Local Endpoint MUST be specified if the Preconnection is | At least one Local Endpoint MUST be specified if the Preconnection is | |||
used to Listen() for incoming Connections, but the list of Local | used to Listen() for incoming Connections, but the list of Local | |||
Endpoints MAY be empty if the Preconnection is used to Initiate() | Endpoints MAY be empty if the Preconnection is used to Initiate() | |||
connections. If no Local Endpoint is specified, the Transport | connections. If no Local Endpoint is specified, the Transport | |||
Services system will assign an ephemeral local port to the Connection | Services system will assign an ephemeral local port to the Connection | |||
on the appropriate interface(s). At least one Remote Endpoint MUST | on the appropriate interface(s). At least one Remote Endpoint MUST | |||
be specified if the Preconnection is used to Initiate() Connections, | be specified if the Preconnection is used to Initiate() Connections, | |||
but the list of Remote Endpoints MAY be empty if the Preconnection is | but the list of Remote Endpoints MAY be empty if the Preconnection is | |||
used to Listen() for incoming Connections. At least one Local | used to Listen() for incoming Connections. At least one Local | |||
skipping to change at page 16, line 31 ¶ | skipping to change at page 16, line 31 ¶ | |||
LocalSpecifier := NewLocalEndpoint() | LocalSpecifier := NewLocalEndpoint() | |||
A single Endpoint Object represents the identity of a network host. | A single Endpoint Object represents the identity of a network host. | |||
That endpoint can be more or less specific depending on which | That endpoint can be more or less specific depending on which | |||
identifiers are set. For example, an Endpoint that only specifies a | identifiers are set. For example, an Endpoint that only specifies a | |||
hostname may in fact end up corresponding to several different IP | hostname may in fact end up corresponding to several different IP | |||
addresses on different hosts. | addresses on different hosts. | |||
An Endpoint Object can be configured with the following identifiers: | An Endpoint Object can be configured with the following identifiers: | |||
o Hostname (string) | * Hostname (string) | |||
RemoteSpecifier.WithHostname("example.com") | RemoteSpecifier.WithHostname("example.com") | |||
o Port (a 16-bit integer) or a Service (string) that maps to a port | * Port (a 16-bit integer) or a Service (string) that maps to a port | |||
RemoteSpecifier.WithPort(443) | RemoteSpecifier.WithPort(443) | |||
RemoteSpecifier.WithService("https") | RemoteSpecifier.WithService("https") | |||
o IP address (IPv4 or IPv6 address) | * IP address (IPv4 or IPv6 address) | |||
RemoteSpecifier.WithIPv4Address(192.0.2.21) | RemoteSpecifier.WithIPv4Address(192.0.2.21) | |||
RemoteSpecifier.WithIPv6Address(2001:db8:4920:e29d:a420:7461:7073:0a) | RemoteSpecifier.WithIPv6Address(2001:db8:4920:e29d:a420:7461:7073:0a) | |||
o Interface (string name) | * Interface (string name) | |||
LocalSpecifier.WithInterface("en0") | LocalSpecifier.WithInterface("en0") | |||
An Endpoint cannot have multiple identifiers of a same type set. | An Endpoint cannot have multiple identifiers of a same type set. | |||
That is, an endpoint cannot have two IP addresses specified. Two | That is, an endpoint cannot have two IP addresses specified. Two | |||
separate IP addresses are represented as two Endpoint Objects. If a | separate IP addresses are represented as two Endpoint Objects. If a | |||
Preconnection specifies a Remote Endpoint with a specific IP address | Preconnection specifies a Remote Endpoint with a specific IP address | |||
set, it will only establish Connections to that IP address. If, on | set, it will only establish Connections to that IP address. If, on | |||
the other hand, the Remote Endpoint specifies a hostname but no | the other hand, the Remote Endpoint specifies a hostname but no | |||
addresses, the Connection can perform name resolution and attempt | addresses, the Connection can perform name resolution and attempt | |||
using any address derived from the original hostname of the Remote | using any address derived from the original hostname of the Remote | |||
skipping to change at page 20, line 5 ¶ | skipping to change at page 20, line 5 ¶ | |||
Since there could be paths over which some transport protocols are | Since there could be paths over which some transport protocols are | |||
unable to operate, or remote endpoints that support only specific | unable to operate, or remote endpoints that support only specific | |||
network addresses or transports, transport protocol selection is | network addresses or transports, transport protocol selection is | |||
necessarily tied to path selection. This may involve choosing | necessarily tied to path selection. This may involve choosing | |||
between multiple local interfaces that are connected to different | between multiple local interfaces that are connected to different | |||
access networks. | access networks. | |||
Most Selection Properties are represented as Preferences, which can | Most Selection Properties are represented as Preferences, which can | |||
take one of five values: | take one of five values: | |||
+------------+------------------------------------------------------+ | +============+========================================+ | |||
| Preference | Effect | | | Preference | Effect | | |||
+------------+------------------------------------------------------+ | +============+========================================+ | |||
| Require | Select only protocols/paths providing the property, | | | Require | Select only protocols/paths providing | | |||
| | fail otherwise | | | | the property, fail otherwise | | |||
| | | | +------------+----------------------------------------+ | |||
| Prefer | Prefer protocols/paths providing the property, | | | Prefer | Prefer protocols/paths providing the | | |||
| | proceed otherwise | | | | property, proceed otherwise | | |||
| | | | +------------+----------------------------------------+ | |||
| Ignore | No preference | | | Ignore | No preference | | |||
| | | | +------------+----------------------------------------+ | |||
| Avoid | Prefer protocols/paths not providing the property, | | | Avoid | Prefer protocols/paths not providing | | |||
| | proceed otherwise | | | | the property, proceed otherwise | | |||
| | | | +------------+----------------------------------------+ | |||
| Prohibit | Select only protocols/paths not providing the | | | Prohibit | Select only protocols/paths not | | |||
| | property, fail otherwise | | | | providing the property, fail otherwise | | |||
+------------+------------------------------------------------------+ | +------------+----------------------------------------+ | |||
Table 1: Selection Property Preference Levels | Table 1: Selection Property Preference Levels | |||
The implementation MUST ensure an outcome that is consistent with all | The implementation MUST ensure an outcome that is consistent with all | |||
application requirements expressed using Require and Prohibit. While | application requirements expressed using Require and Prohibit. While | |||
preferences expressed using Prefer and Avoid influence protocol and | preferences expressed using Prefer and Avoid influence protocol and | |||
path selection as well, outcomes can vary given the same Selection | path selection as well, outcomes can vary given the same Selection | |||
Properties, because the available protocols and paths can differ | Properties, because the available protocols and paths can differ | |||
across systems and contexts. However, implementations are | across systems and contexts. However, implementations are | |||
RECOMMENDED to seek to provide a consistent outcome to an | RECOMMENDED to seek to provide a consistent outcome to an | |||
skipping to change at page 27, line 5 ¶ | skipping to change at page 27, line 5 ¶ | |||
prevent linking connections over time when a stable address, | prevent linking connections over time when a stable address, | |||
sometimes called "permanent" address, is not needed. There are some | sometimes called "permanent" address, is not needed. There are some | |||
caveats to note when specifying this property. First, if an | caveats to note when specifying this property. First, if an | |||
application Requires the use of temporary addresses, the resulting | application Requires the use of temporary addresses, the resulting | |||
Connection cannot use IPv4, because temporary addresses do not exist | Connection cannot use IPv4, because temporary addresses do not exist | |||
in IPv4. Second, temporary local addresses might involve trading off | in IPv4. Second, temporary local addresses might involve trading off | |||
privacy for performance. For instance, temporary addresses can | privacy for performance. For instance, temporary addresses can | |||
interfere with resumption mechanisms that some protocols rely on to | interfere with resumption mechanisms that some protocols rely on to | |||
reduce initial latency. | reduce initial latency. | |||
4.2.14. Multi-Paths Transport | 4.2.14. Multipath Transport | |||
Name: multipath | Name: multipath | |||
Type: Enumeration | Type: Enumeration | |||
Default: Disabled for connections created through initiate and | Default: Disabled for connections created through initiate and | |||
rendezvous, Passive for listeners | rendezvous, Passive for listeners | |||
This property specifies whether and how applications want to take | This property specifies whether and how applications want to take | |||
advantage of transferring data across multiple paths between the same | advantage of transferring data across multiple paths between the same | |||
skipping to change at page 30, line 19 ¶ | skipping to change at page 30, line 19 ¶ | |||
values whenever possible. However, as discussed in [RFC8922], many | values whenever possible. However, as discussed in [RFC8922], many | |||
transport security protocols require specific security parameters and | transport security protocols require specific security parameters and | |||
constraints from the client at the time of configuration and actively | constraints from the client at the time of configuration and actively | |||
during a handshake. These configuration parameters need to be | during a handshake. These configuration parameters need to be | |||
specified in the pre-connection phase and are created as follows: | specified in the pre-connection phase and are created as follows: | |||
SecurityParameters := NewSecurityParameters() | SecurityParameters := NewSecurityParameters() | |||
Security configuration parameters and sample usage follow: | Security configuration parameters and sample usage follow: | |||
o Local identity and private keys: Used to perform private key | * Local identity and private keys: Used to perform private key | |||
operations and prove one's identity to the Remote Endpoint. | operations and prove one's identity to the Remote Endpoint. | |||
(Note, if private keys are not available, e.g., since they are | (Note, if private keys are not available, e.g., since they are | |||
stored in hardware security modules (HSMs), handshake callbacks | stored in hardware security modules (HSMs), handshake callbacks | |||
must be used. See below for details.) | must be used. See below for details.) | |||
SecurityParameters.Set(identity, myIdentity) | SecurityParameters.Set(identity, myIdentity) | |||
SecurityParameters.Set(key-pair, myPrivateKey, myPublicKey) | SecurityParameters.Set(key-pair, myPrivateKey, myPublicKey) | |||
o Supported algorithms: Used to restrict what parameters are used by | * Supported algorithms: Used to restrict what parameters are used by | |||
underlying transport security protocols. When not specified, | underlying transport security protocols. When not specified, | |||
these algorithms should use known and safe defaults for the | these algorithms should use known and safe defaults for the | |||
system. Parameters include: ciphersuites, supported groups, and | system. Parameters include: ciphersuites, supported groups, and | |||
signature algorithms. These parameters take a collection of | signature algorithms. These parameters take a collection of | |||
supported algorithms as parameter. | supported algorithms as parameter. | |||
SecurityParameters.Set(supported-group, "secp256k1") | SecurityParameters.Set(supported-group, "secp256k1") | |||
SecurityParameters.Set(ciphersuite, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256") | SecurityParameters.Set(ciphersuite, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256") | |||
SecurityParameters.Set(signature-algorithm, "ed25519") | SecurityParameters.Set(signature-algorithm, "ed25519") | |||
o Pre-Shared Key import: Used to install pre-shared keying material | * Pre-Shared Key import: Used to install pre-shared keying material | |||
established out-of-band. Each pre-shared keying material is | established out-of-band. Each pre-shared keying material is | |||
associated with some identity that typically identifies its use or | associated with some identity that typically identifies its use or | |||
has some protocol-specific meaning to the Remote Endpoint. | has some protocol-specific meaning to the Remote Endpoint. | |||
SecurityParameters.Set(pre-shared-key, key, identity) | SecurityParameters.Set(pre-shared-key, key, identity) | |||
o Session cache management: Used to tune session cache capacity, | * Session cache management: Used to tune session cache capacity, | |||
lifetime, and other policies. | lifetime, and other policies. | |||
SecurityParameters.Set(max-cached-sessions, 16) | SecurityParameters.Set(max-cached-sessions, 16) | |||
SecurityParameters.Set(cached-session-lifetime-seconds, 3600) | SecurityParameters.Set(cached-session-lifetime-seconds, 3600) | |||
Representation of Security Parameters in implementations should | Representation of Security Parameters in implementations should | |||
parallel that chosen for Transport Property names as recommended in | parallel that chosen for Transport Property names as recommended in | |||
Section 3.3. | Section 3.3. | |||
4.3.2. Connection Establishment Callbacks | 4.3.2. Connection Establishment Callbacks | |||
Security decisions, especially pertaining to trust, are not static. | Security decisions, especially pertaining to trust, are not static. | |||
Once configured, parameters may also be supplied during connection | Once configured, parameters may also be supplied during connection | |||
establishment. These are best handled as client-provided callbacks. | establishment. These are best handled as client-provided callbacks. | |||
Security handshake callbacks that may be invoked during connection | Security handshake callbacks that may be invoked during connection | |||
establishment include: | establishment include: | |||
o Trust verification callback: Invoked when a Remote Endpoint's | * Trust verification callback: Invoked when a Remote Endpoint's | |||
trust must be validated before the handshake protocol can | trust must be validated before the handshake protocol can | |||
continue. | continue. | |||
TrustCallback := NewCallback({ | TrustCallback := NewCallback({ | |||
// Handle trust, return the result | // Handle trust, return the result | |||
}) | }) | |||
SecurityParameters.SetTrustVerificationCallback(trustCallback) | SecurityParameters.SetTrustVerificationCallback(trustCallback) | |||
o Identity challenge callback: Invoked when a private key operation | * Identity challenge callback: Invoked when a private key operation | |||
is required, e.g., when local authentication is requested by a | is required, e.g., when local authentication is requested by a | |||
remote. | remote. | |||
ChallengeCallback := NewCallback({ | ChallengeCallback := NewCallback({ | |||
// Handle challenge | // Handle challenge | |||
}) | }) | |||
SecurityParameters.SetIdentityChallengeCallback(challengeCallback) | SecurityParameters.SetIdentityChallengeCallback(challengeCallback) | |||
5. Establishing Connections | 5. Establishing Connections | |||
skipping to change at page 36, line 17 ¶ | skipping to change at page 36, line 17 ¶ | |||
Entangled Connections can be created using the Clone Action: | Entangled Connections can be created using the Clone Action: | |||
Connection := Connection.Clone() | Connection := Connection.Clone() | |||
Calling Clone on a Connection yields a group of Connections: the | Calling Clone on a Connection yields a group of Connections: the | |||
parent Connection on which Clone was called, and a resulting cloned | parent Connection on which Clone was called, and a resulting cloned | |||
Connection. The connections within a group are "entangled" with each | Connection. The connections within a group are "entangled" with each | |||
other, and become part of a Connection Group. Calling Clone on any | other, and become part of a Connection Group. Calling Clone on any | |||
of these Connections adds another Connection to the Connection Group, | of these Connections adds another Connection to the Connection Group, | |||
and so on. "Entangled" Connections share all Connection Properties | and so on. "Entangled" Connections share all Connection Properties | |||
except "Connection Priority" (see Section 6.1.2) . Like all other | except "Connection Priority" (see Section 6.1.2) . Like all other | |||
Properties, Connection Priority is copied to the new Connection when | Properties, Connection Priority is copied to the new Connection when | |||
calling Clone(), but it is not entangled: Changing Connection | calling Clone(), but it is not entangled: Changing Connection | |||
Priority on one Connection does not change it on the other | Priority on one Connection does not change it on the other | |||
Connections in the same Connection Group. | Connections in the same Connection Group. | |||
The stack of Message Framers associated with a Connection are also | The stack of Message Framers associated with a Connection are also | |||
copied to the cloned Connection when calling Clone. In other words, | copied to the cloned Connection when calling Clone. In other words, | |||
a cloned Connection has the same stack of Message Framers as the | a cloned Connection has the same stack of Message Framers as the | |||
Connection from which they are Cloned, but these Framers may | Connection from which they are Cloned, but these Framers may | |||
internally maintain per-Connection state. | internally maintain per-Connection state. | |||
skipping to change at page 38, line 22 ¶ | skipping to change at page 38, line 25 ¶ | |||
At any point, the application can query Connection Properties. | At any point, the application can query Connection Properties. | |||
ConnectionProperties := Connection.GetProperties() | ConnectionProperties := Connection.GetProperties() | |||
value := ConnectionProperties.Get(property) | value := ConnectionProperties.Get(property) | |||
if ConnectionProperties.Has(boolean_or_preference_property) then ... | if ConnectionProperties.Has(boolean_or_preference_property) then ... | |||
Depending on the status of the connection, the queried Connection | Depending on the status of the connection, the queried Connection | |||
Properties will include different information: | Properties will include different information: | |||
o The connection state, which can be one of the following: | * The connection state, which can be one of the following: | |||
Establishing, Established, Closing, or Closed. | Establishing, Established, Closing, or Closed. | |||
o Whether the connection can be used to send data. A connection can | * Whether the connection can be used to send data. A connection can | |||
not be used for sending if the connection was created with the | not be used for sending if the connection was created with the | |||
Selection Property "Direction of Communication" set to | Selection Property "Direction of Communication" set to | |||
"unidirectional receive" or if a Message marked as "Final" was | "unidirectional receive" or if a Message marked as "Final" was | |||
sent over this connection. See Section 7.1.3.5. | sent over this connection. See Section 7.1.3.5. | |||
o Whether the connection can be used to receive data. A connection | * Whether the connection can be used to receive data. A connection | |||
cannot be used for reading if the connection was created with the | cannot be used for reading if the connection was created with the | |||
Selection Property "Direction of Communication" set to | Selection Property "Direction of Communication" set to | |||
"unidirectional send" or if a Message marked as "Final" was | "unidirectional send" or if a Message marked as "Final" was | |||
received. See Section 7.3.3.3. The latter is only supported by | received. See Section 7.3.3.3. The latter is only supported by | |||
certain transport protocols, e.g., by TCP as half-closed | certain transport protocols, e.g., by TCP as half-closed | |||
connection. | connection. | |||
o For Connections that are Established or Closing: Transport | * For Connections that are Established or Closing: Transport | |||
Properties that the application specified on the Preconnection. | Properties that the application specified on the Preconnection. | |||
See Section 4.2. Selection properties of type "Preference" will | See Section 4.2. Selection properties of type "Preference" will | |||
be exposed as boolean values indicating whether or not the | be exposed as boolean values indicating whether or not the | |||
property applies to the selected transport. | property applies to the selected transport. | |||
o For Connections that are Established, Closing, or Closed: | * For Connections that are Established, Closing, or Closed: | |||
Selection (Section 4.2) and Connection Properties (Section 6.1) of | Selection (Section 4.2) and Connection Properties (Section 6.1) of | |||
the actual protocols that were selected and instantiated. | the actual protocols that were selected and instantiated. | |||
Selection Properties indicate whether or not the Connection has or | Selection Properties indicate whether or not the Connection has or | |||
offers a certain Selection Property. The actually instantiated | offers a certain Selection Property. The actually instantiated | |||
protocol stack might not match all Protocol Selection Properties | protocol stack might not match all Protocol Selection Properties | |||
that the application specified on the Preconnection. For example, | that the application specified on the Preconnection. For example, | |||
a certain Protocol Selection Property that an application | a certain Protocol Selection Property that an application | |||
specified as Preferred might not actually be present in the chosen | specified as Preferred might not actually be present in the chosen | |||
protocol stack because none of the currently available transport | protocol stack because none of the currently available transport | |||
protocols had this feature. | protocols had this feature. | |||
o For Connections that are Established, additional properties of the | * For Connections that are Established, additional properties of the | |||
path(s) in use. These properties can be derived from the local | path(s) in use. These properties can be derived from the local | |||
provisioning domain [RFC7556], measurements by the Protocol Stack, | provisioning domain [RFC7556], measurements by the Protocol Stack, | |||
or other sources. | or other sources. | |||
6.1. Generic Connection Properties | 6.1. Generic Connection Properties | |||
Generic Connection Properties are defined independent of the chosen | Generic Connection Properties are defined independent of the chosen | |||
protocol stack and therefore available on all Connections. | protocol stack and therefore available on all Connections. | |||
Many Connection Properties have a corresponding Selection Property | Many Connection Properties have a corresponding Selection Property | |||
skipping to change at page 42, line 42 ¶ | skipping to change at page 42, line 42 ¶ | |||
relatively long period of time. Transport Services system | relatively long period of time. Transport Services system | |||
implementations that map the requested capacity profile onto per- | implementations that map the requested capacity profile onto per- | |||
connection DSCP signaling without multiplexing SHOULD assign a | connection DSCP signaling without multiplexing SHOULD assign a | |||
DSCP Assured Forwarding (AF11,AF12,AF13,AF14) [RFC2597] PHB per | DSCP Assured Forwarding (AF11,AF12,AF13,AF14) [RFC2597] PHB per | |||
Section 4.8 of [RFC4594]. | Section 4.8 of [RFC4594]. | |||
The Capacity Profile for a selected protocol stack may be modified on | The Capacity Profile for a selected protocol stack may be modified on | |||
a per-Message basis using the Transmission Profile Message Property; | a per-Message basis using the Transmission Profile Message Property; | |||
see Section 7.1.3.8. | see Section 7.1.3.8. | |||
6.1.7. Policy for using Multi-Path Transports | 6.1.7. Policy for using Multipath Transports | |||
Name: multipath-policy | Name: multipath-policy | |||
Type: Enumeration | Type: Enumeration | |||
Default: Handover | Default: Handover | |||
This property specifies the local policy for transferring data across | This property specifies the local policy for transferring data across | |||
multiple paths between the same end hosts if Parallel Use of Multiple | multiple paths between the same end hosts if Multipath Transport is | |||
Paths is not set to Disabled (see Section 4.2.14). Possible values | not set to Disabled (see Section 4.2.14). Possible values are: | |||
are: | ||||
Handover: The connection ought only to attempt to migrate between | Handover: The connection ought only to attempt to migrate between | |||
different paths when the original path is lost or becomes | different paths when the original path is lost or becomes | |||
unusable. The thresholds used to declare a path unusable are | unusable. The thresholds used to declare a path unusable are | |||
implementation specific. | implementation specific. | |||
Interactive: The connection ought only to attempt to minimize the | Interactive: The connection ought only to attempt to minimize the | |||
latency for interactive traffic patterns by transmitting data | latency for interactive traffic patterns by transmitting data | |||
across multiple paths when this is beneficial. The goal of | across multiple paths when this is beneficial. The goal of | |||
minimizing the latency will be balanced against the cost of each | minimizing the latency will be balanced against the cost of each | |||
skipping to change at page 44, line 26 ¶ | skipping to change at page 44, line 28 ¶ | |||
Type: Boolean | Type: Boolean | |||
Default: false | Default: false | |||
When set to true, this property will initiate new Connections using | When set to true, this property will initiate new Connections using | |||
as little cached information (such as session tickets or cookies) as | as little cached information (such as session tickets or cookies) as | |||
possible from previous connections that are not entangled with it. | possible from previous connections that are not entangled with it. | |||
Any state generated by this Connection will only be shared with | Any state generated by this Connection will only be shared with | |||
entangled connections. Cloned Connections will use saved state from | entangled connections. Cloned Connections will use saved state from | |||
within the Connection Group. | within the Connection Group. This is used for separating Connection | |||
Contexts as specified in [I-D.ietf-taps-arch]. | ||||
Note that this does not guarantee no leakage of information, as | Note that this does not guarantee no leakage of information, as | |||
implementations may not be able to fully isolate all caches (e.g. | implementations may not be able to fully isolate all caches (e.g. | |||
RTT estimates). Note that this property may degrade connection | RTT estimates). Note that this property may degrade connection | |||
performance. | performance. | |||
6.1.11. Read-only Connection Properties | 6.1.11. Read-only Connection Properties | |||
The following generic Connection Properties are read-only, i.e. they | The following generic Connection Properties are read-only, i.e. they | |||
cannot be changed by an application. | cannot be changed by an application. | |||
skipping to change at page 55, line 38 ¶ | skipping to change at page 55, line 38 ¶ | |||
This only takes effect when the transport uses a network layer that | This only takes effect when the transport uses a network layer that | |||
supports this functionality. When it does take effect, setting this | supports this functionality. When it does take effect, setting this | |||
property to true will cause the Don't Fragment bit to be set in the | property to true will cause the Don't Fragment bit to be set in the | |||
IP header, and attempts to send a message with this property set to a | IP header, and attempts to send a message with this property set to a | |||
size greater than the transport's current estimate of its maximum | size greater than the transport's current estimate of its maximum | |||
packet size ("singularTransmissionMsgMaxLen") will result in a | packet size ("singularTransmissionMsgMaxLen") will result in a | |||
"SendError". | "SendError". | |||
7.1.3.10. No Segmentation | 7.1.3.10. No Segmentation | |||
Name: noTransportFragmentation | Name: noSegmentation | |||
Type: Boolean | Type: Boolean | |||
Default: false | Default: false | |||
When set to true, this property requests the network layer at the | When set to true, this property requests the network layer at the | |||
sending endpoint to not fragment the packets generated by the | sending endpoint to not fragment the packets generated by the | |||
transport layer. When running over IPv4, setting this property to | transport layer. When running over IPv4, setting this property to | |||
true will also cause the Don't Fragment bit to be set in the IP | true will also cause the Don't Fragment bit to be set in the IP | |||
header. When this property is set, an attempt to send a message size | header. When this property is set, an attempt to send a message size | |||
skipping to change at page 62, line 31 ¶ | skipping to change at page 62, line 31 ¶ | |||
ReceivedPartial may deliver them in a sequence like this: A1, B1, B2, | ReceivedPartial may deliver them in a sequence like this: A1, B1, B2, | |||
A2, A3, B3, because the messageContext allows the application to | A2, A3, B3, because the messageContext allows the application to | |||
identify the pieces as belonging to Message A and B, respectively. | identify the pieces as belonging to Message A and B, respectively. | |||
However, a sequence like: A1, A3 will never occur. | However, a sequence like: A1, A3 will never occur. | |||
If the minIncompleteLength in the Receive request was set to be | If the minIncompleteLength in the Receive request was set to be | |||
infinite (indicating a request to receive only complete Messages), | infinite (indicating a request to receive only complete Messages), | |||
the ReceivedPartial event may still be delivered if one of the | the ReceivedPartial event may still be delivered if one of the | |||
following conditions is true: | following conditions is true: | |||
o the underlying Protocol Stack supports message boundary | * the underlying Protocol Stack supports message boundary | |||
preservation, and the size of the Message is larger than the | preservation, and the size of the Message is larger than the | |||
buffers available for a single message; | buffers available for a single message; | |||
o the underlying Protocol Stack does not support message boundary | * the underlying Protocol Stack does not support message boundary | |||
preservation, and the Message Framer (see Section 7.1.2) cannot | preservation, and the Message Framer (see Section 7.1.2) cannot | |||
determine the end of the message using the buffer space it has | determine the end of the message using the buffer space it has | |||
available; or | available; or | |||
o the underlying Protocol Stack does not support message boundary | * the underlying Protocol Stack does not support message boundary | |||
preservation, and no Message Framer was supplied by the | preservation, and no Message Framer was supplied by the | |||
application | application | |||
Note that in the absence of message boundary preservation or a | Note that in the absence of message boundary preservation or a | |||
Message Framer, all bytes received on the Connection will be | Message Framer, all bytes received on the Connection will be | |||
represented as one large Message of indeterminate length. | represented as one large Message of indeterminate length. | |||
7.3.2.3. ReceiveError | 7.3.2.3. ReceiveError | |||
Connection -> ReceiveError<messageContext, reason?> | Connection -> ReceiveError<messageContext, reason?> | |||
skipping to change at page 64, line 40 ¶ | skipping to change at page 64, line 40 ¶ | |||
Connection that is entangled with this one in a Connection Group. | Connection that is entangled with this one in a Connection Group. | |||
Connection.Close() | Connection.Close() | |||
The Closed Event informs the application that the Remote Endpoint has | The Closed Event informs the application that the Remote Endpoint has | |||
closed the Connection. There is no guarantee that a remote Close | closed the Connection. There is no guarantee that a remote Close | |||
will indeed be signaled. | will indeed be signaled. | |||
Connection -> Closed<> | Connection -> Closed<> | |||
Abort terminates a Connection without delivering any remaining data. | Abort terminates a Connection without delivering any remaining | |||
This action does not affect any other Connection that is entangled | Messages. This action does not affect any other Connection that is | |||
with this one in a Connection Group. | entangled with this one in a Connection Group. | |||
Connection.Abort() | Connection.Abort() | |||
AbortGroup terminates a Connection and also terminates any other | CloseGroup gracefully terminates a Connection and any other | |||
Connections that are entangled with this one in a Connection Group. | Connections that are entangled with this one in a Connection Group. | |||
For example, all of the Connections in a group might be streams of a | For example, all of the Connections in a group might be streams of a | |||
single session for a multistreaming protocol; aborting the entire | single session for a multistreaming protocol; closing the entire | |||
group would close the underlying session. See also Section 5.4. | group will close the underlying session. See also Section 5.4. As | |||
with Close, any Messages remaining to be processed on a Connection | ||||
will be handled prior to closing. | ||||
Connection.CloseGroup() | ||||
AbortGroup terminates a Connection and any other Connections that are | ||||
entangled with this one in a Connection Group without delivering any | ||||
remaining Messages. | ||||
Connection.AbortGroup() | Connection.AbortGroup() | |||
A ConnectionError informs the application that: 1) data could not be | A ConnectionError informs the application that: 1) data could not be | |||
delivered to the peer after a timeout, or 2) the Connection has been | delivered to the peer after a timeout, or 2) the Connection has been | |||
aborted (e.g., because the peer has called Abort). There is no | aborted (e.g., because the peer has called Abort). There is no | |||
guarantee that an Abort will indeed be signaled. | guarantee that an Abort will indeed be signaled. | |||
Connection -> ConnectionError<reason?> | Connection -> ConnectionError<reason?> | |||
9. Connection State and Ordering of Operations and Events | 9. Connection State and Ordering of Operations and Events | |||
This interface is designed to be independent of an implementation's | This interface is designed to be independent of an implementation's | |||
skipping to change at page 65, line 20 ¶ | skipping to change at page 65, line 29 ¶ | |||
9. Connection State and Ordering of Operations and Events | 9. Connection State and Ordering of Operations and Events | |||
This interface is designed to be independent of an implementation's | This interface is designed to be independent of an implementation's | |||
concurrency model. The details of how exactly actions are handled, | concurrency model. The details of how exactly actions are handled, | |||
and how events are dispatched, are implementation dependent. | and how events are dispatched, are implementation dependent. | |||
Each transition of connection state is associated with one of more | Each transition of connection state is associated with one of more | |||
events: | events: | |||
o Ready<> occurs when a Connection created with Initiate() or | * Ready<> occurs when a Connection created with Initiate() or | |||
InitiateWithSend() transitions to Established state. | InitiateWithSend() transitions to Established state. | |||
o ConnectionReceived<> occurs when a Connection created with | * ConnectionReceived<> occurs when a Connection created with | |||
Listen() transitions to Established state. | Listen() transitions to Established state. | |||
o RendezvousDone<> occurs when a Connection created with | * RendezvousDone<> occurs when a Connection created with | |||
Rendezvous() transitions to Established state. | Rendezvous() transitions to Established state. | |||
o Closed<> occurs when a Connection transitions to Closed state | * Closed<> occurs when a Connection transitions to Closed state | |||
without error. | without error. | |||
o InitiateError<> occurs when a Connection created with Initiate() | * InitiateError<> occurs when a Connection created with Initiate() | |||
transitions from Establishing state to Closed state due to an | transitions from Establishing state to Closed state due to an | |||
error. | error. | |||
o ConnectionError<> occurs when a Connection transitions to Closed | * ConnectionError<> occurs when a Connection transitions to Closed | |||
state due to an error in all other circumstances. | state due to an error in all other circumstances. | |||
The following diagram shows the possible states of a Connection and | The following diagram shows the possible states of a Connection and | |||
the events that occur upon a transition from one state to another. | the events that occur upon a transition from one state to another. | |||
(*) (**) | (*) (**) | |||
Establishing -----> Established -----> Closed | Establishing -----> Established -----> Closing ------> Closed | |||
| ^ | | ^ | |||
| | | | | | |||
+-----------------------------------+ | +---------------------------------------------------+ | |||
InitiateError<> | InitiateError<> | |||
(*) Ready<>, ConnectionReceived<>, RendezvousDone<> | (*) Ready<>, ConnectionReceived<>, RendezvousDone<> | |||
(**) Closed<>, ConnectionError<> | (**) Closed<>, ConnectionError<> | |||
Figure 2: Connection State Diagram | Figure 2: Connection State Diagram | |||
The interface provides the following guarantees about the ordering of | The interface provides the following guarantees about the ordering of | |||
operations: | operations: | |||
o Sent<> events will occur on a Connection in the order in which the | * Sent<> events will occur on a Connection in the order in which the | |||
Messages were sent (i.e., delivered to the kernel or to the | Messages were sent (i.e., delivered to the kernel or to the | |||
network interface, depending on implementation). | network interface, depending on implementation). | |||
o Received<> will never occur on a Connection before it is | * Received<> will never occur on a Connection before it is | |||
Established; i.e. before a Ready<> event on that Connection, or a | Established; i.e. before a Ready<> event on that Connection, or a | |||
ConnectionReceived<> or RendezvousDone<> containing that | ConnectionReceived<> or RendezvousDone<> containing that | |||
Connection. | Connection. | |||
o No events will occur on a Connection after it is Closed; i.e., | * No events will occur on a Connection after it is Closed; i.e., | |||
after a Closed<> event, an InitiateError<> or ConnectionError<> | after a Closed<> event, an InitiateError<> or ConnectionError<> | |||
will not occur on that connection. To ensure this ordering, | will not occur on that connection. To ensure this ordering, | |||
Closed<> will not occur on a Connection while other events on the | Closed<> will not occur on a Connection while other events on the | |||
Connection are still locally outstanding (i.e., known to the | Connection are still locally outstanding (i.e., known to the | |||
interface and waiting to be dealt with by the application). | interface and waiting to be dealt with by the application). | |||
10. IANA Considerations | 10. IANA Considerations | |||
RFC-EDITOR: Please remove this section before publication. | RFC-EDITOR: Please remove this section before publication. | |||
skipping to change at page 69, line 6 ¶ | skipping to change at page 69, line 4 ¶ | |||
Thanks to Stuart Cheshire, Josh Graessley, David Schinazi, and Eric | Thanks to Stuart Cheshire, Josh Graessley, David Schinazi, and Eric | |||
Kinnear for their implementation and design efforts, including Happy | Kinnear for their implementation and design efforts, including Happy | |||
Eyeballs, that heavily influenced this work. Thanks to Laurent Chuat | Eyeballs, that heavily influenced this work. Thanks to Laurent Chuat | |||
and Jason Lee for initial work on the Post Sockets interface, from | and Jason Lee for initial work on the Post Sockets interface, from | |||
which this work has evolved. Thanks to Maximilian Franke for asking | which this work has evolved. Thanks to Maximilian Franke for asking | |||
good questions based on implementation experience and for | good questions based on implementation experience and for | |||
contributing text, e.g., on multicast. | contributing text, e.g., on multicast. | |||
13. References | 13. References | |||
13.1. Normative References | 13.1. Normative References | |||
[I-D.ietf-taps-arch] | [I-D.ietf-taps-arch] | |||
Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., | Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., | |||
Perkins, C., Tiesel, P., and C. Wood, "An Architecture for | Perkins, C., Tiesel, P., and C. Wood, "An Architecture for | |||
Transport Services", draft-ietf-taps-arch-09 (work in | Transport Services", Work in Progress, Internet-Draft, | |||
progress), November 2020. | draft-ietf-taps-arch-09, 2 November 2020, | |||
<http://www.ietf.org/internet-drafts/draft-ietf-taps-arch- | ||||
09.txt>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, | [RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, | |||
RFC 2914, DOI 10.17487/RFC2914, September 2000, | RFC 2914, DOI 10.17487/RFC2914, September 2000, | |||
<https://www.rfc-editor.org/info/rfc2914>. | <https://www.rfc-editor.org/info/rfc2914>. | |||
skipping to change at page 70, line 9 ¶ | skipping to change at page 70, line 7 ¶ | |||
<https://www.rfc-editor.org/info/rfc8303>. | <https://www.rfc-editor.org/info/rfc8303>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
13.2. Informative References | 13.2. Informative References | |||
[I-D.ietf-httpbis-priority] | [I-D.ietf-httpbis-priority] | |||
Oku, K. and L. Pardue, "Extensible Prioritization Scheme | Oku, K. and L. Pardue, "Extensible Prioritization Scheme | |||
for HTTP", draft-ietf-httpbis-priority-03 (work in | for HTTP", Work in Progress, Internet-Draft, draft-ietf- | |||
progress), January 2021. | httpbis-priority-03, 11 January 2021, | |||
<http://www.ietf.org/internet-drafts/draft-ietf-httpbis- | ||||
priority-03.txt>. | ||||
[I-D.ietf-taps-impl] | [I-D.ietf-taps-impl] | |||
Brunstrom, A., Pauly, T., Enghardt, T., Grinnemo, K., | Brunstrom, A., Pauly, T., Enghardt, T., Grinnemo, K., | |||
Jones, T., Tiesel, P., Perkins, C., and M. Welzl, | Jones, T., Tiesel, P., Perkins, C., and M. Welzl, | |||
"Implementing Interfaces to Transport Services", draft- | "Implementing Interfaces to Transport Services", Work in | |||
ietf-taps-impl-08 (work in progress), November 2020. | Progress, Internet-Draft, draft-ietf-taps-impl-08, 2 | |||
November 2020, <http://www.ietf.org/internet-drafts/draft- | ||||
ietf-taps-impl-08.txt>. | ||||
[I-D.ietf-tsvwg-datagram-plpmtud] | [I-D.ietf-tsvwg-datagram-plpmtud] | |||
Fairhurst, G., Jones, T., Tuexen, M., Ruengeler, I., and | Fairhurst, G., Jones, T., Tuexen, M., Ruengeler, I., and | |||
T. Voelker, "Packetization Layer Path MTU Discovery for | T. Voelker, "Packetization Layer Path MTU Discovery for | |||
Datagram Transports", draft-ietf-tsvwg-datagram-plpmtud-22 | Datagram Transports", Work in Progress, Internet-Draft, | |||
(work in progress), June 2020. | draft-ietf-tsvwg-datagram-plpmtud-22, 10 June 2020, | |||
<http://www.ietf.org/internet-drafts/draft-ietf-tsvwg- | ||||
datagram-plpmtud-22.txt>. | ||||
[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | |||
"Definition of the Differentiated Services Field (DS | "Definition of the Differentiated Services Field (DS | |||
Field) in the IPv4 and IPv6 Headers", RFC 2474, | Field) in the IPv4 and IPv6 Headers", RFC 2474, | |||
DOI 10.17487/RFC2474, December 1998, | DOI 10.17487/RFC2474, December 1998, | |||
<https://www.rfc-editor.org/info/rfc2474>. | <https://www.rfc-editor.org/info/rfc2474>. | |||
[RFC2597] Heinanen, J., Baker, F., Weiss, W., and J. Wroclawski, | [RFC2597] Heinanen, J., Baker, F., Weiss, W., and J. Wroclawski, | |||
"Assured Forwarding PHB Group", RFC 2597, | "Assured Forwarding PHB Group", RFC 2597, | |||
DOI 10.17487/RFC2597, June 1999, | DOI 10.17487/RFC2597, June 1999, | |||
<https://www.rfc-editor.org/info/rfc2597>. | <https://www.rfc-editor.org/info/rfc2597>. | |||
[RFC3246] Davie, B., Charny, A., Bennet, J., Benson, K., Le Boudec, | [RFC3246] Davie, B., Charny, A., Bennet, J.C.R., Benson, K., Le | |||
J., Courtney, W., Davari, S., Firoiu, V., and D. | Boudec, J.Y., Courtney, W., Davari, S., Firoiu, V., and D. | |||
Stiliadis, "An Expedited Forwarding PHB (Per-Hop | Stiliadis, "An Expedited Forwarding PHB (Per-Hop | |||
Behavior)", RFC 3246, DOI 10.17487/RFC3246, March 2002, | Behavior)", RFC 3246, DOI 10.17487/RFC3246, March 2002, | |||
<https://www.rfc-editor.org/info/rfc3246>. | <https://www.rfc-editor.org/info/rfc3246>. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
DOI 10.17487/RFC3261, June 2002, | DOI 10.17487/RFC3261, June 2002, | |||
<https://www.rfc-editor.org/info/rfc3261>. | <https://www.rfc-editor.org/info/rfc3261>. | |||
skipping to change at page 73, line 13 ¶ | skipping to change at page 73, line 21 ¶ | |||
could be implemented via event queues, handler functions or classes, | could be implemented via event queues, handler functions or classes, | |||
communicating sequential processes, or other asynchronous calling | communicating sequential processes, or other asynchronous calling | |||
conventions. | conventions. | |||
A.1. Types | A.1. Types | |||
The basic types mentioned in Section 1.1 typically have natural | The basic types mentioned in Section 1.1 typically have natural | |||
correspondences in practical programming languages, perhaps | correspondences in practical programming languages, perhaps | |||
constrained by implementation-specific limitations. For example: | constrained by implementation-specific limitations. For example: | |||
o An Integer can typically be represented in C by an "int" or | * An Integer can typically be represented in C by an "int" or | |||
"long", subject to the underlying platform's ranges for each. To | "long", subject to the underlying platform's ranges for each. To | |||
accommodate special values, a C function that returns a non- | accommodate special values, a C function that returns a non- | |||
negative "int" on success may return -1 on failure. In Python, | negative "int" on success may return -1 on failure. In Python, | |||
such a function might return "None" or raise an exception. | such a function might return "None" or raise an exception. | |||
o In C, a Tuple may be represented as a "struct" with one member for | * In C, a Tuple may be represented as a "struct" with one member for | |||
each of the value types in the ordered grouping. In Python, by | each of the value types in the ordered grouping. In Python, by | |||
contrast, a Tuple may be represented natively as a "tuple", a | contrast, a Tuple may be represented natively as a "tuple", a | |||
sequence of dynamically-typed elements. | sequence of dynamically-typed elements. | |||
o A Collection may be represented as a "std::set" in C++ or as a | * A Collection may be represented as a "std::set" in C++ or as a | |||
"set" in Python. In C, it may be represented as an array or as a | "set" in Python. In C, it may be represented as an array or as a | |||
higher-level data structure with appropriate accessors defined. | higher-level data structure with appropriate accessors defined. | |||
A.2. Events and Errors | A.2. Events and Errors | |||
This specification treats Events and Errors similarly. Errors, just | This specification treats Events and Errors similarly. Errors, just | |||
as any other Events, may occur asynchronously in network | as any other Events, may occur asynchronously in network | |||
applications. However, implementations of this interface may report | applications. However, implementations of this interface may report | |||
Errors synchronously, according to the error handling idioms of the | Errors synchronously, according to the error handling idioms of the | |||
implementation platform, where they can be immediately detected, such | implementation platform, where they can be immediately detected, such | |||
skipping to change at page 74, line 32 ¶ | skipping to change at page 74, line 35 ¶ | |||
Property objects (see Section 4.2) that are pre-configured with | Property objects (see Section 4.2) that are pre-configured with | |||
frequently used sets of properties. Implementations should at least | frequently used sets of properties. Implementations should at least | |||
offer short-hands to specify the following property profiles: | offer short-hands to specify the following property profiles: | |||
B.2.1. reliable-inorder-stream | B.2.1. reliable-inorder-stream | |||
This profile provides reliable, in-order transport service with | This profile provides reliable, in-order transport service with | |||
congestion control. TCP is an example of a protocol that provides | congestion control. TCP is an example of a protocol that provides | |||
this service. It should consist of the following properties: | this service. It should consist of the following properties: | |||
+-----------------------+---------+ | +=======================+=========+ | |||
| Property | Value | | | Property | Value | | |||
+-----------------------+---------+ | +=======================+=========+ | |||
| reliability | require | | | reliability | require | | |||
| | | | +-----------------------+---------+ | |||
| preserveOrder | require | | | preserveOrder | require | | |||
| | | | +-----------------------+---------+ | |||
| congestionControl | require | | | congestionControl | require | | |||
| | | | +-----------------------+---------+ | |||
| preserveMsgBoundaries | ignore | | | preserveMsgBoundaries | ignore | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
Table 2 | ||||
B.2.2. reliable-message | B.2.2. reliable-message | |||
This profile provides message-preserving, reliable, in-order | This profile provides message-preserving, reliable, in-order | |||
transport service with congestion control. SCTP is an example of a | transport service with congestion control. SCTP is an example of a | |||
protocol that provides this service. It should consist of the | protocol that provides this service. It should consist of the | |||
following properties: | following properties: | |||
+-----------------------+---------+ | +=======================+=========+ | |||
| Property | Value | | | Property | Value | | |||
+-----------------------+---------+ | +=======================+=========+ | |||
| reliability | require | | | reliability | require | | |||
| | | | +-----------------------+---------+ | |||
| preserveOrder | require | | | preserveOrder | require | | |||
| | | | +-----------------------+---------+ | |||
| congestionControl | require | | | congestionControl | require | | |||
| | | | +-----------------------+---------+ | |||
| preserveMsgBoundaries | require | | | preserveMsgBoundaries | require | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
Table 3 | ||||
B.2.3. unreliable-datagram | B.2.3. unreliable-datagram | |||
This profile provides unreliable datagram transport service. An | This profile provides unreliable datagram transport service. An | |||
example of a protocol that provides this service is UDP. It consists | example of a protocol that provides this service is UDP. It consists | |||
of the following properties: | of the following properties: | |||
+-----------------------+---------+ | +=======================+=========+ | |||
| Property | Value | | | Property | Value | | |||
+-----------------------+---------+ | +=======================+=========+ | |||
| reliability | ignore | | | reliability | ignore | | |||
| | | | +-----------------------+---------+ | |||
| preserveOrder | ignore | | | preserveOrder | ignore | | |||
| | | | +-----------------------+---------+ | |||
| congestionControl | ignore | | | congestionControl | ignore | | |||
| | | | +-----------------------+---------+ | |||
| preserveMsgBoundaries | require | | | preserveMsgBoundaries | require | | |||
| | | | +-----------------------+---------+ | |||
| safely replayable | true | | | safely replayable | true | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
Table 4 | ||||
Applications that choose this Transport Property Profile for latency | Applications that choose this Transport Property Profile for latency | |||
reasons should also consider setting an appropriate Capacity Profile | reasons should also consider setting an appropriate Capacity Profile | |||
Property, see Section 6.1.6 and could benefit from controlling | Property, see Section 6.1.6 and could benefit from controlling | |||
checksum coverage, see Section 4.2.7 and Section 4.2.8. | checksum coverage, see Section 4.2.7 and Section 4.2.8. | |||
Appendix C. Relationship to the Minimal Set of Transport Services for | Appendix C. Relationship to the Minimal Set of Transport Services for | |||
End Systems | End Systems | |||
[RFC8923] identifies a minimal set of transport services that end | [RFC8923] identifies a minimal set of transport services that end | |||
systems should offer. These services make all non-security-related | systems should offer. These services make all non-security-related | |||
skipping to change at page 76, line 12 ¶ | skipping to change at page 76, line 24 ¶ | |||
is reflected in the present API. For brevity, it is based on the | is reflected in the present API. For brevity, it is based on the | |||
list in Section 4.1 of [RFC8923], updated according to the discussion | list in Section 4.1 of [RFC8923], updated according to the discussion | |||
in Section 5 of [RFC8923]. The present API covers all elements of | in Section 5 of [RFC8923]. The present API covers all elements of | |||
this section except "Notification of Excessive Retransmissions (early | this section except "Notification of Excessive Retransmissions (early | |||
warning below abortion threshold)". This list is a subset of the | warning below abortion threshold)". This list is a subset of the | |||
transport features in Appendix A of [RFC8923], which refers to the | transport features in Appendix A of [RFC8923], which refers to the | |||
primitives in "pass 2" (Section 4) of [RFC8303] for further details | primitives in "pass 2" (Section 4) of [RFC8303] for further details | |||
on the implementation with TCP, MPTCP, UDP, UDP-Lite, SCTP and | on the implementation with TCP, MPTCP, UDP, UDP-Lite, SCTP and | |||
LEDBAT. | LEDBAT. | |||
o Connect: "Initiate" Action (Section 5.1). | * Connect: "Initiate" Action (Section 5.1). | |||
o Listen: "Listen" Action (Section 5.2). | * Listen: "Listen" Action (Section 5.2). | |||
o Specify number of attempts and/or timeout for the first | * Specify number of attempts and/or timeout for the first | |||
establishment message: "timeout" parameter of "Initiate" | establishment message: "timeout" parameter of "Initiate" | |||
(Section 5.1) or "InitiateWithSend" Action (Section 7.2.5). | (Section 5.1) or "InitiateWithSend" Action (Section 7.2.5). | |||
o Disable MPTCP: "Parallel Use of Multiple Paths" Property | * Disable MPTCP: "Multipath Transport" Property (Section 4.2.14). | |||
(Section 4.2.14). | ||||
o Hand over a message to reliably transfer (possibly multiple times) | * Hand over a message to reliably transfer (possibly multiple times) | |||
before connection establishment: "InitiateWithSend" Action | before connection establishment: "InitiateWithSend" Action | |||
(Section 7.2.5). | (Section 7.2.5). | |||
o Change timeout for aborting connection (using retransmit limit or | * Change timeout for aborting connection (using retransmit limit or | |||
time value): "Timeout for Aborting Connection" property, using a | time value): "Timeout for Aborting Connection" property, using a | |||
time value (Section 6.1.3). | time value (Section 6.1.3). | |||
o Timeout event when data could not be delivered for too long: | * Timeout event when data could not be delivered for too long: | |||
"ConnectionError" Event (Section 8). | "ConnectionError" Event (Section 8). | |||
o Suggest timeout to the peer: "TCP-specific Property: User Timeout" | * Suggest timeout to the peer: "TCP-specific Properties: User | |||
(Section 6.2). | Timeout Option (UTO)" (Section 6.2). | |||
o Notification of ICMP error message arrival: "Notification of ICMP | * Notification of ICMP error message arrival: "Notification of ICMP | |||
soft error message arrival" property (Section 4.2.17). | soft error message arrival" property (Section 4.2.17). | |||
o Choose a scheduler to operate between streams of an association: | * Choose a scheduler to operate between streams of an association: | |||
"Connection Group Transmission Scheduler" property | "Connection Group Transmission Scheduler" property | |||
(Section 6.1.5). | (Section 6.1.5). | |||
o Configure priority or weight for a scheduler: "Connection | * Configure priority or weight for a scheduler: "Connection | |||
Priority" property (Section 6.1.2). | Priority" property (Section 6.1.2). | |||
o "Specify checksum coverage used by the sender" and "Disable | * "Specify checksum coverage used by the sender" and "Disable | |||
checksum when sending": "Corruption Protection Length" property | checksum when sending": "Sending Corruption Protection Length" | |||
(Section 7.1.3.6) and "Full Checksum Coverage on Sending" property | property (Section 7.1.3.6) and "Full Checksum Coverage on Sending" | |||
(Section 4.2.7). | property (Section 4.2.7). | |||
o "Specify minimum checksum coverage required by receiver" and | * "Specify minimum checksum coverage required by receiver" and | |||
"Disable checksum requirement when receiving": "Required Minimum | "Disable checksum requirement when receiving": "Required Minimum | |||
Corruption Protection Coverage for Receiving" property | Corruption Protection Coverage for Receiving" property | |||
(Section 6.1.1) and "Full Checksum Coverage on Receiving" property | (Section 6.1.1) and "Full Checksum Coverage on Receiving" property | |||
(Section 4.2.8). | (Section 4.2.8). | |||
o "Specify DF field": "No Network-Layer Fragmentation" property | * "Specify DF field": "No Network-Layer Fragmentation" property | |||
(Section 7.1.3.9). | (Section 7.1.3.9). | |||
o "Request not to bundle messages": "No Transport-Layer | * "Request not to bundle messages": "No Segmentation" property | |||
Fragmentation" property (Section 7.1.3.10). | (Section 7.1.3.10). | |||
o Get max. transport-message size that may be sent using a non- | * Get max. transport-message size that may be sent using a non- | |||
fragmented IP packet from the configured interface: "Maximum | fragmented IP packet from the configured interface: "Maximum | |||
Message Size Before Fragmentation or Segmentation" property | Message Size Before Fragmentation or Segmentation" property | |||
(Section 6.1.11.2). | (Section 6.1.11.2). | |||
o Get max. transport-message size that may be received from the | * Get max. transport-message size that may be received from the | |||
configured interface: "Maximum Message Size on Receive" property | configured interface: "Maximum Message Size on Receive" property | |||
(Section 6.1.11.4). | (Section 6.1.11.4). | |||
o Obtain ECN field: "ECN" is a defined UDP(-Lite)-specific read-only | * Obtain ECN field: "UDP(-Lite)-specific Property: ECN" is a read- | |||
Message Property of the MessageContext object (Section 7.3.3.1). | only Message Property of the MessageContext object | |||
(Section 7.3.3.1). | ||||
o "Specify DSCP field", "Disable Nagle algorithm", "Enable and | * "Specify DSCP field", "Disable Nagle algorithm", "Enable and | |||
configure a "Low Extra Delay Background Transfer"": as suggested | configure a "Low Extra Delay Background Transfer"": as suggested | |||
in Section 5.5 of [RFC8923], these transport features are | in Section 5.5 of [RFC8923], these transport features are | |||
collectively offered via the "Capacity Profile" property | collectively offered via the "Capacity Profile" property | |||
(Section 6.1.6). Per-Message control is offered via the "Message | (Section 6.1.6). Per-Message control is offered via the "Message | |||
Capacity Profile Override" property (Section 7.1.3.8). | Capacity Profile Override" property (Section 7.1.3.8). | |||
o Close after reliably delivering all remaining data, causing an | * Close after reliably delivering all remaining data, causing an | |||
event informing the application on the other side: this is offered | event informing the application on the other side: this is offered | |||
by the "Close" Action with slightly changed semantics in line with | by the "Close" Action with slightly changed semantics in line with | |||
the discussion in Section 5.2 of [RFC8923] (Section 8). | the discussion in Section 5.2 of [RFC8923] (Section 8). | |||
o "Abort without delivering remaining data, causing an event | * "Abort without delivering remaining data, causing an event | |||
informing the application on the other side" and "Abort without | informing the application on the other side" and "Abort without | |||
delivering remaining data, not causing an event informing the | delivering remaining data, not causing an event informing the | |||
application on the other side": this is offered by the "Abort" | application on the other side": this is offered by the "Abort" | |||
action without promising that this is signaled to the other side. | action without promising that this is signaled to the other side. | |||
If it is, a "ConnectionError" Event will fire at the peer | If it is, a "ConnectionError" Event will fire at the peer | |||
(Section 8). | (Section 8). | |||
o "Reliably transfer data, with congestion control", "Reliably | * "Reliably transfer data, with congestion control", "Reliably | |||
transfer a message, with congestion control" and "Unreliably | transfer a message, with congestion control" and "Unreliably | |||
transfer a message": data is transferred via the "Send" action | transfer a message": data is transferred via the "Send" action | |||
(Section 7.2). Reliability is controlled via the "Reliable Data | (Section 7.2). Reliability is controlled via the "Reliable Data | |||
Transfer (Connection)" (Section 4.2.1) property and the "Reliable | Transfer (Connection)" (Section 4.2.1) property and the "Reliable | |||
Data Transfer (Message)" Message Property (Section 7.1.3.7). | Data Transfer (Message)" Message Property (Section 7.1.3.7). | |||
Transmitting data as a message or without delimiters is controlled | Transmitting data as a message or without delimiters is controlled | |||
via Message Framers (Section 7.1.2). The choice of congestion | via Message Framers (Section 7.1.2). The choice of congestion | |||
control is provided via the "Congestion control" property | control is provided via the "Congestion control" property | |||
(Section 4.2.9). | (Section 4.2.9). | |||
o Configurable Message Reliability: the "Lifetime" Message Property | * Configurable Message Reliability: the "Lifetime" Message Property | |||
implements a time-based way to configure message reliability | implements a time-based way to configure message reliability | |||
(Section 7.1.3.1). | (Section 7.1.3.1). | |||
o "Ordered message delivery (potentially slower than unordered)" and | * "Ordered message delivery (potentially slower than unordered)" and | |||
"Unordered message delivery (potentially faster than ordered)": | "Unordered message delivery (potentially faster than ordered)": | |||
these two transport features are controlled via the Message | these two transport features are controlled via the Message | |||
Property "Ordered" (Section 7.1.3.3). | Property "Ordered" (Section 7.1.3.3). | |||
o Request not to delay the acknowledgement (SACK) of a message: | * Request not to delay the acknowledgement (SACK) of a message: | |||
should the protocol support it, this is one of the transport | should the protocol support it, this is one of the transport | |||
features the Transport Services system can apply when an | features the Transport Services system can apply when an | |||
application uses the "Capacity Profile" Property (Section 6.1.6) | application uses the "Capacity Profile" Property (Section 6.1.6) | |||
or the "Message Capacity Profile Override" Message Property | or the "Message Capacity Profile Override" Message Property | |||
(Section 7.1.3.8) with value "Low Latency/Interactive". | (Section 7.1.3.8) with value "Low Latency/Interactive". | |||
o Receive data (with no message delimiting): "Received" Event | * Receive data (with no message delimiting): "Received" Event | |||
(Section 7.3.2.1). See Section 7.1.2 for handling Message framing | (Section 7.3.2.1). See Section 7.1.2 for handling Message framing | |||
in situations where the Protocol Stack only provides a byte-stream | in situations where the Protocol Stack only provides a byte-stream | |||
transport. | transport. | |||
o Receive a message: "Received" Event (Section 7.3.2.1), using | * Receive a message: "Received" Event (Section 7.3.2.1), using | |||
Message Framers (Section 7.1.2). | Message Framers (Section 7.1.2). | |||
o Information about partial message arrival: "ReceivedPartial" Event | * Information about partial message arrival: "ReceivedPartial" Event | |||
(Section 7.3.2.2). | (Section 7.3.2.2). | |||
o Notification of send failures: "Expired" Event (Section 7.2.2.2) | * Notification of send failures: "Expired" Event (Section 7.2.2.2) | |||
and "SendError" Event (Section 7.2.2.3). | and "SendError" Event (Section 7.2.2.3). | |||
o Notification that the stack has no more user data to send: | * Notification that the stack has no more user data to send: | |||
applications can obtain this information via the "Sent" Event | applications can obtain this information via the "Sent" Event | |||
(Section 7.2.2.1). | (Section 7.2.2.1). | |||
o Notification to a receiver that a partial message delivery has | * Notification to a receiver that a partial message delivery has | |||
been aborted: "ReceiveError" Event (Section 7.3.2.3). | been aborted: "ReceiveError" Event (Section 7.3.2.3). | |||
Authors' Addresses | Authors' Addresses | |||
Brian Trammell (editor) | Brian Trammell (editor) | |||
Google Switzerland GmbH | Google Switzerland GmbH | |||
Gustav-Gull-Platz 1 | Gustav-Gull-Platz 1 | |||
8004 Zurich | CH- 8004 Zurich | |||
Switzerland | Switzerland | |||
Email: ietf@trammell.ch | Email: ietf@trammell.ch | |||
Michael Welzl (editor) | Michael Welzl (editor) | |||
University of Oslo | University of Oslo | |||
PO Box 1080 Blindern | PO Box 1080 Blindern | |||
0316 Oslo | 0316 Oslo | |||
Norway | Norway | |||
Email: michawe@ifi.uio.no | Email: michawe@ifi.uio.no | |||
Theresa Enghardt | Theresa Enghardt | |||
Netflix | Netflix | |||
121 Albright Way | 121 Albright Way | |||
Los Gatos, CA 95032 | Los Gatos, CA 95032, | |||
United States of America | United States of America | |||
Email: ietf@tenghardt.net | Email: ietf@tenghardt.net | |||
Godred Fairhurst | Godred Fairhurst | |||
University of Aberdeen | University of Aberdeen | |||
Fraser Noble Building | Fraser Noble Building | |||
Aberdeen, AB24 3UE | Aberdeen, AB24 3UE | |||
Scotland | ||||
Email: gorry@erg.abdn.ac.uk | Email: gorry@erg.abdn.ac.uk | |||
URI: http://www.erg.abdn.ac.uk/ | URI: http://www.erg.abdn.ac.uk/ | |||
Mirja Kuehlewind | Mirja Kuehlewind | |||
Ericsson | Ericsson | |||
Ericsson-Allee 1 | Ericsson-Allee 1 | |||
Herzogenrath | Herzogenrath | |||
Germany | Germany | |||
skipping to change at page 80, line 4 ¶ | skipping to change at page 80, line 8 ¶ | |||
Email: gorry@erg.abdn.ac.uk | Email: gorry@erg.abdn.ac.uk | |||
URI: http://www.erg.abdn.ac.uk/ | URI: http://www.erg.abdn.ac.uk/ | |||
Mirja Kuehlewind | Mirja Kuehlewind | |||
Ericsson | Ericsson | |||
Ericsson-Allee 1 | Ericsson-Allee 1 | |||
Herzogenrath | Herzogenrath | |||
Germany | Germany | |||
Email: mirja.kuehlewind@ericsson.com | Email: mirja.kuehlewind@ericsson.com | |||
Colin Perkins | Colin Perkins | |||
University of Glasgow | University of Glasgow | |||
School of Computing Science | School of Computing Science | |||
Glasgow G12 8QQ | Glasgow G12 8QQ | |||
United Kingdom | United Kingdom | |||
Email: csp@csperkins.org | Email: csp@csperkins.org | |||
Philipp S. Tiesel | Philipp S. Tiesel | |||
TU Berlin | SAP SE | |||
Einsteinufer 25 | Konrad-Zuse-Ring 10 | |||
10587 Berlin | 14469 Potsdam | |||
Germany | Germany | |||
Email: philipp@tiesel.net | Email: philipp@tiesel.net | |||
Christopher A. Wood | Christopher A. Wood | |||
Cloudflare | Cloudflare | |||
101 Townsend St | 101 Townsend St | |||
San Francisco | San Francisco, | |||
United States of America | United States of America | |||
Email: caw@heapingbits.net | Email: caw@heapingbits.net | |||
Tommy Pauly | Tommy Pauly | |||
Apple Inc. | Apple Inc. | |||
One Apple Park Way | One Apple Park Way | |||
Cupertino, California 95014 | Cupertino, California 95014, | |||
United States of America | United States of America | |||
Email: tpauly@apple.com | Email: tpauly@apple.com | |||
Kyle Rose | Kyle Rose | |||
Akamai Technologies, Inc. | Akamai Technologies, Inc. | |||
145 Broadway | 145 Broadway | |||
Cambridge, MA | Cambridge, MA, | |||
United States of America | United States of America | |||
Email: krose@krose.org | Email: krose@krose.org | |||
End of changes. 162 change blocks. | ||||
214 lines changed or deleted | 234 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/ |