< draft-ietf-taps-impl-02.txt   draft-ietf-taps-impl-03.txt >
TAPS Working Group A. Brunstrom, Ed. TAPS Working Group A. Brunstrom, Ed.
Internet-Draft Karlstad University Internet-Draft Karlstad University
Intended status: Informational T. Pauly, Ed. Intended status: Informational T. Pauly, Ed.
Expires: April 25, 2019 Apple Inc. Expires: September 12, 2019 Apple Inc.
T. Enghardt T. Enghardt
TU Berlin TU Berlin
K-J. Grinnemo K-J. Grinnemo
Karlstad University Karlstad University
T. Jones T. Jones
University of Aberdeen University of Aberdeen
P. Tiesel P. Tiesel
TU Berlin TU Berlin
C. Perkins C. Perkins
University of Glasgow University of Glasgow
M. Welzl M. Welzl
University of Oslo University of Oslo
October 22, 2018 March 11, 2019
Implementing Interfaces to Transport Services Implementing Interfaces to Transport Services
draft-ietf-taps-impl-02 draft-ietf-taps-impl-03
Abstract Abstract
The Transport Services architecture [I-D.ietf-taps-arch] defines a The Transport Services architecture [I-D.ietf-taps-arch] defines a
system that allows applications to use transport networking protocols system that allows applications to use transport networking protocols
flexibly. This document serves as a guide to implementation on how flexibly. This document serves as a guide to implementation on how
to build such a system. to build such a system.
Status of This Memo Status of This Memo
skipping to change at page 1, line 46 skipping to change at page 1, line 46
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 April 25, 2019. This Internet-Draft will expire on September 12, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2019 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/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Implementing Basic Objects . . . . . . . . . . . . . . . . . 3 2. Implementing Basic Objects . . . . . . . . . . . . . . . . . 3
3. Implementing Pre-Establishment . . . . . . . . . . . . . . . 4 3. Implementing Pre-Establishment . . . . . . . . . . . . . . . 4
3.1. Configuration-time errors . . . . . . . . . . . . . . . . 4 3.1. Configuration-time errors . . . . . . . . . . . . . . . . 5
3.2. Role of system policy . . . . . . . . . . . . . . . . . . 5 3.2. Role of system policy . . . . . . . . . . . . . . . . . . 5
4. Implementing Connection Establishment . . . . . . . . . . . . 6 4. Implementing Connection Establishment . . . . . . . . . . . . 6
4.1. Candidate Gathering . . . . . . . . . . . . . . . . . . . 7 4.1. Candidate Gathering . . . . . . . . . . . . . . . . . . . 7
4.1.1. Structuring Options as a Tree . . . . . . . . . . . . 7 4.1.1. Structuring Options as a Tree . . . . . . . . . . . . 7
4.1.2. Branch Types . . . . . . . . . . . . . . . . . . . . 9 4.1.2. Branch Types . . . . . . . . . . . . . . . . . . . . 9
4.2. Branching Order-of-Operations . . . . . . . . . . . . . . 11 4.2. Branching Order-of-Operations . . . . . . . . . . . . . . 11
4.3. Sorting Branches . . . . . . . . . . . . . . . . . . . . 12 4.3. Sorting Branches . . . . . . . . . . . . . . . . . . . . 12
4.4. Candidate Racing . . . . . . . . . . . . . . . . . . . . 13 4.4. Candidate Racing . . . . . . . . . . . . . . . . . . . . 13
4.4.1. Delayed Racing . . . . . . . . . . . . . . . . . . . 14 4.4.1. Delayed . . . . . . . . . . . . . . . . . . . . . . . 14
4.4.2. Failover . . . . . . . . . . . . . . . . . . . . . . 15 4.4.2. Failover . . . . . . . . . . . . . . . . . . . . . . 15
4.5. Completing Establishment . . . . . . . . . . . . . . . . 15 4.5. Completing Establishment . . . . . . . . . . . . . . . . 15
4.5.1. Determining Successful Establishment . . . . . . . . 16 4.5.1. Determining Successful Establishment . . . . . . . . 16
4.6. Establishing multiplexed connections . . . . . . . . . . 17 4.6. Establishing multiplexed connections . . . . . . . . . . 17
4.7. Handling racing with "unconnected" protocols . . . . . . 17 4.7. Handling racing with "unconnected" protocols . . . . . . 17
4.8. Implementing listeners . . . . . . . . . . . . . . . . . 18 4.8. Implementing listeners . . . . . . . . . . . . . . . . . 18
4.8.1. Implementing listeners for Connected Protocols . . . 18 4.8.1. Implementing listeners for Connected Protocols . . . 18
4.8.2. Implementing listeners for Unconnected Protocols . . 18 4.8.2. Implementing listeners for Unconnected Protocols . . 18
4.8.3. Implementing listeners for Multiplexed Protocols . . 19 4.8.3. Implementing listeners for Multiplexed Protocols . . 18
5. Implementing Data Transfer . . . . . . . . . . . . . . . . . 19 5. Implementing Data Transfer . . . . . . . . . . . . . . . . . 19
5.1. Data transfer for streams, datagrams, and frames . . . . 19 5.1. Data transfer for streams, datagrams, and frames . . . . 19
5.1.1. Sending Messages . . . . . . . . . . . . . . . . . . 19 5.1.1. Sending Messages . . . . . . . . . . . . . . . . . . 19
5.1.2. Receiving Messages . . . . . . . . . . . . . . . . . 21 5.1.2. Receiving Messages . . . . . . . . . . . . . . . . . 21
5.2. Handling of data for fast-open protocols . . . . . . . . 22 5.2. Handling of data for fast-open protocols . . . . . . . . 22
6. Implementing Maintenance . . . . . . . . . . . . . . . . . . 23 6. Implementing Maintenance . . . . . . . . . . . . . . . . . . 23
6.1. Changing Protocol Properties . . . . . . . . . . . . . . 23 6.1. Managing Connections . . . . . . . . . . . . . . . . . . 23
6.2. Handling Path Changes . . . . . . . . . . . . . . . . . . 24 6.2. Handling Path Changes . . . . . . . . . . . . . . . . . . 24
7. Implementing Termination . . . . . . . . . . . . . . . . . . 24 7. Implementing Termination . . . . . . . . . . . . . . . . . . 24
8. Cached State . . . . . . . . . . . . . . . . . . . . . . . . 25 8. Cached State . . . . . . . . . . . . . . . . . . . . . . . . 25
8.1. Protocol state caches . . . . . . . . . . . . . . . . . . 25 8.1. Protocol state caches . . . . . . . . . . . . . . . . . . 26
8.2. Performance caches . . . . . . . . . . . . . . . . . . . 26 8.2. Performance caches . . . . . . . . . . . . . . . . . . . 26
9. Specific Transport Protocol Considerations . . . . . . . . . 27 9. Specific Transport Protocol Considerations . . . . . . . . . 27
9.1. TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 9.1. TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
9.2. UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 9.2. UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
9.3. SCTP . . . . . . . . . . . . . . . . . . . . . . . . . . 28 9.3. SCTP . . . . . . . . . . . . . . . . . . . . . . . . . . 28
9.4. TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 9.4. TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
9.5. HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . 29 9.5. HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . 29
9.6. QUIC . . . . . . . . . . . . . . . . . . . . . . . . . . 29 9.6. QUIC . . . . . . . . . . . . . . . . . . . . . . . . . . 29
9.7. HTTP/2 transport . . . . . . . . . . . . . . . . . . . . 29 9.7. HTTP/2 transport . . . . . . . . . . . . . . . . . . . . 30
10. Rendezvous and Environment Discovery . . . . . . . . . . . . 30 10. Rendezvous and Environment Discovery . . . . . . . . . . . . 30
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 32
12. Security Considerations . . . . . . . . . . . . . . . . . . . 32 12. Security Considerations . . . . . . . . . . . . . . . . . . . 32
12.1. Considerations for Candidate Gathering . . . . . . . . . 32 12.1. Considerations for Candidate Gathering . . . . . . . . . 32
12.2. Considerations for Candidate Racing . . . . . . . . . . 32 12.2. Considerations for Candidate Racing . . . . . . . . . . 32
13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 33
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 33 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 33
14.1. Normative References . . . . . . . . . . . . . . . . . . 33 14.1. Normative References . . . . . . . . . . . . . . . . . . 33
14.2. Informative References . . . . . . . . . . . . . . . . . 34 14.2. Informative References . . . . . . . . . . . . . . . . . 34
Appendix A. Additional Properties . . . . . . . . . . . . . . . 34 Appendix A. Additional Properties . . . . . . . . . . . . . . . 35
A.1. Properties Affecting Sorting of Branches . . . . . . . . 35 A.1. Properties Affecting Sorting of Branches . . . . . . . . 35
A.2. Send Parameters . . . . . . . . . . . . . . . . . . . . . 35 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36
1. Introduction 1. Introduction
The Transport Services architecture [I-D.ietf-taps-arch] defines a The Transport Services architecture [I-D.ietf-taps-arch] defines a
system that allows applications to use transport networking protocols system that allows applications to use transport networking protocols
flexibly. The interface such a system exposes to applications is flexibly. The interface such a system exposes to applications is
defined as the Transport Services API [I-D.ietf-taps-interface]. defined as the Transport Services API [I-D.ietf-taps-interface].
This API is designed to be generic across multiple transport This API is designed to be generic across multiple transport
protocols and sets of protocols features. protocols and sets of protocols features.
skipping to change at page 4, line 36 skipping to change at page 4, line 36
stream, or an HTTP/2 stream. stream, or an HTTP/2 stream.
Listener objects are created with a Preconnection, at which point Listener objects are created with a Preconnection, at which point
their configuration should be considered immutable by the their configuration should be considered immutable by the
implementation. The process of listening is described in implementation. The process of listening is described in
Section 4.8. Section 4.8.
3. Implementing Pre-Establishment 3. Implementing Pre-Establishment
During pre-establishment the application specifies the Endpoints to During pre-establishment the application specifies the Endpoints to
be used for communication as well as its preferences regarding be used for communication as well as its preferences via Selection
Protocol and Path Selection. The implementation stores these objects Properties and, if desired, also Connection Properties. Generally,
and properties as part of the Preconnection object for use during Connection Properties should be configured as early as possible, as
connection establishment. For Protocol and Path Selection Properties they may serve as input to decisions that are made by the
that are not provided by the application, the implementation must use implementation (the Capacity Profile may guide usage of a protocol
the default values specified in the Transport Services API offering scavenger-type congestion control, for example). In the
([I-D.ietf-taps-interface]). remainder of this document, we only refer to Selection Properties
because they are the more typical case and have to be handled by all
implementations.
The implementation stores these objects and properties as part of the
Preconnection object for use during connection establishment. For
Selection Properties that are not provided by the application, the
implementation must use the default values specified in the Transport
Services API ([I-D.ietf-taps-interface]).
3.1. Configuration-time errors 3.1. Configuration-time errors
The transport system should have a list of supported protocols The transport system should have a list of supported protocols
available, which each have transport features reflecting the available, which each have transport features reflecting the
capabilities of the protocol. Once an application specifies its capabilities of the protocol. Once an application specifies its
Transport Parameters, the transport system should match the required Transport Parameters, the transport system should match the required
and prohibited properties against the transport features of the and prohibited properties against the transport features of the
available protocols. available protocols.
skipping to change at page 5, line 30 skipping to change at page 5, line 39
"Configure Reliability per Message", this mismatch should result "Configure Reliability per Message", this mismatch should result
in an error. in an error.
It is important to fail as early as possible in such cases in order It is important to fail as early as possible in such cases in order
to avoid allocating resources, e.g., to endpoint resolution, only to to avoid allocating resources, e.g., to endpoint resolution, only to
find out later that there is no protocol that satisfies the find out later that there is no protocol that satisfies the
requirements. requirements.
3.2. Role of system policy 3.2. Role of system policy
The properties specified during pre-establishment has a close The properties specified during pre-establishment have a close
connection to system policy. The implementation is responsible for connection to system policy. The implementation is responsible for
combining and reconciling several different sources of preferences combining and reconciling several different sources of preferences
when establishing Connections. These include, but are not limited when establishing Connections. These include, but are not limited
to: to:
1. Application preferences, i.e., preferences specified during the 1. Application preferences, i.e., preferences specified during the
pre-establishment such as Local Endpoint, Remote Endpoint, Path pre-establishment via Selection Properties.
Selection Properties, and Protocol Selection Properties.
2. Dynamic system policy, i.e., policy compiled from internally and 2. Dynamic system policy, i.e., policy compiled from internally and
externally acquired information about available network externally acquired information about available network
interfaces, supported transport protocols, and current/previous interfaces, supported transport protocols, and current/previous
Connections. Examples of ways to externally retrieve policy- Connections. Examples of ways to externally retrieve policy-
support information are through OS-specific statistics/ support information are through OS-specific statistics/
measurement tools and tools that reside on middleboxes and measurement tools and tools that reside on middleboxes and
routers. routers.
3. Default implementation policy, i.e., predefined policy by OS or 3. Default implementation policy, i.e., predefined policy by OS or
skipping to change at page 7, line 32 skipping to change at page 7, line 38
Any one of these sub-entries on the aggregate connection attempt Any one of these sub-entries on the aggregate connection attempt
would satisfy the original application intent. The concern of this would satisfy the original application intent. The concern of this
section is the algorithm defining which of these options to try, section is the algorithm defining which of these options to try,
when, and in what order. when, and in what order.
4.1. Candidate Gathering 4.1. Candidate Gathering
The step of gathering candidates involves identifying which paths, The step of gathering candidates involves identifying which paths,
protocols, and endpoints may be used for a given Connection. This protocols, and endpoints may be used for a given Connection. This
list is determined by the requirements, prohibitions, and preferences list is determined by the requirements, prohibitions, and preferences
of the application as specified in the Path Selection Properties and of the application as specified in the Selection Properties.
Protocol Selection Properties.
4.1.1. Structuring Options as a Tree 4.1.1. Structuring Options as a Tree
When an implementation responsible for connection establishment needs When an implementation responsible for connection establishment needs
to consider multiple options, it should logically structure these to consider multiple options, it should logically structure these
options as a hierarchical tree. Each leaf node of the tree options as a hierarchical tree. Each leaf node of the tree
represents a single, coherent connection attempt, with an Endpoint, a represents a single, coherent connection attempt, with an Endpoint, a
Path, and a set of protocols that can directly negotiate and send Path, and a set of protocols that can directly negotiate and send
data on the network. Each node in the tree that is not a leaf data on the network. Each node in the tree that is not a leaf
represents a connection attempt that is either underspecified, or represents a connection attempt that is either underspecified, or
skipping to change at page 12, line 20 skipping to change at page 12, line 25
Furthermore, the protocol stacks being attempted may influence or Furthermore, the protocol stacks being attempted may influence or
altogether change the endpoints being used. Adding a proxy to a altogether change the endpoints being used. Adding a proxy to a
connection's branch will change the endpoint to the proxy's IP connection's branch will change the endpoint to the proxy's IP
address or hostname. Choosing an alternate protocol may also modify address or hostname. Choosing an alternate protocol may also modify
the ports that should be selected. the ports that should be selected.
Branching for derived endpoints is the final step, and may have Branching for derived endpoints is the final step, and may have
multiple layers of derivation or resolution, such as DNS service multiple layers of derivation or resolution, such as DNS service
resolution and DNS hostname resolution. resolution and DNS hostname resolution.
For example, if the application has indicated both a preference for
WiFi over LTE and for a feature only available in SCTP, branches will
be first sorted accord to path selection, with WiFi at the top.
Then, branches with SCTP will be sorted to the top within their
subtree according to the properties influencing protocol selection.
However, if the implementation has cached the information that SCTP
is not available on the path over WiFi, there is no SCTP node in the
WiFi subtree. Here, the path over WiFi will be tried first, and, if
connection establishment succeeds, TCP will be used. So the
Selection Property of preferring WiFi takes precedence over the
Property that led to a preference for SCTP.
1. [www.example.com:80, Any, Any Stream]
1.1 [192.0.2.1:80, Wi-Fi, Any Stream]
1.1.1 [192.0.2.1:80, Wi-Fi, TCP]
1.2 [192.0.3.1:80, LTE, Any Stream]
1.2.1 [192.0.3.1:80, LTE, SCTP]
1.2.2 [192.0.3.1:80, LTE, TCP]
4.3. Sorting Branches 4.3. Sorting Branches
Implementations should sort the branches of the tree of connection Implementations should sort the branches of the tree of connection
options in order of their preference rank. Leaf nodes on branches options in order of their preference rank. Leaf nodes on branches
with higher rankings represent connection attempts that will be raced with higher rankings represent connection attempts that will be raced
first. Implementations should order the branches to reflect the first. Implementations should order the branches to reflect the
preferences expressed by the application for its new connection, preferences expressed by the application for its new connection,
including Protocol and Path Selection Properties, which are specified including Selection Properties, which are specified in
in [I-D.ietf-taps-interface]. [I-D.ietf-taps-interface].
In addition to the properties provided by the application, an In addition to the properties provided by the application, an
implementation may include additional criteria such as cached implementation may include additional criteria such as cached
performance estimates, see Section 8.2, or system policy, see performance estimates, see Section 8.2, or system policy, see
Section 3.2, in the ranking. Two examples of how the Protocol and Section 3.2, in the ranking. Two examples of how Selection and
Path Selection Properties may be used to sort branches are provided Connection Properties may be used to sort branches are provided
below: below:
o Interface Type: If the application specifies an interface type to o "Interface Instance or Type": If the application specifies an
be preferred or avoided, implementations should rank paths interface type to be preferred or avoided, implementations should
accordingly. If the application specifies an interface type to be rank paths accordingly. If the application specifies an interface
required or prohibited, we expect an implementation to not include type to be required or prohibited, we expect an implementation to
the non-conforming paths into the three. not include the non-conforming paths into the three.
o Capacity Profile: An implementation may use the Capacity Profile o "Capacity Profile": An implementation may use the Capacity Profile
to prefer paths optimized for the application's expected traffic to prefer paths optimized for the application's expected traffic
pattern according to cached performance estimates, see pattern according to cached performance estimates, see
Section 8.2: Section 8.2:
* Interactive/Low Latency: Prefer paths with the lowest expected * Scavenger: Prefer paths with the highest expected available
Round Trip Time bandwidth, based on observed maximum throughput
* Constant Rate: Prefer paths that can satisfy the requested
Stream Send or Stream Receive Bitrate, based on observed
maximum throughput
* Scavenger/Bulk: Prefer paths with the highest expected * Low Latency/Interactive: Prefer paths with the lowest expected
available bandwidth, based on observed maximum throughput Round Trip Time
[Note: See Appendix A.1 for additional examples related to Properties * Constant-Rate Streaming: Prefer paths that can satisfy the
under discussion.] requested Stream Send or Stream Receive Bitrate, based on
observed maximum throughput
Implementations should process properties in the following order: Implementations should process properties in the following order:
Prohibit, Require, Prefer, Avoid. If Protocol or Path Selection Prohibit, Require, Prefer, Avoid. If Selection Properties contain
Properties contain any prohibited properties, the implementation any prohibited properties, the implementation should first purge
should first purge branches containing nodes with these properties. branches containing nodes with these properties. For required
For required properties, it should only keep branches that satisfy properties, it should only keep branches that satisfy these
these requirements. Finally, it should order branches according to requirements. Finally, it should order branches according to
preferred properties, and finally use avoided properties as a preferred properties, and finally use avoided properties as a
tiebreaker. tiebreaker.
For Require and Avoid, Path Selection Properties take precedence over
Protocol Selection Properties. For example, if the application has
indicated both a preference for WiFi over LTE and for a feature only
available in SCTP, branches will be first sorted accord to the Path
Selection Property, with WiFi at the top. Then, branches with SCTP
will be sorted to the top within their subtree according to the
Protocol Selection Property. However, if the implementation has
cached the information that SCTP is not available on the path over
WiFi, there is no SCTP node in the WiFi subtree. Here, the path over
WiFi will be tried first, and, if connection establishment succeeds,
TCP will be used. So the Path Selection Property of preferring WiFi
takes precedence over the Protocol Selection Property of preferring
SCTP.
1. [www.example.com:80, Any, Any Stream]
1.1 [192.0.2.1:80, Wi-Fi, Any Stream]
1.1.1 [192.0.2.1:80, Wi-Fi, TCP]
1.2 [192.0.3.1:80, LTE, Any Stream]
1.2.1 [192.0.3.1:80, LTE, SCTP]
1.2.2 [192.0.3.1:80, LTE, TCP]
4.4. Candidate Racing 4.4. Candidate Racing
The primary goal of the Candidate Racing process is to successfully The primary goal of the Candidate Racing process is to successfully
negotiate a protocol stack to an endpoint over an interface--to negotiate a protocol stack to an endpoint over an interface--to
connect a single leaf node of the tree--with as little delay and as connect a single leaf node of the tree--with as little delay and as
few unnecessary connections attempts as possible. Optimizing these few unnecessary connections attempts as possible. Optimizing these
two factors improves the user experience, while minimizing network two factors improves the user experience, while minimizing network
load. load.
This section covers the dynamic aspect of connection establishment. This section covers the dynamic aspect of connection establishment.
skipping to change at page 14, line 30 skipping to change at page 14, line 30
Each approach is appropriate in different use-cases and branch types. Each approach is appropriate in different use-cases and branch types.
However, to avoid consuming unnecessary network resources, However, to avoid consuming unnecessary network resources,
implementations should not use immediate racing as a default implementations should not use immediate racing as a default
approach. approach.
The timing algorithms for racing should remain independent across The timing algorithms for racing should remain independent across
branches of the tree. Any timers or racing logic is isolated to a branches of the tree. Any timers or racing logic is isolated to a
given parent node, and is not ordered precisely with regards to other given parent node, and is not ordered precisely with regards to other
children of other nodes. children of other nodes.
4.4.1. Delayed Racing 4.4.1. Delayed
Delayed racing can be used whenever a single node of the tree has Delayed racing can be used whenever a single node of the tree has
multiple child nodes. Based on the order determined when building multiple child nodes. Based on the order determined when building
the tree, the first child node will be initiated immediately, the tree, the first child node will be initiated immediately,
followed by the next child node after some delay. Once that second followed by the next child node after some delay. Once that second
child node is initiated, the third child node (if present) will begin child node is initiated, the third child node (if present) will begin
after another delay, and so on until all child nodes have been after another delay, and so on until all child nodes have been
initiated, or one of the child nodes successfully completes its initiated, or one of the child nodes successfully completes its
negotiation. negotiation.
skipping to change at page 18, line 12 skipping to change at page 18, line 12
Stack. This can be viewed as an application-driven form of Protocol Stack. This can be viewed as an application-driven form of Protocol
Stack racing. Stack racing.
4.8. Implementing listeners 4.8. Implementing listeners
When an implementation is asked to Listen, it registers with the When an implementation is asked to Listen, it registers with the
system to wait for incoming traffic to the Local Endpoint. If no system to wait for incoming traffic to the Local Endpoint. If no
Local Endpoint is specified, the implementation should either use an Local Endpoint is specified, the implementation should either use an
ephemeral port or generate an error. ephemeral port or generate an error.
If the Path Selection Properties do not require a single network If the Selection Properties do not require a single network interface
interface or path, but allow the use of multiple paths, the Listener or path, but allow the use of multiple paths, the Listener object
object should register for incoming traffic on all of the network should register for incoming traffic on all of the network interfaces
interfaces or paths that conform to the Path Selection Properties. or paths that conform to the Properties. The set of available paths
The set of available paths can change over time, so the can change over time, so the implementation should monitor network
implementation should monitor network path changes and register and path changes and register and de-register the Listener across all
de-register the Listener across all usable paths. When using usable paths. When using multiple paths, the Listener is generally
multiple paths, the Listener is generally expected to use the same expected to use the same port for listening on each.
port for listening on each.
If the Protocol Selection Properties allow multiple protocols to be If the Selection Properties allow multiple protocols to be used for
used for listening, and the implementation supports it, the Listener listening, and the implementation supports it, the Listener object
object should register across the eligble protocols for each path. should register across the eligble protocols for each path. This
This means that inbound Connections delivered by the implementation means that inbound Connections delivered by the implementation may
may have heterogeneous protocol stacks. have heterogeneous protocol stacks.
4.8.1. Implementing listeners for Connected Protocols 4.8.1. Implementing listeners for Connected Protocols
Connected protocols such as TCP and TLS-over-TCP have a strong Connected protocols such as TCP and TLS-over-TCP have a strong
mapping between the Local and Remote Endpoints (five-tuple) and their mapping between the Local and Remote Endpoints (five-tuple) and their
protocol connection state. These map well into Connection objects. protocol connection state. These map well into Connection objects.
Whenever a new inbound handshake is being started, the Listener Whenever a new inbound handshake is being started, the Listener
should generate a new Connection object and pass it to the should generate a new Connection object and pass it to the
application. application.
skipping to change at page 20, line 5 skipping to change at page 19, line 43
5.1.1. Sending Messages 5.1.1. Sending Messages
The effect of the application sending a Message is determined by the The effect of the application sending a Message is determined by the
top-level protocol in the established Protocol Stack. That is, if top-level protocol in the established Protocol Stack. That is, if
the top-level protocol provides an abstraction of framed messages the top-level protocol provides an abstraction of framed messages
over a connection, the receiving application will be able to obtain over a connection, the receiving application will be able to obtain
multiple Messages on that connection, even if the framing protocol is multiple Messages on that connection, even if the framing protocol is
built on a byte-stream protocol like TCP. built on a byte-stream protocol like TCP.
5.1.1.1. Send Parameters 5.1.1.1. Message Properties
o Lifetime: this should be implemented by removing the Message from o Lifetime: this should be implemented by removing the Message from
its queue of pending Messages after the Lifetime has expired. A its queue of pending Messages after the Lifetime has expired. A
queue of pending Messages within the transport system queue of pending Messages within the transport system
implementation that have yet to be handed to the Protocol Stack implementation that have yet to be handed to the Protocol Stack
can always support this property, but once a Message has been sent can always support this property, but once a Message has been sent
into the send buffer of a protocol, only certain protocols may into the send buffer of a protocol, only certain protocols may
support de-queueing a message. For example, TCP cannot remove support de-queueing a message. For example, TCP cannot remove
bytes from its send buffer, while in case of SCTP, such control bytes from its send buffer, while in case of SCTP, such control
over the SCTP send buffer can be exercised using the partial over the SCTP send buffer can be exercised using the partial
reliability extension [RFC8303]. When there is no standing queue reliability extension [RFC8303]. When there is no standing queue
of Messages within the system, and the Protocol Stack does not of Messages within the system, and the Protocol Stack does not
support removing a Message from its buffer, this property may be support removing a Message from its buffer, this property may be
ignored. ignored.
o Niceness: this represents the ability to de-prioritize a Message o Priority: this represents the ability to prioritize a Message over
in favor of other Messages. This can be implemented by the system other Messages. This can be implemented by the system re-ordering
re-ordering Messages that have yet to be handed to the Protocol Messages that have yet to be handed to the Protocol Stack, or by
Stack, or by giving relative priority hints to protocols that giving relative priority hints to protocols that support
support priorities per Message. For example, an implementation of priorities per Message. For example, an implementation of HTTP/2
HTTP/2 could choose to send Messages of different niceness on could choose to send Messages of different Priority on streams of
streams of different priority. different priority.
o Ordered: when this is false, it disables the requirement of in- o Ordered: when this is false, it disables the requirement of in-
order-delivery for protocols that support configurable ordering. order-delivery for protocols that support configurable ordering.
o Idempotent: when this is true, it means that the Message can be o Idempotent: when this is true, it means that the Message can be
used by mechanisms that might transfer it multiple times - e.g., used by mechanisms that might transfer it multiple times - e.g.,
as a result of racing multiple transports or as part of TCP Fast as a result of racing multiple transports or as part of TCP Fast
Open. Open.
o Final: when this is true, it means that a transport connection can
be closed immediately after its transmission.
o Corruption Protection Length: when this is set to any value other o Corruption Protection Length: when this is set to any value other
than -1, it limits the required checksum in protocols that allow than -1, it limits the required checksum in protocols that allow
limiting the checksum length (e.g. UDP-Lite). limiting the checksum length (e.g. UDP-Lite).
o Immediate Acknowledgement: this informs the implementation that o Transmission Profile: TBD - because it's not final in the API yet.
the sender intends to execute tight control over the send buffer, Old text follows: when this is set to "Interactive/Low Latency",
and therefore wants to avoid delayed acknowledgements. In case of the Message should be sent immediately, even when this comes at
SCTP, a request to immediately send acknowledgements can be the cost of using the network capacity less efficiently. For
implemented using the "sack-immediately flag" described in example, small messages can sometimes be bundled to fit into a
Section 4.2 of [RFC8303] for the SEND.SCTP primitive. single data packet for the sake of reducing header overhead; such
bundling should not be used. For example, in case of TCP, the
o Instantaneous Capacity Profile: when this is set to "Interactive/ Nagle algorithm should be disabled when Interactive/Low Latency is
Low Latency", the Message should be sent immediately, even when selected as the capacity profile. Scavenger/Bulk can translate
this comes at the cost of using the network capacity less into usage of a congestion control mechanism such as LEDBAT, and/
efficiently. For example, small messages can sometimes be bundled or the capacity profile can lead to a choice of a DSCP value as
to fit into a single data packet for the sake of reducing header described in [I-D.ietf-taps-minset]).
overhead; such bundling should not be used. For example, in case
of TCP, the Nagle algorithm should be disabled when Interactive/
Low Latency is selected as the capacity profile. Scavenger/Bulk
can translate into usage of a congestion control mechanism such as
LEDBAT, and/or the capacity profile can lead to a choice of a DSCP
value as described in [I-D.ietf-taps-minset]).
[Note: See also Appendix A.2 for additional Send Parameters under o Singular Transmission: when this is true, the application requests
discussion.] to avoid transport-layer segmentation or network-layer
fragmentation. Some transports implement network-layer
fragmentation avoidance (Path MTU Discovery) without exposing this
functionality to the application; in this case, only transport-
layer segmentation should be avoided, by fitting the message into
a single transport-layer segment or otherwise failing. Otherwise,
network-layer fragmentation should be avoided--e.g. by requesting
the IP Don't Fragment bit to be set in case of UDP(-Lite) and IPv4
(SET_DF in [RFC8304]).
5.1.1.2. Send Completion 5.1.1.2. Send Completion
The application should be notified whenever a Message or partial The application should be notified whenever a Message or partial
Message has been consumed by the Protocol Stack, or has failed to Message has been consumed by the Protocol Stack, or has failed to
send. The meaning of the Message being consumed by the stack may send. The meaning of the Message being consumed by the stack may
vary depending on the protocol. For a basic datagram protocol like vary depending on the protocol. For a basic datagram protocol like
UDP, this may correspond to the time when the packet is sent into the UDP, this may correspond to the time when the packet is sent into the
interface driver. For a protocol that buffers data in queues, like interface driver. For a protocol that buffers data in queues, like
TCP, this may correspond to when the data has entered the send TCP, this may correspond to when the data has entered the send
skipping to change at page 22, line 17 skipping to change at page 22, line 14
If a Connection becomes finished before a requested Receive action If a Connection becomes finished before a requested Receive action
can be satisfied, the implementation should deliver any partial can be satisfied, the implementation should deliver any partial
Message content outstanding, or if none is available, an indication Message content outstanding, or if none is available, an indication
that there will be no more received Messages. that there will be no more received Messages.
5.2. Handling of data for fast-open protocols 5.2. Handling of data for fast-open protocols
Several protocols allow sending higher-level protocol or application Several protocols allow sending higher-level protocol or application
data within the first packet of their protocol establishment, such as data within the first packet of their protocol establishment, such as
TCP Fast Open [RFC7413] and TLS 1.3 [I-D.ietf-tls-tls13]. This TCP Fast Open [RFC7413] and TLS 1.3 [RFC8446]. This approach is
approach is referred to as sending Zero-RTT (0-RTT) data. This is a referred to as sending Zero-RTT (0-RTT) data. This is a desirable
desirable property, but poses challenges to an implementation that property, but poses challenges to an implementation that uses racing
uses racing during connection establishment. during connection establishment.
If the application has 0-RTT data to send in any protocol handshakes, If the application has 0-RTT data to send in any protocol handshakes,
it needs to provide this data before the handshakes have begun. When it needs to provide this data before the handshakes have begun. When
racing, this means that the data should be provided before the racing, this means that the data should be provided before the
process of connection establishment has begun. If the application process of connection establishment has begun. If the application
wants to send 0-RTT data, it must indicate this to the implementation wants to send 0-RTT data, it must indicate this to the implementation
by setting the Idempotent send parameter to true when sending the by setting the Idempotent send parameter to true when sending the
data. In general, 0-RTT data may be replayed (for example, if a TCP data. In general, 0-RTT data may be replayed (for example, if a TCP
SYN contains data, and the SYN is retransmitted, the data will be SYN contains data, and the SYN is retransmitted, the data will be
retransmitted as well), but racing means that different leaf nodes retransmitted as well), but racing means that different leaf nodes
skipping to change at page 23, line 13 skipping to change at page 23, line 11
attempt must use a different ticket. In effect, each leaf node will attempt must use a different ticket. In effect, each leaf node will
send the same early application data, yet encoded (encrypted) send the same early application data, yet encoded (encrypted)
differently on the wire. differently on the wire.
6. Implementing Maintenance 6. Implementing Maintenance
Maintenance encompasses changes that the application can request to a Maintenance encompasses changes that the application can request to a
Connection, or that a Connection can react to based on system and Connection, or that a Connection can react to based on system and
network changes. network changes.
6.1. Changing Protocol Properties 6.1. Managing Connections
Appendix A.1 of [I-D.ietf-taps-minset] explains, using primitives Appendix A.1 of [I-D.ietf-taps-minset] explains, using primitives
that are described in [RFC8303] and [RFC8304], how to implement from [RFC8303] and [RFC8304], how to implement changing some of the
changing the following protocol properties of an established following protocol properties of an established connection with TCP
connection with TCP and UDP. Below, we amend this description for and UDP. Below, we amend this description for other protocols (if
other protocols (if applicable): applicable) and extend it with Connection Properties that are not
contained in [I-D.ietf-taps-minset].
o Relative niceness: for SCTP, this can be done using the primitive
CONFIGURE_STREAM_SCHEDULER.SCTP described in section 4 of
[RFC8303].
o Timeout for aborting Connection: for SCTP, this can be done using
the primitive CHANGE_TIMEOUT.SCTP described in section 4 of
[RFC8303].
o Abort timeout to suggest to the Remote Endpoint: for TCP, this can o Notification of excessive retransmissions: TODO
be done using the primitive CHANGE_TIMEOUT.TCP described in
section 4 of [RFC8303].
o Retransmission threshold before excessive retransmission o Retransmission threshold before excessive retransmission
notification: for TCP, this can be done using ERROR.TCP described notification: TODO; for TCP, this can be done using ERROR.TCP
in section 4 of [RFC8303]. described in section 4 of [RFC8303].
o Notification of ICMP soft error message arrival: TODO
o Required minimum coverage of the checksum for receiving: for UDP- o Required minimum coverage of the checksum for receiving: for UDP-
Lite, this can be done using the primitive Lite, this can be done using the primitive
SET_MIN_CHECKSUM_COVERAGE.UDP-Lite described in section 4 of SET_MIN_CHECKSUM_COVERAGE.UDP-Lite described in section 4 of
[RFC8303]. [RFC8303].
o Priority (Connection): TODO; for SCTP, this can be done using the
primitive CONFIGURE_STREAM_SCHEDULER.SCTP described in section 4
of [RFC8303].
o Timeout for aborting Connection: for SCTP, this can be done using
the primitive CHANGE_TIMEOUT.SCTP described in section 4 of
[RFC8303].
o Connection group transmission scheduler: for SCTP, this can be o Connection group transmission scheduler: for SCTP, this can be
done using the primitive SET_STREAM_SCHEDULER.SCTP described in done using the primitive SET_STREAM_SCHEDULER.SCTP described in
section 4 of [RFC8303]. section 4 of [RFC8303].
o Maximum message size concurrent with Connection establishment:
TODO
o Maximum Message size before fragmentation or segmentation: TODO
o Maximum Message size on send: TODO
o Maximum Message size on receive: TODO
o Capacity Profile: TODO
o Bounds on Send or Receive Rate: TODO
o TCP-specific Property: User Timeout: for TCP, this can be
configured using the primitive CHANGE_TIMEOUT.TCP described in
section 4 of [RFC8303].
It may happen that the application attempts to set a Protocol It may happen that the application attempts to set a Protocol
Property which does not apply to the actually chosen protocol. In Property which does not apply to the actually chosen protocol. In
this case, the implementation should fail gracefully, i.e., it may this case, the implementation should fail gracefully, i.e., it may
give a warning to the application, but it should not terminate the give a warning to the application, but it should not terminate the
Connection. Connection.
6.2. Handling Path Changes 6.2. Handling Path Changes
When a path change occurs, the Transport Services implementation is When a path change occurs, the Transport Services implementation is
responsible for notifying Protocol Instances in the Protocol Stack. responsible for notifying Protocol Instances in the Protocol Stack.
If the Protocol Stack includes a transport protocol that supports If the Protocol Stack includes a transport protocol that supports
multipath connectivity, an update to the available paths should multipath connectivity, an update to the available paths should
inform the Protocol Instance of the new set of paths that are inform the Protocol Instance of the new set of paths that are
permissible based on the Path Selection Properties passed by the permissible based on the Selection Properties passed by the
application. A multipath protocol can establish new subflows over application. A multipath protocol can establish new subflows over
new paths, and should tear down subflows over paths that are no new paths, and should tear down subflows over paths that are no
longer available. If the Protocol Stack includes a transport longer available. If the Protocol Stack includes a transport
protocol that does not support multipath, but support migrating protocol that does not support multipath, but support migrating
between paths, the update to available paths can be used as the between paths, the update to available paths can be used as the
trigger to migrating the connection. For protocols that do not trigger to migrating the connection. For protocols that do not
support multipath or migration, the Protocol Instances may be support multipath or migration, the Protocol Instances may be
informed of the path change, but should not be forcibly disconnected informed of the path change, but should not be forcibly disconnected
if the previously used path becomes unavailable. An exception to if the previously used path becomes unavailable. An exception to
this case is if the System Policy changes to prohibit traffic from this case is if the System Policy changes to prohibit traffic from
skipping to change at page 33, line 16 skipping to change at page 33, line 29
Kinnear for their implementation and design efforts, including Happy Kinnear for their implementation and design efforts, including Happy
Eyeballs, that heavily influenced this work. Eyeballs, that heavily influenced this work.
14. References 14. References
14.1. Normative References 14.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-01 (work in Transport Services", draft-ietf-taps-arch-02 (work in
progress), July 2018. progress), October 2018.
[I-D.ietf-taps-interface] [I-D.ietf-taps-interface]
Trammell, B., Welzl, M., Enghardt, T., Fairhurst, G., Trammell, B., Welzl, M., Enghardt, T., Fairhurst, G.,
Kuehlewind, M., Perkins, C., Tiesel, P., and C. Wood, "An Kuehlewind, M., Perkins, C., Tiesel, P., and C. Wood, "An
Abstract Application Layer Interface to Transport Abstract Application Layer Interface to Transport
Services", draft-ietf-taps-interface-01 (work in Services", draft-ietf-taps-interface-02 (work in
progress), July 2018. progress), October 2018.
[I-D.ietf-taps-minset] [I-D.ietf-taps-minset]
Welzl, M. and S. Gjessing, "A Minimal Set of Transport Welzl, M. and S. Gjessing, "A Minimal Set of Transport
Services for End Systems", draft-ietf-taps-minset-11 (work Services for End Systems", draft-ietf-taps-minset-11 (work
in progress), September 2018. in progress), September 2018.
[RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V. [RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V.
Yasevich, "Sockets API Extensions for the Stream Control Yasevich, "Sockets API Extensions for the Stream Control
Transmission Protocol (SCTP)", RFC 6458, Transmission Protocol (SCTP)", RFC 6458,
DOI 10.17487/RFC6458, December 2011, DOI 10.17487/RFC6458, December 2011,
skipping to change at page 34, line 20 skipping to change at page 34, line 31
[RFC8304] Fairhurst, G. and T. Jones, "Transport Features of the [RFC8304] Fairhurst, G. and T. Jones, "Transport Features of the
User Datagram Protocol (UDP) and Lightweight UDP (UDP- User Datagram Protocol (UDP) and Lightweight UDP (UDP-
Lite)", RFC 8304, DOI 10.17487/RFC8304, February 2018, Lite)", RFC 8304, DOI 10.17487/RFC8304, February 2018,
<https://www.rfc-editor.org/info/rfc8304>. <https://www.rfc-editor.org/info/rfc8304>.
[RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2: [RFC8305] Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2:
Better Connectivity Using Concurrency", RFC 8305, Better Connectivity Using Concurrency", RFC 8305,
DOI 10.17487/RFC8305, December 2017, DOI 10.17487/RFC8305, December 2017,
<https://www.rfc-editor.org/info/rfc8305>. <https://www.rfc-editor.org/info/rfc8305>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>.
14.2. Informative References 14.2. Informative References
[I-D.ietf-quic-transport] [I-D.ietf-quic-transport]
Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed
and Secure Transport", draft-ietf-quic-transport-15 (work and Secure Transport", draft-ietf-quic-transport-18 (work
in progress), October 2018. in progress), January 2019.
[I-D.ietf-tls-tls13]
Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", draft-ietf-tls-tls13-28 (work in progress),
March 2018.
[NEAT-flow-mapping] [NEAT-flow-mapping]
"Transparent Flow Mapping for NEAT (in Workshop on Future "Transparent Flow Mapping for NEAT (in Workshop on Future
of Internet Transport (FIT 2017))", n.d.. of Internet Transport (FIT 2017))", n.d..
[RFC5245] Rosenberg, J., "Interactive Connectivity Establishment [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment
(ICE): A Protocol for Network Address Translator (NAT) (ICE): A Protocol for Network Address Translator (NAT)
Traversal for Offer/Answer Protocols", RFC 5245, Traversal for Offer/Answer Protocols", RFC 5245,
DOI 10.17487/RFC5245, April 2010, DOI 10.17487/RFC5245, April 2010,
<https://www.rfc-editor.org/info/rfc5245>. <https://www.rfc-editor.org/info/rfc5245>.
skipping to change at page 35, line 13 skipping to change at page 35, line 25
presented here to support discussion within the TAPS working group as presented here to support discussion within the TAPS working group as
to whether they should be added to a future revision of the base to whether they should be added to a future revision of the base
specification. specification.
A.1. Properties Affecting Sorting of Branches A.1. Properties Affecting Sorting of Branches
In addition to the Protocol and Path Selection Properties discussed In addition to the Protocol and Path Selection Properties discussed
in Section 4.3, the following properties under discussion can in Section 4.3, the following properties under discussion can
influence branch sorting: influence branch sorting:
o Size to be Sent or Received: An implementation may use the Size to o Bounds on Send or Receive Rate: If the application indicates a
be Sent or Received in combination with cached performance bound on the expected Send or Receive bitrate, an implementation
estimates, see Section 8.2, e.g. the observed Round Trip Time and may prefer a path that can likely provide the desired bandwidth,
the observed maximum throughput, to compute an estimate of the based on cached maximum throughput, see Section 8.2. The
completion time of a transfer over different available paths. It application may know the Send or Receive Bitrate from metadata in
may then prefer the path with the shorter expected completion adaptive HTTP streaming, such as MPEG-DASH.
time. This property may be used instead of the Capacity profile,
as the application does not always know whether its transfer will
be latency-bound or bandwidth-bound, and thus may not be able to
specify a Capacity Profile. However, the application may know the
Size to be Sent or Received from metadata, e.g., in adaptive HTTP
streaming such as MPEG-DASH, or in operating system upgrades. A
related paper is currently under submission.
o Send / Receive Bitrate: If the application indicates an expected
send or receive bitrate, an implementation may prefer a path that
can likely provide the desired bandwidth, based on cached maximum
throughput, see Section 8.2. The application may know the Send or
Receive Bitrate from metadata in adaptive HTTP streaming, such as
MPEG-DASH.
o Cost Preferences: If the application indicates a preference to o Cost Preferences: If the application indicates a preference to
avoid expensive paths, and some paths are associated with a avoid expensive paths, and some paths are associated with a
monetary cost, an implementation should decrease the ranking of monetary cost, an implementation should decrease the ranking of
such paths. If the application indicates that it prohibits using such paths. If the application indicates that it prohibits using
expensive paths, paths that are associated with a cost should be expensive paths, paths that are associated with a cost should be
purged from the decision tree. purged from the decision tree.
A.2. Send Parameters
In addition to the Send Parameters listed in Section 5.1.1.1, the
following Send Parameters are under discussion:
o Send Bitrate: If an application indicates a certain bitrate it
wants to send on the connection, the implementation may limit the
bitrate of the outgoing communication to that rate, for example by
setting an upper bound for the TCP congestion window of a
connection calculated from the Send Bitrate and the Round Trip
Time. This helps to avoid bursty traffic patterns on video
streaming servers, see [Trickle].
Authors' Addresses Authors' Addresses
Anna Brunstrom (editor) Anna Brunstrom (editor)
Karlstad University Karlstad University
Universitetsgatan 2 Universitetsgatan 2
651 88 Karlstad 651 88 Karlstad
Sweden Sweden
Email: anna.brunstrom@kau.se Email: anna.brunstrom@kau.se
Tommy Pauly (editor) Tommy Pauly (editor)
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
Theresa Enghardt Theresa Enghardt
TU Berlin TU Berlin
 End of changes. 53 change blocks. 
186 lines changed or deleted 178 lines changed or added

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