draft-ietf-taps-interface-18.txt | draft-ietf-taps-interface-19.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: 27 April 2023 University of Oslo | Expires: 10 September 2023 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 | |||
SAP SE | SAP SE | |||
T. Pauly | T. Pauly | |||
Apple Inc. | Apple Inc. | |||
24 October 2022 | 9 March 2023 | |||
An Abstract Application Layer Interface to Transport Services | An Abstract Application Layer Interface to Transport Services | |||
draft-ietf-taps-interface-18 | draft-ietf-taps-interface-19 | |||
Abstract | Abstract | |||
This document describes an abstract application programming | This document describes an abstract application programming | |||
interface, API, to the transport layer that enables the selection of | interface, API, to the transport layer that enables the selection of | |||
transport protocols and network paths dynamically at runtime. This | transport protocols and network paths dynamically at runtime. This | |||
API enables faster deployment of new protocols and protocol features | API enables faster deployment of new protocols and protocol features | |||
without requiring changes to the applications. The specified API | without requiring changes to the applications. The specified API | |||
follows the Transport Services architecture by providing | follows the Transport Services architecture by providing | |||
asynchronous, atomic transmission of messages. It is intended to | asynchronous, atomic transmission of messages. It is intended to | |||
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 27 April 2023. | This Internet-Draft will expire on 10 September 2023. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Revised BSD License text as | extracted from this document must include Revised BSD License text as | |||
described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Revised BSD License. | provided without warranty as described in the Revised BSD License. | |||
skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 38 ¶ | |||
8. Managing Connections . . . . . . . . . . . . . . . . . . . . 45 | 8. Managing Connections . . . . . . . . . . . . . . . . . . . . 45 | |||
8.1. Generic Connection Properties . . . . . . . . . . . . . . 47 | 8.1. Generic Connection Properties . . . . . . . . . . . . . . 47 | |||
8.1.1. Required Minimum Corruption Protection Coverage for | 8.1.1. Required Minimum Corruption Protection Coverage for | |||
Receiving . . . . . . . . . . . . . . . . . . . . . . 47 | Receiving . . . . . . . . . . . . . . . . . . . . . . 47 | |||
8.1.2. Connection Priority . . . . . . . . . . . . . . . . . 48 | 8.1.2. Connection Priority . . . . . . . . . . . . . . . . . 48 | |||
8.1.3. Timeout for Aborting Connection . . . . . . . . . . . 48 | 8.1.3. Timeout for Aborting Connection . . . . . . . . . . . 48 | |||
8.1.4. Timeout for keep alive packets . . . . . . . . . . . 48 | 8.1.4. Timeout for keep alive packets . . . . . . . . . . . 48 | |||
8.1.5. Connection Group Transmission Scheduler . . . . . . . 49 | 8.1.5. Connection Group Transmission Scheduler . . . . . . . 49 | |||
8.1.6. Capacity Profile . . . . . . . . . . . . . . . . . . 49 | 8.1.6. Capacity Profile . . . . . . . . . . . . . . . . . . 49 | |||
8.1.7. Policy for using Multipath Transports . . . . . . . . 51 | 8.1.7. Policy for using Multipath Transports . . . . . . . . 51 | |||
8.1.8. Bounds on Send or Receive Rate . . . . . . . . . . . 51 | 8.1.8. Bounds on Send or Receive Rate . . . . . . . . . . . 52 | |||
8.1.9. Group Connection Limit . . . . . . . . . . . . . . . 52 | 8.1.9. Group Connection Limit . . . . . . . . . . . . . . . 52 | |||
8.1.10. Isolate Session . . . . . . . . . . . . . . . . . . . 52 | 8.1.10. Isolate Session . . . . . . . . . . . . . . . . . . . 52 | |||
8.1.11. Read-only Connection Properties . . . . . . . . . . . 53 | 8.1.11. Read-only Connection Properties . . . . . . . . . . . 53 | |||
8.2. TCP-specific Properties: User Timeout Option (UTO) . . . 54 | 8.2. TCP-specific Properties: User Timeout Option (UTO) . . . 54 | |||
8.2.1. Advertised User Timeout . . . . . . . . . . . . . . . 54 | 8.2.1. Advertised User Timeout . . . . . . . . . . . . . . . 54 | |||
8.2.2. User Timeout Enabled . . . . . . . . . . . . . . . . 54 | 8.2.2. User Timeout Enabled . . . . . . . . . . . . . . . . 54 | |||
8.2.3. Timeout Changeable . . . . . . . . . . . . . . . . . 55 | 8.2.3. Timeout Changeable . . . . . . . . . . . . . . . . . 55 | |||
8.3. Connection Lifecycle Events . . . . . . . . . . . . . . . 55 | 8.3. Connection Lifecycle Events . . . . . . . . . . . . . . . 55 | |||
8.3.1. Soft Errors . . . . . . . . . . . . . . . . . . . . . 55 | 8.3.1. Soft Errors . . . . . . . . . . . . . . . . . . . . . 55 | |||
8.3.2. Path change . . . . . . . . . . . . . . . . . . . . . 55 | 8.3.2. Path change . . . . . . . . . . . . . . . . . . . . . 55 | |||
skipping to change at page 14, line 16 ¶ | skipping to change at page 14, line 16 ¶ | |||
Selection Properties can be queried on Connections and Messages. | Selection Properties can be queried on Connections and Messages. | |||
Connection Properties can be set on Connections and Preconnections; | Connection Properties can be set on Connections and Preconnections; | |||
when set on Preconnections, they act as an initial default for the | when set on Preconnections, they act as an initial default for the | |||
resulting Connections. Message Properties can be set on Messages, | resulting Connections. Message Properties can be set on Messages, | |||
Connections, and Preconnections; when set on the latter two, they act | Connections, and Preconnections; when set on the latter two, they act | |||
as an initial default for the Messages sent over those Connections, | as an initial default for the Messages sent over those Connections, | |||
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. | |||
4.1. Transport Property Names | 4.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. Specifically, the following | which words may be separated by hyphens. Specifically, the following | |||
skipping to change at page 15, line 5 ¶ | skipping to change at page 15, line 5 ¶ | |||
the consistency resulting from the use of visually similar | the consistency resulting from the use of visually similar | |||
symbols. | symbols. | |||
Transport Property Names are hierarchically organized in the form | Transport Property Names are hierarchically organized in the form | |||
[<Namespace>.]<PropertyName>. | [<Namespace>.]<PropertyName>. | |||
* 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. | |||
* 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., a tcp Connection could support a TCP-specific | |||
IETF protocols, property names under these namespaces SHOULD be | Transport Property, such as the user timeout value, in a Protocol- | |||
defined in an RFC. | specific Property called tcp.userTimeoutValue (see Section 8.2). | |||
* 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. | |||
* For IETF protocols, the name of a Protocol-specific Property | ||||
SHOULD be specified in an IETF document published in the RFC | ||||
Series. | ||||
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) are reserved for Protocol Specific | numbers/protocol-numbers.xhtml) are reserved for Protocol-specific | |||
Properties and MUST NOT be used for vendor or implementation-specific | Properties and MUST NOT be used for vendor or implementation-specific | |||
properties. Avoid using any of the terms listed as keywords in the | properties. Avoid using any of the terms listed as keywords in the | |||
protocol numbers registry as any part of a vendor- or implementation- | protocol numbers registry as any part of a vendor- or implementation- | |||
specific property name. | specific property name. | |||
4.2. Transport Property Types | 4.2. Transport Property Types | |||
Each Transport Property has one of the basic types described in | Each Transport Property has one of the basic types described in | |||
Section 1.1. | Section 1.1. | |||
skipping to change at page 18, line 40 ¶ | skipping to change at page 18, line 40 ¶ | |||
* Interface name (string), e.g., to qualify link-local or multicast | * Interface name (string), e.g., to qualify link-local or multicast | |||
addresses (see Section 6.1.2 for details): | addresses (see Section 6.1.2 for details): | |||
LocalSpecifier.WithInterface("en0") | LocalSpecifier.WithInterface("en0") | |||
Note that an IPv6 address specified with a scope (e.g. | Note that an IPv6 address specified with a scope (e.g. | |||
2001:db8:4920:e29d:a420:7461:7073:0a%en0) is equivalent to | 2001:db8:4920:e29d:a420:7461:7073:0a%en0) is equivalent to | |||
WithIPv6Address with an unscoped address and WithInterface together. | WithIPv6Address with an unscoped address and WithInterface together. | |||
An Endpoint cannot have multiple identifiers of a same type set. | An Endpoint MUST NOT be configured with multiple identifiers of the | |||
That is, an endpoint cannot have two IP addresses specified. Two | same type. For example, an endpoint cannot have two IP addresses | |||
separate IP addresses are represented as two Endpoint Objects. If a | specified. Two separate IP addresses are represented as two Endpoint | |||
Preconnection specifies a Remote Endpoint with a specific IP address | Objects. If a Preconnection specifies a Remote Endpoint with a | |||
set, it will only establish Connections to that IP address. If, on | specific IP address set, it will only establish Connections to that | |||
the other hand, the Remote Endpoint specifies a hostname but no | IP address. If, on the other hand, the Remote Endpoint specifies a | |||
addresses, the Connection can perform name resolution and attempt | hostname but no addresses, the Connection can perform name resolution | |||
using any address derived from the original hostname of the Remote | and attempt using any address derived from the original hostname of | |||
Endpoint. Note that multiple Remote Endpoints can be added to a | the Remote Endpoint. Note that multiple Remote Endpoints can be | |||
Preconnection, as discussed in Section 7.5. | added to a Preconnection, as discussed in Section 7.5. | |||
The Transport Services system resolves names internally, when the | The Transport Services system resolves names internally, when the | |||
Initiate(), Listen(), or Rendezvous() method is called to establish a | Initiate(), Listen(), or Rendezvous() method is called to establish a | |||
Connection. Privacy considerations for the timing of this resolution | Connection. Privacy considerations for the timing of this resolution | |||
are given in Section 13. | are given in Section 13. | |||
The Resolve() action on a Preconnection can be used by the | The Resolve() action on a Preconnection can be used by the | |||
application to force early binding when required, for example with | application to force early binding when required, for example with | |||
some Network Address Translator (NAT) traversal protocols (see | some Network Address Translator (NAT) traversal protocols (see | |||
Section 7.3). | Section 7.3). | |||
skipping to change at page 43, line 45 ¶ | skipping to change at page 43, line 45 ¶ | |||
all others. For example, changing connTimeout (see Section 8.1.3) on | all others. For example, changing connTimeout (see Section 8.1.3) on | |||
one Connection in a Connection Group will automatically make the same | one Connection in a Connection Group will automatically make the same | |||
change to this Connection Property for all other Connections in the | change to this Connection Property for all other Connections in the | |||
Connection Group. Like all other Properties, connPriority is copied | Connection Group. Like all other Properties, connPriority is copied | |||
to the new Connection when calling Clone(), but in this case, a later | to the new Connection when calling Clone(), but in this case, a later | |||
change to the connPriority on one Connection does not change it on | change to the connPriority on one Connection does not change it on | |||
the other Connections in the same Connection Group. | the other Connections in the same Connection Group. | |||
The optional connectionProperties parameter allows passing Transport | The optional connectionProperties parameter allows passing Transport | |||
Properties that control the behavior of the underlying stream or | Properties that control the behavior of the underlying stream or | |||
connection to be created, e.g., protocol-specific properties to | connection to be created, e.g., Protocol-specific Properties to | |||
request specific stream IDs for SCTP or QUIC. | request specific stream IDs for SCTP or QUIC. | |||
Message Properties set on a Connection also apply only to that | Message Properties set on a Connection also apply only to that | |||
Connection. | Connection. | |||
A new Connection created by Clone can have a Message Framer assigned | A new Connection created by Clone can have a Message Framer assigned | |||
via the optional framer parameter of the Clone Action. If this | via the optional framer parameter of the Clone Action. If this | |||
parameter is not supplied, the stack of Message Framers associated | parameter is not supplied, the stack of Message Framers associated | |||
with a Connection is copied to the cloned Connection when calling | with a Connection is copied to the cloned Connection when calling | |||
Clone. Then, a cloned Connection has the same stack of Message | Clone. Then, a cloned Connection has the same stack of Message | |||
skipping to change at page 46, line 8 ¶ | skipping to change at page 46, line 8 ¶ | |||
information may be available about the state of the connection via | information may be available about the state of the connection via | |||
Soft Errors. | Soft Errors. | |||
Connection Properties represent the configuration and state of the | Connection Properties represent the configuration and state of the | |||
selected Protocol Stack(s) backing a Connection. These Connection | selected Protocol Stack(s) backing a Connection. These Connection | |||
Properties may be Generic, applying regardless of transport protocol, | Properties may be Generic, applying regardless of transport protocol, | |||
or Specific, applicable to a single implementation of a single | or Specific, applicable to a single implementation of a single | |||
transport protocol stack. Generic Connection Properties are defined | transport protocol stack. Generic Connection Properties are defined | |||
in Section 8.1 below. | in Section 8.1 below. | |||
Protocol Specific Properties are defined in a transport- and | Protocol-specific Properties are defined in a transport- and | |||
implementation-specific way to permit more specialized protocol | implementation-specific way to permit more specialized protocol | |||
features to be used. Too much reliance by an application on Protocol | features to be used. Too much reliance by an application on | |||
Specific Properties can significantly reduce the flexibility of a | Protocol-specific Properties can significantly reduce the flexibility | |||
transport services implementation to make appropriate selection and | of a transport services implementation to make appropriate selection | |||
configuration choices. Therefore, it is RECOMMENDED that Protocol | and configuration choices. Therefore, it is RECOMMENDED that | |||
Properties are used for properties common across different protocols | Protocol-specific Properties are used for properties common across | |||
and that Protocol Specific Properties are only used where specific | different protocols and that Protocol-specific Properties are only | |||
protocols or properties are necessary. | used where specific protocols or properties are necessary. | |||
The application can set and query Connection Properties on a per- | The application can set and query Connection Properties on a per- | |||
Connection basis. Connection Properties that are not read-only can | Connection basis. Connection Properties that are not read-only can | |||
be set during pre-establishment (see Section 6.2), as well as on | be set during pre-establishment (see Section 6.2), as well as on | |||
connections directly using the SetProperty action: | connections directly using the SetProperty action: | |||
Connection.SetProperty(property, value) | Connection.SetProperty(property, value) | |||
Note that changing one of the Connection Properties on one Connection | Note that changing one of the Connection Properties on one Connection | |||
in a Connection Group will also change it for all other Connections | in a Connection Group will also change it for all other Connections | |||
skipping to change at page 47, line 45 ¶ | skipping to change at page 48, line 4 ¶ | |||
that enables applications to express their preference for protocols | that enables applications to express their preference for protocols | |||
providing a supporting transport feature. | providing a supporting transport feature. | |||
8.1.1. Required Minimum Corruption Protection Coverage for Receiving | 8.1.1. Required Minimum Corruption Protection Coverage for Receiving | |||
Name: recvChecksumLen | Name: recvChecksumLen | |||
Type: Integer (non-negative) or Full Coverage | Type: Integer (non-negative) or Full Coverage | |||
Default: Full Coverage | Default: Full Coverage | |||
If this property is an Integer, it specifies the minimum number of | If this property is an Integer, it specifies the minimum number of | |||
bytes in a received message that need to be covered by a checksum. A | bytes in a received message that need to be covered by a checksum. A | |||
receiving endpoint will not forward messages that have less coverage | receiving endpoint will not forward messages that have less coverage | |||
to the application. The application is responsible for handling any | to the application. The application is responsible for handling any | |||
corruption within the non-protected part of the message [RFC8085]. A | corruption within the non-protected part of the message [RFC8085]. A | |||
special value of 0 means that a received packet may also have a zero | special value of 0 means that a received packet may also have a zero | |||
checksum field. | checksum field, and the enumerated value Full Coverage means that the | |||
entire Message needs to be protected by a checksum. | ||||
8.1.2. Connection Priority | 8.1.2. Connection Priority | |||
Name: connPriority | Name: connPriority | |||
Type: Integer (non-negative) | Type: Integer (non-negative) | |||
Default: 100 | Default: 100 | |||
This property is a non-negative integer representing the priority of | This property is a non-negative integer representing the priority of | |||
skipping to change at page 48, line 44 ¶ | skipping to change at page 49, line 4 ¶ | |||
deliver data to the Remote Endpoint. Adjusting this property will | deliver data to the Remote Endpoint. Adjusting this property will | |||
only take effect when the underlying stack supports reliability. If | only take effect when the underlying stack supports reliability. If | |||
this property has the enumerated value Disabled, it means that no | this property has the enumerated value Disabled, it means that no | |||
timeout is scheduled. | timeout is scheduled. | |||
8.1.4. Timeout for keep alive packets | 8.1.4. Timeout for keep alive packets | |||
Name: keepAliveTimeout | Name: keepAliveTimeout | |||
Type: Numeric (non-negative) or Disabled | Type: Numeric (non-negative) or Disabled | |||
Default: Disabled | ||||
Default: Implementation-defined | ||||
A Transport Services API can request a protocol that supports sending | A Transport Services API can request a protocol that supports sending | |||
keep alive packets Section 6.2.10. If this property is Numeric, it | keep alive packets Section 6.2.10. If this property is Numeric, it | |||
specifies the maximum length of time an idle connection (one for | specifies the maximum length of time an idle connection (one for | |||
which no transport packets have been sent) should wait before the | which no transport packets have been sent) should wait before the | |||
Local Endpoint sends a keep-alive packet to the Remote Endpoint. | Local Endpoint sends a keep-alive packet to the Remote Endpoint. | |||
Adjusting this property will only take effect when the underlying | Adjusting this property will only take effect when the underlying | |||
stack supports sending keep-alive packets. Guidance on setting this | stack supports sending keep-alive packets. Guidance on setting this | |||
value for connection-less transports is provided in [RFC8085]. A | value for connection-less transports is provided in [RFC8085]. A | |||
value greater than the connection timeout (Section 8.1.3) or the | value greater than the connection timeout (Section 8.1.3) or the | |||
skipping to change at page 49, line 34 ¶ | skipping to change at page 49, line 42 ¶ | |||
Name: connCapacityProfile | Name: connCapacityProfile | |||
Type: Enumeration | Type: Enumeration | |||
Default: Default Profile (Best Effort) | Default: Default Profile (Best Effort) | |||
This property specifies the desired network treatment for traffic | This property specifies the desired network treatment for traffic | |||
sent by the application and the tradeoffs the application is prepared | sent by the application and the tradeoffs the application is prepared | |||
to make in path and protocol selection to receive that desired | to make in path and protocol selection to receive that desired | |||
treatment. When the capacity profile is set to a value other than | treatment. When the capacity profile is set to a value other than | |||
Default, z Transport Services system SHOULD select paths and | Default, the Transport Services system SHOULD select paths and | |||
configure protocols to optimize the tradeoff between delay, delay | configure protocols to optimize the tradeoff between delay, delay | |||
variation, and efficient use of the available capacity based on the | variation, and efficient use of the available capacity based on the | |||
capacity profile specified. How this is realized is implementation- | capacity profile specified. How this is realized is implementation- | |||
specific. The Capacity Profile MAY also be used to set markings on | specific. The Capacity Profile MAY also be used to set markings on | |||
the wire for Protocol Stacks supporting this. Recommendations for | the wire for Protocol Stacks supporting this. Recommendations for | |||
use with DSCP are provided below for each profile; note that when a | use with DSCP are provided below for each profile; note that when a | |||
Connection is multiplexed, the guidelines in Section 6 of [RFC7657] | Connection is multiplexed, the guidelines in Section 6 of [RFC7657] | |||
apply. | apply. | |||
The following values are valid for the Capacity Profile: | The following values are valid for the Capacity Profile: | |||
skipping to change at page 51, line 44 ¶ | skipping to change at page 52, line 5 ¶ | |||
the scheduling might choose to use a higher-latency path. Traffic | the scheduling might choose to use a higher-latency path. Traffic | |||
can be scheduled such that data may be transmitted on multiple | can be scheduled such that data may be transmitted on multiple | |||
paths in parallel to achieve a lower latency. The specific | paths in parallel to achieve a lower latency. The specific | |||
scheduling algorithm is implementation-specific. | scheduling algorithm is implementation-specific. | |||
Aggregate: The connection ought to attempt to use multiple paths in | Aggregate: The connection ought to attempt to use multiple paths in | |||
parallel to maximize available capacity and possibly overcome the | parallel to maximize available capacity and possibly overcome the | |||
capacity limitations of the individual paths. The actual strategy | capacity limitations of the individual paths. The actual strategy | |||
is implementation specific. | is implementation specific. | |||
Note that this is a local choice - the Remote Endpoint can choose a | Note that this is a local choice – the Remote Endpoint can choose a | |||
different policy. | different policy. | |||
8.1.8. Bounds on Send or Receive Rate | 8.1.8. Bounds on Send or Receive Rate | |||
Name: minSendRate / minRecvRate / maxSendRate / maxRecvRate | Name: minSendRate / minRecvRate / maxSendRate / maxRecvRate | |||
Type: Numeric (non-negative) or Unlimited / Numeric (non-negative) | Type: Numeric (non-negative) or Unlimited / Numeric (non-negative) | |||
or Unlimited / Numeric (non-negative) or Unlimited / Numeric (non- | or Unlimited / Numeric (non-negative) or Unlimited / Numeric (non- | |||
negative) or Unlimited | negative) or Unlimited | |||
skipping to change at page 56, line 27 ¶ | skipping to change at page 56, line 27 ¶ | |||
meta-data of the message, including Message Properties (see | meta-data of the message, including Message Properties (see | |||
Section 9.1.3) and framing meta-data (see Section 9.1.2.2). | Section 9.1.3) and framing meta-data (see Section 9.1.2.2). | |||
Therefore, a MessageContext object can be passed to the Send action | Therefore, a MessageContext object can be passed to the Send action | |||
and is returned by each Send and Receive related event. | and is returned by each Send and Receive related event. | |||
Message Properties can be set and queried using the Message Context: | Message Properties can be set and queried using the Message Context: | |||
MessageContext.add(property, value) | MessageContext.add(property, value) | |||
PropertyValue := MessageContext.get(property) | PropertyValue := MessageContext.get(property) | |||
These Message Properties may be generic properties or Protocol | These Message Properties may be generic properties or Protocol- | |||
Specific Properties. | specific Properties. | |||
For MessageContexts returned by send Events (see Section 9.2.2) and | For MessageContexts returned by send Events (see Section 9.2.2) and | |||
receive Events (see Section 9.3.2), the application can query | receive Events (see Section 9.3.2), the application can query | |||
information about the Local and Remote Endpoint: | information about the Local and Remote Endpoint: | |||
RemoteEndpoint := MessageContext.GetRemoteEndpoint() | RemoteEndpoint := MessageContext.GetRemoteEndpoint() | |||
LocalEndpoint := MessageContext.GetLocalEndpoint() | LocalEndpoint := MessageContext.GetLocalEndpoint() | |||
9.1.2. Message Framers | 9.1.2. Message Framers | |||
skipping to change at page 60, line 25 ¶ | skipping to change at page 60, line 25 ¶ | |||
The following Message Properties are supported: | The following Message Properties are supported: | |||
9.1.3.1. Lifetime | 9.1.3.1. Lifetime | |||
Name: msgLifetime | Name: msgLifetime | |||
Type: Numeric (non-negative) | Type: Numeric (non-negative) | |||
Default: infinite | Default: infinite | |||
The Lifetime specifies how long a particular Message can wait to be | The Lifetime specifies how long a particular Message can wait in the | |||
sent to the Remote Endpoint before it is irrelevant and no longer | Transport Services system before it is sent to the Remote Endpoint. | |||
needs to be (re-)transmitted. This is a hint to the Transport | After this time, it is irrelevant and no longer needs to be | |||
Services implementation -- it is not guaranteed that a Message will | (re-)transmitted. This is a hint to the Transport Services | |||
not be sent when its Lifetime has expired. | implementation -- it is not guaranteed that a Message will not be | |||
sent when its Lifetime has expired. | ||||
Setting a Message's Lifetime to infinite indicates that the | Setting a Message's Lifetime to infinite indicates that the | |||
application does not wish to apply a time constraint on the | application does not wish to apply a time constraint on the | |||
transmission of the Message, but it does not express a need for | transmission of the Message, but it does not express a need for | |||
reliable delivery; reliability is adjustable per Message via the | reliable delivery; reliability is adjustable per Message via the | |||
perMsgReliability property (see Section 9.1.3.7). The type and units | perMsgReliability property (see Section 9.1.3.7). The type and units | |||
of Lifetime are implementation-specific. | of Lifetime are implementation-specific. | |||
9.1.3.2. Priority | 9.1.3.2. Priority | |||
skipping to change at page 66, line 6 ¶ | skipping to change at page 66, line 6 ¶ | |||
9.2.1. Basic Sending | 9.2.1. Basic Sending | |||
The most basic form of sending on a connection involves enqueuing a | The most basic form of sending on a connection involves enqueuing a | |||
single Data block as a complete Message with default Message | single Data block as a complete Message with default Message | |||
Properties. | Properties. | |||
messageData := "hello" | messageData := "hello" | |||
Connection.Send(messageData) | Connection.Send(messageData) | |||
The interpretation of a Message to be sent is dependent on the | The interpretation of a Message to be sent is dependent on the | |||
implementation, and on the constraints on the Protocol Stacks implied | implementation, and on the constraints on the Protocol Stacks implied | |||
by the Connection's transport properties. For example, a Message may | by the Connection’s transport properties. For example, a Message may | |||
be a single datagram for UDP Connections; or an HTTP Request for HTTP | be a single datagram for UDP Connections; or an HTTP Request for HTTP | |||
Connections. | Connections. | |||
Some transport protocols can deliver arbitrarily sized Messages, but | Some transport protocols can deliver arbitrarily sized Messages, but | |||
other protocols constrain the maximum Message size. Applications can | other protocols constrain the maximum Message size. Applications can | |||
query the Connection Property sendMsgMaxLen (Section 8.1.11.3) to | query the Connection Property sendMsgMaxLen (Section 8.1.11.3) to | |||
determine the maximum size allowed for a single Message. If a | determine the maximum size allowed for a single Message. If a | |||
Message is too large to fit in the Maximum Message Size for the | Message is too large to fit in the Maximum Message Size for the | |||
Connection, the Send will fail with a SendError event | Connection, the Send will fail with a SendError event | |||
(Section 9.2.2.3). For example, it is invalid to send a Message over | (Section 9.2.2.3). For example, it is invalid to send a Message over | |||
skipping to change at page 79, line 50 ¶ | skipping to change at page 79, line 50 ¶ | |||
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. | |||
15. References | 15. References | |||
15.1. Normative References | 15.1. Normative References | |||
[I-D.ietf-taps-arch] | [I-D.ietf-taps-arch] | |||
Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., and | Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., and | |||
C. Perkins, "An Architecture for Transport Services", Work | C. Perkins, "An Architecture for Transport Services", Work | |||
in Progress, Internet-Draft, draft-ietf-taps-arch-15, 20 | in Progress, Internet-Draft, draft-ietf-taps-arch-16, 9 | |||
October 2022, <https://datatracker.ietf.org/doc/html/ | March 2023, <https://datatracker.ietf.org/doc/html/draft- | |||
draft-ietf-taps-arch-15>. | ietf-taps-arch-16>. | |||
[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/rfc/rfc2119>. | <https://www.rfc-editor.org/rfc/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/rfc/rfc2914>. | <https://www.rfc-editor.org/rfc/rfc2914>. | |||
skipping to change at page 80, line 41 ¶ | skipping to change at page 80, line 41 ¶ | |||
"Temporary Address Extensions for Stateless Address | "Temporary Address Extensions for Stateless Address | |||
Autoconfiguration in IPv6", RFC 8981, | Autoconfiguration in IPv6", RFC 8981, | |||
DOI 10.17487/RFC8981, February 2021, | DOI 10.17487/RFC8981, February 2021, | |||
<https://www.rfc-editor.org/rfc/rfc8981>. | <https://www.rfc-editor.org/rfc/rfc8981>. | |||
15.2. Informative References | 15.2. Informative References | |||
[I-D.ietf-taps-impl] | [I-D.ietf-taps-impl] | |||
Brunstrom, A., Pauly, T., Enghardt, R., Tiesel, P. S., and | Brunstrom, A., Pauly, T., Enghardt, R., Tiesel, P. S., and | |||
M. Welzl, "Implementing Interfaces to Transport Services", | M. Welzl, "Implementing Interfaces to Transport Services", | |||
Work in Progress, Internet-Draft, draft-ietf-taps-impl-14, | Work in Progress, Internet-Draft, draft-ietf-taps-impl-15, | |||
20 October 2022, <https://datatracker.ietf.org/doc/html/ | 9 March 2023, <https://datatracker.ietf.org/doc/html/ | |||
draft-ietf-taps-impl-14>. | draft-ietf-taps-impl-15>. | |||
[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/rfc/rfc2474>. | <https://www.rfc-editor.org/rfc/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, | |||
End of changes. 24 change blocks. | ||||
51 lines changed or deleted | 55 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/ |