draft-ietf-mptcp-architecture-05.txt | rfc6182.txt | |||
---|---|---|---|---|
Internet Engineering Task Force A. Ford | Internet Engineering Task Force (IETF) A. Ford | |||
Internet-Draft Roke Manor Research | Request for Comments: 6182 Roke Manor Research | |||
Intended status: Informational C. Raiciu | Category: Informational C. Raiciu | |||
Expires: July 25, 2011 M. Handley | ISSN: 2070-1721 M. Handley | |||
University College London | University College London | |||
S. Barre | S. Barre | |||
Universite catholique de | Universite catholique de Louvain | |||
Louvain | ||||
J. Iyengar | J. Iyengar | |||
Franklin and Marshall College | Franklin and Marshall College | |||
January 21, 2011 | March 2011 | |||
Architectural Guidelines for Multipath TCP Development | Architectural Guidelines for Multipath TCP Development | |||
draft-ietf-mptcp-architecture-05 | ||||
Abstract | Abstract | |||
Hosts are often connected by multiple paths, but TCP restricts | Hosts are often connected by multiple paths, but TCP restricts | |||
communications to a single path per transport connection. Resource | communications to a single path per transport connection. Resource | |||
usage within the network would be more efficient were these multiple | usage within the network would be more efficient were these multiple | |||
paths able to be used concurrently. This should enhance user | paths able to be used concurrently. This should enhance user | |||
experience through improved resilience to network failure and higher | experience through improved resilience to network failure and higher | |||
throughput. | throughput. | |||
This document outlines architectural guidelines for the development | This document outlines architectural guidelines for the development | |||
of a Multipath Transport Protocol, with references to how these | of a Multipath Transport Protocol, with references to how these | |||
architectural components come together in the development of a | architectural components come together in the development of a | |||
Multipath TCP protocol. This document lists certain high level | Multipath TCP (MPTCP). This document lists certain high-level design | |||
design decisions that provide foundations for the design of the MPTCP | decisions that provide foundations for the design of the MPTCP | |||
protocol, based upon these architectural requirements. | protocol, based upon these architectural requirements. | |||
Status of this Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | ||||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | This document is not an Internet Standards Track specification; it is | |||
Task Force (IETF). Note that other groups may also distribute | published for informational purposes. | |||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are a candidate for any level of Internet | ||||
Standard; see Section 2 of RFC 5741. | ||||
This Internet-Draft will expire on July 25, 2011. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc6182. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction ....................................................4 | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.1. Requirements Language ......................................5 | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. Terminology ................................................5 | |||
1.3. Reference Scenario . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Reference Scenario .........................................6 | |||
2. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Goals ...........................................................6 | |||
2.1. Functional Goals . . . . . . . . . . . . . . . . . . . . . 6 | 2.1. Functional Goals ...........................................6 | |||
2.2. Compatibility Goals . . . . . . . . . . . . . . . . . . . 7 | 2.2. Compatibility Goals ........................................7 | |||
2.2.1. Application Compatibility . . . . . . . . . . . . . . 7 | 2.2.1. Application Compatibility ...........................7 | |||
2.2.2. Network Compatibility . . . . . . . . . . . . . . . . 8 | 2.2.2. Network Compatibility ...............................8 | |||
2.2.3. Compatibility with other network users . . . . . . . . 9 | 2.2.3. Compatibility with Other Network Users .............10 | |||
2.3. Security Goals . . . . . . . . . . . . . . . . . . . . . . 10 | 2.3. Security Goals ............................................10 | |||
2.4. Related Protocols . . . . . . . . . . . . . . . . . . . . 10 | 2.4. Related Protocols .........................................10 | |||
3. An Architectural Basis For Multipath TCP . . . . . . . . . . . 10 | 3. An Architectural Basis for Multipath TCP .......................11 | |||
4. A Functional Decomposition of MPTCP . . . . . . . . . . . . . 12 | 4. A Functional Decomposition of MPTCP ............................12 | |||
5. High-Level Design Decisions . . . . . . . . . . . . . . . . . 14 | 5. High-Level Design Decisions ....................................14 | |||
5.1. Sequence Numbering . . . . . . . . . . . . . . . . . . . . 14 | 5.1. Sequence Numbering ........................................14 | |||
5.2. Reliability and Retransmissions . . . . . . . . . . . . . 15 | 5.2. Reliability and Retransmissions ...........................15 | |||
5.3. Buffers . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 5.3. Buffers ...................................................17 | |||
5.4. Signalling . . . . . . . . . . . . . . . . . . . . . . . . 18 | 5.4. Signaling .................................................18 | |||
5.5. Path Management . . . . . . . . . . . . . . . . . . . . . 19 | 5.5. Path Management ...........................................19 | |||
5.6. Connection Identification . . . . . . . . . . . . . . . . 20 | 5.6. Connection Identification .................................20 | |||
5.7. Congestion Control . . . . . . . . . . . . . . . . . . . . 21 | 5.7. Congestion Control ........................................21 | |||
5.8. Security . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 5.8. Security ..................................................21 | |||
6. Software Interactions . . . . . . . . . . . . . . . . . . . . 22 | 6. Software Interactions ..........................................23 | |||
6.1. Interactions with Applications . . . . . . . . . . . . . . 22 | 6.1. Interactions with Applications ............................23 | |||
6.2. Interactions with Management Systems . . . . . . . . . . . 23 | 6.2. Interactions with Management Systems ......................23 | |||
7. Interactions with Middleboxes . . . . . . . . . . . . . . . . 23 | 7. Interactions with Middleboxes ..................................23 | |||
8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 8. Contributors ...................................................25 | |||
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 25 | 9. Acknowledgements ...............................................25 | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | 10. Security Considerations .......................................26 | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 11. References ....................................................26 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 11.1. Normative References .....................................26 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . . 26 | 11.2. Informative References ...................................26 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . . 26 | ||||
Appendix A. Changelog . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
A.1. Changes since draft-ietf-mptcp-architecture-04 . . . . . . 28 | ||||
A.2. Changes since draft-ietf-mptcp-architecture-03 . . . . . . 28 | ||||
A.3. Changes since draft-ietf-mptcp-architecture-02 . . . . . . 28 | ||||
A.4. Changes since draft-ietf-mptcp-architecture-01 . . . . . . 28 | ||||
A.5. Changes since draft-ietf-mptcp-architecture-00 . . . . . . 28 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
1. Introduction | 1. Introduction | |||
As the Internet evolves, demands on Internet resources are ever- | As the Internet evolves, demands on Internet resources are ever- | |||
increasing, but often these resources (in particular, bandwidth) | increasing, but often these resources (in particular, bandwidth) | |||
cannot be fully utilised due to protocol constraints both on the end- | cannot be fully utilized due to protocol constraints both on the end- | |||
systems and within the network. If these resources could be used | systems and within the network. If these resources could be used | |||
concurrently, end user experience could be greatly improved. Such | concurrently, end user experience could be greatly improved. Such | |||
enhancements would also reduce the necessary expenditure on network | enhancements would also reduce the necessary expenditure on network | |||
infrastructure that would otherwise be needed to create an equivalent | infrastructure that would otherwise be needed to create an equivalent | |||
improvement in user experience. By the application of resource | improvement in user experience. By the application of resource | |||
pooling [3], these available resources can be 'pooled' such that they | pooling [3], these available resources can be 'pooled' such that they | |||
appear as a single logical resource to the user. | appear as a single logical resource to the user. | |||
Multipath transport aims to realize some of the goals of resource | Multipath transport aims to realize some of the goals of resource | |||
pooling by simultaneously making use of multiple disjoint (or | pooling by simultaneously making use of multiple disjoint (or | |||
partially disjoint) paths across a network. The two key benefits of | partially disjoint) paths across a network. The two key benefits of | |||
multipath transport are: | multipath transport are the following: | |||
o To increase the resilience of the connectivity by providing | o To increase the resilience of the connectivity by providing | |||
multiple paths, protecting end hosts from the failure of one. | multiple paths, protecting end hosts from the failure of one. | |||
o To increase the efficiency of the resource usage, and thus | o To increase the efficiency of the resource usage, and thus | |||
increase the network capacity available to end hosts. | increase the network capacity available to end hosts. | |||
Multipath TCP is a modified version of TCP [1] that implements a | Multipath TCP is a modified version of TCP [1] that implements a | |||
multipath transport and achieves these goals by pooling multiple | multipath transport and achieves these goals by pooling multiple | |||
paths within a transport connection, transparently to the | paths within a transport connection, transparently to the | |||
application. Multipath TCP is primarily concerned with utilising | application. Multipath TCP is primarily concerned with utilizing | |||
multiple paths end-to-end, where one or both end host is multi-homed. | multiple paths end-to-end, where one or both of the end hosts are | |||
It may also have applications where multiple paths exist within the | multihomed. It may also have applications where multiple paths exist | |||
network and can be manipulated by an end host, such as using | within the network and can be manipulated by an end host, such as | |||
different port numbers with ECMP [4]. | using different port numbers with Equal Cost MultiPath (ECMP) [4]. | |||
MPTCP, defined in [5], is a specific protocol that instantiates the | MPTCP, defined in [5], is a specific protocol that instantiates the | |||
Multipath TCP concept. This document looks both at general | Multipath TCP concept. This document looks both at general | |||
architectural principles for a Multipath TCP fulfilling the goals | architectural principles for a Multipath TCP fulfilling the goals | |||
described in Section 2, as well as the key design decisions behind | described in Section 2, as well as the key design decisions behind | |||
MPTCP, which are detailed in Section 5. | MPTCP, which are detailed in Section 5. | |||
Although multihoming and multipath functions are not new to transport | Although multihoming and multipath functions are not new to transport | |||
protocols (SCTP [6] being a notable example), MPTCP aims to gain | protocols (Stream Control Transmission Protocol (SCTP) [6] being a | |||
wide-scale deployment by recognising the importance of application | notable example), MPTCP aims to gain wide-scale deployment by | |||
and network compatibility goals. These goals, discussed in detail in | recognizing the importance of application and network compatibility | |||
Section 2, relate to the appearance of MPTCP to the network (so non- | goals. These goals, discussed in detail in Section 2, relate to the | |||
MPTCP-aware entities see it as TCP) and to the application (through | appearance of MPTCP to the network (so non-MPTCP-aware entities see | |||
providing an service equivalent to TCP for non-MPTCP-aware | it as TCP) and to the application (through providing a service | |||
applications). | equivalent to TCP for non-MPTCP-aware applications). | |||
This document has three key purposes: (i) it describes goals for a | This document has three key purposes: (i) it describes goals for a | |||
multipath transport - goals that MPTCP is designed to meet; (ii) it | multipath transport -- goals that MPTCP is designed to meet; (ii) it | |||
lays out an architectural basis for MPTCP's design - a discussion | lays out an architectural basis for MPTCP's design -- a discussion | |||
that applies to other multipath transports as well; and (iii) it | that applies to other multipath transports as well; and (iii) it | |||
discusses and documents high-level design decisions made in MPTCP's | discusses and documents high-level design decisions made in MPTCP's | |||
development, and considers their implications. | development, and considers their implications. | |||
Companion documents to this architectural overview are those which | Companion documents to this architectural overview are those that | |||
provide details of the protocol extensions [5], congestion control | provide details of the protocol extensions [5], congestion control | |||
algorithms [7], and application-level considerations [8]. Put | algorithms [7], and application-level considerations [8]. Put | |||
together, these components specify a complete Multipath TCP design. | together, these components specify a complete Multipath TCP design. | |||
We note that specific components are replaceable in accordance with | Note that specific components are replaceable in accordance with the | |||
the layer and functional decompositions discussed in this document. | layer and functional decompositions discussed in this document. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [2]. | document are to be interpreted as described in RFC 2119 [2]. | |||
1.2. Terminology | 1.2. Terminology | |||
Regular/Single-Path TCP: The standard version of the TCP [1] | Regular/Single-Path TCP: The standard version of TCP [1] in use | |||
protocol in use today, operating between a single pair of IP | today, operating between a single pair of IP addresses and ports. | |||
addresses. | ||||
Multipath TCP: A modified version of the TCP protocol that supports | Multipath TCP: A modified version of the TCP protocol that supports | |||
the simultaneous use of multiple paths between hosts. | the simultaneous use of multiple paths between hosts. | |||
Path: A sequence of links between a sender and a receiver, defined | Path: A sequence of links between a sender and a receiver, defined | |||
in this context by a source and destination address pair. | in this context by a source and destination address pair. | |||
Host: An end host either initiating or terminating a Multipath TCP | Host: An end host either initiating or terminating a Multipath TCP | |||
connection. | connection. | |||
skipping to change at page 6, line 9 | skipping to change at page 6, line 9 | |||
which forms part of a larger Multipath TCP connection. | which forms part of a larger Multipath TCP connection. | |||
(Multipath TCP) Connection: A set of one or more subflows combined | (Multipath TCP) Connection: A set of one or more subflows combined | |||
to provide a single Multipath TCP service to an application at a | to provide a single Multipath TCP service to an application at a | |||
host. | host. | |||
1.3. Reference Scenario | 1.3. Reference Scenario | |||
The diagram shown in Figure 1 illustrates a typical usage scenario | The diagram shown in Figure 1 illustrates a typical usage scenario | |||
for Multipath TCP. Two hosts, A and B, are communicating with each | for Multipath TCP. Two hosts, A and B, are communicating with each | |||
other. These hosts are multi-homed and multi-addressed, providing | other. These hosts are multihomed and multi-addressed, providing two | |||
two disjoint connections to the Internet. The addresses on each host | disjoint connections to the Internet. The addresses on each host are | |||
are referred to as A1, A2, B1 and B2. There are therefore up to four | referred to as A1, A2, B1, and B2. There are therefore up to four | |||
different paths between the two hosts: A1-B1, A1-B2, A2-B1, A2-B2. | different paths between the two hosts: A1-B1, A1-B2, A2-B1, A2-B2. | |||
+------+ __________ +------+ | +------+ __________ +------+ | |||
| |A1 ______ ( ) ______ B1| | | | |A1 ______ ( ) ______ B1| | | |||
| Host |--/ ( ) \--| Host | | | Host |--/ ( ) \--| Host | | |||
| | ( Internet ) | | | | | ( Internet ) | | | |||
| A |--\______( )______/--| B | | | A |--\______( )______/--| B | | |||
| |A2 (__________) B2| | | | |A2 (__________) B2| | | |||
+------+ +------+ | +------+ +------+ | |||
Figure 1: Simple Multipath TCP Usage Scenario | Figure 1: Simple Multipath TCP Usage Scenario | |||
The scenario could have any number of addresses (1 or more) on each | The scenario could have any number of addresses (1 or more) on each | |||
host, as long as the number of paths available between the two hosts | host, as long as the number of paths available between the two hosts | |||
is 2 or more (i.e. num_addr(A) * num_addr(B) > 1). The paths created | is 2 or more (i.e., num_addr(A) * num_addr(B) > 1). The paths | |||
by these address combinations through the Internet need not be | created by these address combinations through the Internet need not | |||
entirely disjoint - potential fairness issues introduced by shared | be entirely disjoint -- potential fairness issues introduced by | |||
bottlenecks need to be handled by the Multipath TCP congestion | shared bottlenecks need to be handled by the Multipath TCP congestion | |||
controller. Furthermore, the paths through the Internet often do not | controller. Furthermore, the paths through the Internet often do not | |||
provide a pure end-to-end service, and instead may be affected by | provide a pure end-to-end service, and instead may be affected by | |||
middleboxes such as NATs and Firewalls. | middleboxes such as NATs and firewalls. | |||
2. Goals | 2. Goals | |||
This section outlines primary goals that Multipath TCP aims to meet. | This section outlines primary goals that Multipath TCP aims to meet. | |||
These are broadly broken down into: functional goals, which steer | These are broadly broken down into the following: functional goals, | |||
services and features that Multipath TCP must provide; and | which steer services and features that Multipath TCP must provide, | |||
compatibility goals, which determine how Multipath TCP should appear | and compatibility goals, which determine how Multipath TCP should | |||
to entities that interact with it. | appear to entities that interact with it. | |||
2.1. Functional Goals | 2.1. Functional Goals | |||
In supporting the use of multiple paths, Multipath TCP has the | In supporting the use of multiple paths, Multipath TCP has the | |||
following two functional goals. | following two functional goals. | |||
o Improve Throughput: Multipath TCP MUST support the concurrent use | o Improve Throughput: Multipath TCP MUST support the concurrent use | |||
of multiple paths. To meet the minimum performance incentives for | of multiple paths. To meet the minimum performance incentives for | |||
deployment, a Multipath TCP connection over multiple paths SHOULD | deployment, a Multipath TCP connection over multiple paths SHOULD | |||
achieve no lesser throughput than a single TCP connection over the | achieve no worse throughput than a single TCP connection over the | |||
best constituent path. | best constituent path. | |||
o Improve Resilience: Multipath TCP MUST support the use of multiple | o Improve Resilience: Multipath TCP MUST support the use of multiple | |||
paths interchangeably for resilience purposes, by permitting | paths interchangeably for resilience purposes, by permitting | |||
segments to be sent and re-sent on any available path. It follows | segments to be sent and re-sent on any available path. It follows | |||
that, in the worst case, the protocol MUST be no less resilient | that, in the worst case, the protocol MUST be no less resilient | |||
than regular single-path TCP. | than regular single-path TCP. | |||
As distribution of traffic among available paths and responses to | As distribution of traffic among available paths and responses to | |||
congestion are done in accordance with resource pooling principles | congestion are done in accordance with resource pooling principles | |||
skipping to change at page 7, line 29 | skipping to change at page 7, line 29 | |||
its use. A host supporting Multipath TCP that requires the other | its use. A host supporting Multipath TCP that requires the other | |||
host to do so too must be able to detect reliably whether this host | host to do so too must be able to detect reliably whether this host | |||
does in fact support the required extensions, using them if so, and | does in fact support the required extensions, using them if so, and | |||
otherwise automatically falling back to single-path TCP. | otherwise automatically falling back to single-path TCP. | |||
2.2. Compatibility Goals | 2.2. Compatibility Goals | |||
In addition to the functional goals listed above, a Multipath TCP | In addition to the functional goals listed above, a Multipath TCP | |||
must meet a number of compatibility goals in order to support | must meet a number of compatibility goals in order to support | |||
deployment in today's Internet. These goals fall into the following | deployment in today's Internet. These goals fall into the following | |||
categories: | categories. | |||
2.2.1. Application Compatibility | 2.2.1. Application Compatibility | |||
Application compatibility refers to the appearance of Multipath TCP | Application compatibility refers to the appearance of Multipath TCP | |||
to the application both in terms of the API that can be used and the | to the application both in terms of the API that can be used and the | |||
expected service model that is provided. | expected service model that is provided. | |||
Multipath TCP MUST follow the same service model as TCP [1]: in- | Multipath TCP MUST follow the same service model as TCP [1]: in- | |||
order, reliable, and byte-oriented delivery. Furthermore, a | order, reliable, and byte-oriented delivery. Furthermore, a | |||
Multipath TCP connection SHOULD provide the application with no worse | Multipath TCP connection SHOULD provide the application with no worse | |||
throughput or resilience than it would expect from running a single | throughput or resilience than it would expect from running a single | |||
TCP connection over any one of its available paths. A Multipath TCP | TCP connection over any one of its available paths. A Multipath TCP | |||
may not, however, be able to provide the same level of consistency of | may not, however, be able to provide the same level of consistency of | |||
throughput and latency as a single TCP connection. These, and other, | throughput and latency as a single TCP connection. These, and other, | |||
application considerations are discussed in detail in [8]. | application considerations are discussed in detail in [8]. | |||
A multipath-capable equivalent of TCP MUST retain some level of | A multipath-capable equivalent of TCP MUST retain some level of | |||
backward compatibility with existing TCP APIs, so that existing | backward compatibility with existing TCP APIs, so that existing | |||
applications can use the newer transport merely by upgrading the | applications can use the newer transport merely by upgrading the | |||
operating systems of the end-hosts. This does not preclude the use | operating systems of the end hosts. This does not preclude the use | |||
of an advanced API to permit multipath-aware applications to specify | of an advanced API to permit multipath-aware applications to specify | |||
preferences, nor for users to configure their systems in a different | preferences, nor for users to configure their systems in a different | |||
way from the default, for example switching on or off the automatic | way from the default, for example switching on or off the automatic | |||
use of multipath extensions. | use of multipath extensions. | |||
It is possible for regular TCP sessions today to survive brief breaks | It is possible for regular TCP sessions today to survive brief breaks | |||
in connectivity by retaining state at end hosts before a timeout | in connectivity by retaining state at end hosts before a timeout | |||
occurs. It would be desirable to support similar session continuity | occurs. It would be desirable to support similar session continuity | |||
in MPTCP, however the circumstances could be different. Whilst in | in MPTCP; however, the circumstances could be different. Whilst in | |||
regular TCP the IP addresses will remain constant across the break in | regular TCP the IP addresses will remain constant across the break in | |||
connectivity, in MPTCP a different interface may appear. It is | connectivity, in MPTCP a different interface may appear. It is | |||
desirable (but not mandated) to support this kind of "break-before- | desirable (but not mandated) to support this kind of "break-before- | |||
make" session continuity. This places constraints on security | make" session continuity. This places constraints on security | |||
mechanisms, however, as discussed in Section 5.8. Timeouts for this | mechanisms, however, as discussed in Section 5.8. Timeouts for this | |||
function would be locally configured. | function would be locally configured. | |||
2.2.2. Network Compatibility | 2.2.2. Network Compatibility | |||
In the traditional Internet architecture, network devices operate at | In the traditional Internet architecture, network devices operate at | |||
the network layer and lower layers, with the layers above the network | the network layer and lower layers, with the layers above the network | |||
layer instantiated only at the end-hosts. While this architecture, | layer instantiated only at the end hosts. While this architecture, | |||
shown in Figure 2, was initially largely adhered to, this layering no | shown in Figure 2, was initially largely adhered to, this layering no | |||
longer reflects the "ground truth" in the Internet with the | longer reflects the "ground truth" in the Internet with the | |||
proliferation of middleboxes [9]. Middleboxes routinely interpose on | proliferation of middleboxes [9]. Middleboxes routinely interpose on | |||
the transport layer; sometimes even completely terminating transport | the transport layer; sometimes even completely terminating transport | |||
connections, thus leaving the application layer as the first real | connections, thus leaving the application layer as the first real | |||
end-to-end layer, as shown in Figure 3. | end-to-end layer, as shown in Figure 3. | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Application |<------------ end-to-end ------------->| Application | | | Application |<------------ end-to-end ------------->| Application | | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
skipping to change at page 9, line 11 | skipping to change at page 9, line 23 | |||
End Host Router NAT, or Proxy End Host | End Host Router NAT, or Proxy End Host | |||
Figure 3: Internet Reality | Figure 3: Internet Reality | |||
Middleboxes that interpose on the transport layer result in loss of | Middleboxes that interpose on the transport layer result in loss of | |||
"fate-sharing" [10], that is, they often hold "hard" state that, when | "fate-sharing" [10], that is, they often hold "hard" state that, when | |||
lost or corrupted, results in loss or corruption of the end-to-end | lost or corrupted, results in loss or corruption of the end-to-end | |||
transport connection. | transport connection. | |||
The network compatibility goal requires that the multipath extension | The network compatibility goal requires that the multipath extension | |||
to TCP retains compatibility with the Internet as it exists today, | to TCP retain compatibility with the Internet as it exists today, | |||
including making reasonable efforts to be able to traverse | including making reasonable efforts to be able to traverse | |||
predominant middleboxes such as firewalls, NATs, and performance | predominant middleboxes such as firewalls, NATs, and performance- | |||
enhancing proxies [9]. This requirement comes from recognizing | enhancing proxies [9]. This requirement comes from recognizing | |||
middleboxes as a significant deployment bottleneck for any transport | middleboxes as a significant deployment bottleneck for any transport | |||
that is not TCP or UDP, and constrains Multipath TCP to appear as TCP | that is not TCP or UDP, and constrains Multipath TCP to appear as TCP | |||
does on the wire and to use established TCP extensions where | does on the wire and to use established TCP extensions where | |||
necessary. To ensure end-to-endness of the transport, we further | necessary. To ensure "end-to-endness" of the transport, Multipath | |||
require Multipath TCP to preserve fate-sharing without making any | TCP MUST preserve fate-sharing without making any assumptions about | |||
assumptions about middlebox behavior. | middlebox behavior. | |||
A detailed analysis of middlebox behaviour and the impact on the | A detailed analysis of middlebox behavior and the impact on the | |||
Multipath TCP architecture is presented in Section 7. In addition, | Multipath TCP architecture is presented in Section 7. In addition, | |||
network compatibility must be retained to the extent that Multipath | network compatibility must be retained to the extent that Multipath | |||
TCP MUST fall back to regular TCP if there are insurmountable | TCP MUST fall back to regular TCP if there are insurmountable | |||
incompatibilities for the multipath extension on a path. | incompatibilities for the multipath extension on a path. | |||
Middleboxes may also cause some TCP features to be able to exist on | Middleboxes may also cause some TCP features to be able to exist on | |||
one subflow but not another. Typically these will be at the subflow | one subflow but not another. Typically, these will be at the subflow | |||
level (such as SACK [11]) and thus do not affect the connection-level | level (such as selective acknowledgment (SACK) [11]) and thus do not | |||
behaviour. In the future, any proposed TCP connection-level | affect the connection-level behavior. In the future, any proposed | |||
extensions should consider how they can co-exist with MPTCP. | TCP connection-level extensions should consider how they can coexist | |||
with MPTCP. | ||||
The modifications to support Multipath TCP remain at the transport | The modifications to support Multipath TCP remain at the transport | |||
layer, although some knowledge of the underlying network layer is | layer, although some knowledge of the underlying network layer is | |||
required. Multipath TCP SHOULD work with IPv4 and IPv6 | required. Multipath TCP SHOULD work with IPv4 and IPv6 | |||
interchangeably, i.e. one connection may operate over both IPv4 and | interchangeably, i.e., one connection may operate over both IPv4 and | |||
IPv6 networks. | IPv6 networks. | |||
2.2.3. Compatibility with other network users | 2.2.3. Compatibility with Other Network Users | |||
As a corollary to both network and application compatibility, the | As a corollary to both network and application compatibility, the | |||
architecture must enable new Multipath TCP flows to coexist | architecture must enable new Multipath TCP flows to coexist | |||
gracefully with existing single-path TCP flows, competing for | gracefully with existing single-path TCP flows, competing for | |||
bandwidth neither unduly aggressively nor unduly timidly (unless low- | bandwidth neither unduly aggressively nor unduly timidly (unless low- | |||
precedence operation is specifically requested by the application, | precedence operation is specifically requested by the application, | |||
such as with LEDBAT). The use of multiple paths MUST NOT unduly harm | such as with LEDBAT). The use of multiple paths MUST NOT unduly harm | |||
users using single-path TCP at shared bottlenecks, beyond the impact | users using single-path TCP at shared bottlenecks, beyond the impact | |||
that would occur from another single-path TCP flow. Multiple | that would occur from another single-path TCP flow. Multiple | |||
Multipath TCP flows on a shared bottleneck MUST share bandwidth | Multipath TCP flows on a shared bottleneck MUST share bandwidth | |||
between each other with similar fairness to that which occurs at a | between each other with similar fairness to that which occurs at a | |||
shared bottleneck with single-path TCP. | shared bottleneck with single-path TCP. | |||
2.3. Security Goals | 2.3. Security Goals | |||
The extension of TCP with multipath capabilities will bring with it a | The extension of TCP with multipath capabilities will bring with it a | |||
number of new threats, analysed in detail in [12]. The security goal | number of new threats, analyzed in detail in [12]. The security goal | |||
for Multipath TCP is to provide a service no less secure than | for Multipath TCP is to provide a service no less secure than | |||
regular, single-path TCP. This will be achieved through a | regular, single-path TCP. This will be achieved through a | |||
combination of existing TCP security mechanisms (potentially modified | combination of existing TCP security mechanisms (potentially modified | |||
to align with the Multipath TCP extensions) and of protection against | to align with the Multipath TCP extensions) and of protection against | |||
the new multipath threats identified. The design decisions derived | the new multipath threats identified. The design decisions derived | |||
from this goal are presented in Section 5.8. | from this goal are presented in Section 5.8. | |||
2.4. Related Protocols | 2.4. Related Protocols | |||
There are several similarities between SCTP [6] and MPTCP, in that | There are several similarities between SCTP [6] and MPTCP, in that | |||
both can make use of multiple addresses at end hosts to give some | both can make use of multiple addresses at end hosts to give some | |||
multi-path capability. In SCTP, the primary use case is to support | multipath capability. In SCTP, the primary use case is to support | |||
redundancy and mobility for multihomed hosts (i.e. a single path will | redundancy and mobility for multihomed hosts (i.e., a single path | |||
change one of its end host addresses); the simultaneous use of | will change one of its end host addresses); the simultaneous use of | |||
multiple paths is not supported . Extensions are proposed to support | multiple paths is not supported. Extensions are proposed to support | |||
simultaneous multipath transport [13], but these are yet to be | simultaneous multipath transport [13], but these are yet to be | |||
standardised. By far the most widely used stream-based transport | standardized. By far the most widely used stream-based transport | |||
protocol is, however, TCP [1], and SCTP does not meet the network and | protocol is, however, TCP [1], and SCTP does not meet the network and | |||
application compatibility goals specified in Section 2.2. For | application compatibility goals specified in Section 2.2. For | |||
network compatibility, there are issues with various middleboxes | network compatibility, there are issues with various middleboxes | |||
(especially NATs) that are unaware of SCTP and consequently end up | (especially NATs) that are unaware of SCTP and consequently end up | |||
blocking it. For application compatibility, applications need to | blocking it. For application compatibility, applications need to | |||
actively choose to use SCTP, and with the deployment issues very few | actively choose to use SCTP, and with the deployment issues, very few | |||
choose to do so. MPTCP's compatibility goals are in part based on | choose to do so. MPTCP's compatibility goals are in part based on | |||
these observations of SCTP's deployment issues. | these observations of SCTP's deployment issues. | |||
3. An Architectural Basis For Multipath TCP | 3. An Architectural Basis for Multipath TCP | |||
We now present one possible transport architecture that we believe | This section presents one possible transport architecture that the | |||
can effectively support the goals for Multipath TCP. The new | authors believe can effectively support the goals for Multipath TCP. | |||
Internet model described here is based on ideas proposed earlier in | The new Internet model described here is based on ideas proposed | |||
Tng ("Transport next-generation") [14]. While by no means the only | earlier in Tng ("Transport next-generation") [14]. While by no means | |||
possible architecture supporting multipath transport, Tng | the only possible architecture supporting multipath transport, Tng | |||
incorporates many lessons learned from previous transport research | incorporates many lessons learned from previous transport research | |||
and development practice, and offers a strong starting point from | and development practice, and offers a strong starting point from | |||
which to consider the extant Internet architecture and its bearing on | which to consider the extant Internet architecture and its bearing on | |||
the design of any new Internet transports or transport extensions. | the design of any new Internet transports or transport extensions. | |||
+------------------+ | +------------------+ | |||
| Application | | | Application | | |||
+------------------+ ^ Application-oriented transport | +------------------+ ^ Application-oriented transport | |||
| | | functions (Semantic Layer) | | | | functions (Semantic Layer) | |||
+ - - Transport - -+ ---------------------------------- | + - - Transport - -+ ---------------------------------- | |||
skipping to change at page 11, line 47 | skipping to change at page 12, line 17 | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
| Semantic |<------------ end-to-end ------------->| Semantic | | | Semantic |<------------ end-to-end ------------->| Semantic | | |||
+-------------+ +-------------+ +-------------+ +-------------+ | +-------------+ +-------------+ +-------------+ +-------------+ | |||
|Flow+Endpoint|<->|Flow+Endpoint|<->|Flow+Endpoint|<->|Flow+Endpoint| | |Flow+Endpoint|<->|Flow+Endpoint|<->|Flow+Endpoint|<->|Flow+Endpoint| | |||
+-------------+ +-------------+ +-------------+ +-------------+ | +-------------+ +-------------+ +-------------+ +-------------+ | |||
| Network |<->| Network |<->| Network |<->| Network | | | Network |<->| Network |<->| Network |<->| Network | | |||
+-------------+ +-------------+ +-------------+ +-------------+ | +-------------+ +-------------+ +-------------+ +-------------+ | |||
Firewall Performance | Firewall Performance | |||
End Host or NAT Enhancing Proxy End Host | End Host or NAT Enhancing Proxy End Host | |||
Figure 5: Middleboxes in the new Internet model | Figure 5: Middleboxes in the New Internet Model | |||
MPTCP's architectural design follows Tng's decomposition as shown in | MPTCP's architectural design follows Tng's decomposition as shown in | |||
Figure 6. MPTCP, which provides application compatibility through | Figure 6. MPTCP, which provides application compatibility through | |||
the preservation of TCP-like semantics of global ordering of | the preservation of TCP-like semantics of global ordering of | |||
application data and reliability, is an instantiation of the | application data and reliability, is an instantiation of the | |||
"application-oriented" Semantic layer; whereas the subflow TCP | "application-oriented" Semantic layer; whereas the subflow TCP | |||
component, which provides network compatibility by appearing and | component, which provides network compatibility by appearing and | |||
behaving as a TCP flow in the network, is an instantiation of the | behaving as a TCP flow in the network, is an instantiation of the | |||
"network-oriented" Flow+Endpoint layer. | "network-oriented" Flow+Endpoint layer. | |||
+--------------------------+ +-------------------------------+ | +--------------------------+ +-------------------------------+ | |||
| Application | | Application | | | Application | | Application | | |||
+--------------------------+ +-------------------------------+ | +--------------------------+ +-------------------------------+ | |||
| Semantic | | MPTCP | | | Semantic | | MPTCP | | |||
|------------+-------------| + - - - - - - - + - - - - - - - + | |------------+-------------| + - - - - - - - + - - - - - - - + | |||
| Flow+Endpt | Flow+Endpt | | Subflow (TCP) | Subflow (TCP) | | | Flow+Endpt | Flow+Endpt | | Subflow (TCP) | Subflow (TCP) | | |||
+------------+-------------+ +---------------+---------------+ | +------------+-------------+ +---------------+---------------+ | |||
| Network | Network | | IP | IP | | | Network | Network | | IP | IP | | |||
+------------+-------------+ +---------------+---------------+ | +------------+-------------+ +---------------+---------------+ | |||
Figure 6: Relationship between Tng (left) and MPTCP (right) | Figure 6: Relationship between Tng (Left) and MPTCP (Right) | |||
As a protocol extension to TCP, MPTCP thus explicitly acknowledges | As a protocol extension to TCP, MPTCP thus explicitly acknowledges | |||
middleboxes in its design, and specifies a protocol that operates at | middleboxes in its design, and specifies a protocol that operates at | |||
two scales: the MPTCP component operates end-to-end, while it allows | two scales: the MPTCP component operates end-to-end, while it allows | |||
the TCP component to operate segment-by-segment. | the TCP component to operate segment-by-segment. | |||
4. A Functional Decomposition of MPTCP | 4. A Functional Decomposition of MPTCP | |||
The previous two sections have discussed the goals for a Multipath | The previous two sections have discussed the goals for a Multipath | |||
TCP design, and provided a basis for decomposing the functions of a | TCP design, and provided a basis for decomposing the functions of a | |||
skipping to change at page 13, line 29 | skipping to change at page 13, line 37 | |||
implement the following functions: | implement the following functions: | |||
o Path Management: This is the function to detect and use multiple | o Path Management: This is the function to detect and use multiple | |||
paths between two hosts. MPTCP uses the presence of multiple IP | paths between two hosts. MPTCP uses the presence of multiple IP | |||
addresses at one or both of the hosts as an indicator of this. | addresses at one or both of the hosts as an indicator of this. | |||
The path management features of the MPTCP protocol are the | The path management features of the MPTCP protocol are the | |||
mechanisms to signal alternative addresses to hosts, and | mechanisms to signal alternative addresses to hosts, and | |||
mechanisms to set up new subflows joined to an existing MPTCP | mechanisms to set up new subflows joined to an existing MPTCP | |||
connection. | connection. | |||
o Packet Scheduling: This function breaks the bytestream received | o Packet Scheduling: This function breaks the byte stream received | |||
from the application into segments to be transmitted on one of the | from the application into segments to be transmitted on one of the | |||
available subflows. The MPTCP design makes use of a data sequence | available subflows. The MPTCP design makes use of a data sequence | |||
mapping, associating segments sent on different subflows to a | mapping, associating segments sent on different subflows to a | |||
connection-level sequence numbering, thus allowing segments sent | connection-level sequence numbering, thus allowing segments sent | |||
on different subflows to be correctly re-ordered at the receiver. | on different subflows to be correctly re-ordered at the receiver. | |||
The packet scheduler is dependent upon information about the | The packet scheduler is dependent upon information about the | |||
availability of paths exposed by the path management component, | availability of paths exposed by the path management component, | |||
and then makes use of the subflows to transmit queued segments. | and then makes use of the subflows to transmit queued segments. | |||
This function is also responsible for connection-level re-ordering | This function is also responsible for connection-level re-ordering | |||
on receipt of packets from the TCP subflows, according to the | on receipt of packets from the TCP subflows, according to the | |||
skipping to change at page 13, line 45 | skipping to change at page 14, line 4 | |||
The packet scheduler is dependent upon information about the | The packet scheduler is dependent upon information about the | |||
availability of paths exposed by the path management component, | availability of paths exposed by the path management component, | |||
and then makes use of the subflows to transmit queued segments. | and then makes use of the subflows to transmit queued segments. | |||
This function is also responsible for connection-level re-ordering | This function is also responsible for connection-level re-ordering | |||
on receipt of packets from the TCP subflows, according to the | on receipt of packets from the TCP subflows, according to the | |||
attached data sequence mappings. | attached data sequence mappings. | |||
o Subflow (single-path TCP) Interface: A subflow component takes | o Subflow (single-path TCP) Interface: A subflow component takes | |||
segments from the packet-scheduling component and transmits them | segments from the packet-scheduling component and transmits them | |||
over the specified path, ensuring detectable delivery to the host. | over the specified path, ensuring detectable delivery to the host. | |||
MPTCP uses TCP underneath for network compatibility; TCP ensures | MPTCP uses TCP underneath for network compatibility; TCP ensures | |||
in-order, reliable delivery. TCP adds its own sequence numbers to | in-order, reliable delivery. TCP adds its own sequence numbers to | |||
the segments; these are used to detect and retransmit lost packets | the segments; these are used to detect and retransmit lost packets | |||
at the subflow layer. On receipt, the subflow passes its | at the subflow layer. On receipt, the subflow passes its | |||
reassembled data to the packet scheduling component for | reassembled data to the packet scheduling component for | |||
connection-level reassembly; the data sequence mapping from the | connection-level reassembly; the data sequence mapping from the | |||
sender's packet scheduling component allows re-ordering of the | sender's packet scheduling component allows re-ordering of the | |||
entire bytestream. | entire byte stream. | |||
o Congestion Control: This function coordinates congestion control | o Congestion Control: This function coordinates congestion control | |||
across the subflows. As specified, this congestion control | across the subflows. As specified, this congestion control | |||
algorithm MUST ensure that a MPTCP connection does not unfairly | algorithm MUST ensure that an MPTCP connection does not unfairly | |||
take more bandwidth than a single path TCP flow would take at a | take more bandwidth than a single path TCP flow would take at a | |||
shared bottleneck. An algorithm to support this is specified in | shared bottleneck. An algorithm to support this is specified in | |||
[7]. | [7]. | |||
These functions fit together as follows. The Path Management looks | These functions fit together as follows. The path management looks | |||
after the discovery (and if necessary, initialisation) of multiple | after the discovery (and if necessary, initialization) of multiple | |||
paths between two hosts. The Packet Scheduler then receives a stream | paths between two hosts. The packet scheduler then receives a stream | |||
of data from the application destined for the network, and undertakes | of data from the application destined for the network, and undertakes | |||
the necessary operations on it (such as segmenting the data into | the necessary operations on it (such as segmenting the data into | |||
connection-level segments, and adding a connection-level sequence | connection-level segments, and adding a connection-level sequence | |||
number) before sending it on to a subflow. The subflow then adds its | number) before sending it on to a subflow. The subflow then adds its | |||
own sequence number, ACKs, and passes them to network. The receiving | own sequence number, ACKs, and passes them to network. The receiving | |||
subflow re-orders data (if necessary) and passes it to the packet | subflow re-orders data (if necessary) and passes it to the packet | |||
scheduling component, which performs connection level re-ordering, | scheduling component, which performs connection level re-ordering, | |||
and sends the data stream to the application. Finally, the | and sends the data stream to the application. Finally, the | |||
congestion control component exists as part of the packet scheduling, | congestion control component exists as part of the packet scheduling, | |||
in order to schedule which segments should be sent at what rate on | in order to schedule which segments should be sent at what rate on | |||
which subflow. | which subflow. | |||
5. High-Level Design Decisions | 5. High-Level Design Decisions | |||
There is seemingly a wide range of choices when designing a multipath | There is seemingly a wide range of choices when designing a multipath | |||
extension to TCP. However, the goals as discussed earlier in this | extension to TCP. However, the goals as discussed earlier in this | |||
document constrain the possible solutions, leaving relative little | document constrain the possible solutions, leaving relative little | |||
choice in many areas. Here, we outline high-level design choices | choice in many areas. This section outlines high-level design | |||
that draw from the architectural basis discussed earlier in | choices that draw from the architectural basis discussed earlier in | |||
Section 3, which the design of MPTCP [5] takes into account. | Section 3, which the design of MPTCP [5] takes into account. | |||
5.1. Sequence Numbering | 5.1. Sequence Numbering | |||
MPTCP uses two levels of sequence spaces: a connection level sequence | MPTCP uses two levels of sequence spaces: a connection-level sequence | |||
number, and another sequence number for each subflow. This permits | number and another sequence number for each subflow. This permits | |||
connection-level segmentation and reassembly, and retransmission of | connection-level segmentation and reassembly and retransmission of | |||
the same part of connection-level sequence space on different | the same part of connection-level sequence space on different | |||
subflow-level sequence space. | subflow-level sequence space. | |||
The alternative approach would be to use a single connection level | The alternative approach would be to use a single connection-level | |||
sequence number, which gets sent on multiple subflows. This has two | sequence number, which gets sent on multiple subflows. This has two | |||
problems: first, the individual subflows will appear to the network | problems: first, the individual subflows will appear to the network | |||
as TCP sessions with gaps in the sequence space; this in turn may | as TCP sessions with gaps in the sequence space; this in turn may | |||
upset certain middleboxes such as intrusion detection systems, or | upset certain middleboxes such as intrusion detection systems, or | |||
certain transparent proxies, and would thus go against the network | certain transparent proxies, and would thus go against the network | |||
compatibility goal. Second, the sender would not be able to | compatibility goal. Second, the sender would not be able to | |||
attribute packet losses or receptions to the correct path when the | attribute packet losses or receptions to the correct path when the | |||
same segment is sent on multiple paths (i.e. in the case of | same segment is sent on multiple paths (i.e., in the case of | |||
retransmissions). | retransmissions). | |||
The sender must be able to tell the receiver how to reassemble the | The sender must be able to tell the receiver how to reassemble the | |||
data, for delivery to the application. In order to achieve this, the | data, for delivery to the application. In order to achieve this, the | |||
receiver must determine how subflow-level data (carrying subflow | receiver must determine how subflow-level data (carrying subflow | |||
sequence numbers) maps at the connection level. We refer to this as | sequence numbers) maps at the connection level. This is referred to | |||
the Data Sequence Mapping. This mapping takes the form (data seq, | as the "data sequence mapping". This mapping can be represented as a | |||
subflow seq, length), i.e. for a given number of bytes (the length), | tuple of (data sequence number, subflow sequence number, length), | |||
the subflow sequence space beginning at the given sequence number | i.e., for a given number of bytes (the length), the subflow sequence | |||
maps to the connection-level sequence space (beginning at the given | space beginning at the given sequence number maps to the connection- | |||
data seq number). This information could conceivably have various | level sequence space (beginning at the given data sequence number). | |||
sources. | This information could conceivably have various sources. | |||
One option to signal the Data Sequence Mapping would be to use | One option to signal the data sequence mapping would be to use | |||
existing fields in the TCP segment (such as subflow seqno, length) | existing fields in the TCP segment (such as subflow sequence number, | |||
and only add the data sequence number to each segment, for instance | length) and add only the data sequence number to each segment, for | |||
as a TCP option. This would be vulnerable, however, to middleboxes | instance, as a TCP option. This would be vulnerable, however, to | |||
that resegment or assemble data, since there is no specified | middleboxes that re-segment or assemble data, since there is no | |||
behaviour for coalescing TCP options. If one signalled (data seqno, | specified behavior for coalescing TCP options. If one signaled (data | |||
length), this would still be vulnerable to middleboxes that coalesce | sequence number, length), this would still be vulnerable to | |||
segments and do not understand MPTCP signalling so do not correctly | middleboxes that coalesce segments and do not understand MPTCP | |||
rewrite the options. | signaling so do not correctly rewrite the options. | |||
Because of these potential issues, the design decision taken in the | Because of these potential issues, the design decision taken in the | |||
MPTCP protocol is that whenever a mapping for subflow data needs to | MPTCP protocol is that whenever a mapping for subflow data needs to | |||
be conveyed to the other host, all three pieces of data (data seq, | be conveyed to the other host, all three pieces of data (data seq, | |||
subflow seq, length) must be sent. To reduce the overhead, it would | subflow seq, length) must be sent. To reduce the overhead, it would | |||
be permissible for the mapping to be sent periodically and cover more | be permissible for the mapping to be sent periodically and cover more | |||
than a single segment. Further experimentation is required to | than a single segment. Further experimentation is required to | |||
determine what tradeoffs exist regarding the frequency at which | determine what tradeoffs exist regarding the frequency at which | |||
mappings should be sent. It could also be excluded entirely in the | mappings should be sent. It could also be excluded entirely in the | |||
case of a connection before more than one subflow is used, where the | case of a connection before more than one subflow is used, where the | |||
data-level and subflow-level sequence space is the same. | data-level and subflow-level sequence space is the same. | |||
5.2. Reliability and Retransmissions | 5.2. Reliability and Retransmissions | |||
MPTCP features acknowledgements at connection-level as well as | MPTCP features acknowledgements at connection-level as well as | |||
subflow-level acknowledgements, in order to provide a robust service | subflow-level acknowledgements, in order to provide a robust service | |||
to the application. | to the application. | |||
Under normal behaviour, MPTCP can use the data sequence mapping and | Under normal behavior, MPTCP could use the data sequence mapping and | |||
subflow ACKs to decide when a connection-level segment was received. | subflow ACKs to decide when a connection-level segment was received. | |||
The transmission of TCP ACKs for a subflow are handled entirely at | The transmission of TCP ACKs for a subflow are handled entirely at | |||
the subflow level, in order to maintain TCP semantics and trigger | the subflow level, in order to maintain TCP semantics and trigger | |||
subflow-level retransmissions. This has certain implications on end- | subflow-level retransmissions. This has certain implications on end- | |||
to-end semantics. It means that once a segment is ACKed at the | to-end semantics. It would mean that once a segment is ACKed at the | |||
subflow level it cannot be discarded in the re-order buffer at the | subflow level, it cannot be discarded in the re-order buffer at the | |||
connection level. Secondly, unlike in standard TCP, a receiver | connection level. Secondly, unlike in standard TCP, a receiver | |||
cannot simply drop out-of-order segments if needed (for instance, due | cannot simply drop out-of-order segments if needed (for instance, due | |||
to memory pressure). Under certain circumstances, therefore, it may | to memory pressure). Under certain circumstances, it may be | |||
be desirable to drop segments after acknowledgement on the subflow | desirable to drop segments after acknowledgement on the subflow but | |||
but before delivery to the application, and this can be facilitated | before delivery to the application, and this can be facilitated by a | |||
by a connection-level acknowledgement. | connection-level acknowledgement. | |||
Furthermore, it is possible to conceive of some cases where | Furthermore, it is possible to conceive of some cases where | |||
connection-level acknowledgements could improve robustness. Consider | connection-level acknowledgements could improve robustness. Consider | |||
a subflow traversing a transparent proxy: if the proxy ACKs a segment | a subflow traversing a transparent proxy: if the proxy ACKs a segment | |||
and then crashes, the sender will not retransmit the lost segment on | and then crashes, the sender will not retransmit the lost segment on | |||
another subflow, as it thinks the segment has been received. The | another subflow, as it thinks the segment has been received. The | |||
connection grinds to a halt despite having other working subflows, | connection grinds to a halt despite having other working subflows, | |||
and the sender would be unable to determine the cause of the problem. | and the sender would be unable to determine the cause of the problem. | |||
An example situation where this may occur would be mobility between | An example situation where this may occur would be mobility between | |||
wireless access points, each of which operates a transport-level | wireless access points, each of which operates a transport-level | |||
proxy. Finally, as an optimisation, it may be feasible for a | proxy. Finally, as an optimization, it may be feasible for a | |||
connection-level acknowledgement to be transmitted over the shortest | connection-level acknowledgement to be transmitted over the shortest | |||
Round-Trip Time (RTT) path, potentially reducing send buffer | Round-Trip Time (RTT) path, potentially reducing send buffer | |||
requirements (see Section 5.3). | requirements (see Section 5.3). | |||
Therefore, to provide a fully robust multipath TCP solution given the | Therefore, to provide a fully robust multipath TCP solution given the | |||
above constraints, MPTCP for use on the public Internet MUST feature | above constraints, MPTCP for use on the public Internet MUST feature | |||
explicit connection-level acknowledgements, in addition to subflow- | explicit connection-level acknowledgements, in addition to subflow- | |||
level acknowledgements. A connection-level acknowledgement would | level acknowledgements. A connection-level acknowledgement would | |||
only be required in order to signal when the receive window moves | only be required in order to signal when the receive window moves | |||
forward; the heuristics for using such a signal are discussed in more | forward; the heuristics for using such a signal are discussed in more | |||
detail in the protocol specification [5]. | detail in the protocol specification [5]. | |||
Regarding retransmissions, it MUST be possible for a segments to be | Regarding retransmissions, it MUST be possible for a segment to be | |||
retransmitted on a different subflow to that on which it was | retransmitted on a different subflow from that on which it was | |||
originally sent. This is one of MPTCP's core goals, in order to | originally sent. This is one of MPTCP's core goals, in order to | |||
maintain integrity during temporary or permanent subflow failure, and | maintain integrity during temporary or permanent subflow failure, and | |||
this is enabled by the dual sequence number space. | this is enabled by the dual sequence number space. | |||
The scheduling of retransmissions will have significant impact on | The scheduling of retransmissions will have significant impact on | |||
MPTCP user experience. The current MPTCP specification suggests that | MPTCP user experience. The current MPTCP specification suggests that | |||
data outstanding on subflows that have timed out should be | data outstanding on subflows that have timed out should be | |||
rescheduled for transmission on different subflows. This behaviour | rescheduled for transmission on different subflows. This behavior | |||
aims to minimize disruption when a path breaks, and uses the first | aims to minimize disruption when a path breaks, and uses the first | |||
timeout as indicators. More conservative versions would be to use | timeout as indicators. More conservative versions would be to use | |||
second or third timeouts for the same segment. | second or third timeouts for the same segment. | |||
Typically, fast retransmit on an individual subflow will not trigger | Typically, fast retransmit on an individual subflow will not trigger | |||
retransmission on another subflow, although this may still be | retransmission on another subflow, although this may still be | |||
desirable in certain cases, for instance to reduce the receive buffer | desirable in certain cases, for instance, to reduce the receive | |||
requirements. However, in all cases with retransmissions on | buffer requirements. However, in all cases with retransmissions on | |||
different subflows, the lost segments SHOULD still be sent on the | different subflows, the lost segments SHOULD still be sent on the | |||
path that lost them. This is currently believed to be necessary to | path that lost them. This is currently believed to be necessary to | |||
maintain subflow integrity, as per the network compatibility goal. | maintain subflow integrity, as per the network compatibility goal. | |||
By doing this, some efficiency is lost, and it is unclear at this | By doing this, some efficiency is lost, and it is unclear at this | |||
point what the optimal retransmit strategy is. | point what the optimal retransmit strategy is. | |||
Large-scale experiments are therefore required in order to determine | Large-scale experiments are therefore required in order to determine | |||
the most appropriate retransmission strategy, and recommendations | the most appropriate retransmission strategy, and recommendations | |||
will be refined once more information is available. | will be refined once more information is available. | |||
5.3. Buffers | 5.3. Buffers | |||
To ensure in-order delivery, MPTCP must use a connection level | To ensure in-order delivery, MPTCP must use a connection level | |||
receive buffer, where segments are placed until they are in order and | receive buffer, where segments are placed until they are in order and | |||
can be read by the application. | can be read by the application. | |||
In regular, single-path TCP, it is usually recommended to set the | In regular, single-path TCP, it is usually recommended to set the | |||
receive buffer to 2*BDP (Bandwidth-Delay Product, i.e. BDP = BW*RTT, | receive buffer to 2*BDP (Bandwidth-Delay Product, i.e., BDP = BW*RTT, | |||
where BW = Bandwidth and RTT = Round-Trip Time). One BDP allows | where BW = Bandwidth and RTT = Round-Trip Time). One BDP allows | |||
supporting reordering of segments by the network. The other BDP | supporting reordering of segments by the network. The other BDP | |||
allows the connection to continue during fast retransmit: when a | allows the connection to continue during fast retransmit: when a | |||
segment is fast retransmitted, the receiver must be able to store | segment is fast retransmitted, the receiver must be able to store | |||
incoming data during one more RTT. | incoming data during one more RTT. | |||
For MPTCP, the story is a bit more complicated. The ultimate goal is | For MPTCP, the story is a bit more complicated. The ultimate goal is | |||
that a subflow packet loss or subflow failure should not affect the | that a subflow packet loss or subflow failure should not affect the | |||
throughput of other working subflows; the receiver should have enough | throughput of other working subflows; the receiver should have enough | |||
buffering to store all data until the missing segment is re- | buffering to store all data until the missing segment is re- | |||
transmitted and reaches the destination. | transmitted and reaches the destination. | |||
The worst case scenario would be when the subflow with the highest | The worst-case scenario would be when the subflow with the highest | |||
RTT/RTO (Round-Trip Time or Retransmission TimeOut) experiences a | RTT/RTO (Round-Trip Time or Retransmission TimeOut) experiences a | |||
timeout; in that case the receiver has to buffer data from all | timeout; in that case, the receiver has to buffer data from all | |||
subflows for the duration of the RTO. Thus, the smallest connection- | subflows for the duration of the RTO. Thus, the smallest connection- | |||
level receive buffer that would be needed to avoid stalling with | level receive buffer that would be needed to avoid stalling with | |||
subflow failures is sum(BW_i)*RTO_max, where BW_i = Bandwidth for | subflow failures is sum(BW_i)*RTO_max, where BW_i = Bandwidth for | |||
each subflow and RTO_max is the largest RTO across all subflows. | each subflow and RTO_max is the largest RTO across all subflows. | |||
This is an order of magnitude more than the receive buffer required | This is an order of magnitude more than the receive buffer required | |||
for a single connection, and is probably too expensive for practical | for a single connection, and is probably too expensive for practical | |||
purposes. A more sensible requirement is to avoid stalls in the | purposes. A more sensible requirement is to avoid stalls in the | |||
absence of timeouts. Therefore, the RECOMMENDED receive buffer is | absence of timeouts. Therefore, the RECOMMENDED receive buffer is | |||
2*sum(BW_i)*RTT_max, where RTT_max is the largest RTT across all | 2*sum(BW_i)*RTT_max, where RTT_max is the largest RTT across all | |||
subflows. This buffer sizing ensures subflows do not stall when fast | subflows. This buffer sizing ensures subflows do not stall when fast | |||
retransmit is triggered on any subflow. | retransmit is triggered on any subflow. | |||
The resulting buffer size should be small enough for practical use. | The resulting buffer size should be small enough for practical use. | |||
However, there may be extreme cases where fast, high throughput paths | However, there may be extreme cases where fast, high throughput paths | |||
(e.g. 100Mb/s, 10ms RTT) are used in conjunction with slow paths | (e.g., 100 Mb/s, 10 ms RTT) are used in conjunction with slow paths | |||
(e.g. 1Mb/s, 1000ms RTT). In that case the required receive buffer | (e.g., 1 Mb/s, 1000 ms RTT). In that case, the required receive | |||
would be 12.5MB, which is likely too big. In extreme cases such as | buffer would be 12.5 MB, which is likely too big. In extreme cases | |||
this example, it may be prudent to only use some of the fastest | such as this example, it may be prudent to only use some of the | |||
available paths for the MPTCP connection, potentially using the slow | fastest available paths for the MPTCP connection, potentially using | |||
path(s) for backup only. | the slow path(s) for backup only. | |||
Send Buffer: The RECOMMENDED send buffer is the same size as the | Send Buffer: The RECOMMENDED send buffer is the same size as the | |||
recommended receive buffer i.e., 2*sum(BW_i)*RTT_max. This is | recommended receive buffer, i.e., 2*sum(BW_i)*RTT_max. This is | |||
because the sender must store locally the segments sent but | because the sender must locally store the segments sent but | |||
unacknowledged by the connection level ACK. The send buffer size | unacknowledged by the connection level ACK. The send buffer size | |||
matters particularly for hosts that maintain a large number of | matters particularly for hosts that maintain a large number of | |||
ongoing connections. If the required send buffer is too large, a | ongoing connections. If the required send buffer is too large, a | |||
host can choose to only send data on the fast subflows, using the | host can choose to only send data on the fast subflows, using the | |||
slow subflows only in cases of failure. | slow subflows only in cases of failure. | |||
5.4. Signalling | 5.4. Signaling | |||
Since MPTCP uses TCP as its subflow transport mechanism, a MPTCP | Since MPTCP uses TCP as its subflow transport mechanism, an MPTCP | |||
connection will also begin as a single TCP connection. Nevertheless, | connection will also begin as a single TCP connection. Nevertheless, | |||
it must signal to the peer that it supports MPTCP and wishes to use | it must signal to the peer that it supports MPTCP and wishes to use | |||
it on this connection. As such, a TCP Option will be used to | it on this connection. As such, a TCP option will be used to | |||
transmit this information, since this is the established mechanism | transmit this information, since this is the established mechanism | |||
for indicating additional functionality on a TCP session. | for indicating additional functionality on a TCP session. | |||
In addition, further signalling is required during the operation of a | In addition, further signaling is required during the operation of an | |||
MPTCP session, such as that for reassembly for multiple subflows, and | MPTCP session, such as that for reassembly across multiple subflows, | |||
for informing the other host about potential other available | and for informing the other host about other available IP addresses. | |||
addresses. | ||||
The MPTCP protocol design will, however, use TCP Options for this | The MPTCP protocol design will use TCP options for this additional | |||
additional signalling. This has been chosen as the mechanism most | signaling. This has been chosen as the mechanism most fitting in | |||
fitting in with the goals as specified in Section 2. With this | with the goals as specified in Section 2. With this mechanism, the | |||
mechanism, the signalling requires to operate MPTCP is transported | signaling required to operate MPTCP is transported separately from | |||
separately from the data, allowing it to be created and processed | the data, allowing it to be created and processed separately from the | |||
separately from the data stream, and retaining architectural | data stream, and retaining architectural compatibility with network | |||
compatibility with network entities. | entities. | |||
This decision is the consensus of the Working Group (following | This decision is the consensus of the Working Group (following | |||
detailed discussions at IETF78), and the main reasons for this are as | detailed discussions at IETF78), and the main reasons for this are as | |||
follows: | follows: | |||
o TCP options are the traditional signalling method for TCP; | o TCP options are the traditional signaling method for TCP; | |||
o A TCP option on a SYN is the most compatible way for an end host | o A TCP option on a SYN is the most compatible way for an end host | |||
to signal it is MPTCP-capable; | to signal it is MPTCP capable; | |||
o If connection-level ACKs are signalled in the payload then they | o If connection-level ACKs are signaled in the payload, then they | |||
may suffer from packet loss and may be congestion-controlled, | may suffer from packet loss and may be congestion-controlled, | |||
which may affect the data throughput in the forward direction and | which may affect the data throughput in the forward direction and | |||
could lead to head-of-line blocking; | could lead to head-of-line blocking; | |||
o Middleboxes, such as NAT traversal helpers, can easily parse TCP | o Middleboxes, such as NAT traversal helpers, can easily parse TCP | |||
options, e. g., to rewrite addresses. | options, e.g., to rewrite addresses. | |||
On the other hand, the main drawbacks of TCP options compared to TLV | On the other hand, the main drawbacks of TCP options compared to TLV | |||
encoding in the payload are: | encoding in the payload are the following: | |||
o There is limited space for signalling messages; | o There is limited space for signaling messages; | |||
o A middlebox may, potentially, drop a packet with an unknown | o A middlebox may, potentially, drop a packet with an unknown | |||
option; | option; | |||
o The transport of control information in options is not necessarily | o The transport of control information in options is not necessarily | |||
reliable. | reliable. | |||
The detailed design of MPTCP alleviates these issues as far as | The detailed design of MPTCP alleviates these issues as far as | |||
possible by carefully considering the size of MPTCP options, and | possible by carefully considering the size of MPTCP options and | |||
seamlessly falling back to regular TCP on the loss of control data. | seamlessly falling back to regular TCP on the loss of control data. | |||
Both option and payload encoding may interfere with offloading of TCP | Both option and payload encoding may interfere with offloading of TCP | |||
processing to high speed network interface cards, such as | processing to high-speed network interface cards, such as | |||
segmentation, checksumming, and reassembly. For network cards | segmentation, checksumming, and reassembly. For network cards | |||
supporting MPTCP, signalling in TCP options should simplify | supporting MPTCP, signaling in TCP options should simplify offloading | |||
offloading due to the separate handling of MPTCP signalling and data. | due to the separate handling of MPTCP signaling and data. | |||
5.5. Path Management | 5.5. Path Management | |||
Currently, the network does not expose path diversity between pairs | Currently, the network does not expose path diversity between pairs | |||
of IP addresses. In order to achieve path diversity from today's IP | of IP addresses. In order to achieve path diversity from today's IP | |||
networks, in the typical case MPTCP uses multiple addresses at one or | networks, in the typical case, MPTCP uses multiple addresses at one | |||
both hosts to infer different paths across the network. It is | or both hosts to infer different paths across the network. It is | |||
expected that these paths, whilst not necessarily entirely non- | expected that these paths, whilst not necessarily entirely non- | |||
overlapping, will be sufficiently disjoint to allow multipath to | overlapping, will be sufficiently disjoint to allow multipath to | |||
achieve improved throughput and robustness. The use of multiple IP | achieve improved throughput and robustness. The use of multiple IP | |||
addresses is a simple mechanism that requires no additional features | addresses is a simple mechanism that requires no additional features | |||
in the network. | in the network. | |||
Multiple different (source, destination) address pairs will thus be | Multiple different (source, destination) address pairs will thus be | |||
used as path selectors in most cases. Each path will be identified | used as path selectors in most cases. However, each path will be | |||
by a standard five-tuple (i.e. source address, destination address, | identified by a standard five-tuple (i.e., source address, | |||
source port, destination port, protocol), however, which can allow | destination address, source port, destination port, protocol), which | |||
the extension of MPTCP to use ports as well as addresses as path | can allow the extension of MPTCP to use ports as well as addresses as | |||
selectors. This will allow hosts to use port-based load balancing | path selectors. This will allow hosts to use port-based load | |||
with MPTCP, for example if the network routes different ports over | balancing with MPTCP, for example, if the network routes different | |||
different paths (which may be the case with technologies such as | ports over different paths (which may be the case with technologies | |||
Equal Cost MultiPath (ECMP) routing [4]). It should be noted, | such as Equal Cost MultiPath (ECMP) routing [4]). It should be | |||
however, that ISPs often undertake traffic engineering in order to | noted, however, that ISPs often undertake traffic engineering in | |||
optimise resource utilisation within their networks, and care should | order to optimize resource utilization within their networks, and | |||
be taken (by both ISPs and developers) that MPTCP using broadly | care should be taken (by both ISPs and developers) that MPTCP using | |||
similar paths does not adversely interfere with this. | broadly similar paths does not adversely interfere with this. | |||
For increased chance of successfully setting up additional subflows | For an increased chance of successfully setting up additional | |||
(such as when one end is behind a firewall, NAT, or other restrictive | subflows (such as when one end is behind a firewall, NAT, or other | |||
middlebox), either host SHOULD be able to add new subflows to a MPTCP | restrictive middlebox), either host SHOULD be able to add new | |||
connection. MPTCP MUST be able to handle paths that appear and | subflows to an MPTCP connection. MPTCP MUST be able to handle paths | |||
disappear during the lifetime of a connection (for example, through | that appear and disappear during the lifetime of a connection (for | |||
the activation of an additional network interface). | example, through the activation of an additional network interface). | |||
The path management is a separate function from the packet | The path management is a separate function from the packet | |||
scheduling, subflow interface, and congestion control functions of | scheduling, subflow interface, and congestion control functions of | |||
MPTCP, as documented in Section 4. As such it would be feasible to | MPTCP, as documented in Section 4. As such, it would be feasible to | |||
replace this IP-address-based design with an alternative path | replace this IP-address-based design with an alternative path | |||
selection mechanism in the future, with no significant changes to the | selection mechanism in the future, with no significant changes to the | |||
other functional components. | other functional components. | |||
5.6. Connection Identification | 5.6. Connection Identification | |||
Since a MPTCP connection may not be bound to a traditional 5-tuple | Since an MPTCP connection may not be bound to a traditional 5-tuple | |||
(source address and port, destination address and port, protocol | (source address and port, destination address and port, protocol | |||
number) for the entirety of its existence, it is desirable to provide | number) for the entirety of its existence, it is desirable to provide | |||
a new mechanism for connection identification. This will be useful | a new mechanism for connection identification. This will be useful | |||
for MPTCP-aware applications, and for the MPTCP implementation (and | for MPTCP-aware applications and for the MPTCP implementation (and | |||
MPTCP-aware middleboxes) to have a unique identifier with which to | MPTCP-aware middleboxes) to have a unique identifier with which to | |||
associate the multiple subflows. | associate the multiple subflows. | |||
Therefore, each MPTCP connection requires a connection identifier at | Therefore, each MPTCP connection requires a connection identifier at | |||
each host, which is locally unique within that host. In many ways, | each host, which is locally unique within that host. In many ways, | |||
this is analogous to an ephemeral port number in regular TCP. The | this is analogous to an ephemeral port number in regular TCP. The | |||
manifestation and purpose of such an identifier is out of the scope | manifestation and purpose of such an identifier is out of the scope | |||
of this architecture document. | of this architecture document. | |||
Legacy applications will not, however, have access to this identifier | Non-MPTCP-aware applications will not, however, have access to this | |||
and in such cases a MPTCP connection will be identified by the | identifier and in such cases an MPTCP connection will be identified | |||
5-tuple of the first TCP subflow. It is out of the scope of this | by the 5-tuple of the first TCP subflow. It is out of the scope of | |||
document, however, to define the behaviour of the MPTCP | this document, however, to define the behavior of the MPTCP | |||
implementation if the first TCP subflow later fails. If there are | implementation if the first TCP subflow later fails. If there are | |||
MPTCP-unaware applications that make assumptions about continued | MPTCP-unaware applications that make assumptions about continued | |||
existence of the initial address pair, their behaviour could be | existence of the initial address pair, their behavior could be | |||
disrupted by carrying on regardless. It is expected that this is a | disrupted by carrying on regardless. It is expected that this is a | |||
very small, possibly negligible, set of applications, however. MPTCP | very small, possibly negligible, set of applications, however. MPTCP | |||
MUST NOT be used for applications that request to bind to a specific | MUST NOT be used for applications that request to bind to a specific | |||
address or interface, since such applications are making a deliberate | address or interface, since such applications are making a deliberate | |||
choice of path in use. | choice of path in use. | |||
Since the requirements of applications are not clear at this stage, | Since the requirements of applications are not clear at this stage, | |||
however, it is as yet unconfirmed whether carrying on in the event of | however, it is as yet unconfirmed whether carrying on in the event of | |||
the loss of the initial address pair would be a damaging assumption | the loss of the initial address pair would be a damaging assumption | |||
to make. This behaviour will be an implementation-specific solution, | to make. This behavior will be an implementation-specific solution, | |||
and as such it is expected to be chosen by implementors once more | and as such it is expected to be chosen by implementors once more | |||
research has been undertaken to determine its impact. | research has been undertaken to determine its impact. | |||
5.7. Congestion Control | 5.7. Congestion Control | |||
As discussed in network-layer compatibility requirements | As discussed in network-layer compatibility requirements | |||
Section 2.2.3, there are three goals for the congestion control | Section 2.2.3, there are three goals for the congestion control | |||
algorithms used by a MPTCP implementation: improve throughput (at | algorithms used by an MPTCP implementation: improve throughput (at | |||
least as well as a single-path TCP connection would perform); do no | least as well as a single-path TCP connection would perform); do no | |||
harm to other network users (do not take up more capacity on any one | harm to other network users (do not take up more capacity on any one | |||
path than if it was a single path flow using only that route - this | path than if it was a single path flow using only that route -- this | |||
is particularly relevant for shared bottlenecks); and balance | is particularly relevant for shared bottlenecks); and balance | |||
congestion by moving traffic away from the most congested paths. To | congestion by moving traffic away from the most congested paths. To | |||
achieve these goals, the congestion control algorithms on each | achieve these goals, the congestion control algorithms on each | |||
subflow must be coupled in some way. A proposal for a suitable | subflow must be coupled in some way. A proposal for a suitable | |||
congestion control algorithm is given in [7]. | congestion control algorithm is given in [7]. | |||
5.8. Security | 5.8. Security | |||
A detailed threat analysis for Multipath TCP is presented in a | A detailed threat analysis for Multipath TCP is presented in a | |||
separate document [12]. This focuses on flooding attacks and | separate document [12]. That document focuses on flooding attacks | |||
hijacking attacks that can be launched against a Multipath TCP | and hijacking attacks that can be launched against a Multipath TCP | |||
connection. | connection. | |||
The basic security goal of Multipath TCP, as introduced in | The basic security goal of Multipath TCP, as introduced in | |||
Section 2.3, can be stated as: "provide a solution that is no worse | Section 2.3, can be stated as: "provide a solution that is no worse | |||
than standard TCP". | than standard TCP". | |||
From the threat analysis, and with this goal in mind, three key | From the threat analysis, and with this goal in mind, three key | |||
security requirements can be identified. A multi-addressed Multipath | security requirements can be identified. A multi-addressed Multipath | |||
TCP SHOULD be able to: | TCP SHOULD be able to do the following: | |||
o Provide a mechanism to confirm that the parties in a subflow | o Provide a mechanism to confirm that the parties in a subflow | |||
handshake are the same as in the original connection setup (e.g. | handshake are the same as in the original connection setup (e.g., | |||
require use of a key exchanged in the initial handshake in the | require use of a key exchanged in the initial handshake in the | |||
subflow handshake, to limit the scope for hijacking attacks). | subflow handshake, to limit the scope for hijacking attacks). | |||
o Provide verification that the peer can receive traffic at a new | o Provide verification that the peer can receive traffic at a new | |||
address before adding it (i.e. verify that the address belongs to | address before adding it (i.e., verify that the address belongs to | |||
the other host, to prevent flooding attacks). | the other host, to prevent flooding attacks). | |||
o Provide replay protection, i.e. ensure that a request to add/ | o Provide replay protection, i.e., ensure that a request to add/ | |||
remove a subflow is 'fresh'. | remove a subflow is 'fresh'. | |||
Additional mechanisms have been deployed as part of standard TCP | Additional mechanisms have been deployed as part of standard TCP | |||
stacks to provide resistance to Denial-of-Service attacks. For | stacks to provide resistance to Denial-of-Service (DoS) attacks. For | |||
example, there are various mechanisms to protect against TCP reset | example, there are various mechanisms to protect against TCP reset | |||
attacks [18], and Multipath TCP should continue to support similar | attacks [18], and Multipath TCP should continue to support similar | |||
protection. In addition, TCP SYN Cookies [19] were developed to | protection. In addition, TCP SYN Cookies [19] were developed to | |||
allow a TCP server to defer the creation of session state in the | allow a TCP server to defer the creation of session state in the | |||
SYN_RCVD state, and remain stateless until the ESTABLISHED state had | SYN_RCVD state, and remain stateless until the ESTABLISHED state had | |||
been reached. Multipath TCP should, ideally, continue to provide | been reached. Multipath TCP should, ideally, continue to provide | |||
such functionality and, at a minimum, avoid significant computational | such functionality and, at a minimum, avoid significant computational | |||
burden prior to reaching the ESTABLISHED state (of the Multipath TCP | burden prior to reaching the ESTABLISHED state (of the Multipath TCP | |||
connection as a whole). | connection as a whole). | |||
skipping to change at page 22, line 42 | skipping to change at page 23, line 12 | |||
in mind, and the protocol specification [5] will document how these | in mind, and the protocol specification [5] will document how these | |||
are met. | are met. | |||
6. Software Interactions | 6. Software Interactions | |||
6.1. Interactions with Applications | 6.1. Interactions with Applications | |||
In the case of applications that have used an existing API call to | In the case of applications that have used an existing API call to | |||
bind to a specific address or interface, the MPTCP extension MUST NOT | bind to a specific address or interface, the MPTCP extension MUST NOT | |||
be used. This is because the applications are indicating a clear | be used. This is because the applications are indicating a clear | |||
choice of path to use and thus will have expectations of behaviour | choice of path to use and thus will have expectations of behavior | |||
that must be maintained, in order to adhere to the application | that must be maintained, in order to adhere to the application | |||
compatibility goals. | compatibility goals. | |||
Interactions with applications are presented in [8] - including, but | Interactions with applications are presented in [8] -- including, but | |||
not limited to, performances changes that may be expected, semantic | not limited to, performances changes that may be expected, semantic | |||
changes, and new features that may be requested through an enhanced | changes, and new features that may be requested through an enhanced | |||
API. | API. | |||
TCP features the ability to send "Urgent" data, the delivery of which | TCP features the ability to send "Urgent" data, the delivery of which | |||
to the application may or may not be out-of-band. The use of this | to the application may or may not be out-of-band. The use of this | |||
feature is not recommended due to security implications and | feature is not recommended due to security implications and | |||
implementation differences [20]. MPTCP requires contiguous data to | implementation differences [20]. MPTCP requires contiguous data to | |||
support its Data Sequence Mapping over multiple segments, and | support its data sequence mapping over multiple segments, and | |||
therefore the Urgent pointer cannot interrupt an existing mapping. | therefore the Urgent pointer cannot interrupt an existing mapping. | |||
An MPTCP implementation MAY choose to support sending Urgent data, | An MPTCP implementation MAY choose to support sending Urgent data, | |||
and if it does, it SHOULD send the Urgent data on the soonest | and if it does, it SHOULD send the Urgent data on the soonest | |||
available unassigned subflow sequence space. Incoming Urgent data | available unassigned subflow sequence space. Incoming Urgent data | |||
SHOULD be mapped to connection-level sequence space and delivered to | SHOULD be mapped to connection-level sequence space and delivered to | |||
the application analogous to Urgent data in regular TCP. | the application analogous to Urgent data in regular TCP. | |||
6.2. Interactions with Management Systems | 6.2. Interactions with Management Systems | |||
To enable interactions between TCP and network management systems, | To enable interactions between TCP and network management systems, | |||
the TCP [21] and TCP Extended Statistics (ESTATS) [22] MIBs have been | the TCP [21] and TCP Extended Statistics (ESTATS) [22] MIBs have been | |||
defined. MPTCP should share the these MIBs for aspects that are | defined. MPTCP should share these MIBs for aspects that are designed | |||
designed to be transparent to the application. | to be transparent to the application. | |||
It is anticipated that a MPTCP MIB will be defined in the future, | It is anticipated that an MPTCP MIB will be defined in the future, | |||
once experience of experimental MPTCP deployments is gathered. This | once experience of experimental MPTCP deployments is gathered. This | |||
MIB would provide access to MPTCP-specific properties such as whether | MIB would provide access to MPTCP-specific properties such as whether | |||
MPTCP is enabled, and the number and properties of the individual | MPTCP is enabled and the number and properties of the individual | |||
paths in use. | paths in use. | |||
7. Interactions with Middleboxes | 7. Interactions with Middleboxes | |||
As discussed in Section 2.2, it is a goal of MPTCP to be deployable | As discussed in Section 2.2, it is a goal of MPTCP to be deployable | |||
today and thus compatible with the majority of middleboxes. This | today and thus compatible with the majority of middleboxes. This | |||
section summarises the issues that may arise with NATs, firewalls, | section summarizes the issues that may arise with NATs, firewalls, | |||
proxies, intrusion detection systems, and other middleboxes that, if | proxies, intrusion detection systems, and other middleboxes that, if | |||
not considered in the protocol design, may hinder its deployment. | not considered in the protocol design, may hinder its deployment. | |||
This section is intended primarily as a description of options and | This section is intended primarily as a description of options and | |||
considerations only. Protocol-specific solutions to these issues | considerations only. Protocol-specific solutions to these issues | |||
will be given in the companion documents. | will be given in the companion documents. | |||
Multipath TCP will be deployed in a network that no longer provides | Multipath TCP will be deployed in a network that no longer provides | |||
just basic datagram delivery. A myriad of middleboxes are deployed | just basic datagram delivery. A myriad of middleboxes are deployed | |||
to optimize various perceived problems with the Internet protocols: | to optimize various perceived problems with the Internet protocols: | |||
NATs primarily address IP address space shortage [15], Performance | NATs primarily address IP address space shortage [15], Performance | |||
Enhancing Proxies (PEPs) optimize TCP for different link | Enhancing Proxies (PEPs) optimize TCP for different link | |||
characteristics [17], firewalls [16] and intrusion detection systems | characteristics [17], firewalls [16] and intrusion detection systems | |||
try to block malicious content from reaching a host, and traffic | try to block malicious content from reaching a host, and traffic | |||
normalizers [23] ensure a consistent view of the traffic stream to | normalizers [23] ensure a consistent view of the traffic stream to | |||
Intrusion Detection Systems (IDS) and hosts. | Intrusion Detection Systems (IDS) and hosts. | |||
All these middleboxes optimize current applications at the expense of | All these middleboxes optimize current applications at the expense of | |||
future applications. In effect, future applications will often need | future applications. In effect, future applications will often need | |||
to behave in a similar fashion to existing ones, in order to increase | to behave in a similar fashion to existing ones, in order to increase | |||
the chances of successful deployment. Further, the precise behaviour | the chances of successful deployment. Further, the precise behavior | |||
of all these middleboxes is not clearly specified, and implementation | of all these middleboxes is not clearly specified, and implementation | |||
errors make matters worse, raising the bar for the deployment of new | errors make matters worse, raising the bar for the deployment of new | |||
technologies. | technologies. | |||
The following list of middlebox classes documents behaviour that | The following list of middlebox classes documents behavior that could | |||
could impact the use of MPTCP. This list is used in [5] to describe | impact the use of MPTCP. This list is used in [5] to describe the | |||
the features of the MPTCP protocol that are used to mitigate the | features of the MPTCP protocol that are used to mitigate the impact | |||
impact of these middlebox behaviours. | of these middlebox behaviors. | |||
o NATs: Network Address Translators decouple the host's local IP | o NATs: Network Address Translators decouple the host's local IP | |||
address (and, in the case of NAPTs, port) with that which is seen | address (and, in the case of NAPTs, port) with that which is seen | |||
in the wider Internet when the packets are transmitted through a | in the wider Internet when the packets are transmitted through a | |||
NAT. This adds complexity, and reduces the chances of success, | NAT. This adds complexity, and reduces the chances of success, | |||
when signalling IP addresses. | when signaling IP addresses. | |||
o PEPs: Performance Enhancing Proxies, which aim to improve the | o PEPs: Performance Enhancing Proxies, which aim to improve the | |||
performance of protocols over low-performance (e.g. high latency | performance of protocols over low-performance (e.g., high-latency | |||
or high error rate) links. As such, they may "split" a TCP | or high-error-rate) links. As such, they may "split" a TCP | |||
connection and behaviour such as proactive ACKing may occur, and | connection and behavior such as proactive ACKing may occur, and | |||
therefore it is no longer guaranteed that one host is | therefore it is no longer guaranteed that one host is | |||
communicating directly with another. PEPs, firewalls or other | communicating directly with another. PEPs, firewalls, or other | |||
middleboxes may also change the declared receive window size. | middleboxes may also change the declared receive window size. | |||
o Traffic Normalizers: These aim to eliminate ambiguities and | o Traffic Normalizers: These aim to eliminate ambiguities and | |||
potential attacks at the network level, and amongst other things | potential attacks at the network level, and amongst other things, | |||
are unlikely to permit holes in TCP-level sequence space (which | are unlikely to permit holes in TCP-level sequence space (which | |||
has impact on MPTCP's retransmission and subflow sequence | has an impact on MPTCP's retransmission and subflow sequence | |||
numbering design choices). | numbering design choices). | |||
o Firewalls: on top of preventing incoming connections, firewalls | o Firewalls: on top of preventing incoming connections, firewalls | |||
may also attempt additional protection such as sequence number | may also attempt additional protection such as sequence number | |||
randomization (so a sender cannot reliably know what TCP sequence | randomization (so a sender cannot reliably know what TCP sequence | |||
number the receiver will see). | number the receiver will see). | |||
o Intrusion Detection Systems: IDSs may look for traffic patterns to | o IDSs: Intrusion Detection Systems may look for traffic patterns to | |||
protect a network, and may have false positives with MPTCP and | protect a network and may have false positives with MPTCP and drop | |||
drop the connections during normal operation. Future MPTCP-aware | the connections during normal operation. Future MPTCP-aware | |||
middleboxes will require the ability to correlate the various | middleboxes will require the ability to correlate the various | |||
paths in use. | paths in use. | |||
o Content-aware Firewalls: Some middleboxes may actively change data | o Content-Aware Firewalls: Some middleboxes may actively change data | |||
in packets, such as re-writing URIs in HTTP traffic. | in packets, such as rewriting URIs in HTTP traffic. | |||
In addition, all classes of middleboxes may affect TCP traffic in the | In addition, all classes of middleboxes may affect TCP traffic in the | |||
following ways: | following ways: | |||
o TCP Options: some middleboxes may drop packets with unknown TCP | o TCP Options: some middleboxes may drop packets with unknown TCP | |||
options, or strip those options from the packets. | options or strip those options from the packets. | |||
o Segmentation and Coalescing: middleboxes (or even something as | o Segmentation and Coalescing: middleboxes (or even something as | |||
close to the end host as TCP Segmentation Offloading (TSO) on a | close to the end host as TCP Segmentation Offloading (TSO) on a | |||
Network Interface Card (NIC)) may change the packet boundaries | Network Interface Card (NIC)) may change the packet boundaries | |||
from those which the sender intended. It may do this by splitting | from those that the sender intended. It may do this by splitting | |||
packets, or coalescing them together. This leads to two major | packets or coalescing them together. This leads to two major | |||
impacts: we cannot guarantee where a packet boundary will be, and | impacts: where a packet boundary will be cannot be guaranteed and | |||
we cannot say for sure what a middlebox will do with TCP options | what a middlebox will do with TCP options in these cases (they may | |||
in these cases (they may be repeated, dropped, or sent only once). | be repeated, dropped, or sent only once) cannot be said for sure. | |||
8. Contributors | 8. Contributors | |||
The authors would like to acknowledge the contributions of Andrew | The authors would like to acknowledge the contributions of Andrew | |||
McDonald and Bryan Ford to this document. | McDonald and Bryan Ford to this document. | |||
The authors would also like to thank the following people for | The authors would also like to thank the following people for | |||
detailed reviews: Olivier Bonaventure, Gorry Fairhurst, Iljitsch van | detailed reviews: Olivier Bonaventure, Gorry Fairhurst, Iljitsch van | |||
Beijnum, Philip Eardley, Michael Scharf, Lars Eggert, Cullen | Beijnum, Philip Eardley, Michael Scharf, Lars Eggert, Cullen | |||
Jennings, Joel Halpern, Juergen Quittek, Alexey Melnikov, David | Jennings, Joel Halpern, Juergen Quittek, Alexey Melnikov, David | |||
Harrington, Jari Arkko and Stewart Bryant. | Harrington, Jari Arkko, and Stewart Bryant. | |||
9. Acknowledgements | 9. Acknowledgements | |||
Alan Ford, Costin Raiciu, Mark Handley, and Sebastien Barre are | Alan Ford, Costin Raiciu, Mark Handley, and Sebastien Barre are | |||
supported by Trilogy (http://www.trilogy-project.org), a research | supported by Trilogy (http://www.trilogy-project.org), a research | |||
project (ICT-216372) partially funded by the European Community under | project (ICT-216372) partially funded by the European Community under | |||
its Seventh Framework Program. The views expressed here are those of | its Seventh Framework Program. The views expressed here are those of | |||
the author(s) only. The European Commission is not liable for any | the author(s) only. The European Commission is not liable for any | |||
use that may be made of the information in this document. | use that may be made of the information in this document. | |||
10. IANA Considerations | 10. Security Considerations | |||
None. | ||||
11. Security Considerations | ||||
This informational document provides an architectural overview for | This informational document provides an architectural overview for | |||
Multipath TCP and so does not, in itself, raise any security issues. | Multipath TCP and so does not, in itself, raise any security issues. | |||
A separate threat analysis [12] lists threats that can exist with a | A separate threat analysis [12] lists threats that can exist with a | |||
Multipath TCP. However, a protocol based on the architecture in this | Multipath TCP. However, a protocol based on the architecture in this | |||
document will have a number of security requirements. The high level | document will have a number of security requirements. The high-level | |||
goals for such a protocol are identified in Section 2.3, whilst | goals for such a protocol are identified in Section 2.3, whilst | |||
Section 5.8 provides more detailed discussion of security | Section 5.8 provides more detailed discussion of security | |||
requirements and design decisions which are applied in the MPTCP | requirements and design decisions which are applied in the MPTCP | |||
protocol design [5]. | protocol design [5]. | |||
12. References | 11. References | |||
12.1. Normative References | 11.1. Normative References | |||
[1] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, | [1] Postel, J., "Transmission Control Protocol", STD 7, RFC 793, | |||
September 1981. | September 1981. | |||
[2] Bradner, S., "Key words for use in RFCs to Indicate Requirement | [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
Levels", BCP 14, RFC 2119, March 1997. | Levels", BCP 14, RFC 2119, March 1997. | |||
12.2. Informative References | 11.2. Informative References | |||
[3] Wischik, D., Handley, M., and M. Bagnulo Braun, "The Resource | [3] Wischik, D., Handley, M., and M. Bagnulo Braun, "The Resource | |||
Pooling Principle", ACM SIGCOMM CCR vol. 38 num. 5, pp. 47-52, | Pooling Principle", ACM SIGCOMM CCR vol. 38 num. 5, pp. 47-52, | |||
October 2008, | October 2008, | |||
<http://ccr.sigcomm.org/online/files/p47-handleyA4.pdf>. | <http://ccr.sigcomm.org/online/files/p47-handleyA4.pdf>. | |||
[4] Hopps, C., "Analysis of an Equal-Cost Multi-Path Algorithm", | [4] Hopps, C., "Analysis of an Equal-Cost Multi-Path Algorithm", | |||
RFC 2992, November 2000. | RFC 2992, November 2000. | |||
[5] Ford, A., Raiciu, C., and M. Handley, "TCP Extensions for | [5] Ford, A., Raiciu, C., Handley, M., and O. Bonaventure, "TCP | |||
Multipath Operation with Multiple Addresses", | Extensions for Multipath Operation with Multiple Addresses", | |||
draft-ietf-mptcp-multiaddressed-02 (work in progress), | Work in Progress, March 2011. | |||
October 2010. | ||||
[6] Stewart, R., "Stream Control Transmission Protocol", RFC 4960, | [6] Stewart, R., "Stream Control Transmission Protocol", RFC 4960, | |||
September 2007. | September 2007. | |||
[7] Raiciu, C., Handley, M., and D. Wischik, "Coupled Congestion | [7] Raiciu, C., Handley, M., and D. Wischik, "Coupled Congestion | |||
Control for Multipath Transport Protocols", | Control for Multipath Transport Protocols", Work in Progress, | |||
draft-ietf-mptcp-congestion-01 (work in progress), | March 2011. | |||
January 2011. | ||||
[8] Scharf, M. and A. Ford, "MPTCP Application Interface | [8] Scharf, M. and A. Ford, "MPTCP Application Interface | |||
Considerations", draft-ietf-mptcp-api-00 (work in progress), | Considerations", Work in Progress, March 2011. | |||
November 2010. | ||||
[9] Carpenter, B. and S. Brim, "Middleboxes: Taxonomy and Issues", | [9] Carpenter, B. and S. Brim, "Middleboxes: Taxonomy and Issues", | |||
RFC 3234, February 2002. | RFC 3234, February 2002. | |||
[10] Carpenter, B., "Internet Transparency", RFC 2775, | [10] Carpenter, B., "Internet Transparency", RFC 2775, | |||
February 2000. | February 2000. | |||
[11] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP | [11] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP | |||
Selective Acknowledgment Options", RFC 2018, October 1996. | Selective Acknowledgment Options", RFC 2018, October 1996. | |||
[12] Bagnulo, M., "Threat Analysis for TCP Extensions for Multi-path | [12] Bagnulo, M., "Threat Analysis for TCP Extensions for Multipath | |||
Operation with Multiple Addresses", draft-ietf-mptcp-threat-07 | Operation with Multiple Addresses", RFC 6181, March 2011. | |||
(work in progress), January 2011. | ||||
[13] Becke, M., Dreibholz, T., Iyengar, J., Natarajan, P., and M. | [13] Becke, M., Dreibholz, T., Iyengar, J., Natarajan, P., and M. | |||
Tuexen, "Load Sharing for the Stream Control Transmission | Tuexen, "Load Sharing for the Stream Control Transmission | |||
Protocol (SCTP)", draft-tuexen-tsvwg-sctp-multipath-01 (work in | Protocol (SCTP)", Work in Progress, December 2010. | |||
progress), December 2010. | ||||
[14] Ford, B. and J. Iyengar, "Breaking Up the Transport Logjam", | [14] Ford, B. and J. Iyengar, "Breaking Up the Transport Logjam", | |||
ACM HotNets, October 2008. | ACM HotNets, October 2008. | |||
[15] Srisuresh, P. and K. Egevang, "Traditional IP Network Address | [15] Srisuresh, P. and K. Egevang, "Traditional IP Network Address | |||
Translator (Traditional NAT)", RFC 3022, January 2001. | Translator (Traditional NAT)", RFC 3022, January 2001. | |||
[16] Freed, N., "Behavior of and Requirements for Internet | [16] Freed, N., "Behavior of and Requirements for Internet | |||
Firewalls", RFC 2979, October 2000. | Firewalls", RFC 2979, October 2000. | |||
skipping to change at page 28, line 5 | skipping to change at page 28, line 5 | |||
Transmission Control Protocol (TCP)", RFC 4022, March 2005. | Transmission Control Protocol (TCP)", RFC 4022, March 2005. | |||
[22] Mathis, M., Heffner, J., and R. Raghunarayan, "TCP Extended | [22] Mathis, M., Heffner, J., and R. Raghunarayan, "TCP Extended | |||
Statistics MIB", RFC 4898, May 2007. | Statistics MIB", RFC 4898, May 2007. | |||
[23] Handley, M., Paxson, V., and C. Kreibich, "Network Intrusion | [23] Handley, M., Paxson, V., and C. Kreibich, "Network Intrusion | |||
Detection: Evasion, Traffic Normalization, and End-to-End | Detection: Evasion, Traffic Normalization, and End-to-End | |||
Protocol Semantics", Usenix Security 2001, 2001, <http:// | Protocol Semantics", Usenix Security 2001, 2001, <http:// | |||
www.usenix.org/events/sec01/full_papers/handley/handley.pdf>. | www.usenix.org/events/sec01/full_papers/handley/handley.pdf>. | |||
Appendix A. Changelog | ||||
(For removal by the RFC Editor) | ||||
A.1. Changes since draft-ietf-mptcp-architecture-04 | ||||
o Responded to IETF Last Call and IESG review comments. | ||||
A.2. Changes since draft-ietf-mptcp-architecture-03 | ||||
o Responded to AD review comments. | ||||
A.3. Changes since draft-ietf-mptcp-architecture-02 | ||||
o Responded to WG last call review comments. Included editorial | ||||
fixes, adding Section 2.4, and improving Section 5.4 and | ||||
Section 7. | ||||
A.4. Changes since draft-ietf-mptcp-architecture-01 | ||||
o Responded to review comments. | ||||
o Added security sections. | ||||
A.5. Changes since draft-ietf-mptcp-architecture-00 | ||||
o Added middlebox compatibility discussion (Section 7). | ||||
o Clarified path identification (TCP 4-tuple) in Section 5.5. | ||||
o Added brief scenario and diagram to Section 1.3. | ||||
Authors' Addresses | Authors' Addresses | |||
Alan Ford | Alan Ford | |||
Roke Manor Research | Roke Manor Research | |||
Old Salisbury Lane | Old Salisbury Lane | |||
Romsey, Hampshire SO51 0ZN | Romsey, Hampshire SO51 0ZN | |||
UK | UK | |||
Phone: +44 1794 833 465 | Phone: +44 1794 833 465 | |||
Email: alan.ford@roke.co.uk | EMail: alan.ford@roke.co.uk | |||
Costin Raiciu | Costin Raiciu | |||
University College London | University College London | |||
Gower Street | Gower Street | |||
London WC1E 6BT | London WC1E 6BT | |||
UK | UK | |||
EMail: c.raiciu@cs.ucl.ac.uk | ||||
Email: c.raiciu@cs.ucl.ac.uk | ||||
Mark Handley | Mark Handley | |||
University College London | University College London | |||
Gower Street | Gower Street | |||
London WC1E 6BT | London WC1E 6BT | |||
UK | UK | |||
EMail: m.handley@cs.ucl.ac.uk | ||||
Email: m.handley@cs.ucl.ac.uk | ||||
Sebastien Barre | Sebastien Barre | |||
Universite catholique de Louvain | Universite catholique de Louvain | |||
Pl. Ste Barbe, 2 | Pl. Ste Barbe, 2 | |||
Louvain-la-Neuve 1348 | Louvain-la-Neuve 1348 | |||
Belgium | Belgium | |||
Phone: +32 10 47 91 03 | Phone: +32 10 47 91 03 | |||
Email: sebastien.barre@uclouvain.be | EMail: sebastien.barre@uclouvain.be | |||
Janardhan Iyengar | Janardhan Iyengar | |||
Franklin and Marshall College | Franklin and Marshall College | |||
Mathematics and Computer Science | Mathematics and Computer Science | |||
PO Box 3003 | PO Box 3003 | |||
Lancaster, PA 17604-3003 | Lancaster, PA 17604-3003 | |||
USA | USA | |||
Phone: 717-358-4774 | Phone: 717-358-4774 | |||
Email: jiyengar@fandm.edu | EMail: jiyengar@fandm.edu | |||
End of changes. 134 change blocks. | ||||
341 lines changed or deleted | 285 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |