draft-ietf-ipsecme-iptfs-02.txt | draft-ietf-ipsecme-iptfs-03.txt | |||
---|---|---|---|---|
Network Working Group C. Hopps | Network Working Group C. Hopps | |||
Internet-Draft LabN Consulting, L.L.C. | Internet-Draft LabN Consulting, L.L.C. | |||
Intended status: Standards Track September 30, 2020 | Intended status: Standards Track November 15, 2020 | |||
Expires: April 3, 2021 | Expires: May 19, 2021 | |||
IP Traffic Flow Security | IP Traffic Flow Security | |||
draft-ietf-ipsecme-iptfs-02 | draft-ietf-ipsecme-iptfs-03 | |||
Abstract | Abstract | |||
This document describes a mechanism to enhance IPsec traffic flow | This document describes a mechanism to enhance IPsec traffic flow | |||
security by adding traffic flow confidentiality to encrypted IP | security by adding traffic flow confidentiality to encrypted IP | |||
encapsulated traffic. Traffic flow confidentiality is provided by | encapsulated traffic. Traffic flow confidentiality is provided by | |||
obscuring the size and frequency of IP traffic using a fixed-sized, | obscuring the size and frequency of IP traffic using a fixed-sized, | |||
constant-send-rate IPsec tunnel. The solution allows for congestion | constant-send-rate IPsec tunnel. The solution allows for congestion | |||
control as well. | control as well as non-constant send-rate usage. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 3, 2021. | This Internet-Draft will expire on May 19, 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 20 ¶ | skipping to change at page 2, line 20 ¶ | |||
1.1. Terminology & Concepts . . . . . . . . . . . . . . . . . 3 | 1.1. Terminology & Concepts . . . . . . . . . . . . . . . . . 3 | |||
2. The IP-TFS Tunnel . . . . . . . . . . . . . . . . . . . . . . 4 | 2. The IP-TFS Tunnel . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2.1. Tunnel Content . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Tunnel Content . . . . . . . . . . . . . . . . . . . . . 4 | |||
2.2. IPTFS_PROTOCOL Payload Content . . . . . . . . . . . . . 4 | 2.2. IPTFS_PROTOCOL Payload Content . . . . . . . . . . . . . 4 | |||
2.2.1. Data Blocks . . . . . . . . . . . . . . . . . . . . . 5 | 2.2.1. Data Blocks . . . . . . . . . . . . . . . . . . . . . 5 | |||
2.2.2. No Implicit End Padding Required . . . . . . . . . . 6 | 2.2.2. No Implicit End Padding Required . . . . . . . . . . 6 | |||
2.2.3. Fragmentation, Sequence Numbers and All-Pad Payloads 6 | 2.2.3. Fragmentation, Sequence Numbers and All-Pad Payloads 6 | |||
2.2.4. Empty Payload . . . . . . . . . . . . . . . . . . . . 6 | 2.2.4. Empty Payload . . . . . . . . . . . . . . . . . . . . 6 | |||
2.2.5. IP Header Value Mapping . . . . . . . . . . . . . . . 7 | 2.2.5. IP Header Value Mapping . . . . . . . . . . . . . . . 7 | |||
2.3. Exclusive SA Use . . . . . . . . . . . . . . . . . . . . 7 | 2.3. Exclusive SA Use . . . . . . . . . . . . . . . . . . . . 7 | |||
2.4. Zero-Conf Receive-Side Operation On The SA. . . . . . . . 7 | 2.4. Modes of Operation . . . . . . . . . . . . . . . . . . . 7 | |||
2.5. Modes of Operation . . . . . . . . . . . . . . . . . . . 7 | 2.4.1. Non-Congestion Controlled Mode . . . . . . . . . . . 7 | |||
2.5.1. Non-Congestion Controlled Mode . . . . . . . . . . . 8 | 2.4.2. Congestion Controlled Mode . . . . . . . . . . . . . 8 | |||
2.5.2. Congestion Controlled Mode . . . . . . . . . . . . . 8 | ||||
3. Congestion Information . . . . . . . . . . . . . . . . . . . 9 | 3. Congestion Information . . . . . . . . . . . . . . . . . . . 9 | |||
3.1. ECN Support . . . . . . . . . . . . . . . . . . . . . . . 10 | 3.1. ECN Support . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4. Configuration . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1. Bandwidth . . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1. Bandwidth . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.2. Fixed Packet Size . . . . . . . . . . . . . . . . . . . . 11 | 4.2. Fixed Packet Size . . . . . . . . . . . . . . . . . . . . 11 | |||
4.3. Congestion Control . . . . . . . . . . . . . . . . . . . 11 | 4.3. Congestion Control . . . . . . . . . . . . . . . . . . . 11 | |||
5. IKEv2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 5. IKEv2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
5.1. USE_TFS Notification Message . . . . . . . . . . . . . . 11 | 5.1. USE_TFS Notification Message . . . . . . . . . . . . . . 11 | |||
6. Packet and Data Formats . . . . . . . . . . . . . . . . . . . 12 | 6. Packet and Data Formats . . . . . . . . . . . . . . . . . . . 12 | |||
6.1. IP-TFS Payload . . . . . . . . . . . . . . . . . . . . . 12 | 6.1. IP-TFS Payload . . . . . . . . . . . . . . . . . . . . . 12 | |||
6.1.1. Non-Congestion Control IPTFS_PROTOCOL Payload Format 12 | 6.1.1. Non-Congestion Control IPTFS_PROTOCOL Payload Format 12 | |||
6.1.2. Congestion Control IPTFS_PROTOCOL Payload Format . . 13 | 6.1.2. Congestion Control IPTFS_PROTOCOL Payload Format . . 13 | |||
6.1.3. Data Blocks . . . . . . . . . . . . . . . . . . . . . 14 | 6.1.3. Data Blocks . . . . . . . . . . . . . . . . . . . . . 15 | |||
6.1.4. IKEv2 USE_IPTFS Notification Message . . . . . . . . 16 | 6.1.4. IKEv2 USE_IPTFS Notification Message . . . . . . . . 17 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | |||
7.1. IPTFS_PROTOCOL Type . . . . . . . . . . . . . . . . . . . 17 | 7.1. IPTFS_PROTOCOL Type . . . . . . . . . . . . . . . . . . . 18 | |||
7.2. IPTFS_PROTOCOL Sub-Type Registry . . . . . . . . . . . . 17 | 7.2. IPTFS_PROTOCOL Sub-Type Registry . . . . . . . . . . . . 18 | |||
7.3. USE_IPTFS Notify Message Status Type . . . . . . . . . . 17 | 7.3. USE_IPTFS Notify Message Status Type . . . . . . . . . . 18 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 18 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 19 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 18 | 9.2. Informative References . . . . . . . . . . . . . . . . . 19 | |||
Appendix A. Example Of An Encapsulated IP Packet Flow . . . . . 20 | Appendix A. Example Of An Encapsulated IP Packet Flow . . . . . 21 | |||
Appendix B. A Send and Loss Event Rate Calculation . . . . . . . 21 | Appendix B. A Send and Loss Event Rate Calculation . . . . . . . 22 | |||
Appendix C. Comparisons of IP-TFS . . . . . . . . . . . . . . . 21 | Appendix C. Comparisons of IP-TFS . . . . . . . . . . . . . . . 22 | |||
C.1. Comparing Overhead . . . . . . . . . . . . . . . . . . . 21 | C.1. Comparing Overhead . . . . . . . . . . . . . . . . . . . 22 | |||
C.1.1. IP-TFS Overhead . . . . . . . . . . . . . . . . . . . 21 | C.1.1. IP-TFS Overhead . . . . . . . . . . . . . . . . . . . 22 | |||
C.1.2. ESP with Padding Overhead . . . . . . . . . . . . . . 22 | C.1.2. ESP with Padding Overhead . . . . . . . . . . . . . . 23 | |||
C.2. Overhead Comparison . . . . . . . . . . . . . . . . . . . 24 | ||||
C.2. Overhead Comparison . . . . . . . . . . . . . . . . . . . 23 | C.3. Comparing Available Bandwidth . . . . . . . . . . . . . . 25 | |||
C.3. Comparing Available Bandwidth . . . . . . . . . . . . . . 23 | C.3.1. Ethernet . . . . . . . . . . . . . . . . . . . . . . 25 | |||
C.3.1. Ethernet . . . . . . . . . . . . . . . . . . . . . . 24 | Appendix D. Acknowledgements . . . . . . . . . . . . . . . . . . 27 | |||
Appendix D. Acknowledgements . . . . . . . . . . . . . . . . . . 26 | Appendix E. Contributors . . . . . . . . . . . . . . . . . . . . 27 | |||
Appendix E. Contributors . . . . . . . . . . . . . . . . . . . . 26 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
1. Introduction | 1. Introduction | |||
Traffic Analysis ([RFC4301], [AppCrypt]) is the act of extracting | Traffic Analysis ([RFC4301], [AppCrypt]) is the act of extracting | |||
information about data being sent through a network. While one may | information about data being sent through a network. While one may | |||
directly obscure the data through the use of encryption [RFC4303], | directly obscure the data through the use of encryption [RFC4303], | |||
the traffic pattern itself exposes information due to variations in | the traffic pattern itself exposes information due to variations in | |||
it's shape and timing ([I-D.iab-wire-image], [AppCrypt]). Hiding the | it's shape and timing ([I-D.iab-wire-image], [AppCrypt]). Hiding the | |||
size and frequency of traffic is referred to as Traffic Flow | size and frequency of traffic is referred to as Traffic Flow | |||
Confidentiality (TFC) per [RFC4303]. | Confidentiality (TFC) per [RFC4303]. | |||
[RFC4303] provides for TFC by allowing padding to be added to | [RFC4303] provides for TFC by allowing padding to be added to | |||
encrypted IP packets and allowing for transmission of all-pad packets | encrypted IP packets and allowing for transmission of all-pad packets | |||
(indicated using protocol 59). This method has the major limitation | (indicated using protocol 59). This method has the major limitation | |||
that it can significantly under-utilize the available bandwidth. | that it can significantly under-utilize the available bandwidth. | |||
The IP-TFS solution provides for full TFC without the aforementioned | The IP-TFS solution provides for full TFC without the aforementioned | |||
bandwidth limitation. This is accomplished by using a constant-send- | bandwidth limitation. This is accomplished by using a constant-send- | |||
rate IPsec [RFC4303] tunnel with fixed-sized encapsulating packets; | rate IPsec [RFC4303] tunnel with fixed-sized encapsulating packets; | |||
however, these fixed-sized packets can contain partial, whole or | however, these fixed-sized packets can contain partial, whole or | |||
multiple IP packets to maximize the bandwidth of the tunnel. | multiple IP packets to maximize the bandwidth of the tunnel. A non- | |||
constant send-rate is allowed, but the confidentiality properties of | ||||
its use are outside the scope of this document. | ||||
For a comparison of the overhead of IP-TFS with the RFC4303 | For a comparison of the overhead of IP-TFS with the RFC4303 | |||
prescribed TFC solution see Appendix C. | prescribed TFC solution see Appendix C. | |||
Additionally, IP-TFS provides for dealing with network congestion | Additionally, IP-TFS provides for dealing with network congestion | |||
[RFC2914]. This is important for when the IP-TFS user is not in full | [RFC2914]. This is important for when the IP-TFS user is not in full | |||
control of the domain through which the IP-TFS tunnel path flows. | control of the domain through which the IP-TFS tunnel path flows. | |||
1.1. Terminology & Concepts | 1.1. Terminology & Concepts | |||
skipping to change at page 4, line 43 ¶ | skipping to change at page 4, line 43 ¶ | |||
packet can be sent per encapsulating packet. In order to maximize | packet can be sent per encapsulating packet. In order to maximize | |||
bandwidth IP-TFS breaks this one-to-one association. | bandwidth IP-TFS breaks this one-to-one association. | |||
IP-TFS aggregates as well as fragments the inner IP traffic flow into | IP-TFS aggregates as well as fragments the inner IP traffic flow into | |||
fixed-sized encapsulating IPsec tunnel packets. Padding is only | fixed-sized encapsulating IPsec tunnel packets. Padding is only | |||
added to the the tunnel packets if there is no data available to be | added to the the tunnel packets if there is no data available to be | |||
sent at the time of tunnel packet transmission, or if fragmentation | sent at the time of tunnel packet transmission, or if fragmentation | |||
has been disabled by the receiver. | has been disabled by the receiver. | |||
This is accomplished using a new Encapsulating Security Payload (ESP, | This is accomplished using a new Encapsulating Security Payload (ESP, | |||
[RFC4303]) type which is identified by the IP protocol number | [RFC4303]) type which is identified by the number IPTFS_PROTOCOL | |||
IPTFS_PROTOCOL (TBD1). | (Section 6.1). | |||
2.2. IPTFS_PROTOCOL Payload Content | 2.2. IPTFS_PROTOCOL Payload Content | |||
The IPTFS_PROTOCOL payload content defined in this document is | The IPTFS_PROTOCOL payload content defined in this document is | |||
comprised of a 4 or 16 octet header followed by either a partial, a | comprised of a 4 or 24 octet header followed by either a partial, a | |||
full or multiple partial or full data blocks. The following diagram | full or multiple partial or full data blocks. The following diagram | |||
illustrates this IPTFS_PROTOCOL payload within the ESP packet. See | illustrates this IPTFS_PROTOCOL payload within the ESP packet. See | |||
Section 6.1 for the exact formats of the IPTFS_PROTOCOL payload. | Section 6.1 for the exact formats of the IPTFS_PROTOCOL payload. | |||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | |||
. Outer Encapsulating Header ... . | . Outer Encapsulating Header ... . | |||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | |||
. ESP Header... . | . ESP Header... . | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
| ... : BlockOffset | | | ... : BlockOffset | | |||
skipping to change at page 7, line 37 ¶ | skipping to change at page 7, line 37 ¶ | |||
It is not the intention of this specification to allow for mixed use | It is not the intention of this specification to allow for mixed use | |||
of an IP-TFS enabled SA. In other words, an SA that has IP-TFS | of an IP-TFS enabled SA. In other words, an SA that has IP-TFS | |||
enabled is exclusively for IP-TFS use and MUST NOT have non-IP-TFS | enabled is exclusively for IP-TFS use and MUST NOT have non-IP-TFS | |||
payloads such as IP (IP protocol 4), TCP transport (IP protocol 6), | payloads such as IP (IP protocol 4), TCP transport (IP protocol 6), | |||
or ESP pad packets (protocol 59) intermixed with non-empty IP-TFS (IP | or ESP pad packets (protocol 59) intermixed with non-empty IP-TFS (IP | |||
protocol TBD1) payloads. While it's possible to envision making the | protocol TBD1) payloads. While it's possible to envision making the | |||
algorithm work in the presence of sequence number skips in the IP-TFS | algorithm work in the presence of sequence number skips in the IP-TFS | |||
payload stream, the added complexity is not deemed worthwhile. Other | payload stream, the added complexity is not deemed worthwhile. Other | |||
IPsec uses can configure and use their own SAs. | IPsec uses can configure and use their own SAs. | |||
2.4. Zero-Conf Receive-Side Operation On The SA. | 2.4. Modes of Operation | |||
Receive-side operation of IP-TFS does not require any per-SA | ||||
configuration on the receiver; as such, an IP-TFS implementation | ||||
SHOULD support the option of switching to IP-TFS receive-side | ||||
operation on receipt of the first IP-TFS payload. | ||||
2.5. Modes of Operation | ||||
Just as with normal IPsec/ESP tunnels, IP-TFS tunnels are | Just as with normal IPsec/ESP tunnels, IP-TFS tunnels are | |||
unidirectional. Bidirectional IP-TFS functionality is achieved by | unidirectional. Bidirectional IP-TFS functionality is achieved by | |||
setting up 2 IP-TFS tunnels, one in either direction. | setting up 2 IP-TFS tunnels, one in either direction. | |||
An IP-TFS tunnel can operate in 2 modes, a non-congestion controlled | An IP-TFS tunnel can operate in 2 modes, a non-congestion controlled | |||
mode and congestion controlled mode. | mode and congestion controlled mode. | |||
2.5.1. Non-Congestion Controlled Mode | 2.4.1. Non-Congestion Controlled Mode | |||
In the non-congestion controlled mode IP-TFS sends fixed-sized | In the non-congestion controlled mode IP-TFS sends fixed-sized | |||
packets at a constant rate. The packet send rate is constant and is | packets at a constant rate. The packet send rate is constant and is | |||
not automatically adjusted regardless of any network congestion | not automatically adjusted regardless of any network congestion | |||
(e.g., packet loss). | (e.g., packet loss). | |||
For similar reasons as given in [RFC7510] the non-congestion | For similar reasons as given in [RFC7510] the non-congestion | |||
controlled mode should only be used where the user has full | controlled mode should only be used where the user has full | |||
administrative control over the path the tunnel will take. This is | administrative control over the path the tunnel will take. This is | |||
required so the user can guarantee the bandwidth and also be sure as | required so the user can guarantee the bandwidth and also be sure as | |||
to not be negatively affecting network congestion [RFC2914]. In this | to not be negatively affecting network congestion [RFC2914]. In this | |||
case packet loss should be reported to the administrator (e.g., via | case packet loss should be reported to the administrator (e.g., via | |||
syslog, YANG notification, SNMP traps, etc) so that any failures due | syslog, YANG notification, SNMP traps, etc) so that any failures due | |||
to a lack of bandwidth can be corrected. | to a lack of bandwidth can be corrected. | |||
2.5.2. Congestion Controlled Mode | 2.4.2. Congestion Controlled Mode | |||
With the congestion controlled mode, IP-TFS adapts to network | With the congestion controlled mode, IP-TFS adapts to network | |||
congestion by lowering the packet send rate to accommodate the | congestion by lowering the packet send rate to accommodate the | |||
congestion, as well as raising the rate when congestion subsides. | congestion, as well as raising the rate when congestion subsides. | |||
Since overhead is per packet, by allowing for maximal fixed-size | Since overhead is per packet, by allowing for maximal fixed-size | |||
packets and varying the send rate transport overhead is minimized. | packets and varying the send rate transport overhead is minimized. | |||
The output of the congestion control algorithm will adjust the rate | The output of the congestion control algorithm will adjust the rate | |||
at which the ingress sends packets. While this document does not | at which the ingress sends packets. While this document does not | |||
require a specific congestion control algorithm, best current | require a specific congestion control algorithm, best current | |||
skipping to change at page 9, line 8 ¶ | skipping to change at page 8, line 50 ¶ | |||
receiver and from the sender, at least once per RTT. Prior to | receiver and from the sender, at least once per RTT. Prior to | |||
establishing an RTT the information SHOULD be sent constantly from | establishing an RTT the information SHOULD be sent constantly from | |||
the sender and the receiver so that an RTT estimate can be | the sender and the receiver so that an RTT estimate can be | |||
established. The lack of receiving this information over multiple | established. The lack of receiving this information over multiple | |||
consecutive RTT intervals should be considered a congestion event | consecutive RTT intervals should be considered a congestion event | |||
that causes the sender to adjust it's sending rate lower. For | that causes the sender to adjust it's sending rate lower. For | |||
example, [RFC4342] calls this the "no feedback timeout" and it is | example, [RFC4342] calls this the "no feedback timeout" and it is | |||
equal to 4 RTT intervals. When a "no feedback timeout" has occurred | equal to 4 RTT intervals. When a "no feedback timeout" has occurred | |||
[RFC4342] halves the sending rate. | [RFC4342] halves the sending rate. | |||
An implementation could choose to always include the congestion | An implementation MAY choose to always include the congestion | |||
information in it's IP-TFS payload header if sending on an IP-TFS | information in it's IP-TFS payload header if sending on an IP-TFS | |||
enabled SA. Since IP-TFS normally will operate with a large packet | enabled SA. Since IP-TFS normally will operate with a large packet | |||
size, the congestion information should represent a small portion of | size, the congestion information should represent a small portion of | |||
the available tunnel bandwidth. | the available tunnel bandwidth. An implementation choosing to always | |||
send the data MAY also choose to only update the "LossEventRate" and | ||||
"RTT" header field values it sends every "RTT" though. | ||||
When an implementation is choosing a congestion control algorithm (or | When an implementation is choosing a congestion control algorithm (or | |||
a selection of algorithms) one should remember that IP-TFS is not | a selection of algorithms) one should remember that IP-TFS is not | |||
providing for reliable delivery of IP traffic, and so per packet ACKs | providing for reliable delivery of IP traffic, and so per packet ACKs | |||
are not required and are not provided. | are not required and are not provided. | |||
It's worth noting that the variable send-rate of a congestion | It's worth noting that the variable send-rate of a congestion | |||
controlled IP-TFS tunnel, is not private; however, this send-rate is | controlled IP-TFS tunnel, is not private; however, this send-rate is | |||
being driven by network congestion, and as long as the encapsulated | being driven by network congestion, and as long as the encapsulated | |||
(inner) traffic flow shape and timing are not directly affecting the | (inner) traffic flow shape and timing are not directly affecting the | |||
(outer) network congestion, the variations in the tunnel rate will | (outer) network congestion, the variations in the tunnel rate will | |||
not weaken the provided inner traffic flow confidentiality. | not weaken the provided inner traffic flow confidentiality. | |||
2.5.2.1. Circuit Breakers | 2.4.2.1. Circuit Breakers | |||
In additional to congestion control, implementations MAY choose to | In additional to congestion control, implementations MAY choose to | |||
define and implement circuit breakers [RFC8084] as a recovery method | define and implement circuit breakers [RFC8084] as a recovery method | |||
of last resort. Enabling circuit breakers is also a reason a user | of last resort. Enabling circuit breakers is also a reason a user | |||
may wish to enable congestion information reports even when using the | may wish to enable congestion information reports even when using the | |||
non-congestion controlled mode of operation. The definition of | non-congestion controlled mode of operation. The definition of | |||
circuit breakers are outside the scope of this document. | circuit breakers are outside the scope of this document. | |||
3. Congestion Information | 3. Congestion Information | |||
skipping to change at page 10, line 5 ¶ | skipping to change at page 9, line 47 ¶ | |||
paired SA back to the sender (this is always the case when the tunnel | paired SA back to the sender (this is always the case when the tunnel | |||
was created using IKEv2). If the SA back to the sender is a non-IP- | was created using IKEv2). If the SA back to the sender is a non-IP- | |||
TFS enabled SA then an IPTFS_PROTOCOL empty payload (i.e., header | TFS enabled SA then an IPTFS_PROTOCOL empty payload (i.e., header | |||
only) is used to convey the information. | only) is used to convey the information. | |||
In order to calculate a loss event rate compatible with [RFC5348], | In order to calculate a loss event rate compatible with [RFC5348], | |||
the receiver needs to have a round-trip time estimate. Thus the | the receiver needs to have a round-trip time estimate. Thus the | |||
sender communicates this estimate in the "RTT" header field. On | sender communicates this estimate in the "RTT" header field. On | |||
startup this value will be zero as no RTT estimate is yet known. | startup this value will be zero as no RTT estimate is yet known. | |||
In order to allow the sender to calculate the "RTT" value, the | In order for the sender to estimate it's "RTT" value, the sender | |||
receiver communicates the last sequence number it has seen to the | places a timestamp value in the "TVal" header field. On first | |||
sender in the "LastSeqNum" header field. In addition to the | receipt of this "TVal", the receiver records the new "TVal" value | |||
"LastSeqNum" value, the receiver sends an estimate of the amount of | along with the time it arrived locally, subsequent receipt of the | |||
time between receiving the "LastSeqNum" packet and transmitting the | same "TVal" MUST not update the recorded time. When the receiver | |||
"LastSeqNum" value back to the sender in the congestion information. | sends it's CC header it places this latest recorded value in the | |||
It places this time estimate in the "Delay" header field along with | "TEcho" header field, along with 2 delay values, "Echo Delay" and | |||
the "LastSeqNum". | "Transmit Delay". The "Echo Delay" value is the time delta from the | |||
recorded arrival time of "TVal" and the current clock in | ||||
microseconds. The second value, "Transmit Delay", is the receiver's | ||||
current transmission delay on the tunnel (i.e., the average time | ||||
between sending packets on it's half of the IP-TFS tunnel). When the | ||||
sender receives back it's "TVal" in the "TEcho" header field it | ||||
calculates 2 RTT estimates. The first is the actual delay found by | ||||
subtracting the "TEcho" value from it's current clock and then | ||||
subtracting "Echo Delay" as well. The second RTT estimate is found | ||||
by adding the received "Transmit Delay" header value to the senders | ||||
own transmission delay (i.e., the average time between sending | ||||
packets on it's half of the IP-TFS tunnel). The larger of these 2 | ||||
RTT estimates SHOULD be used as the "RTT" value. The two estimates | ||||
are required to handle different combinations of faster or slow | ||||
tunnel packet paths with fast or slow fixed tunnel rates. Choosing | ||||
the larger of the two values guarantees that the "RTT" is never | ||||
considered faster than the aggregate transmission delay based on the | ||||
IP-TFS tunnel rate (the second estimate), as well as never being | ||||
considered faster than the actual RTT along the tunnel packet path | ||||
(the first estimate). | ||||
The receiver also calculates, and communicates in the "LossEventRate" | The receiver also calculates, and communicates in the "LossEventRate" | |||
header field, the loss event rate for use by the sender. This is | header field, the loss event rate for use by the sender. This is | |||
slightly different from [RFC4342] which periodically sends all the | slightly different from [RFC4342] which periodically sends all the | |||
loss interval data back to the sender so that it can do the | loss interval data back to the sender so that it can do the | |||
calculation. See Appendix B for a suggested way to calculate the | calculation. See Appendix B for a suggested way to calculate the | |||
loss event rate value. Initially this value will be zero (indicating | loss event rate value. Initially this value will be zero (indicating | |||
no loss) until enough data has been collected by the receiver to | no loss) until enough data has been collected by the receiver to | |||
update it. | update it. | |||
skipping to change at page 12, line 9 ¶ | skipping to change at page 12, line 24 ¶ | |||
initiator, by deleting the child SA if the now established non-IP-TFS | initiator, by deleting the child SA if the now established non-IP-TFS | |||
operation is unacceptable). | operation is unacceptable). | |||
The notification type and payload flag values are defined in | The notification type and payload flag values are defined in | |||
Section 6.1.4. | Section 6.1.4. | |||
6. Packet and Data Formats | 6. Packet and Data Formats | |||
6.1. IP-TFS Payload | 6.1. IP-TFS Payload | |||
An IP-TFS payload is identified by the IP protocol number | ESP Payload Type: 0x5 | |||
IPTFS_PROTOCOL (TBD1). The first octet of this payload indicates the | ||||
format of the remaining payload data. | An IP-TFS payload is identified by the ESP payload type | |||
IPTFS_PROTOCOL which has the value 0x5. The first octet of this | ||||
payload indicates the format of the remaining payload data. | ||||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
| Sub-type | ... | | Sub-type | ... | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
Sub-type: | Sub-type: | |||
An 8 bit value indicating the payload format. | An 8 bit value indicating the payload format. | |||
This specification defines 2 payload sub-types. These payload | This specification defines 2 payload sub-types. These payload | |||
skipping to change at page 13, line 14 ¶ | skipping to change at page 13, line 37 ¶ | |||
"DataBlocks" data (i.e., it does not count subsequent packets | "DataBlocks" data (i.e., it does not count subsequent packets | |||
non-"DataBlocks" octets). | non-"DataBlocks" octets). | |||
DataBlocks: | DataBlocks: | |||
Variable number of octets that begins with the start of a data | Variable number of octets that begins with the start of a data | |||
block, or the continuation of a previous data block, followed by | block, or the continuation of a previous data block, followed by | |||
zero or more additional data blocks. | zero or more additional data blocks. | |||
6.1.2. Congestion Control IPTFS_PROTOCOL Payload Format | 6.1.2. Congestion Control IPTFS_PROTOCOL Payload Format | |||
The congestion control IPTFS_PROTOCOL payload is comprised of a 16 | The congestion control IPTFS_PROTOCOL payload is comprised of a 24 | |||
octet header followed by a variable amount of "DataBlocks" data as | octet header followed by a variable amount of "DataBlocks" data as | |||
shown below. | shown below. | |||
1 2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Sub-type (1) | Reserved |E| BlockOffset | | | Sub-type (1) | Reserved |E| BlockOffset | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| RTT | Delay | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| LossEventRate | | | LossEventRate | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| LastSeqNum | | | RTT | Echo Delay ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
... Echo Delay | Transmit Delay | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| TVal | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| TEcho | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| DataBlocks ... | | DataBlocks ... | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
Sub-type: | Sub-type: | |||
An octet indicating the payload format. For this congestion | An octet indicating the payload format. For this congestion | |||
control format, the value is 1. | control format, the value is 1. | |||
Reserved: | Reserved: | |||
A 7 bit field set to 0 on generation, and ignored on receipt. | A 7 bit field set to 0 on generation, and ignored on receipt. | |||
E: | E: | |||
A 1 bit value if set indicates that Congestion Experienced (CE) | A 1 bit value if set indicates that Congestion Experienced (CE) | |||
ECN bits were received and used in deriving the reported | ECN bits were received and used in deriving the reported | |||
"LossEventRate". | "LossEventRate". | |||
BlockOffset: | BlockOffset: | |||
The same value as the non-congestion controlled payload format | The same value as the non-congestion controlled payload format | |||
value. | value. | |||
RTT: | ||||
A 16 bit value specifying the sender's current round-trip time | ||||
estimate in milliseconds. The value MAY be zero prior to the | ||||
sender having calculated a round-trip time estimate. The value | ||||
SHOULD be set to zero on non-IP-TFS enabled SAs. | ||||
Delay: | ||||
A 16 bit value specifying the delay in milliseconds incurred | ||||
between the receiver receiving the "LastSeqNum" packet and the | ||||
sending of this acknowledgement of it. | ||||
LossEventRate: | LossEventRate: | |||
A 32 bit value specifying the inverse of the current loss event | A 32 bit value specifying the inverse of the current loss event | |||
rate as calculated by the receiver. A value of zero indicates no | rate as calculated by the receiver. A value of zero indicates no | |||
loss. Otherwise the loss event rate is "1/LossEventRate". | loss. Otherwise the loss event rate is "1/LossEventRate". | |||
LastSeqNum: | RTT: | |||
A 32 bit value containing the lower 32 bits of the largest | A 22 bit value specifying the sender's current round-trip time | |||
sequence number last received. This is the latest in the sequence | estimate in microseconds. The value MAY be zero prior to the | |||
not necessarily the most recent (in the case of re-ordering of | sender having calculated a round-trip time estimate. The value | |||
packets it may be less recent). When determining largest and 64 | SHOULD be set to zero on non-IP-TFS enabled SAs. If the value is | |||
bit extended sequence numbers are in use, the upper 32 bits should | equal to or larger than "0x3FFFFF" it MUST be set to "0x3FFFFF". | |||
be used during the comparison. | ||||
Echo Delay: | ||||
A 21 bit value specifying the delay in microseconds incurred | ||||
between the receiver first receiving the "TVal" value which it is | ||||
sending back in "TEcho". If the value is equal to or larger than | ||||
"0x1FFFFF" it MUST be set to "0x1FFFFF". | ||||
Transmit Delay: | ||||
A 21 bit value specifying the transmission delay in microseconds. | ||||
This is the fixed (or average) delay on the receiver between it | ||||
sending packets on the IPTFS tunnel. If the value is equal to or | ||||
larger than "0x1FFFFF" it MUST be set to "0x1FFFFF". | ||||
TVal: | ||||
An opaque 32 bit value that will be echoed back by the receiver in | ||||
later packets in the "TEcho" field, along with a "Delay" value of | ||||
how long that echo took. | ||||
TEcho: | ||||
The opaque 32 bit value from a received packet's "TVal" field. | ||||
The received "TVal" is placed in "TEcho" along with a "Delay" | ||||
value indicating how long it has been since receiving the "TVal" | ||||
value. | ||||
DataBlocks: | DataBlocks: | |||
Variable number of octets that begins with the start of a data | Variable number of octets that begins with the start of a data | |||
block, or the continuation of a previous data block, followed by | block, or the continuation of a previous data block, followed by | |||
zero or more additional data blocks. For the special case of | zero or more additional data blocks. For the special case of | |||
sending congestion control information on an non-IP-TFS enabled SA | sending congestion control information on an non-IP-TFS enabled SA | |||
this value MUST be empty (i.e., be zero octets long). | this value MUST be empty (i.e., be zero octets long). | |||
6.1.3. Data Blocks | 6.1.3. Data Blocks | |||
skipping to change at page 18, line 20 ¶ | skipping to change at page 19, line 20 ¶ | |||
8. Security Considerations | 8. Security Considerations | |||
This document describes a mechanism to add Traffic Flow | This document describes a mechanism to add Traffic Flow | |||
Confidentiality to IP traffic. Use of this mechanism is expected to | Confidentiality to IP traffic. Use of this mechanism is expected to | |||
increase the security of the traffic being transported. Other than | increase the security of the traffic being transported. Other than | |||
the additional security afforded by using this mechanism, IP-TFS | the additional security afforded by using this mechanism, IP-TFS | |||
utilizes the security protocols [RFC4303] and [RFC7296] and so their | utilizes the security protocols [RFC4303] and [RFC7296] and so their | |||
security considerations apply to IP-TFS as well. | security considerations apply to IP-TFS as well. | |||
As noted previously in Section 2.5.2, for TFC to be fully maintained | As noted previously in Section 2.4.2, for TFC to be fully maintained | |||
the encapsulated traffic flow should not be affecting network | the encapsulated traffic flow should not be affecting network | |||
congestion in a predictable way, and if it would be then non- | congestion in a predictable way, and if it would be then non- | |||
congestion controlled mode use should be considered instead. | congestion controlled mode use should be considered instead. | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
skipping to change at page 21, line 10 ¶ | skipping to change at page 22, line 10 ¶ | |||
at the IP data block immediately following the IP-TFS header. The | at the IP data block immediately following the IP-TFS header. The | |||
following packet ESP2s "BlockOffset" points inward 100 octets to the | following packet ESP2s "BlockOffset" points inward 100 octets to the | |||
start of the 60 octet data block. The third encapsulating packet | start of the 60 octet data block. The third encapsulating packet | |||
ESP3 contains the middle portion of the 4000 octet data block so the | ESP3 contains the middle portion of the 4000 octet data block so the | |||
offset points past its end and into the forth encapsulating packet. | offset points past its end and into the forth encapsulating packet. | |||
The fourth packet ESP4s offset is 1400 pointing at the padding which | The fourth packet ESP4s offset is 1400 pointing at the padding which | |||
follows the completion of the continued 4000 octet packet. | follows the completion of the continued 4000 octet packet. | |||
Appendix B. A Send and Loss Event Rate Calculation | Appendix B. A Send and Loss Event Rate Calculation | |||
The current best practice indicates that congestion control should be | The current best practice indicates that congestion control SHOULD be | |||
done in a TCP friendly way. A TCP friendly congestion control | done in a TCP friendly way. A TCP friendly congestion control | |||
algorithm is described in [RFC5348]. For this IP-TFS use case (as | algorithm is described in [RFC5348]. For this IP-TFS use case (as | |||
with [RFC4342]) the (fixed) packet size is used as the segment size | with [RFC4342]) the (fixed) packet size is used as the segment size | |||
for the algorithm. The formula for the send rate is then as follows: | for the algorithm. The main formula in the algorithm for the send | |||
rate is then as follows: | ||||
1 | 1 | |||
X_Pps = ----------------------------------------------- | X = ----------------------------------------------- | |||
R * (sqrt(2*p/3) + 12*sqrt(3*p/8)*p*(1+32*p^2)) | R * (sqrt(2*p/3) + 12*sqrt(3*p/8)*p*(1+32*p^2)) | |||
Where "X_Pps" is the send rate in packets per second, "R" is the | Where "X" is the send rate in packets per second, "R" is the round | |||
round trip time estimate and "p" is the loss event rate (the inverse | trip time estimate and "p" is the loss event rate (the inverse of | |||
of which is provided by the receiver). | which is provided by the receiver). | |||
The IP-TFS receiver, having the RTT estimate from the sender MAY use | In addition the algorithm in [RFC5348] also uses an "X_recv" value | |||
the same method as described in [RFC4342] to collect the loss | (the receiver's receive rate). For IP-TFS one MAY set this value | |||
intervals and calculate the loss event rate value using the weighted | according to the sender's current tunnel send-rate ("X"). | |||
average as indicated. The receiver communicates the inverse of this | ||||
value back to the sender in the IPTFS_PROTOCOL payload header field | The IP-TFS receiver, having the RTT estimate from the sender can use | |||
"LossEventRate". | the same method as described in [RFC5348] and [RFC4342] to collect | |||
the loss intervals and calculate the loss event rate value using the | ||||
weighted average as indicated. The receiver communicates the inverse | ||||
of this value back to the sender in the IPTFS_PROTOCOL payload header | ||||
field "LossEventRate". | ||||
The IP-TFS sender now has both the "R" and "p" values and can | The IP-TFS sender now has both the "R" and "p" values and can | |||
calculate the correct sending rate ("X_Pps"). If following [RFC5348] | calculate the correct sending rate. If following [RFC5348] the | |||
the sender SHOULD also use the slow start mechanism described therein | sender SHOULD also use the slow start mechanism described therein | |||
when the IP-TFS SA is first established. | when the IP-TFS SA is first established. | |||
Appendix C. Comparisons of IP-TFS | Appendix C. Comparisons of IP-TFS | |||
C.1. Comparing Overhead | C.1. Comparing Overhead | |||
C.1.1. IP-TFS Overhead | C.1.1. IP-TFS Overhead | |||
The overhead of IP-TFS is 40 bytes per outer packet. Therefore the | The overhead of IP-TFS is 40 bytes per outer packet. Therefore the | |||
octet overhead per inner packet is 40 divided by the number of outer | octet overhead per inner packet is 40 divided by the number of outer | |||
End of changes. 30 change blocks. | ||||
101 lines changed or deleted | 138 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |