| < 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/ | ||||