rfc9347xml2.original.xml | rfc9347.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="utf-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" []> | <!DOCTYPE rfc [ | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?> | <!ENTITY nbsp " "> | |||
<?rfc toc="yes"?> | <!ENTITY zwsp "​"> | |||
<?rfc compact="no"?> | <!ENTITY nbhy "‑"> | |||
<?rfc subcompact="no"?> | <!ENTITY wj "⁠"> | |||
<?rfc symrefs="yes" ?> | ]> | |||
<?rfc sortrefs="yes"?> | ||||
<?rfc iprnotified="no"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" submissionType | |||
<?rfc strict="yes"?> | ="IETF" category="std" | |||
<rfc ipr="trust200902" | consensus="true" docName="draft-ietf-ipsecme-iptfs-19" number="9347" obsoletes=" | |||
category="std" | " updates="" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" vers | |||
docName="draft-ietf-ipsecme-iptfs-19" submissionType="IETF"> | ion="3"> | |||
<!-- xml2rfc v2v3 conversion 3.14.2 --> | ||||
<front> | <front> | |||
<title abbrev="IP Traffic Flow Security">IP-TFS: Aggregation and Fragmentati | <title abbrev="IP Traffic Flow Security">Aggregation and Fragmentation Mode | |||
on Mode for ESP and its Use for IP Traffic Flow Security</title> | for Encapsulating Security Payload (ESP) and Its Use for IP Traffic Flow Securit | |||
<author initials='C.' surname='Hopps' fullname='Christian Hopps'><organization>L | y (IP-TFS)</title> | |||
abN Consulting, L.L.C.</organization><address><email>chopps@chopps.org</email></ | <seriesInfo name="RFC" value="9347"/> | |||
address></author> <date/><abstract><t>This document describes a mechanism for a | <author initials="C." surname="Hopps" fullname="Christian Hopps"> | |||
ggregation and | <organization>LabN Consulting, L.L.C.</organization> | |||
fragmentation of IP packets when they are being encapsulated in ESP | <address> | |||
payloads. This new payload type can be used for various purposes such | <email>chopps@chopps.org</email> | |||
</address> | ||||
</author> | ||||
<date year="2023" month="January"/> | ||||
<area>sec</area> | ||||
<workgroup>ipsecme</workgroup> | ||||
<abstract> | ||||
<t>This document describes a mechanism for aggregation and | ||||
fragmentation of IP packets when they are being encapsulated in Encapsulating Se | ||||
curity Payload (ESP). This new payload type can be used for various purposes, su | ||||
ch | ||||
as decreasing encapsulation overhead for small IP packets; however, | as decreasing encapsulation overhead for small IP packets; however, | |||
the focus in this document is to enhance IPsec traffic flow security | the focus in this document is to enhance IP Traffic Flow Security | |||
(IP-TFS) by adding Traffic Flow Confidentiality (TFC) to encrypted IP | (IP-TFS) by adding Traffic Flow Confidentiality (TFC) to encrypted IP-encapsulat | |||
encapsulated traffic. TFC is provided by obscuring the size and | ed traffic. TFC is provided by obscuring the size and | |||
frequency of IP traffic using a fixed-sized, constant-send-rate IPsec | frequency of IP traffic using a fixed-size, constant-send-rate IPsec | |||
tunnel. The solution allows for congestion control as well as | tunnel. The solution allows for congestion control, as well as | |||
non-constant send-rate usage.</t></abstract> </front> <middle> | nonconstant send-rate usage.</t> | |||
</abstract> | ||||
<section title="Introduction" anchor="sec-introduction"> | </front> | |||
<t>Traffic Analysis (<xref target="RFC4301"/>, <xref target="AppCrypt"/>) is the | <middle> | |||
act of extracting | <section anchor="sec-introduction" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>Traffic analysis <xref target="RFC4301" format="default"/> <xref target | ||||
="AppCrypt" format="default"/> is the act of extracting | ||||
information about data being sent through a network. While directly | information about data being sent through a network. While directly | |||
obscuring the data with encryption <xref target="RFC4303"/>, the patterns in the | obscuring the data with encryption <xref target="RFC4303" format="default"/>, th e patterns in the | |||
message traffic may expose information due to variations in its shape | message traffic may expose information due to variations in its shape | |||
and timing (<xref target="RFC8546"/>, <xref target="AppCrypt"/>). Hiding the siz | and timing <xref target="RFC8546" format="default"/> <xref target="AppCrypt" for | |||
e and frequency of | mat="default"/>. Hiding the size and frequency of | |||
traffic is referred to as Traffic Flow Confidentiality (TFC) per | traffic is referred to as Traffic Flow Confidentiality (TFC), per | |||
<xref target="RFC4303"/>.</t> | <xref target="RFC4303" format="default"/>.</t> | |||
<t><xref target="RFC4303" format="default"/> provides for TFC by allowing | ||||
<t><xref target="RFC4303"/> provides for TFC by allowing padding to be added to | padding to be added to encrypted | |||
encrypted | ||||
IP packets and allowing for transmission of all-pad packets | 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.</t> | that it can significantly underutilize the available bandwidth.</t> | |||
<t>This document defines an aggregation and fragmentation (AGGFRAG) mode | ||||
<t>This document defines an aggregation and fragmentation (AGGFRAG) mode | for ESP, as well as ESP's use for IP Traffic Flow Security (IP-TFS). This | |||
for ESP, and its use for IP Traffic Flow Security (IP-TFS). This | ||||
solution provides for full TFC without the aforementioned bandwidth | solution provides for full TFC without the aforementioned bandwidth | |||
limitation. This is accomplished by using a constant-send-rate IPsec | limitation. This is accomplished by using a constant-send-rate IPsec | |||
<xref target="RFC4303"/> tunnel with fixed-sized encapsulating packets; however, | <xref target="RFC4303" format="default"/> tunnel with fixed-size encapsulating p | |||
these | ackets; however, these | |||
fixed-sized packets can contain partial, whole or multiple IP packets | fixed-size packets can contain partial, whole, or multiple IP packets | |||
to maximize the bandwidth of the tunnel. A non-constant send-rate is | to maximize the bandwidth of the tunnel. A nonconstant send rate is | |||
allowed, but the confidentiality properties of its use are outside | allowed, but the confidentiality properties of its use are outside | |||
the scope of this document.</t> | the scope of this document.</t> | |||
<t>For a comparison of the overhead of IP-TFS with the TFC solution | ||||
<t>For a comparison of the overhead of IP-TFS with the RFC4303 | prescribed in <xref target="RFC4303" format="default"/>, see <xref target="sec- | |||
prescribed TFC solution see <xref target="sec-comparisons-of-ip-tfs"></xref>.</t | comparisons-of-ip-tfs" format="default"/>.</t> | |||
> | <t>Additionally, IP-TFS provides for operating fairly within congested | |||
networks <xref target="RFC2914" format="default"/>. This is important for when t | ||||
<t>Additionally, IP-TFS provides for operating fairly within congested | he IP-TFS user is not | |||
networks <xref target="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 | in full control of the domain through which the IP-TFS tunnel path | |||
flows.</t> | flows.</t> | |||
<t>The mechanisms, such as the AGGFRAG mode, defined in this document | ||||
<t>The mechanisms, such as the AGGFRAG mode, defined in this document | ||||
are generic with the intent of allowing for non-TFS uses, but such | are generic with the intent of allowing for non-TFS uses, but such | |||
uses are outside the scope of this document.</t> | uses are outside the scope of this document.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Terminology & Concepts"> | <name>Terminology & Concepts</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they a | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
ppear in all capitals, | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
be interpreted as | ||||
<t>This document assumes familiarity with IP security concepts including | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
TFC as described in <xref target="RFC4301"/>.</t> | when, and only when, they appear in all capitals, as shown here. | |||
</t> | ||||
</section> | <t>This document assumes familiarity with IP security concepts, includin | |||
g | ||||
</section> | TFC, as described in <xref target="RFC4301" format="default"/>.</t> | |||
</section> | ||||
<section title="The AGGFRAG Tunnel"> | </section> | |||
<t>As mentioned in <xref target="sec-introduction"></xref>, AGGFRAG mode utilize | <section numbered="true" toc="default"> | |||
s an IPsec <xref target="RFC4303"/> tunnel | <name>The AGGFRAG Tunnel</name> | |||
as its transport. For the purpose of IP-TFS, fixed-sized encapsulating | <t>As mentioned in <xref target="sec-introduction" format="default"/>, the | |||
AGGFRAG mode utilizes an IPsec <xref target="RFC4303" format="default"/> tunnel | ||||
as its transport. For the purpose of IP-TFS, fixed-size encapsulating | ||||
packets are sent at a constant rate on the AGGFRAG tunnel.</t> | packets are sent at a constant rate on the AGGFRAG tunnel.</t> | |||
<t>The primary input to the tunnel algorithm is the requested bandwidth | ||||
<t>The primary input to the tunnel algorithm is the requested bandwidth | ||||
to be used by the tunnel. Two values are then required to provide for | to be used by the tunnel. Two values are then required to provide for | |||
this bandwidth use, the fixed size of the encapsulating packets, and | this bandwidth use: the fixed size of the encapsulating packets and | |||
rate at which to send them.</t> | the rate at which to send them.</t> | |||
<t>The fixed packet size <bcp14>MAY</bcp14> either be specified manually o | ||||
<t>The fixed packet size MAY either be specified manually or be | r be | |||
determined through other methods such as the Packetization Layer MTU | determined through other methods, such as the Packetization Layer MTU | |||
Discovery (PLMTUD) (<xref target="RFC4821"/>, <xref target="RFC8899"/>) or Path | Discovery (PLMTUD) <xref target="RFC4821" format="default"/> <xref target="RFC88 | |||
MTU discovery (PMTUD) | 99" format="default"/> or Path MTU Discovery (PMTUD) | |||
(<xref target="RFC1191"/>, <xref target="RFC8201"/>). PMTUD is known to have iss | <xref target="RFC1191" format="default"/> <xref target="RFC8201" format="default | |||
ues so PLMTUD is | "/>. PMTUD is known to have issues, so PLMTUD is | |||
considered the more robust option. For PLMTUD, congestion control | considered the more robust option. For PLMTUD, congestion control | |||
payloads can be used as in-band probes (see <xref target="sec-congestion-control | payloads can be used as in-band probes (see <xref target="sec-congestion-control | |||
-aggfrag-payload-payload-format"></xref> and <xref target="RFC8899"/>).</t> | -aggfrag-payload-payload-format" format="default"/> and <xref target="RFC8899" f | |||
ormat="default"/>).</t> | ||||
<t>Given the encapsulating packet size and the requested bandwidth to be | <t>Given the encapsulating packet size and the requested bandwidth to be | |||
used, the corresponding packet send rate can be calculated. The | used, the corresponding packet send rate can be calculated. The | |||
packet send rate is the requested bandwidth to be used divided by the | packet send rate is the requested bandwidth to be used, which is then divided by the | |||
size of the encapsulating packet.</t> | size of the encapsulating packet.</t> | |||
<t>The egress (receiving) side of the AGGFRAG tunnel <bcp14>MUST</bcp14> a | ||||
<t>The egress (receiving) side of the AGGFRAG tunnel MUST allow for and | llow for and | |||
expect the ingress (sending) side of the AGGFRAG tunnel to vary the | expect the ingress (sending) side of the AGGFRAG tunnel to vary the | |||
size and rate of sent encapsulating packets, unless constrained by | size and rate of sent encapsulating packets, unless constrained by | |||
other policy.</t> | other policy.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Tunnel Content"> | <name>Tunnel Content</name> | |||
<t>As previously mentioned, one issue with the TFC padding solution in | <t>As previously mentioned, one issue with the TFC padding solution in | |||
<xref target="RFC4303"/> is the large amount of wasted bandwidth as only one IP | <xref target="RFC4303" format="default"/> is the large amount of wasted bandwidt | |||
h, as only one IP | ||||
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 by introducing | bandwidth, IP-TFS breaks this one-to-one association by introducing | |||
an AGGFRAG mode for ESP.</t> | an AGGFRAG mode for ESP.</t> | |||
<t>The AGGFRAG mode aggregates and fragments the inner IP traffic | ||||
<t>AGGFRAG mode aggregates as well as fragments the inner IP traffic | ||||
flow into encapsulating IPsec tunnel packets. For IP-TFS, the IPsec | flow into encapsulating IPsec tunnel packets. For IP-TFS, the IPsec | |||
encapsulating tunnel packets are a fixed size. Padding is only added | encapsulating tunnel packets are a fixed size. Padding is only added | |||
to the tunnel packets if there is no data available to be sent at | to the tunnel packets if there is no data available to be sent at | |||
the time of tunnel packet transmission, or if fragmentation has been | the time of tunnel packet transmission or if fragmentation has been | |||
disabled by the receiver.</t> | disabled by the receiver.</t> | |||
<t>This is accomplished using a new Encapsulating Security Payload (ESP) | ||||
<t>This is accomplished using a new Encapsulating Security Payload (ESP, | <xref target="RFC4303" format="default"/> Next Header field value AGGFRAG_PAYLOA | |||
<xref target="RFC4303"/>) Next Header field value AGGFRAG_PAYLOAD | D | |||
(<xref target="sec-aggfrag-payload-payload"></xref>).</t> | (<xref target="sec-aggfrag-payload-payload" format="default"/>).</t> | |||
<t>Other non-IP-TFS uses of this AGGFRAG mode have been suggested, such | ||||
<t>Other non-IP-TFS uses of this AGGFRAG mode have been suggested, such | ||||
as increased performance through packet aggregation, as well as | as increased performance through packet aggregation, as well as | |||
handling MTU issues using fragmentation. These uses are not defined | handling MTU issues using fragmentation. These uses are not defined | |||
here, but are also not restricted by this document.</t> | here but are also not restricted by this document.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Payload Content</name> | ||||
<section title="Payload Content"> | <t>The AGGFRAG_PAYLOAD payload content defined in this document | |||
<t>The AGGFRAG_PAYLOAD payload content defined in this document | consists of a 4- or 24-octet header, followed by either a partial | |||
consists of a 4 or 24 octet header followed by either a partial | data block, a full data block, or multiple partial or full data blocks. | |||
datablock, a full datablock, or multiple partial or full datablocks. | ||||
The following diagram illustrates this payload within the ESP packet. | The following diagram illustrates this payload within the ESP packet. | |||
See <xref target="sec-aggfrag-payload-payload"></xref> for the exact formats of the | See <xref target="sec-aggfrag-payload-payload" format="default"/> for the exact formats of the | |||
AGGFRAG_PAYLOAD payload.</t> | AGGFRAG_PAYLOAD payload.</t> | |||
<figure anchor="sec-layout-of-an-aggfrag-mode-ipsec-packet"> | ||||
<figure title="Layout of an AGGFRAG mode IPsec Packet" anchor="sec-layout-of-an- | <name>Layout of an AGGFRAG Mode IPsec Packet</name> | |||
aggfrag-mode-ipsec-packet"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | |||
. Outer Encapsulating Header ... . | . Outer Encapsulating Header ... . | |||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | |||
. ESP Header... . | . ESP Header... . | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
| [AGGFRAG sub-type/flags] : BlockOffset | | | [AGGFRAG sub-type/flags] : BlockOffset | | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
: [Optional Congestion Info] : | : [Optional Congestion Info] : | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
| DataBlocks ... ~ | | DataBlocks ... ~ | |||
~ ~ | ~ ~ | |||
~ | | ~ | | |||
+---------------------------------------------------------------| | +---------------------------------------------------------------| | |||
. ESP Trailer... . | . ESP Trailer... . | |||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>The <spanx style='verb'>BlockOffset</spanx> value is either zero or some offs | <t>The <tt>BlockOffset</tt> value is either zero or some offset into or | |||
et into or past | past | |||
the end of the <spanx style='verb'>DataBlocks</spanx> data.</t> | the end of the <tt>DataBlocks</tt> data.</t> | |||
<t>If the <tt>BlockOffset</tt> value is zero, it means that the <tt>Data | ||||
<t>If the <spanx style='verb'>BlockOffset</spanx> value is zero it means that th | Blocks</tt> | |||
e <spanx style='verb'>DataBlocks</spanx> | ||||
data begins with a new data block.</t> | data begins with a new data block.</t> | |||
<t>Conversely, if the <tt>BlockOffset</tt> value is non-zero, it points | ||||
<t>Conversely, if the <spanx style='verb'>BlockOffset</spanx> value is non-zero | to the | |||
it points to the | start of the new data block, and the initial <tt>DataBlocks</tt> data | |||
start of the new data block, and the initial <spanx style='verb'>DataBlocks</spa | belongs to the data block that is still being reassembled.</t> | |||
nx> data | <t>If the <tt>BlockOffset</tt> points past the end of the <tt>DataBlocks | |||
belongs to the data block that is still being re-assembled.</t> | </tt> data, | |||
<t>If the <spanx style='verb'>BlockOffset</spanx> points past the end of the <sp | ||||
anx style='verb'>DataBlocks</spanx> data | ||||
then the next data block occurs in a subsequent encapsulating packet.</t> | then the next data block occurs in a subsequent encapsulating packet.</t> | |||
<t>Having the <tt>BlockOffset</tt> always point at the next available da | ||||
<t>Having the <spanx style='verb'>BlockOffset</spanx> always point at the next a | ta | |||
vailable data | ||||
block allows for recovering the next inner packet in the | block allows for recovering the next inner packet in the | |||
presence of outer encapsulating packet loss.</t> | presence of outer encapsulating packet loss.</t> | |||
<t>An example AGGFRAG mode packet flow can be found in <xref target="sec | ||||
<t>An example AGGFRAG mode packet flow can be found in <xref target="sec-example | -example-of-an-encapsulated-ip-packet-flow" format="default"/>.</t> | |||
-of-an-encapsulated-ip-packet-flow"></xref>.</t> | <section numbered="true" toc="default"> | |||
<name>DataBlocks</name> | ||||
<section title="Data Blocks"> | <figure anchor="sec-layout-of-a-datablock"> | |||
<figure title="Layout of a DataBlock" anchor="sec-layout-of-a-datablock"><artwor | <name>Layout of a Data Block</name> | |||
k><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+---------------------------------------------------------------+ | +---------------------------------------------------------------+ | |||
| Type | rest of IPv4, IPv6 or pad. | | Type | rest of IPv4, IPv6, or pad... | |||
+-------- | +-------- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>A data block is defined by a 4-bit type code followed by the data | <t>A data block is defined by a 4-bit type code, followed by the data | |||
block data. The type values have been carefully chosen to coincide | block data. The type values have been carefully chosen to coincide | |||
with the IPv4/IPv6 version field values so that no per-data block | with the IPv4/IPv6 version field values so that no per-data block type overhead | |||
type overhead is required to encapsulate an IP packet. Likewise, the | is required to encapsulate an IP packet. Likewise, the | |||
length of the data block is extracted from the encapsulated IPv4's | length of the data block is extracted from the encapsulated IPv4's | |||
<spanx style='verb'>Total Length</spanx> or IPv6's <spanx style='verb'>Payload L | <tt>Total Length</tt> or IPv6's <tt>Payload Length</tt> fields.</t> | |||
ength</spanx> fields.</t> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>End Padding</name> | |||
<t>Since a data block's type is identified in its first 4 bits, the on | ||||
<section title="End Padding"> | ly | |||
<t>Since a data block's type is identified in its first 4-bits, the only | ||||
time padding is required is when there is no data to encapsulate. For | time padding is required is when there is no data to encapsulate. For | |||
this end padding a <spanx style='verb'>Pad Data Block</spanx> is used.</t> | this end padding, a <tt>Pad Data Block</tt> is used.</t> | |||
</section> | ||||
</section> | <section anchor="sec-fragmentation-sequence-numbers-and-all-pad-payloads | |||
" numbered="true" toc="default"> | ||||
<section title="Fragmentation, Sequence Numbers and All-Pad Payloads" anchor="se | <name>Fragmentation, Sequence Numbers, and All-Pad Payloads</name> | |||
c-fragmentation-sequence-numbers-and-all-pad-payloads"> | <t>In order for a receiver to reassemble fragmented inner packets, the | |||
<t>In order for a receiver to reassemble fragmented inner packets, the | sender <bcp14>MUST</bcp14> send the inner packet fragments back to back in the | |||
sender MUST send the inner packet fragments back-to-back in the | ||||
logical outer packet stream (i.e., using consecutive ESP sequence | logical outer packet stream (i.e., using consecutive ESP sequence | |||
numbers). However, the sender is allowed to insert "all-pad" payloads | numbers). However, the sender is allowed to insert "all-pad" payloads | |||
(i.e., payloads with a <spanx style='verb'>BlockOffset</spanx> of zero and a sin | (i.e., payloads with a <tt>BlockOffset</tt> of zero and a single pad | |||
gle pad | data block ) in between the packets carrying the inner packet | |||
<spanx style='verb'>DataBlock</spanx>) in between the packets carrying the inner | ||||
packet | ||||
fragment payloads. This interleaving of all-pad payloads allows the | fragment payloads. This interleaving of all-pad payloads allows the | |||
sender to always send a tunnel packet, regardless of the | sender to always send a tunnel packet, regardless of the | |||
encapsulation computational requirements.</t> | encapsulation computational requirements.</t> | |||
<t>When a receiver is reassembling an inner packet, and it receives an | ||||
<t>When a receiver is reassembling an inner packet, and it receives an | ||||
"all-pad" payload, it increments the expected sequence number that | "all-pad" payload, it increments the expected sequence number that | |||
the next inner packet fragment is expected to arrive in.</t> | the next inner packet fragment is expected to arrive in.</t> | |||
<t>Given the above, the receiver will need to handle out-of-order | ||||
<t>Given the above, the receiver will need to handle out-of-order | ||||
arrival of outer ESP packets prior to reassembly processing. ESP | arrival of outer ESP packets prior to reassembly processing. ESP | |||
already provides for optionally detecting replay attacks. Detecting | already provides for optionally detecting replay attacks. Detecting | |||
replay attacks normally utilizes a window method. A similar sequence | replay attacks normally utilizes a window method. A similar sequence-number-base | |||
number based sliding window can be used to correct re-ordering of the | d | |||
outer packet stream. Receiving a larger (newer) sequence number | sliding window can be used to correct reordering of the | |||
packet advances the window, and received older ESP packets whose | outer packet stream. | |||
sequence numbers the window has passed by are dropped. A good choice | Receiving a larger (newer) sequence number | |||
packet advances the window, and if any older ESP packets whose | ||||
sequence numbers the window has passed by are received, then the packets are dro | ||||
pped. A good choice | ||||
for the size of this window depends on the amount of misordering the | for the size of this window depends on the amount of misordering the | |||
user is experiencing; however, a value of 3 has been suggested as a | user is experiencing; however, a value of 3 has been suggested as a | |||
default when no more informed choice exists.</t> | default when no more informed choice exists.</t> | |||
<t>As the amount of misordering that may be present is hard to predict | ||||
<t>As the amount of misordering that may be present is hard to predict, | , | |||
the window size SHOULD be configurable by the user. Implementations | the window size <bcp14>SHOULD</bcp14> be configurable by the user. Implementatio | |||
MAY also dynamically adjust the reordering window based on actual | ns | |||
<bcp14>MAY</bcp14> also dynamically adjust the reordering window based on actual | ||||
misordering seen in arriving packets.</t> | misordering seen in arriving packets.</t> | |||
<t>Please note, when IP-TFS sends a continuous stream of packets, ther | ||||
<t>Please note, when IP-TFS sends a continuous stream of packets, there | e | |||
is no requirement for an explicit lost packet timer; however, using a | is no requirement for an explicit lost packet timer; however, using a | |||
lost packet timer is RECOMMENDED. If an implementation does not use a | lost packet timer is <bcp14>RECOMMENDED</bcp14>. If an implementation does not u se a | |||
lost packet timer and only considers an outer packet lost when the | lost packet timer and only considers an outer packet lost when the | |||
reorder window moves by it, the inner traffic can be delayed by up to | reorder window moves by it, the inner traffic can be delayed by up to | |||
the reorder window size times the per packet send rate. This | the reorder window size times the per-packet send rate. This | |||
delay could be significant for slower send rates or when larger | delay could be significant for slower send rates or when larger | |||
reorder window sizes are in use. As the lost packet timer affects | reorder window sizes are in use. As the lost packet timer affects | |||
delay of inner packet delivery, an implementation or user could choose to set it | the delay of inner packet delivery, an implementation or user could choose to se t it | |||
proportionate to the tunnel rate.</t> | proportionate to the tunnel rate.</t> | |||
<t>While ESP guarantees an increasing sequence number with subsequentl | ||||
<t>While ESP guarantees an increasing sequence number with subsequently | y | |||
sent packets, it does not actually require the sequence numbers to be | sent packets, it does not actually require the sequence numbers to be | |||
generated consecutively (e.g., sending only even numbered sequence | generated consecutively (e.g., sending only even-numbered sequence | |||
numbers would be allowed as long as they are always increasing). Gaps | numbers would be allowed, as long as they are always increasing). Gaps | |||
in the sequence numbers will not work for this document so the | in the sequence numbers will not work for this document, so the | |||
sequence number stream MUST increase monotonically by 1 for each | sequence number stream <bcp14>MUST</bcp14> increase monotonically by 1 for each | |||
subsequent packet.</t> | subsequent packet.</t> | |||
<t>When using the AGGFRAG_PAYLOAD in conjunction with replay detection | ||||
<t>When using the AGGFRAG_PAYLOAD in conjunction with replay detection, | , | |||
the window size for both MAY be reduced to the smaller of the two | the window size for both <bcp14>MAY</bcp14> be reduced to the smaller of the two | |||
window sizes. This is because packets outside of the smaller window | window sizes. This is because packets outside of the smaller window | |||
but inside the larger would still be dropped by the mechanism with | but inside the larger window would still be dropped by the mechanism with | |||
the smaller window size. However, there is also no requirement to | the smaller window size. However, there is also no requirement to | |||
make these values the same. Indeed, in some cases, such as slow | make these values the same. Indeed, in some cases, such as slow | |||
tunnels where a very small or zero reorder window size is | tunnels where a very small or zero reorder window size is | |||
appropriate, the user may still want a large replay detection window | appropriate, the user may still want a large replay detection window | |||
to log replayed packets. Additionally, large replay windows can be | to log replayed packets. Additionally, large replay windows can be | |||
implemented with very little overhead compared to large reorder | implemented with very little overhead, compared to large reorder | |||
windows.</t> | windows.</t> | |||
<t>Finally, as sequence numbers are reset when switching Security Asso | ||||
<t>Finally, as sequence numbers are reset when switching SAs (e.g., when | ciations (SAs) (e.g., when | |||
re-keying a child SA), senders MUST NOT send initial fragments of an | rekeying a Child SA), senders <bcp14>MUST NOT</bcp14> send initial fragments of | |||
inner packet using one SA and subsequent fragments in a different SA.</t> | an | |||
inner packet using one SA and subsequent fragments in a different SA.</ | ||||
<t>A note on <spanx style='verb'>BlockOffset</spanx> values, senders MUST encode | t> | |||
the <spanx style='verb'>BlockOffset</spanx> | <aside> | |||
consistent with the immediately preceding non-all-pad payload packet. | <t>A note on <tt>BlockOffset</tt> values: Senders <bcp14>MUST</bcp14> | |||
encode the <tt>BlockOffset</tt> | ||||
consistently with the immediately preceding non-all-pad payload packet. | ||||
Specifically, if the immediately preceding non-all-pad payload packet | Specifically, if the immediately preceding non-all-pad payload packet | |||
ended with a Pad Data Block, this <spanx style='verb'>BlockOffset</spanx> MUST b | ended with a Pad Data Block, this <tt>BlockOffset</tt> <bcp14>MUST</bcp14> be ze | |||
e zero, as Pad | ro, as Pad | |||
Data Blocks are never fragmented. The <spanx style='verb'>BlockOffset</spanx> MU | Data Blocks are never fragmented. The <tt>BlockOffset</tt> <bcp14>MUST</bcp14> b | |||
ST be | e | |||
consistent with the remaining size implied by the native length | consistent with the remaining size implied by the length | |||
encoding of the fragmented inner packet.</t> | field from the fragmented inner packet.</t> | |||
</aside> | ||||
<section title="Optional Extra Padding"> | <section numbered="true" toc="default"> | |||
<t>When the tunnel bandwidth is not being fully utilized, a | <name>Optional Extra Padding</name> | |||
sender MAY pad-out the current encapsulating packet in order | <t>When the tunnel bandwidth is not being fully utilized, a | |||
to deliver an inner packet un-fragmented in the following outer | sender <bcp14>MAY</bcp14> pad out the current encapsulating packet in order | |||
to deliver an inner packet unfragmented in the following outer | ||||
packet. The benefit would be to avoid inner packet fragmentation in | packet. The benefit would be to avoid inner packet fragmentation in | |||
the presence of a bursty offered load (non-bursty traffic will | the presence of a bursty offered load (non-bursty traffic will | |||
naturally not fragment). Senders MAY also choose to allow | naturally not fragment). Senders <bcp14>MAY</bcp14> also choose to allow | |||
for a minimum fragment size to be configured (e.g., as a percentage | for a minimum fragment size to be configured (e.g., as a percentage | |||
of the AGGFRAG_PAYLOAD payload size) to avoid fragmentation at the | of the AGGFRAG_PAYLOAD payload size) to avoid fragmentation at the | |||
cost of tunnel bandwidth. The cost with these methods is complexity | cost of tunnel bandwidth. The costs with these methods are complexity | |||
and added delay of inner traffic. The main advantage to avoiding | and an added delay of inner traffic. The main advantage to avoiding | |||
fragmentation is to minimize inner packet loss in the presence of | fragmentation is to minimize inner packet loss in the presence of | |||
outer packet loss. When this is worthwhile (e.g., how much loss and | outer packet loss. When this is worthwhile (e.g., how much loss and | |||
what type of loss is required, given different inner traffic shapes | what type of loss is required, given different inner traffic shapes | |||
and utilization, for this to make sense), and what values to use for | and utilization, for this to make sense) and what values to use for | |||
the allowable/added delay may be worth researching but is outside | the allowable/added delay may be worth researching but is outside | |||
the scope of this document.</t> | the scope of this document.</t> | |||
<t>While use of padding to avoid fragmentation does not impact | ||||
<t>While use of padding to avoid fragmentation does not impact | interoperability, if padding is used inappropriately, it can reduce the effectiv | |||
interoperability, used inappropriately it can reduce the effective | e | |||
throughput of a tunnel. Senders implementing either of the | throughput of a tunnel. Senders implementing either of the | |||
above approaches will need to take care to not reduce the effective | above approaches will need to take care to not reduce the effective | |||
capacity, and overall utility, of the tunnel through the overuse of | capacity, and overall utility, of the tunnel through the overuse of | |||
padding.</t> | padding.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Empty Payload</name> | |||
<t>To support reporting of congestion control information (described | ||||
<section title="Empty Payload"> | ||||
<t>To support reporting of congestion control information (described | ||||
later) using a non-AGGFRAG_PAYLOAD-enabled SA, it is allowed to send | later) using a non-AGGFRAG_PAYLOAD-enabled SA, it is allowed to send | |||
an AGGFRAG_PAYLOAD payload with no data blocks (i.e., the ESP payload | an AGGFRAG_PAYLOAD payload with no data blocks (i.e., the ESP payload | |||
length is equal to the AGGFRAG_PAYLOAD header length). This special | length is equal to the AGGFRAG_PAYLOAD header length). This special | |||
payload is called an empty payload.</t> | payload is called an empty payload.</t> | |||
<t>Currently, this situation is only applicable in use cases without I | ||||
<t>Currently this situation is only applicable in non-IKEv2 use cases.</t> | nternet Key Exchange Protocol Version 2 (IKEv2).</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>IP Header Value Mapping</name> | ||||
<section title="IP Header Value Mapping"> | <t><xref target="RFC4301" format="default"/> provides some direction o | |||
<t><xref target="RFC4301"/> provides some direction on when and how to map vario | n when and how to map various values | |||
us values | ||||
from an inner IP header to the outer encapsulating header, namely the | from an inner IP header to the outer encapsulating header, namely the | |||
Don't-Fragment (DF) bit (<xref target="RFC0791"/> and <xref target="RFC8200"/>), | Don't Fragment (DF) bit <xref target="RFC0791" format="default"/>, the Different | |||
the Differentiated | iated | |||
Services (DS) field <xref target="RFC2474"/> and the Explicit Congestion Notific | Services (DS) field <xref target="RFC2474" format="default"/>, and the Explicit | |||
ation | Congestion Notification | |||
(ECN) field <xref target="RFC3168"/>. Unlike <xref target="RFC4301"/>, AGGFRAG m | (ECN) field <xref target="RFC3168" format="default"/>. Unlike in <xref target="R | |||
ode may and often will be | FC4301" format="default"/>, the AGGFRAG mode may, and often will, be | |||
encapsulating more than one IP packet per ESP packet. To deal with | encapsulating more than one IP packet per ESP packet. To deal with | |||
this, these mappings are restricted further.</t> | this, these mappings are restricted further.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="DF bit"> | <name>DF Bit</name> | |||
<t>AGGFRAG mode never maps the inner DF bit as it is unrelated to the | <t>The AGGFRAG mode never maps the inner DF bit, as it is unrelated | |||
AGGFRAG tunnel functionality; AGGFRAG mode never needs to IP fragment | to the | |||
the inner packets and the inner packets will not affect the | AGGFRAG tunnel functionality; the AGGFRAG mode never needs to IP fragment | |||
the inner packets, and the inner packets will not affect the | ||||
fragmentation of the outer encapsulation packets.</t> | fragmentation of the outer encapsulation packets.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>ECN Value</name> | ||||
<section title="ECN value"> | <t>The ECN value need not be mapped, as any congestion related to th | |||
<t>The ECN value need not be mapped as any congestion related to the | e | |||
constant-send-rate IP-TFS tunnel is unrelated (by design) to the | constant-send-rate IP-TFS tunnel is unrelated (by design) to the | |||
inner traffic flow. The sender MAY still set the ECN value of inner | inner traffic flow. The sender <bcp14>MAY</bcp14> still set the ECN value of inn | |||
packets based on the normal ECN specification <xref target="RFC3168"/>, <xref ta | er | |||
rget="RFC4301"/> and | packets based on the normal ECN specification <xref target="RFC3168" format="def | |||
<xref target="RFC6040"/>.</t> | ault"/> <xref target="RFC4301" format="default"/> | |||
<xref target="RFC6040" format="default"/>.</t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="DS field"> | <name>DS Field</name> | |||
<t>By default, the DS field SHOULD NOT be copied, although a sender MAY | <t>By default, the DS field <bcp14>SHOULD NOT</bcp14> be copied, alt | |||
hough a sender <bcp14>MAY</bcp14> | ||||
choose to allow for configuration to override this behavior. A sender | choose to allow for configuration to override this behavior. A sender | |||
SHOULD also allow the DS value to be set by configuration.</t> | <bcp14>SHOULD</bcp14> also allow the DS value to be set by configuration.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>IPv4 Time To Live (TTL), IPv6 Hop Limit, and ICMP Messages</name | |||
> | ||||
<section title="IPv4 Time-To-Live (TTL), IPv6 Hop Limit, and ICMP Messages"> | <t>How to modify the inner packet IPv4 TTL <xref target="RFC0791" form | |||
<t><xref target="RFC4301"/> specifies how to modify the inner packet IPv4 TTL <x | at="default"/> or | |||
ref target="RFC0791"/> or | IPv6 Hop Limit <xref target="RFC8200" format="default"/> is specified in <xref t | |||
IPv6 Hop Limit <xref target="RFC8200"/>.</t> | arget="RFC4301" format="default"/>.</t> | |||
<t><xref target="RFC4301" format="default"/> specifies how to apply po | ||||
<t><xref target="RFC4301"/> also specifies how to apply policy to authenticated | licy to authenticated and | |||
and | ||||
unauthenticated ICMP error packets (e.g., Destination Unreachable) | unauthenticated ICMP error packets (e.g., Destination Unreachable) | |||
arriving at or being forwarded through the endpoint. In particular, | arriving at or being forwarded through the endpoint, in particular, | |||
whether to process, ignore or forward said packets. With one | whether to process, ignore, or forward said packets. With the one | |||
exception this document does not change the handling of these | exception that this document does not change the handling of these | |||
packets, they should be handled as specified in <xref target="RFC4301"/>.</t> | packets, they should be handled as specified in <xref target="RFC4301" format="d | |||
efault"/>.</t> | ||||
<t>The one way in which an AGGFRAG tunnel differs in ICMP error packet | <t>The one way in which an AGGFRAG tunnel differs in ICMP error packet | |||
mechanics is with PMTU. When fragmentation is enabled on the AGGFRAG | mechanics is with PMTU. When fragmentation is enabled on the AGGFRAG | |||
tunnel, then no ICMP "too-big" errors need to be generated for | tunnel, then no ICMP "Too Big" errors need to be generated for | |||
arriving ingress traffic as the arriving inner packets will be | arriving ingress traffic, as the arriving inner packets will be | |||
naturally fragmented by the AGGFRAG encapsultation.</t> | naturally fragmented by the AGGFRAG encapsulation.</t> | |||
<t>Otherwise, when fragmentation has been disabled on the AGGFRAG tunn | ||||
<t>Otherwise, when fragmentation has been disabled on the AGGFRAG tunnel, | el, | |||
then the treatment of arriving inner traffic exactly maps to that of | then the treatment of arriving inner traffic exactly maps to that of | |||
a non-AGGFRAG ESP tunnel. Explicitly, IPv4 with DF set and IPv6 | a non-AGGFRAG ESP tunnel. Explicitly, IPv4 with DF set and IPv6 | |||
packets which cannot fit in it's own outer packet payload will | packets that cannot fit in its own outer packet payload will | |||
generate the appropriate ICMP "too-big" error as directed by <xref target="RFC43 | generate the appropriate ICMP "Too Big" error, as described in <xref target="RFC | |||
01"/>, | 4301" format="default"/>, | |||
and IPv4 packets without DF set will be IP fragmented as directed by | and IPv4 packets without DF set will be IP fragmented, as described in | |||
<xref target="RFC4301"/>.</t> | <xref target="RFC4301" format="default"/>.</t> | |||
<t>Packets egressing the tunnel continue to be handled as specified in | ||||
<t>Packets egressing the tunnel continue to be handled as specified in | <xref target="RFC4301" format="default"/>.</t> | |||
<xref target="RFC4301"/>.</t> | <t>All other aspects of PMTU and the handling of ICMP "Too Big" messag | |||
es | ||||
<t>All other aspects of PMTU and the handling of ICMP "Too Big" messages | ||||
(i.e., with regards to the outer AGGFRAG/ESP tunnel packet size) | (i.e., with regards to the outer AGGFRAG/ESP tunnel packet size) | |||
also remain unchanged from <xref target="RFC4301"/>.</t> | also remain unchanged from <xref target="RFC4301" format="default"/>.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Effective MTU of the Tunnel</name> | ||||
<section title="Effective MTU of the Tunnel"> | <t>Unlike in <xref target="RFC4301" format="default"/>, there is norma | |||
<t>Unlike <xref target="RFC4301"/>, there is normally no effective MTU (EMTU) on | lly no effective MTU (EMTU) on an | |||
an | AGGFRAG tunnel, as all IP packet sizes are properly transmitted without | |||
AGGFRAG tunnel as all IP packet sizes are properly transmitted without | ||||
requiring IP fragmentation prior to tunnel ingress. That said, a | requiring IP fragmentation prior to tunnel ingress. That said, a | |||
sender MAY allow for explicitly configuring an MTU for the | sender <bcp14>MAY</bcp14> allow for explicitly configuring an MTU for the | |||
tunnel.</t> | tunnel.</t> | |||
<t>If fragmentation has been disabled on the AGGFRAG tunnel, then the | ||||
<t>If fragmentation has been disabled on the AGGFRAG tunnel, then the | ||||
tunnel's EMTU and behaviors are the same as normal IPsec tunnels | tunnel's EMTU and behaviors are the same as normal IPsec tunnels | |||
<xref target="RFC4301"/>.</t> | <xref target="RFC4301" format="default"/>.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Exclusive SA Use</name> | |||
<t>This document does not specify mixed use of an | ||||
<section title="Exclusive SA Use"> | AGGFRAG_PAYLOAD-enabled SA. A sender <bcp14>MUST</bcp14> only send AGGFRAG_PAYLO | |||
<t>This document does not specify mixed use of an | AD | |||
AGGFRAG_PAYLOAD-enabled SA. A sender MUST only send AGGFRAG_PAYLOAD | ||||
payloads over an SA configured for AGGFRAG mode.</t> | payloads over an SA configured for AGGFRAG mode.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Modes of Operation</name> | ||||
<section title="Modes of Operation"> | <t>Just as with normal IPsec/ESP SAs, AGGFRAG SAs are | |||
<t>Just as with normal IPsec/ESP SAs, AGGFRAG SAs are | ||||
unidirectional. Bidirectional IP-TFS functionality is achieved by | unidirectional. Bidirectional IP-TFS functionality is achieved by | |||
setting up 2 AGGFRAG SAs, one in either direction.</t> | setting up 2 AGGFRAG SAs, one in either direction.</t> | |||
<t>An AGGFRAG tunnel used for IP-TFS can operate in 2 modes, a | ||||
<t>An AGGFRAG tunnel used for IP-TFS can operate in 2 modes, a | ||||
non-congestion-controlled mode and congestion-controlled mode.</t> | non-congestion-controlled mode and congestion-controlled mode.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Non-Congestion-Controlled Mode"> | <name>Non-Congestion-Controlled Mode</name> | |||
<t>In the non-congestion-controlled mode, IP-TFS sends fixed-sized | <t>In the non-congestion-controlled mode, IP-TFS sends fixed-size | |||
packets over an AGGFRAG tunnel at a constant rate. The packet send | packets over an AGGFRAG tunnel at a constant rate. The packet send | |||
rate is constant and is not automatically adjusted regardless of any | rate is constant and is not automatically adjusted, regardless of any | |||
network congestion (e.g., packet loss).</t> | network congestion (e.g., packet loss).</t> | |||
<t>For similar reasons as given in <xref target="RFC7510" format="defa | ||||
<t>For similar reasons as given in <xref target="RFC7510"/> the non-congestion-c | ult"/>, the non-congestion-controlled | |||
ontrolled | mode <bcp14>MUST</bcp14> only be used where the user has full administrative con | |||
mode MUST only be used where the user has full administrative control | trol | |||
over any path the tunnel will take, and MUST NOT be used if this is | over any path the tunnel will take and <bcp14>MUST NOT</bcp14> be used if this i | |||
s | ||||
not the case. This is required so the user can guarantee the | not the case. This is required so the user can guarantee the | |||
bandwidth and also be sure as to not be negatively affecting network | bandwidth and also be sure as to not be negatively affecting network | |||
congestion <xref target="RFC2914"/>. In this case, packet loss should be reporte d to | congestion <xref target="RFC2914" format="default"/>. In this case, packet loss should be reported to | |||
the administrator (e.g., via syslog, YANG notification, SNMP traps, | the administrator (e.g., via syslog, YANG notification, SNMP traps, | |||
etc.) so that any failures due to a lack of bandwidth can be | etc.) so that any failures due to a lack of bandwidth can be | |||
corrected. The use of circuit breakers is also RECOMMENDED (<xref target="sec-ci | corrected. The use of circuit breakers is also <bcp14>RECOMMENDED</bcp14> (<xref | |||
rcuit-breakers"></xref>).</t> | target="sec-circuit-breakers" format="default"/>).</t> | |||
<t>Users that choose the non-congestion-controlled mode need to | ||||
<t>Users that choose the non-congestion-controlled mode need to | understand that this mode will send packets at a constant rate, | |||
understand that this mode will send packets at a constant rate | utilizing a constant, fixed bandwidth, and will not adjust based on | |||
utilizing a constant fixed bandwidth and will not adjust based on | ||||
congestion. Thus, if they do not guarantee the bandwidth required by | congestion. Thus, if they do not guarantee the bandwidth required by | |||
the tunnel, the tunnel's operation, as well as the rest of their | the tunnel, the tunnel's operation, as well as the rest of their | |||
network, may be negatively impacted.</t> | network, may be negatively impacted.</t> | |||
<t>One expected use case for the non-congestion-controlled mode is to | ||||
<t>One expected use case for non-congestion-controlled mode is to | ||||
guarantee the full tunnel bandwidth is available and preferred over | guarantee the full tunnel bandwidth is available and preferred over | |||
other non-tunnel traffic. In fact, a typical site-to-site use case | other non-tunnel traffic. In fact, a typical site-to-site use case | |||
might have all of the user traffic utilizing the IP-TFS tunnel.</t> | might have all of the user traffic utilizing the IP-TFS tunnel.</t> | |||
<t>The non-congestion-controlled mode is also appropriate if ESP over | ||||
<t>Non-congestion-controlled mode is also appropriate if ESP over TCP is | TCP is | |||
in use <xref target="RFC8229"/>. However, the use of TCP is considered a highly | in use <xref target="RFC9329" format="default"/>. However, the use of TCP is con | |||
non-preferred, and a fall-back only solution for IPsec. This is also | sidered a fallback-only solution for IPsec; it is highly not preferred. This is | |||
also | ||||
one of the reasons that TCP was not chosen as the encapsulation for | one of the reasons that TCP was not chosen as the encapsulation for | |||
IP-TFS instead of AGGFRAG.</t> | IP-TFS instead of AGGFRAG.</t> | |||
</section> | ||||
</section> | <section anchor="sec-congestion-controlled-mode" numbered="true" toc="de | |||
fault"> | ||||
<section title="Congestion-Controlled Mode" anchor="sec-congestion-controlled-mo | <name>Congestion-Controlled Mode</name> | |||
de"> | <t>With the congestion-controlled mode, IP-TFS adapts to network | |||
<t>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.</t> | packets and varying the send rate, transport overhead is minimized.</t> | |||
<t>The output of the congestion control algorithm will adjust the rate | ||||
<t>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 | |||
practice RECOMMENDS that the algorithm conform to <xref target="RFC5348"/>. Cong | practice RECOMMENDS that the algorithm conform to <xref target="RFC5348" format= | |||
estion | "default"/>. Congestion | |||
control principles are documented in <xref target="RFC2914"/> as well. <xref tar | control principles are documented in <xref target="RFC2914" format="default"/> a | |||
get="RFC4342"/> | s well. There is an example in <xref target="RFC4342" format="default"/> | |||
provides an example of the <xref target="RFC5348"/> algorithm which matches the | of the algorithm in <xref target="RFC5348" format="default"/>, which matches the | |||
requirements of IP-TFS (i.e., designed for fixed-size packets and send | requirements of IP-TFS (i.e., designed for fixed-size packets and send | |||
rate varied based on congestion).</t> | rate varied based on congestion).</t> | |||
<t>The required inputs for the TCP-friendly rate control algorithm | ||||
<t>The required inputs for the TCP friendly rate control algorithm | described in <xref target="RFC5348" format="default"/> are the receiver's loss e | |||
described in <xref target="RFC5348"/> are the receiver's loss event rate and the | vent rate and the | |||
sender's estimated round-trip time (RTT). These values are provided by | sender's estimated round-trip time (RTT). These values are provided by | |||
IP-TFS using the congestion information header fields described in | IP-TFS using the congestion information header fields described in | |||
<xref target="sec-congestion-information"></xref>. In particular, these values a | <xref target="sec-congestion-information" format="default"/>. In particular, the | |||
re sufficient to | se values are sufficient to | |||
implement the algorithm described in <xref target="RFC5348"/>.</t> | implement the algorithm described in <xref target="RFC5348" format="default"/>.< | |||
/t> | ||||
<t>At a minimum, the congestion information MUST be sent, from the | <t>At a minimum, the congestion information <bcp14>MUST</bcp14> be sen | |||
t, from the | ||||
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 <bcp14>SHOULD</bcp14> be sent constantly fr om | |||
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. Not receiving this information over multiple | established. Not 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 its sending rate lower. For | that causes the sender to adjust its sending rate lower. For | |||
example, <xref target="RFC4342"/> calls this the "no feedback timeout" and it is | example, this is called the "no feedback timeout" in <xref target="RFC4342" form | |||
equal | at="default"/>, and it is equal | |||
to 4 RTT intervals. When a "no feedback timeout" has occurred <xref target="RFC4 | to 4 RTT intervals. When a "no feedback timeout" has occurred, the sending rate | |||
342"/> | is halved, as per <xref target="RFC4342" format="default"/>.</t> | |||
halves the sending rate.</t> | <t>An implementation <bcp14>MAY</bcp14> choose to always include the c | |||
ongestion | ||||
<t>An implementation MAY choose to always include the congestion | information in its AGGFRAG payload header if it is sending it on an IP-TFS-enabl | |||
information in its AGGFRAG payload header if sending on an IP-TFS-enabled | ed | |||
SA. Since IP-TFS normally will operate with a large packet | 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. An implementation choosing to always | the available tunnel bandwidth. An implementation choosing to always | |||
send the data MAY also choose to only update the <spanx style='verb'>LossEventRa | send the data <bcp14>MAY</bcp14> also choose to only update the <tt>LossEventRat | |||
te</spanx> | e</tt> | |||
and <spanx style='verb'>RTT</spanx> header field values it sends every <spanx st | and <tt>RTT</tt> header field values it sends every <tt>RTT</tt> through.</t> | |||
yle='verb'>RTT</spanx> though.</t> | <t>When choosing a congestion control algorithm (or a selection of | |||
<t>When choosing a congestion control algorithm (or a selection of | ||||
algorithms), note that IP-TFS is not providing for reliable delivery | algorithms), note that IP-TFS is not providing for reliable delivery | |||
of IP traffic, and so per packet ACKs are not required and are not | of IP traffic, and so per-packet acknowledgements (ACKs) are not required and ar e not | |||
provided.</t> | provided.</t> | |||
<t>It is worth noting that the variable send rate of a | ||||
<t>It is worth noting that the variable send-rate of a | congestion-controlled AGGFRAG tunnel is not private; however, this | |||
congestion-controlled AGGFRAG tunnel, is not private; however, this | send rate is being driven by network congestion, and as long as the | |||
send-rate is being driven by network congestion, and as long as the | ||||
encapsulated (inner) traffic flow shape and timing are not directly | encapsulated (inner) traffic flow shape and timing are not directly | |||
affecting the (outer) network congestion, the variations in the | affecting the (outer) network congestion, the variations in the | |||
tunnel rate will not weaken the provided inner traffic flow | tunnel rate will not weaken the provided inner traffic flow | |||
confidentiality.</t> | confidentiality.</t> | |||
<section anchor="sec-circuit-breakers" numbered="true" toc="default"> | ||||
<section title="Circuit Breakers" anchor="sec-circuit-breakers"> | <name>Circuit Breakers</name> | |||
<t>In additional to congestion control, implementations that support | <t>In addition to congestion control, implementations that support t | |||
non-congestion control mode SHOULD implement circuit breakers <xref target="RFC8 | he | |||
084"/> | non-congestion-control mode <bcp14>SHOULD</bcp14> implement circuit breakers <xr | |||
ef target="RFC8084" format="default"/> | ||||
as a recovery method of last resort. When circuit breakers are | as a recovery method of last resort. When circuit breakers are | |||
enabled an implementation SHOULD also enable congestion control | enabled, an implementation <bcp14>SHOULD</bcp14> also enable congestion control | |||
reports so that circuit breakers have information to act on.</t> | reports so that circuit breakers have information to act on.</t> | |||
<t>The pseudowire congestion considerations <xref target="RFC7893" f | ||||
<t>The pseudowire congestion considerations <xref target="RFC7893"/> are equally | ormat="default"/> are equally | |||
applicable to the mechanisms defined in this document, notably the | applicable to the mechanisms defined in this document, notably the | |||
text on inellastic traffic.</t> | text on inelastic traffic.</t> | |||
<t>One example of a simple, slow-trip circuit breaker that an | ||||
<t>One example of a simple slow-trip circuit breaker (CB) an | implementation may provide would utilize 2 values: the amount of | |||
implementation may provide would utilize 2 values, the amount of | persistent loss rate required to trip the circuit breaker and the required lengt | |||
persistent loss rate required to trip the CB, and the required length | h | |||
of time this persistent loss rate must be seen to trip the CB. These | of time this persistent loss rate must be seen to trip the circuit breaker. Thes | |||
2 value are required configuration from the user. When the CB is | e | |||
tripped the tunnel traffic is disabled, and an appropriate log | 2 value are required configurations from the user. When the circuit breaker is | |||
message or other management type alarm is triggered indicating | tripped, the tunnel traffic is disabled and an appropriate log | |||
operate intervention is required.</t> | message or other management type alarm is triggered, indicating | |||
operation intervention is required.</t> | ||||
</section> | </section> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Summary of Receiver Processing</name> | |||
<t>An AGGFRAG-enabled SA receiver has a few tasks to perform.</t> | ||||
<section title="Summary of Receiver Processing"> | <t>The receiver <bcp14>MAY</bcp14> process incoming AGGFRAG_PAYLOAD payl | |||
<t>An AGGFRAG-enabled SA receiver has a few tasks to perform.</t> | oads as soon as | |||
they arrive, as much as it can, i.e., if the incoming AGGFRAG_PAYLOAD | ||||
<t>The receiver MAY process incoming AGGFRAG_PAYLOAD payloads as soon as | ||||
they arrive as much as it can. I.e., if the incoming AGGFRAG_PAYLOAD | ||||
packet contains complete inner packet(s), the receiver should extract | packet contains complete inner packet(s), the receiver should extract | |||
and transmit them immediately. For partial packets, the receiver needs | and transmit them immediately. For partial packets, the receiver needs | |||
to keep the partial packets in the memory until they fall out | to keep the partial packets in the memory until they fall out | |||
from the reordering window, or until the missing parts of the packets | from the reordering window or until the missing parts of the packets | |||
are received, in which case it will reassemble and transmit them. If | are received, in which case, it will reassemble and transmit them. If | |||
the AGGFRAG_PAYLOAD payload contains multiple packets they SHOULD be sent | the AGGFRAG_PAYLOAD payload contains multiple packets, they <bcp14>SHOULD</bcp14 | |||
> be sent | ||||
out in the order they are in the AGGFRAG_PAYLOAD (i.e., keep the | out in the order they are in the AGGFRAG_PAYLOAD (i.e., keep the | |||
original order they were received on the other end). The cost of | original order they were received on the other end). The cost of | |||
using this method is that an amplification of out-of-order delivery | using this method is that an amplification of out-of-order delivery | |||
of inner packets can occur due to inner packet aggregation.</t> | of inner packets can occur due to inner packet aggregation.</t> | |||
<t>Instead of the method described in the previous paragraph, the | ||||
<t>Instead of the method described in the previous paragraph, the | receiver <bcp14>MAY</bcp14> reorder out-of-order AGGFRAG_PAYLOAD payloads receiv | |||
receiver MAY reorder out-of-order AGGFRAG_PAYLOAD payloads received | ed | |||
into in-sequence-order AGGFRAG_PAYLOAD payloads (<xref target="sec-fragmentation | into in-sequence-order AGGFRAG_PAYLOAD payloads (<xref target="sec-fragmentation | |||
-sequence-numbers-and-all-pad-payloads"></xref>), and only after it has an | -sequence-numbers-and-all-pad-payloads" format="default"/>), and only after it h | |||
in-order AGGFRAG_PAYLOAD payload stream would the receiver transmits | as an | |||
in-order AGGFRAG_PAYLOAD payload stream would the receiver transmit | ||||
the inner packets. Using this method will ensure the inner packets | the inner packets. Using this method will ensure the inner packets | |||
are sent in order. The cost of this method is that a lost packet will | are sent in order. The cost of this method is that a lost packet will | |||
cause a delay of up to the lost packet timer interval (or the full | cause a delay of up to the lost packet timer interval (or the full | |||
reorder window if no lost packet timer is used). Additionally, there | reorder window if no lost packet timer is used). Additionally, there | |||
can be extra burstiness in the output stream. This burstiness can | can be extra burstiness in the output stream. This burstiness can | |||
happen when a lost packet is dropped from the re-order window, | happen when a lost packet is dropped from the reorder window, | |||
and the remaining outer packets in the re-order window are immediately | and the remaining outer packets in the reorder window are immediately | |||
processed and sent out back to back.</t> | processed and sent out back to back.</t> | |||
<t>Additionally, if congestion control is enabled, the receiver sends | ||||
<t>Additionally, if congestion control is enabled, the receiver sends | congestion control data (<xref target="sec-congestion-control-aggfrag-payload-pa | |||
congestion control data (<xref target="sec-congestion-control-aggfrag-payload-pa | yload-format" format="default"/>) back to the sender, as described in Sections < | |||
yload-format"></xref>) back to the sender as described in <xref target="sec-cong | xref target="sec-congestion-controlled-mode" format="counter"/> | |||
estion-controlled-mode"></xref> | and <xref target="sec-congestion-information" format="counter"/>.</t> | |||
and <xref target="sec-congestion-information"></xref>.</t> | <t>Finally, a note on receiving incorrect <tt>BlockOffset</tt> values: T | |||
o account | ||||
<t>Finally, a note on receiving incorrect <spanx style='verb'>BlockOffset</spanx | for misbehaving senders, a receiver <bcp14>SHOULD</bcp14> gracefully handle the | |||
> values. To account | case | |||
for misbehaving senders, a receiver SHOULD gracefully handle the case | where the <tt>BlockOffset</tt> of consecutive packets, and/or the inner | |||
where the <spanx style='verb'>BlockOffset</spanx> of consecutive packets, and/or | packet they share, do not agree. It <bcp14>MAY</bcp14> drop the inner packet or | |||
the inner | one or both of the outer packets.</t> | |||
packet they share, do not agree. It MAY drop the inner packet, or one | </section> | |||
or both of the outer packets.</t> | </section> | |||
<section anchor="sec-congestion-information" numbered="true" toc="default"> | ||||
</section> | <name>Congestion Information</name> | |||
<t>In order to support the congestion-controlled mode, the sender needs to | ||||
</section> | know the loss event rate and to approximate the RTT <xref target="RFC5348" forma | |||
t="default"/>. In order | ||||
<section title="Congestion Information" anchor="sec-congestion-information"> | ||||
<t>In order to support the congestion-controlled mode, the sender needs to | ||||
know the loss event rate and to approximate the RTT <xref target="RFC5348"/>. In | ||||
order | ||||
to obtain these values, the receiver sends congestion control | to obtain these values, the receiver sends congestion control | |||
information on its SA back to the sender. Thus, to support | information on its SA back to the sender. Thus, to support | |||
congestion control the receiver MUST have a paired SA back to the | congestion control, the receiver <bcp14>MUST</bcp14> have a paired SA back to th e | |||
sender (this is always the case when the tunnel was created using | sender (this is always the case when the tunnel was created using | |||
IKEv2). If the SA back to the sender is a non-AGGFRAG_PAYLOAD enabled | IKEv2). If the SA back to the sender is a non-AGGFRAG_PAYLOAD-enabled | |||
SA then an AGGFRAG_PAYLOAD empty payload (i.e., header only) is used | SA, then an AGGFRAG_PAYLOAD empty payload (i.e., header only) is used | |||
to convey the information.</t> | to convey the information.</t> | |||
<t>In order to calculate a loss event rate compatible with <xref target="R | ||||
<t>In order to calculate a loss event rate compatible with <xref target="RFC5348 | FC5348" format="default"/>, the | |||
"/>, the | receiver needs to have an RTT estimate. Thus, the sender | |||
receiver needs to have a round-trip time estimate. Thus the sender | communicates this estimate in the <tt>RTT</tt> header field. On startup, this | |||
communicates this estimate in the <spanx style='verb'>RTT</spanx> header field. | value will be zero, as no RTT estimate is yet known.</t> | |||
On startup this | <t>In order for the sender to estimate its <tt>RTT</tt> value, the sender | |||
value will be zero as no RTT estimate is yet known.</t> | places a timestamp value in the <tt>TVal</tt> header field. On first receipt | |||
of this <tt>TVal</tt>, the receiver records the new <tt>TVal</tt> value, along w | ||||
<t>In order for the sender to estimate its <spanx style='verb'>RTT</spanx> value | ith | |||
, the sender | the time it arrived locally. Subsequent receipt of the same <tt>TVal</tt> | |||
places a timestamp value in the <spanx style='verb'>TVal</spanx> header field. O | <bcp14>MUST NOT</bcp14> update the recorded time.</t> | |||
n first receipt | <t>When the receiver sends its congestion control header, it places this l | |||
of this <spanx style='verb'>TVal</spanx>, the receiver records the new <spanx st | atest recorded | |||
yle='verb'>TVal</spanx> value along with | <tt>TVal</tt> in the <tt>TEcho</tt> header field, along with 2 delay values: <tt | |||
the time it arrived locally. Subsequent receipt of the same <spanx style='verb'> | >Echo | |||
TVal</spanx> | Delay</tt> and <tt>Transmit Delay</tt>. The <tt>Echo Delay</tt> value is the tim | |||
MUST NOT update the recorded time.</t> | e delta | |||
from the recorded arrival time of <tt>TVal</tt> and the current clock in | ||||
<t>When the receiver sends its congestion control header it places this latest r | microseconds. The second value, <tt>Transmit Delay</tt>, is the receiver's | |||
ecorded | ||||
<spanx style='verb'>TVal</spanx> in the <spanx style='verb'>TEcho</spanx> header | ||||
field, along with 2 delay values, <spanx style='verb'>Echo | ||||
Delay</spanx> and <spanx style='verb'>Transmit Delay</spanx>. The <spanx style=' | ||||
verb'>Echo Delay</spanx> value is the time delta | ||||
from the recorded arrival time of <spanx style='verb'>TVal</spanx> and the curre | ||||
nt clock in | ||||
microseconds. The second value, <spanx style='verb'>Transmit Delay</spanx>, is t | ||||
he receiver's | ||||
current transmission delay on the tunnel (i.e., the average time | current transmission delay on the tunnel (i.e., the average time | |||
between sending packets on its half of the AGGFRAG tunnel).</t> | between sending packets on its half of the AGGFRAG tunnel).</t> | |||
<t>When the sender receives back its <tt>TVal</tt> in the <tt>TEcho</tt> h | ||||
<t>When the sender receives back its <spanx style='verb'>TVal</spanx> in the <sp | eader field, | |||
anx style='verb'>TEcho</spanx> header field | ||||
it calculates 2 RTT estimates. The first is the actual delay found by | it calculates 2 RTT estimates. The first is the actual delay found by | |||
subtracting the <spanx style='verb'>TEcho</spanx> value from its current clock a | subtracting the <tt>TEcho</tt> value from its current clock and then | |||
nd then | subtracting the <tt>Echo Delay</tt> as well. The second RTT estimate is found by | |||
subtracting <spanx style='verb'>Echo Delay</spanx> as well. The second RTT estim | adding the received <tt>Transmit Delay</tt> header value to the sender's own | |||
ate is found by | ||||
adding the received <spanx style='verb'>Transmit Delay</spanx> header value to t | ||||
he sender's own | ||||
transmission delay (i.e., the average time between sending packets on | transmission delay (i.e., the average time between sending packets on | |||
its half of the AGGFRAG tunnel). The larger of these 2 RTT estimates | its half of the AGGFRAG tunnel). The larger of these 2 RTT estimates | |||
SHOULD be used as the <spanx style='verb'>RTT</spanx> value.</t> | <bcp14>SHOULD</bcp14> be used as the <tt>RTT</tt> value.</t> | |||
<t>The two RTT estimates are required to handle different combinations of | ||||
<t>The two RTT estimates are required to handle different combinations of | ||||
faster or slower tunnel packet paths with faster or slower fixed | faster or slower tunnel packet paths with faster or slower fixed | |||
tunnel rates. Choosing the larger of the two values guarantees that | tunnel rates. Choosing the larger of the two values guarantees that | |||
the <spanx style='verb'>RTT</spanx> is never considered faster than the aggregat e transmission | the <tt>RTT</tt> is never considered faster than the aggregate transmission | |||
delay based on the IP-TFS send rate (the second estimate), as well | delay based on the IP-TFS send rate (the second estimate), as well | |||
as never being considered faster than the actual RTT along the tunnel | as never being considered faster than the actual RTT along the tunnel | |||
packet path (the first estimate).</t> | packet path (the first estimate).</t> | |||
<t>The receiver also calculates, and communicates in the <tt>LossEventRate | ||||
<t>The receiver also calculates, and communicates in the <spanx style='verb'>Los | </tt> | |||
sEventRate</spanx> | ||||
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 <xref target="RFC4342"/> which periodically sends all th e loss | slightly different from <xref target="RFC4342" format="default"/>, which periodi cally sends all the loss | |||
interval data back to the sender so that it can do the calculation. | interval data back to the sender so that it can do the calculation. | |||
See <xref target="sec-a-send-and-loss-event-rate-calculation"></xref> for a sugg | See <xref target="sec-a-send-and-loss-event-rate-calculation" format="default"/> | |||
ested way to | for a suggested way to | |||
calculate the loss event rate value. Initially this value will be | calculate the loss event rate value. Initially, this value will be | |||
zero (indicating no loss) until enough data has been collected by the | zero (indicating no loss) until enough data has been collected by the | |||
receiver to update it.</t> | receiver to update it.</t> | |||
<section anchor="sec-ecn-support" numbered="true" toc="default"> | ||||
<section title="ECN Support" anchor="sec-ecn-support"> | <name>ECN Support</name> | |||
<t>In addition to normal packet loss information, AGGFRAG mode supports use | <t>In addition to normal packet loss information, the AGGFRAG mode suppo | |||
of the ECN bits in the encapsulating IP header <xref target="RFC3168"/> for | rts use | |||
of the ECN bits in the encapsulating IP header <xref target="RFC3168" format="de | ||||
fault"/> for | ||||
identifying congestion. If ECN use is enabled and a packet arrives at | identifying congestion. If ECN use is enabled and a packet arrives at | |||
the egress (receiving) side with the Congestion Experienced (CE) value set, | the egress (receiving) side with the Congestion Experienced (CE) value set, | |||
then the receiver considers that packet as being dropped, although it | then the receiver considers that packet as being dropped, although it | |||
does not drop it. The receiver MUST set the E bit in any | does not drop it. The receiver <bcp14>MUST</bcp14> set the E bit in any | |||
AGGFRAG_PAYLOAD payload header containing a <spanx style='verb'>LossEventRate</s | AGGFRAG_PAYLOAD payload header containing a <tt>LossEventRate</tt> value | |||
panx> value | ||||
derived from a CE value being considered.</t> | derived from a CE value being considered.</t> | |||
<t>In <xref target="RFC6040" format="default"/>, which updates <xref tar | ||||
<t><xref target="RFC3168"/> and <xref target="RFC4301"/>, updated by <xref targe | get="RFC3168" format="default"/> and <xref target="RFC4301" format="default"/>, | |||
t="RFC6040"/> defines behaviors for marking | behaviors for marking | |||
the outer ECN field value based on the ECN field of the inner packet. | the outer ECN field value based on the ECN field of the inner packet are defined | |||
As AGGFRAG mode may have multiple inner packets present in a single | . | |||
As the AGGFRAG mode may have multiple inner packets present in a single | ||||
outer packet, and there is no obvious correct way to map these | outer packet, and there is no obvious correct way to map these | |||
multiple values to the single outer packet ECN field value, the | multiple values to the single outer packet ECN field value, the | |||
tunnel ingress endpoint SHOULD operate in the "compatibility" mode | tunnel ingress endpoint <bcp14>SHOULD</bcp14> operate in the "compatibility" mod | |||
rather than the "default" mode from RFC6040. In particular this means | e, | |||
rather than the "default" mode from <xref target="RFC6040" format="default"/>. I | ||||
n particular, this means | ||||
that the ingress (sending) endpoint of the tunnel always sets the | that the ingress (sending) endpoint of the tunnel always sets the | |||
newly constructed outer encapsulating packet header ECN field | newly constructed outer encapsulating packet header ECN field | |||
to Not-ECT <xref target="RFC6040"/>.</t> | to Not-ECT <xref target="RFC6040" format="default"/>.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Configuration of AGGFRAG Tunnels for IP-TFS</name> | |||
<t>IP-TFS is meant to be deployable with a minimal amount of | ||||
<section title="Configuration of AGGFRAG Tunnels for IP-TFS"> | configuration. All IP-TFS-specific configuration should be | |||
<t>IP-TFS is meant to be deployable with a minimal amount of | ||||
configuration. All IP-TFS specific configuration should be | ||||
specified at the unidirectional tunnel ingress (sending) side. It | specified at the unidirectional tunnel ingress (sending) side. It | |||
is intended that non-IKEv2 operation is supported, at least, with | is intended that non-IKEv2 operation is supported, at least, with | |||
local static configuration.</t> | local static configuration.</t> | |||
<t>YANG and MIB documents have been defined for IP-TFS in | ||||
<t>YANG and MIB documents have been defined for IP-TFS in | <xref target="RFC9348" format="default"/> and <xref target="RFC9349" format="def | |||
<xref target="I-D.ietf-ipsecme-yang-iptfs"/> and <xref target="I-D.ietf-ipsecme- | ault"/>.</t> | |||
mib-iptfs"/>.</t> | <section numbered="true" toc="default"> | |||
<name>Bandwidth</name> | ||||
<section title="Bandwidth"> | <t>Bandwidth is a local configuration option. For the | |||
<t>Bandwidth is a local configuration option. For | non-congestion-controlled mode, the bandwidth <bcp14>SHOULD</bcp14> be configure | |||
non-congestion-controlled mode, the bandwidth SHOULD be configured. | d. | |||
For congestion-controlled mode, the bandwidth can be configured or | For the congestion-controlled mode, the bandwidth can be configured or | |||
the congestion control algorithm discovers and uses the maximum | the congestion control algorithm discovers and uses the maximum | |||
bandwidth available. No standardized configuration method is | bandwidth available. No standardized configuration method is | |||
required.</t> | required.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Fixed Packet Size</name> | ||||
<section title="Fixed Packet Size"> | <t>The fixed packet size to be used for the tunnel encapsulation packets | |||
<t>The fixed packet size to be used for the tunnel encapsulation packets | <bcp14>MAY</bcp14> be configured manually or can be automatically determined usi | |||
MAY be configured manually or can be automatically determined using | ng | |||
other methods such as PLMTUD (<xref target="RFC4821"/>, <xref target="RFC8899"/> | other methods, such as PLMTUD <xref target="RFC4821" format="default"/> <xref ta | |||
) or PMTUD (<xref target="RFC1191"/>, | rget="RFC8899" format="default"/> or PMTUD <xref target="RFC1191" format="defaul | |||
<xref target="RFC8201"/>). As PMTUD is known to have issues, PLMTUD is considere | t"/> | |||
d the | <xref target="RFC8201" format="default"/>. As PMTUD is known to have issues, PLM | |||
TUD is considered the | ||||
more robust option. No standardized configuration method is required.</t> | more robust option. No standardized configuration method is required.</t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Congestion Control</name> | ||||
<section title="Congestion Control"> | <t>Congestion control is a local configuration option. No standardized | |||
<t>Congestion control is a local configuration option. No standardized | ||||
configuration method is required.</t> | configuration method is required.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>IKEv2</name> | |||
<section anchor="sec-use-aggfrag-notification-message" numbered="true" toc | ||||
<section title="IKEv2"> | ="default"> | |||
<section title="USE_AGGFRAG Notification Message" anchor="sec-use-aggfrag-notifi | <name>USE_AGGFRAG Notification Message</name> | |||
cation-message"> | <t>As mentioned previously, AGGFRAG tunnels utilize ESP payloads of type | |||
<t>As mentioned previously AGGFRAG tunnels utilize ESP payloads of type | ||||
AGGFRAG_PAYLOAD.</t> | AGGFRAG_PAYLOAD.</t> | |||
<t>When using IKEv2, a new "USE_AGGFRAG" notification message enables | ||||
<t>When using IKEv2, a new "USE_AGGFRAG" Notification Message enables | the AGGFRAG_PAYLOAD payload on a Child SA pair. The | |||
the AGGFRAG_PAYLOAD payload on a child SA pair. The | ||||
method used is similar to how USE_TRANSPORT_MODE is negotiated, as | method used is similar to how USE_TRANSPORT_MODE is negotiated, as | |||
described in <xref target="RFC7296"/>.</t> | described in <xref target="RFC7296" format="default"/>.</t> | |||
<t>To request use of the AGGFRAG_PAYLOAD payload on the Child SA pair, | ||||
<t>To request use of the AGGFRAG_PAYLOAD payload on the Child SA pair, | ||||
the initiator includes the USE_AGGFRAG notification in an SA payload | the initiator includes the USE_AGGFRAG notification in an SA payload | |||
requesting a new Child SA (either during the initial IKE_AUTH or | requesting a new Child SA (either during the initial IKE_AUTH or | |||
during CREATE_CHILD_SA exchanges). If the request is | during CREATE_CHILD_SA exchanges). If the request is | |||
accepted then the response MUST also include a notification of type | accepted, then the response <bcp14>MUST</bcp14> also include a notification of t | |||
USE_AGGFRAG. If the responder declines the request the child SA will | ype | |||
USE_AGGFRAG. If the responder declines the request, the Child SA will | ||||
be established without AGGFRAG_PAYLOAD payload use enabled. If | be established without AGGFRAG_PAYLOAD payload use enabled. If | |||
this is unacceptable to the initiator, the initiator MUST delete the | this is unacceptable to the initiator, the initiator <bcp14>MUST</bcp14> delete | |||
child SA.</t> | the | |||
Child SA.</t> | ||||
<t>As the use of the AGGFRAG_PAYLOAD payload is currently only defined | <t>As the use of the AGGFRAG_PAYLOAD payload is currently only defined | |||
for non-transport mode tunnels, the USE_AGGFRAG notification MUST NOT | for non-transport-mode tunnels, the USE_AGGFRAG notification <bcp14>MUST NOT</bc | |||
be combined with USE_TRANSPORT notification.</t> | p14> | |||
be combined with the USE_TRANSPORT notification.</t> | ||||
<t>The USE_AGGFRAG notification contains a 1 octet payload of flags that | <t>The USE_AGGFRAG notification contains a 1-octet payload of flags that | |||
specify requirements from the sender of the notification. If any | specify requirements from the sender of the notification. If any | |||
requirement flags are not understood or cannot be supported by the | requirement flags are not understood or cannot be supported by the | |||
receiver then the receiver SHOULD NOT enable use of AGGFRAG_PAYLOAD | receiver, then the receiver <bcp14>SHOULD NOT</bcp14> enable use of AGGFRAG_PAYL | |||
(either by not responding with the USE_AGGFRAG notification, or in | OAD | |||
the case of the initiator, by deleting the child SA if the now | (either by not responding with the USE_AGGFRAG notification or, in | |||
established non-AGGFRAG_PAYLOAD using SA is unacceptable).</t> | the case of the initiator, by deleting the Child SA if the now-established non-A | |||
GGFRAG_PAYLOAD using SA is unacceptable).</t> | ||||
<t>The notification type and payload flag values are defined in <xref target="se | <t>The notification type and payload flag values are defined in <xref ta | |||
c-ikev2-use-aggfrag-notification-message"></xref>.</t> | rget="sec-ikev2-use-aggfrag-notification-message" format="default"/>.</t> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Packet and Data Formats</name> | |||
<t>The packet and data formats defined below are generic with the intent | ||||
<section title="Packet and Data Formats"> | ||||
<t>The packet and data formats defined below are generic with the intent | ||||
of allowing for non-IP-TFS uses, but such uses are outside the scope of | of allowing for non-IP-TFS uses, but such uses are outside the scope of | |||
this document.</t> | this document.</t> | |||
<section anchor="sec-aggfrag-payload-payload" numbered="true" toc="default | ||||
<section title="AGGFRAG_PAYLOAD Payload" anchor="sec-aggfrag-payload-payload"> | "> | |||
<t>ESP Next Header value: 144</t> | <name>AGGFRAG_PAYLOAD Payload</name> | |||
<t>ESP Next Header value: 144</t> | ||||
<t>An AGGFRAG payload is identified by the ESP Next Header value | <t>An AGGFRAG payload is identified by the ESP Next Header value | |||
AGGFRAG_PAYLOAD which has the value 144, which has been reserved in | AGGFRAG_PAYLOAD, which has the value 144, which has been reserved in | |||
the IP protocol numbers space. The first octet of the payload | the IP protocol numbers space. The first octet of the payload | |||
indicates the format of the remaining payload data.</t> | indicates the format of the remaining payload data.</t> | |||
<figure anchor="sec-aggfrag-payload-payload-format"> | ||||
<figure title="AGGFRAG_PAYLOAD payload format" anchor="sec-aggfrag-payload-paylo | <name>AGGFRAG_PAYLOAD Payload Format</name> | |||
ad-format"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
| Sub-type | ... | | Sub-type | ... | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Sub-type:"><vspace/>An 8-bit value indicating the payload format.</ | <dt>Sub-type:</dt> | |||
t> | <dd>An 8-bit value indicating the payload format.</dd> | |||
</list></t> | </dl> | |||
<t>This document defines 2 payload sub-types. These payload formats | ||||
<t>This document defines 2 payload sub-types. These payload formats | ||||
are defined in the following sections.</t> | are defined in the following sections.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Non-Congestion Control AGGFRAG_PAYLOAD Payload Format"> | <name>Non-Congestion-Control AGGFRAG_PAYLOAD Payload Format</name> | |||
<t>The non-congestion control AGGFRAG_PAYLOAD payload consists of a | <t>The non-congestion-control AGGFRAG_PAYLOAD payload consists of a | |||
4-octet header followed by a variable amount of <spanx style='verb'>DataBlocks</ | 4-octet header, followed by a variable amount of <tt>DataBlocks</tt> data, as | |||
spanx> data as | ||||
shown below.</t> | shown below.</t> | |||
<figure anchor="sec-non-congestion-control-payload-format"> | ||||
<figure title="Non-congestion control payload format" anchor="sec-non-congestion | <name>Non-Congestion-Control Payload Format</name> | |||
-control-payload-format"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
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 (0) | Reserved | BlockOffset | | | Sub-Type (0) | Reserved | BlockOffset | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| DataBlocks ... | | DataBlocks ... | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Sub-type:"><vspace/>An octet indicating the payload format. For thi | <dt>Sub-type:</dt> | |||
s | <dd>An octet indicating the payload format. For this | |||
non-congestion control format, the value is 0.</t> | non-congestion-control format, the value is 0.</dd> | |||
<t hangText="Reserved:"><vspace/>An octet set to 0 on generation and ignored on | <dt>Reserved:</dt> | |||
receipt.</t> | <dd>An octet set to 0 on generation and ignored on | |||
<t hangText="BlockOffset:"><vspace/>A 16-bit unsigned integer counting the numbe | receipt.</dd> | |||
r of | <dt>BlockOffset:</dt> | |||
octets of <spanx style='verb'>DataBlocks</spanx> data before the start of a | <dd>A 16-bit unsigned integer counting the number of | |||
octets of <tt>DataBlocks</tt> data before the start of a | ||||
new data block. If the start of a new data block | new data block. If the start of a new data block | |||
occurs in a subsequent payload the <spanx style='verb'>BlockOffset</spanx> | occurs in a subsequent payload, the <tt>BlockOffset</tt> | |||
will point past the end of the <spanx style='verb'>DataBlocks</spanx> data. | will point past the end of the <tt>DataBlocks</tt> data. | |||
In this case all the <spanx style='verb'>DataBlocks</spanx> data belongs to | In this case, all the <tt>DataBlocks</tt> data belongs to | |||
the current data block being assembled. When the | the current data block being assembled. When the | |||
<spanx style='verb'>BlockOffset</spanx> extends into subsequent payloads it | <tt>BlockOffset</tt> extends into subsequent payloads, it | |||
continues to only count <spanx style='verb'>DataBlocks</spanx> data (i.e., | continues to only count <tt>DataBlocks</tt> data (i.e., | |||
it does not count subsequent packets | it does not count subsequent packets of the | |||
non-<spanx style='verb'>DataBlocks</spanx> data such as header octets).</t> | non-<tt>DataBlocks</tt> data, such as header octets).</dd> | |||
<t hangText="DataBlocks:"><vspace/>Variable number of octets that begins with th | <dt>DataBlocks:</dt> | |||
e start | <dd>Variable number of octets that begins with the start | |||
of a data block, or the continuation of a previous | of a data block or the continuation of a previous | |||
data block, followed by zero or more additional data | data block, followed by zero or more additional data | |||
blocks.</t> | blocks.</dd> | |||
</list></t> | </dl> | |||
</section> | ||||
</section> | <section anchor="sec-congestion-control-aggfrag-payload-payload-format" | |||
numbered="true" toc="default"> | ||||
<section title="Congestion Control AGGFRAG_PAYLOAD Payload Format" anchor="sec-c | <name>Congestion Control AGGFRAG_PAYLOAD Payload Format</name> | |||
ongestion-control-aggfrag-payload-payload-format"> | <t>The congestion control AGGFRAG_PAYLOAD payload consists of a 24-oct | |||
<t>The congestion control AGGFRAG_PAYLOAD payload consists of a 24 | et | |||
octet header followed by a variable amount of <spanx style='verb'>DataBlocks</sp | header, followed by a variable amount of <tt>DataBlocks</tt> data, as | |||
anx> data as | ||||
shown below.</t> | shown below.</t> | |||
<figure anchor="sec-congestion-control-payload-format"> | ||||
<figure title="Congestion control payload format" anchor="sec-congestion-control | <name>Congestion Control Payload Format</name> | |||
-payload-format"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
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 |P|E| BlockOffset | | | Sub-type (1) | Reserved |P|E| BlockOffset | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| LossEventRate | | | LossEventRate | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| RTT | Echo Delay ... | | RTT | Echo Delay ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
... Echo Delay | Transmit Delay | | ... Echo Delay | Transmit Delay | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| TVal | | | TVal | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| TEcho | | | TEcho | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| DataBlocks ... | | DataBlocks ... | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Sub-type:"><vspace/>An octet indicating the payload format. For thi | <dt>Sub-type:</dt> | |||
s | <dd>An octet indicating the payload format. For this | |||
congestion control format, the value is 1.</t> | congestion control format, the value is 1.</dd> | |||
<t hangText="Reserved:"><vspace/>A 6-bit field set to 0 on generation and ignore | <dt>Reserved:</dt> | |||
d on | <dd>A 6-bit field set to 0 on generation and ignored on | |||
receipt.</t> | receipt.</dd> | |||
<t hangText="P:"><vspace/>A 1-bit value that if set indicates that PLMTUD probin | <dt>P:</dt> | |||
g is in | <dd>A 1-bit value that, if set, indicates that PLMTUD probing is in | |||
progress. This information can be used to avoid treating | progress. This information can be used to avoid treating | |||
missing packets as loss events by the CC algorithm when | missing packets as loss events by the congestion control algorithm when | |||
running the PLMTUD probe algorithm.</t> | running the PLMTUD probe algorithm.</dd> | |||
<t hangText="E:"><vspace/>A 1-bit value that if set indicates that Congestion Ex | <dt>E:</dt> | |||
perienced | <dd>A 1-bit value that, if set, indicates that Congestion Experience | |||
d | ||||
(CE) ECN bits were received and used in deriving the | (CE) ECN bits were received and used in deriving the | |||
reported <spanx style='verb'>LossEventRate</spanx>.</t> | reported <tt>LossEventRate</tt>.</dd> | |||
<t hangText="BlockOffset:"><vspace/>The same value as the non-congestion-control | <dt>BlockOffset:</dt> | |||
led | <dd>The same value as the non-congestion-controlled | |||
payload format value.</t> | payload format value.</dd> | |||
<t hangText="LossEventRate:"><vspace/>A 32-bit value specifying the inverse of t | <dt>LossEventRate:</dt> | |||
he | <dd>A 32-bit value specifying the inverse of the | |||
current loss event rate as calculated by the | current loss event rate, as calculated by the | |||
receiver. A value of zero indicates no loss. | receiver. A value of zero indicates no loss. | |||
Otherwise the loss event rate is | Otherwise, the loss event rate is | |||
<spanx style='verb'>1/LossEventRate</spanx>.</t> | <tt>1/LossEventRate</tt>.</dd> | |||
<t hangText="RTT:"><vspace/>A 22-bit value specifying the sender's current round | <dt>RTT:</dt> | |||
-trip | <dd>A 22-bit value specifying the sender's current RTT estimate in m | |||
time estimate in microseconds. The value MAY be zero prior | icroseconds. The value <bcp14>MAY</bcp14> be zero prior | |||
to the sender having calculated a round-trip time estimate. | to the sender having calculated an RTT estimate. | |||
The value SHOULD be set to zero on | The value <bcp14>SHOULD</bcp14> be set to zero on | |||
non-AGGFRAG_PAYLOAD-enabled SAs. If the RTT is equal to or | non-AGGFRAG_PAYLOAD-enabled SAs. If the RTT is equal to or | |||
larger than <spanx style='verb'>0x3FFFFF</spanx> the value MUST be set to <spanx | larger than <tt>0x3FFFFF</tt>, the value <bcp14>MUST</bcp14> be set to <tt>0x3FF | |||
style='verb'>0x3FFFFF</spanx>.</t> | FFF</tt>.</dd> | |||
<t hangText="Echo Delay:"><vspace/>A 21-bit value specifying the delay in micros | <dt>Echo Delay:</dt> | |||
econds | <dd>A 21-bit value specifying the delay in microseconds | |||
incurred between the receiver first receiving the <spanx style='verb'>TVal</span | incurred between the receiver first receiving the <tt>TVal</tt> | |||
x> | value, which it is sending back in <tt>TEcho</tt>. If the delay | |||
value which it is sending back in <spanx style='verb'>TEcho</spanx>. If the dela | is equal to or larger than <tt>0x1FFFFF</tt>, the value <bcp14>MUST</bcp14> be | |||
y | set to <tt>0x1FFFFF</tt>.</dd> | |||
is equal to or larger than <spanx style='verb'>0x1FFFFF</spanx> the value MUST b | <dt>Transmit Delay:</dt> | |||
e | <dd>A 21-bit value specifying the transmission delay in | |||
set to <spanx style='verb'>0x1FFFFF</spanx>.</t> | ||||
<t hangText="Transmit Delay:"><vspace/>A 21-bit value specifying the transmissio | ||||
n delay in | ||||
microseconds. This is the fixed (or average) delay on the | microseconds. This is the fixed (or average) delay on the | |||
receiver between it sending packets on the IPTFS tunnel. | receiver between it sending packets on the IP-TFS tunnel. | |||
If the delay is equal to or larger than <spanx style='verb'>0x1FFFFF</spanx> the | If the delay is equal to or larger than <tt>0x1FFFFF</tt>, the | |||
value MUST be set to <spanx style='verb'>0x1FFFFF</spanx>.</t> | value <bcp14>MUST</bcp14> be set to <tt>0x1FFFFF</tt>.</dd> | |||
<t hangText="TVal:"><vspace/>An opaque 32-bit value that will be echoed back by | <dt>TVal:</dt> | |||
the | <dd>An opaque, 32-bit value that will be echoed back by the | |||
receiver in later packets in the <spanx style='verb'>TEcho</spanx> field, along | receiver in later packets in the <tt>TEcho</tt> field, along with | |||
with | an <tt>Echo Delay</tt> value of how long that echo took.</dd> | |||
an <spanx style='verb'>Echo Delay</spanx> value of how long that echo took.</t> | <dt>TEcho:</dt> | |||
<t hangText="TEcho:"><vspace/>The opaque 32-bit value from a received packet's < | <dd>The opaque, 32-bit value from a received packet's <tt>TVal</tt> | |||
spanx style='verb'>TVal</spanx> | field. The received <tt>TVal</tt> is placed in <tt>TEcho</tt>, along with | |||
field. The received <spanx style='verb'>TVal</spanx> is placed in <spanx style=' | an <tt>Echo Delay</tt> value indicating how long it has been since | |||
verb'>TEcho</spanx> along with | receiving the <tt>TVal</tt> value.</dd> | |||
an <spanx style='verb'>Echo Delay</spanx> value indicating how long it has been | <dt>DataBlocks:</dt> | |||
since | <dd>Variable number of octets that begins with the start | |||
receiving the <spanx style='verb'>TVal</spanx> value.</t> | of a data block or the continuation of a previous | |||
<t hangText="DataBlocks:"><vspace/>Variable number of octets that begins with th | ||||
e start | ||||
of a data block, or the continuation of a previous | ||||
data block, followed by zero or more additional data | data block, followed by zero or more additional data | |||
blocks. For the special case of sending congestion | blocks. For the special case of sending congestion | |||
control information on a non-IP-TFS enabled SA this | control information on a non-IP-TFS-enabled SA, this | |||
field MUST be empty (i.e., be zero octets long).</t> | field <bcp14>MUST</bcp14> be empty (i.e., be zero octets long).</dd> | |||
</list></t> | </dl> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Data Blocks</name> | ||||
<section title="Data Blocks"> | <figure anchor="sec-data-block-format"> | |||
<figure title="Data Block format" anchor="sec-data-block-format"><artwork><![CDA | <name>Data Block Format</name> | |||
TA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type | IPv4, IPv6 or pad... | | Type | IPv4, IPv6, or pad... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Type:"><vspace/>A 4-bit field where 0x0 identifies a pad data block | <dt>Type:</dt> | |||
, 0x4 | <dd>A 4-bit field where 0x0 identifies a Pad Data Block, 0x4 | |||
indicates an IPv4 data block, and 0x6 indicates an IPv6 | indicates an IPv4 data block, and 0x6 indicates an IPv6 | |||
data block.</t> | data block.</dd> | |||
</list></t> | </dl> | |||
<section numbered="true" toc="default"> | ||||
<section title="IPv4 Data Block"> | <name>IPv4 Data Block</name> | |||
<figure title="IPv4 Data Block format" anchor="sec-ipv4-data-block-format"><artw | <figure anchor="sec-ipv4-data-block-format"> | |||
ork><![CDATA[ | <name>IPv4 Data Block Format</name> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0x4 | IHL | TypeOfService | TotalLength | | | 0x4 | IHL | TypeOfService | TotalLength | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Rest of the inner packet ... | | Rest of the inner packet ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>These values are the actual values within the encapsulated IPv4 | <t>These values are the actual values within the encapsulated IPv4 | |||
header. In other words, the start of this data block is the start of | header. In other words, the start of this data block is the start of | |||
the encapsulated IP packet.</t> | the encapsulated IP packet.</t> | |||
<dl newline="true" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>Type:</dt> | |||
<t hangText="Type:"><vspace/>A 4-bit value of 0x4 indicating IPv4 (i.e., first n | <dd>A 4-bit value of 0x4 indicating IPv4 (i.e., first nibble of | |||
ibble of | the IPv4 packet).</dd> | |||
the IPv4 packet).</t> | <dt>TotalLength:</dt> | |||
<t hangText="TotalLength:"><vspace/>The 16-bit unsigned integer "Total Length" f | <dd>The 16-bit unsigned integer "Total Length" field of | |||
ield of | the IPv4 inner packet.</dd> | |||
the IPv4 inner packet.</t> | </dl> | |||
</list></t> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>IPv6 Data Block</name> | |||
<figure anchor="sec-ipv6-data-block-format"> | ||||
<section title="IPv6 Data Block"> | <name>IPv6 Data Block Format</name> | |||
<figure title="IPv6 Data Block format" anchor="sec-ipv6-data-block-format"><artw | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
ork><![CDATA[ | ||||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0x6 | TrafficClass | FlowLabel | | | 0x6 | TrafficClass | FlowLabel | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| PayloadLength | Rest of the inner packet ... | | PayloadLength | Rest of the inner packet ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>These values are the actual values within the encapsulated IPv6 | <t>These values are the actual values within the encapsulated IPv6 | |||
header. In other words, the start of this data block is the start of | header. In other words, the start of this data block is the start of | |||
the encapsulated IP packet.</t> | the encapsulated IP packet.</t> | |||
<dl newline="true" spacing="normal"> | ||||
<t><list style="hanging"> | <dt>Type:</dt> | |||
<t hangText="Type:"><vspace/>A 4-bit value of 0x6 indicating IPv6 (i.e., first n | <dd>A 4-bit value of 0x6 indicating IPv6 (i.e., first nibble of | |||
ibble of | the IPv6 packet).</dd> | |||
the IPv6 packet).</t> | <dt>PayloadLength:</dt> | |||
<t hangText="PayloadLength:"><vspace/>The 16-bit unsigned integer "Payload Lengt | <dd>The 16-bit unsigned integer "Payload Length" field | |||
h" field | of the inner IPv6 inner packet.</dd> | |||
of the inner IPv6 inner packet.</t> | </dl> | |||
</list></t> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Pad Data Block</name> | |||
<figure anchor="sec-pad-data-block-format"> | ||||
<section title="Pad Data Block"> | <name>Pad Data Block Format</name> | |||
<figure title="Pad Data Block format" anchor="sec-pad-data-block-format"><artwor | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
k><![CDATA[ | ||||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0x0 | Padding ... | | 0x0 | Padding ... | |||
+-+-+-+-+-+-+-+-+-+-+- | +-+-+-+-+-+-+-+-+-+-+- | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Type:"><vspace/>A 4-bit value of 0x0 indicating a padding data bloc | <dt>Type:</dt> | |||
k.</t> | <dd>A 4-bit value of 0x0 indicating a padding data block.</dd> | |||
<t hangText="Padding:"><vspace/>Extends to end of the encapsulating packet.</t> | <dt>Padding:</dt> | |||
</list></t> | <dd>Extends to end of the encapsulating packet.</dd> | |||
</dl> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec-ikev2-use-aggfrag-notification-message" numbered="t | |||
rue" toc="default"> | ||||
<section title="IKEv2 USE_AGGFRAG Notification Message" anchor="sec-ikev2-use-ag | <name>IKEv2 USE_AGGFRAG Notification Message</name> | |||
gfrag-notification-message"> | <t>As discussed in <xref target="sec-use-aggfrag-notification-message" | |||
<t>As discussed in <xref target="sec-use-aggfrag-notification-message"></xref>, | format="default"/>, a notification | |||
a notification | ||||
message USE_AGGFRAG is used to negotiate use of the ESP AGGFRAG_PAYLOAD | message USE_AGGFRAG is used to negotiate use of the ESP AGGFRAG_PAYLOAD | |||
Next Header value.</t> | Next Header value.</t> | |||
<t>The USE_AGGFRAG Notification Message State Type is 16442.</t> | ||||
<t>The USE_AGGFRAG Notification Message State Type is 16442</t> | <t>The notification payload contains 1 octet of requirement flags. The | |||
re | ||||
<t>The notification payload contains 1 octet of requirement flags. There | ||||
are currently 2 requirement flags defined. This may be revised by | are currently 2 requirement flags defined. This may be revised by | |||
later specifications.</t> | later specifications.</t> | |||
<figure anchor="sec-use-aggfrag-requirement-flags"> | ||||
<figure title="USE_AGGFRAG requirement flags" anchor="sec-use-aggfrag-requiremen | <name>USE_AGGFRAG Requirement Flags</name> | |||
t-flags"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|0|0|0|0|0|0|C|D| | |0|0|0|0|0|0|C|D| | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="0:"><vspace/>6 bits - Reserved MUST be zero on send, unless defined | <dt>0:</dt> | |||
by | <dd>6 bits - Reserved <bcp14>MUST</bcp14> be zero on send, unless de | |||
later specifications.</t> | fined by | |||
<t hangText="C:"><vspace/>Congestion Control bit. If set, then the sender is req | later specifications.</dd> | |||
uiring | <dt>C:</dt> | |||
that congestion control information MUST be returned to it | <dd>Congestion Control bit. If set, then the sender is requiring | |||
periodically as defined in <xref target="sec-congestion-information"></xref>.</t | that congestion control information <bcp14>MUST</bcp14> be returned to it | |||
> | periodically, as defined in <xref target="sec-congestion-information" format="de | |||
<t hangText="D:"><vspace/>Don't Fragment bit. If set, indicates the sender of th | fault"/>.</dd> | |||
e notify | <dt>D:</dt> | |||
<dd>Don't Fragment bit. If set, it indicates the sender of the notif | ||||
y | ||||
message does not support receiving packet fragments (i.e., inner | message does not support receiving packet fragments (i.e., inner | |||
packets MUST be sent using a single <spanx style='verb'>Data Block</spanx>). Thi | packets <bcp14>MUST</bcp14> be sent using a single <tt>Data Block</tt>). This va | |||
s value only | lue only | |||
applies to what the sender is capable of receiving; the sender MAY | applies to what the sender is capable of receiving; the sender <bcp14>MAY</bcp14 | |||
> | ||||
still send packet fragments unless similarly restricted by the | still send packet fragments unless similarly restricted by the | |||
receiver in its USE_AGGFRAG notification.</t> | receiver in its USE_AGGFRAG notification.</dd> | |||
</list></t> | </dl> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>ESP Next Header Value</name> | ||||
<section title="IANA Considerations"> | <t>IANA has | |||
<section title="ESP Next Header Value"> | allocated an IP protocol number from the "Protocol Numbers - Assigned | |||
<t>Per the INT area directors direction, this document requests IANA | Internet Protocol Numbers" registry as follows.</t> | |||
allocate an IP protocol number from "Protocol Numbers - Assigned | <dl newline="false" spacing="compact"> | |||
Internet Protocol Numbers" registry</t> | <dt>Decimal:</dt> | |||
<dd>144</dd> | ||||
<t><list style="hanging"> | <dt>Keyword:</dt> | |||
<t hangText="Decimal:"><vspace/>144</t> | <dd>AGGFRAG</dd> | |||
<t hangText="Keyword:"><vspace/>AGGFRAG</t> | <dt>Protocol:</dt> | |||
<t hangText="Protocol:"><vspace/>AGGFRAG encapsulation payload for ESP (TEMPORAR | <dd>AGGFRAG encapsulation payload for ESP</dd> | |||
Y - registered 2022-08-26, document sent to IESG Evaluation 2022-07-14)</t> | <dt>Reference:</dt> | |||
<t hangText="Reference:"><vspace/>This document</t> | <dd>RFC 9347</dd> | |||
</list></t> | </dl> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>AGGFRAG_PAYLOAD Sub-Types</name> | ||||
<section title="AGGFRAG_PAYLOAD Sub-Type Registry"> | <t>IANA has created a registry called "AGGFRAG_PAYLOAD | |||
<t>This document requests IANA create a registry called "AGGFRAG_PAYLOAD | Sub-Types" under a new category named "ESP AGGFRAG_PAYLOAD". | |||
Sub-Type Registry" under a new category named "ESP AGGFRAG_PAYLOAD Parameters". | ||||
The registration policy for this registry is "Expert Review" | The registration policy for this registry is "Expert Review" | |||
(<xref target="RFC8126"/> and <xref target="RFC7120"/>).</t> | <xref target="RFC8126" format="default"/> <xref target="RFC7120" format="default | |||
"/>.</t> | ||||
<t><list style="hanging"> | <dl newline="false" spacing="compact"> | |||
<t hangText="Name:"><vspace/>AGGFRAG_PAYLOAD Sub-Type Registry</t> | <dt>Name:</dt> | |||
<t hangText="Description:"><vspace/>AGGFRAG_PAYLOAD Payload Formats.</t> | <dd>AGGFRAG_PAYLOAD Sub-Types</dd> | |||
<t hangText="Reference:"><vspace/>This document</t> | <dt>Description:</dt> | |||
</list></t> | <dd>AGGFRAG_PAYLOAD Payload Formats</dd> | |||
<dt>Reference:</dt> | ||||
<t>This initial content for this registry is as follows:</t> | <dd>RFC 9347</dd> | |||
</dl> | ||||
<figure><artwork><![CDATA[ | <t>This initial content for this registry is as follows:</t> | |||
Sub-Type Name Reference | <table align="center"> | |||
0 Non-Congestion Control Format This document | <name>AGGFRAG_PAYLOAD Sub-Types</name> | |||
1 Congestion Control Format This document | <thead> | |||
3-255 Reserved | <tr> | |||
]]></artwork></figure> | <th>Sub-Type</th> | |||
<th>Name</th> | ||||
</section> | <th>Reference</th> | |||
</tr> | ||||
<section title="USE_AGGFRAG Notify Message Status Type"> | </thead> | |||
<t>This document requests a status type USE_AGGFRAG be allocated from | <tbody> | |||
<tr> | ||||
<td>0</td> | ||||
<td>Non-Congestion-Control Format</td> | ||||
<td>RFC 9347</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1</td> | ||||
<td>Congestion Control Format</td> | ||||
<td>RFC 9347</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3-255</td> | ||||
<td>Reserved</td> | ||||
<td></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>USE_AGGFRAG Notify Message Status Type</name> | ||||
<t>IANA has allocated a status type USE_AGGFRAG from | ||||
the "IKEv2 Notify Message Types - Status Types" registry.</t> | the "IKEv2 Notify Message Types - Status Types" registry.</t> | |||
<dl newline="false" spacing="compact"> | ||||
<t><list style="hanging"> | <dt>Decimal:</dt> | |||
<t hangText="Decimal:"><vspace/>16442</t> | <dd>16442</dd> | |||
<t hangText="Name:"><vspace/>USE_AGGFRAG</t> | <dt>Name:</dt> | |||
<t hangText="Reference:"><vspace/>This document</t> | <dd>USE_AGGFRAG</dd> | |||
</list></t> | <dt>Reference:</dt> | |||
<dd>RFC 9347</dd> | ||||
</section> | </dl> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Implementation Status"> | <name>Security Considerations</name> | |||
<t>[ RFC Ed.: please remove this entire section as well as the reference to | <t>This document describes an aggregation and fragmentation mechanism to | |||
RFC7942 prior to publication. ]</t> | ||||
<t>[Section added during IESG review to help with evaluation]</t> | ||||
<t>This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/> | ||||
. The | ||||
description of implementations in this section is intended to assist | ||||
the IETF in its decision processes in progressing drafts to RFCs. | ||||
Please note that the listing of any individual implementation here | ||||
does not imply endorsement by the IETF. This is not intended as, and | ||||
must not be construed to be, a catalog of available implementations | ||||
or their features. Readers are advised to note that other | ||||
implementations may exist.</t> | ||||
<t>According to RFC 7942, "this will allow reviewers and working groups | ||||
to assign due consideration to documents that have the benefit of | ||||
running code, which may serve as evidence of valuable experimentation | ||||
and feedback that have made the implemented protocols more mature. It | ||||
is up to the individual working groups to use this information as | ||||
they see fit".</t> | ||||
<t>Currently the author and contributors are aware of 1 full and completed | ||||
implementation and 1 underway implementation of IP-TFS as defined in | ||||
this document. These 2 are described below.</t> | ||||
<section title="Reference Implementation - VPP + Strongswan"> | ||||
<t>The entire IP-TFS protocol including congestion control mode has been | ||||
implemented in VPP (Vector Packet Processor), and published to github | ||||
with an Open Source (Apache 2) License. VPP is a highly efficient | ||||
forwarding plane implemented in user-space utlizing direct control | ||||
and polling of physical devices to provide high speed low-latency | ||||
forwarding in Linux. By pinning packet processing threads directly to | ||||
CPU cores for their exclusive use a high degree of control is given | ||||
to the protocol designer.</t> | ||||
<t>The IKEv2 additions were implemented in Strongswan and are licensed | ||||
using the GNU public license used by the Strongswan project.</t> | ||||
<t>Finally, an extensive automation suite was also created and is | ||||
included with the open source implementation, which tests the | ||||
functionality as well as the performance of the implementation, and | ||||
most importantly verifies, through precise timing tracing and | ||||
time-stamping, the decoupling of the users offered load from the | ||||
tunnel packets (i.e., the Traffic Flow Security).</t> | ||||
<t>The verification process utilized the <eref target="https://trex-tgn.cisco.co | ||||
m/">TREX</eref> packet generator for high | ||||
bandwidth testing as well as other tools such as iperf. The test | ||||
hardware included large servers with 10GE, 40GE and 100GE network | ||||
interfaces, as well as small SoC (system on a chip) network | ||||
appliances, and also cloud deployments.</t> | ||||
<t>Tested IP-TFS tunnel rates ranged from 10M all the way to 10GE on the | ||||
small network appliance, for the large servers multiple 10GE tunnel | ||||
rates were tested as well.</t> | ||||
<t>Offered loads included partial, full and oversubscribed bandwidths | ||||
from various flow types consisting of small packets, large packets, | ||||
random sized packets, sequential sized packets, and multiple IMIX | ||||
variations sized flows. Timing analysis was done with variable rate | ||||
traffic, impulse traffic and random bursty traffic.</t> | ||||
<t>The quality of the reference implementation should be considered | ||||
production level as it underwent extensive testing and verification.</t> | ||||
<t>The organization responsible for this implementation is LabN | ||||
Consulting, L.L.C.</t> | ||||
<t>URLs to the implementation follow.</t> | ||||
<t><list style="symbols"> | ||||
<t><eref target="https://github.com/LabNConsulting/vpp/tree/labn-stable/2009-pub | ||||
lic">VPP+IPTFS</eref>, <eref target="https://github.com/LabNConsulting/vpp/tree/ | ||||
labn-stable/2009-public/src/plugins/iptfs">iptfs plugin</eref></t> | ||||
<t><eref target="https://github.com/LabNConsulting/strongswan/tree/labn-5.8-publ | ||||
ic">Strongswan IKEv2</eref></t> | ||||
</list></t> | ||||
<t>The implementation was last updated April, 2021.</t> | ||||
</section> | ||||
<section title="In Progress Linux Kernel Implementation."> | ||||
<t>A second open source implementation has begun by LabN Consulting | ||||
L.L.C., within the Linux IPsec xfrm stack. Development has also been | ||||
coordinated with the Linux IPsec community, and was being | ||||
worked by the same during the most recent IETF 114 hackathon.</t> | ||||
<t>Currently the quality is alpha level with aggregation-only complete and | ||||
fragmentation support underway with congestion control to follow.</t> | ||||
<t>This implementation is licensed under the GNU public license and can | ||||
be found at the following URLs</t> | ||||
<t><list style="symbols"> | ||||
<t>development environment: <eref target="https://github.com/LabNConsulting/iptf | ||||
s-dev"/></t> | ||||
<t>linux kernel source: <eref target="https://github.com/LabNConsulting/iptfs-li | ||||
nux"/></t> | ||||
<t>iproute2 source: <eref target="https://github.com/LabNConsulting/iptfs-iprout | ||||
e2"/></t> | ||||
</list></t> | ||||
</section> | ||||
</section> | ||||
<section title="Security Considerations"> | ||||
<t>This document describes an aggregation and fragmentation mechanism to | ||||
efficiently implement TFC for IP traffic. This approach is expected to reduce | efficiently implement TFC for IP traffic. This approach is expected to reduce | |||
the efficacy of traffic analysis on IPsec communication. Other than | the efficacy of traffic analysis on IPsec communication. 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 <xref target="RFC4303"/> and <xref target="RFC72 96"/> and so their | utilizes the security protocols <xref target="RFC4303" format="default"/> and <x ref target="RFC7296" format="default"/>, and so their | |||
security considerations apply to IP-TFS as well.</t> | security considerations apply to IP-TFS as well.</t> | |||
<t>As noted in <xref target="sec-ecn-support" format="default"/>, the ECN | ||||
<t>As noted in <xref target="sec-ecn-support"></xref>, the ECN bits are not prot | bits are not protected by IPsec and | |||
ected by IPsec and | thus may constitute a covert channel. For this reason, ECN use <bcp14>SHOULD | |||
thus may constitute a covert channel. For this reason, ECN use SHOULD | NOT</bcp14> be enabled by default.</t> | |||
NOT be enabled by default.</t> | <t>As noted previously in <xref target="sec-congestion-controlled-mode" fo | |||
rmat="default"/>, for TFC to be | ||||
<t>As noted previously in <xref target="sec-congestion-controlled-mode"></xref>, | ||||
for TFC to be | ||||
maintained, the encapsulated traffic flow should not be | maintained, the encapsulated traffic flow should not be | |||
affecting network congestion in a predictable way, and if it would be, | affecting network congestion in a predictable way, and if it would be, | |||
then non-congestion-controlled mode use should be considered instead.</t> | then non-congestion-controlled mode use should be considered instead.</t> | |||
</section> | ||||
</middle> | ||||
<back> | ||||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | ||||
119.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | ||||
303.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
296.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
174.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
</section> | <reference anchor="AppCrypt"> | |||
<front> | ||||
</middle> | <title>Applied Cryptography: Protocols, Algorithms, and Source Code | |||
<back> | in C</title> | |||
<references title="Normative References"> | <author initials="B." surname="Schneier" fullname="Bruce Schneier"> | |||
<organization/> | ||||
<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'> | </author> | |||
<front> | <date year="1996"/> | |||
<title>Key words for use in RFCs to Indicate Requirement Levels</title> | </front> | |||
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></ | </reference> | |||
author> | ||||
<date year='1997' month='March' /> | ||||
<abstract><t>In many standards track documents several words are used to signify | ||||
the requirements in the specification. These words are often capitalized. This | ||||
document defines these words as they should be interpreted in IETF documents. | ||||
This document specifies an Internet Best Current Practices for the Internet Comm | ||||
unity, and requests discussion and suggestions for improvements.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='14'/> | ||||
<seriesInfo name='RFC' value='2119'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC2119'/> | ||||
</reference> | ||||
<reference anchor='RFC4303' target='https://www.rfc-editor.org/info/rfc4303'> | ||||
<front> | ||||
<title>IP Encapsulating Security Payload (ESP)</title> | ||||
<author initials='S.' surname='Kent' fullname='S. Kent'><organization /></author | ||||
> | ||||
<date year='2005' month='December' /> | ||||
<abstract><t>This document describes an updated version of the Encapsulating Sec | ||||
urity Payload (ESP) protocol, which is designed to provide a mix of security ser | ||||
vices in IPv4 and IPv6. ESP is used to provide confidentiality, data origin aut | ||||
hentication, connectionless integrity, an anti-replay service (a form of partial | ||||
sequence integrity), and limited traffic flow confidentiality. This document o | ||||
bsoletes RFC 2406 (November 1998). [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='4303'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC4303'/> | ||||
</reference> | ||||
<reference anchor='RFC7296' target='https://www.rfc-editor.org/info/rfc7296'> | ||||
<front> | ||||
<title>Internet Key Exchange Protocol Version 2 (IKEv2)</title> | ||||
<author initials='C.' surname='Kaufman' fullname='C. Kaufman'><organization /></ | ||||
author> | ||||
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'><organization /></ | ||||
author> | ||||
<author initials='Y.' surname='Nir' fullname='Y. Nir'><organization /></author> | ||||
<author initials='P.' surname='Eronen' fullname='P. Eronen'><organization /></au | ||||
thor> | ||||
<author initials='T.' surname='Kivinen' fullname='T. Kivinen'><organization /></ | ||||
author> | ||||
<date year='2014' month='October' /> | ||||
<abstract><t>This document describes version 2 of the Internet Key Exchange (IKE | ||||
) protocol. IKE is a component of IPsec used for performing mutual authenticati | ||||
on and establishing and maintaining Security Associations (SAs). This document | ||||
obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to | ||||
be an Internet Standard.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='STD' value='79'/> | ||||
<seriesInfo name='RFC' value='7296'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7296'/> | ||||
</reference> | ||||
<reference anchor='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></auth | ||||
or> | ||||
<date year='2017' month='May' /> | ||||
<abstract><t>RFC 2119 specifies common key words that may be used in protocol s | ||||
pecifications. This document aims to reduce the ambiguity by clarifying that on | ||||
ly UPPERCASE usage of the key words have the defined special meanings.</t></abs | ||||
tract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='14'/> | ||||
<seriesInfo name='RFC' value='8174'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8174'/> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<reference anchor="AppCrypt"> | ||||
<front> | ||||
<title>Applied Cryptography: Protocols, Algorithms, and Source Code in C</title> | ||||
<author initials='B.' surname='Schneier' fullname='Bruce Schneier'><organization | ||||
/></author> | ||||
<date day="1" month="11" year="2017"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor='RFC0791' target='https://www.rfc-editor.org/info/rfc791'> | ||||
<front> | ||||
<title>Internet Protocol</title> | ||||
<author initials='J.' surname='Postel' fullname='J. Postel'><organization /></au | ||||
thor> | ||||
<date year='1981' month='September' /> | ||||
</front> | ||||
<seriesInfo name='STD' value='5'/> | ||||
<seriesInfo name='RFC' value='791'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC0791'/> | ||||
</reference> | ||||
<reference anchor='RFC1191' target='https://www.rfc-editor.org/info/rfc1191'> | ||||
<front> | ||||
<title>Path MTU discovery</title> | ||||
<author initials='J.' surname='Mogul' fullname='J. Mogul'><organization /></auth | ||||
or> | ||||
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></ | ||||
author> | ||||
<date year='1990' month='November' /> | ||||
<abstract><t>This memo describes a technique for dynamically discovering the max | ||||
imum transmission unit (MTU) of an arbitrary internet path. It specifies a smal | ||||
l change to the way routers generate one type of ICMP message. For a path that | ||||
passes through a router that has not been so changed, this technique might not d | ||||
iscover the correct Path MTU, but it will always choose a Path MTU as accurate a | ||||
s, and in many cases more accurate than, the Path MTU that would be chosen by cu | ||||
rrent practice. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='1191'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC1191'/> | ||||
</reference> | ||||
<reference anchor='RFC2474' target='https://www.rfc-editor.org/info/rfc2474'> | ||||
<front> | ||||
<title>Definition of the Differentiated Services Field (DS Field) in the IPv4 an | ||||
d IPv6 Headers</title> | ||||
<author initials='K.' surname='Nichols' fullname='K. Nichols'><organization /></ | ||||
author> | ||||
<author initials='S.' surname='Blake' fullname='S. Blake'><organization /></auth | ||||
or> | ||||
<author initials='F.' surname='Baker' fullname='F. Baker'><organization /></auth | ||||
or> | ||||
<author initials='D.' surname='Black' fullname='D. Black'><organization /></auth | ||||
or> | ||||
<date year='1998' month='December' /> | ||||
<abstract><t>This document defines the IP header field, called the DS (for diffe | ||||
rentiated services) field. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='2474'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC2474'/> | ||||
</reference> | ||||
<reference anchor='RFC2914' target='https://www.rfc-editor.org/info/rfc2914'> | ||||
<front> | ||||
<title>Congestion Control Principles</title> | ||||
<author initials='S.' surname='Floyd' fullname='S. Floyd'><organization /></auth | ||||
or> | ||||
<date year='2000' month='September' /> | ||||
<abstract><t>The goal of this document is to explain the need for congestion con | ||||
trol in the Internet, and to discuss what constitutes correct congestion control | ||||
. This document specifies an Internet Best Current Practices for the Internet C | ||||
ommunity, and requests discussion and suggestions for improvements.</t></abstrac | ||||
t> | ||||
</front> | ||||
<seriesInfo name='BCP' value='41'/> | ||||
<seriesInfo name='RFC' value='2914'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC2914'/> | ||||
</reference> | ||||
<reference anchor='RFC3168' target='https://www.rfc-editor.org/info/rfc3168'> | ||||
<front> | ||||
<title>The Addition of Explicit Congestion Notification (ECN) to IP</title> | ||||
<author initials='K.' surname='Ramakrishnan' fullname='K. Ramakrishnan'><organiz | ||||
ation /></author> | ||||
<author initials='S.' surname='Floyd' fullname='S. Floyd'><organization /></auth | ||||
or> | ||||
<author initials='D.' surname='Black' fullname='D. Black'><organization /></auth | ||||
or> | ||||
<date year='2001' month='September' /> | ||||
<abstract><t>This memo specifies the incorporation of ECN (Explicit Congestion N | ||||
otification) to TCP and IP, including ECN's use of two bits in the IP header. [ | ||||
STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='3168'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC3168'/> | ||||
</reference> | ||||
<reference anchor='RFC4301' target='https://www.rfc-editor.org/info/rfc4301'> | ||||
<front> | ||||
<title>Security Architecture for the Internet Protocol</title> | ||||
<author initials='S.' surname='Kent' fullname='S. Kent'><organization /></author | ||||
> | ||||
<author initials='K.' surname='Seo' fullname='K. Seo'><organization /></author> | ||||
<date year='2005' month='December' /> | ||||
<abstract><t>This document describes an updated version of the "Security Ar | ||||
chitecture for IP", which is designed to provide security services for traf | ||||
fic at the IP layer. This document obsoletes RFC 2401 (November 1998). [STANDA | ||||
RDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='4301'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC4301'/> | ||||
</reference> | ||||
<reference anchor='RFC4342' target='https://www.rfc-editor.org/info/rfc4342'> | ||||
<front> | ||||
<title>Profile for Datagram Congestion Control Protocol (DCCP) Congestion Contro | ||||
l ID 3: TCP-Friendly Rate Control (TFRC)</title> | ||||
<author initials='S.' surname='Floyd' fullname='S. Floyd'><organization /></auth | ||||
or> | ||||
<author initials='E.' surname='Kohler' fullname='E. Kohler'><organization /></au | ||||
thor> | ||||
<author initials='J.' surname='Padhye' fullname='J. Padhye'><organization /></au | ||||
thor> | ||||
<date year='2006' month='March' /> | ||||
<abstract><t>This document contains the profile for Congestion Control Identifie | ||||
r 3, TCP-Friendly Rate Control (TFRC), in the Datagram Congestion Control Protoc | ||||
ol (DCCP). CCID 3 should be used by senders that want a TCP-friendly sending ra | ||||
te, possibly with Explicit Congestion Notification (ECN), while minimizing abrup | ||||
t rate changes. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='4342'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC4342'/> | ||||
</reference> | ||||
<reference anchor='RFC4821' target='https://www.rfc-editor.org/info/rfc4821'> | ||||
<front> | ||||
<title>Packetization Layer Path MTU Discovery</title> | ||||
<author initials='M.' surname='Mathis' fullname='M. Mathis'><organization /></au | ||||
thor> | ||||
<author initials='J.' surname='Heffner' fullname='J. Heffner'><organization /></ | ||||
author> | ||||
<date year='2007' month='March' /> | ||||
<abstract><t>This document describes a robust method for Path MTU Discovery (PMT | ||||
UD) that relies on TCP or some other Packetization Layer to probe an Internet pa | ||||
th with progressively larger packets. This method is described as an extension | ||||
to RFC 1191 and RFC 1981, which specify ICMP-based Path MTU Discovery for IP ver | ||||
sions 4 and 6, respectively. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='4821'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC4821'/> | ||||
</reference> | ||||
<reference anchor='RFC5348' target='https://www.rfc-editor.org/info/rfc5348'> | ||||
<front> | ||||
<title>TCP Friendly Rate Control (TFRC): Protocol Specification</title> | ||||
<author initials='S.' surname='Floyd' fullname='S. Floyd'><organization /></auth | ||||
or> | ||||
<author initials='M.' surname='Handley' fullname='M. Handley'><organization /></ | ||||
author> | ||||
<author initials='J.' surname='Padhye' fullname='J. Padhye'><organization /></au | ||||
thor> | ||||
<author initials='J.' surname='Widmer' fullname='J. Widmer'><organization /></au | ||||
thor> | ||||
<date year='2008' month='September' /> | ||||
<abstract><t>This document specifies TCP Friendly Rate Control (TFRC). TFRC is | ||||
a congestion control mechanism for unicast flows operating in a best-effort Inte | ||||
rnet environment. It is reasonably fair when competing for bandwidth with TCP f | ||||
lows, but has a much lower variation of throughput over time compared with TCP, | ||||
making it more suitable for applications such as streaming media where a relativ | ||||
ely smooth sending rate is of importance.</t><t>This document obsoletes RFC 3448 | ||||
and updates RFC 4342. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='5348'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC5348'/> | ||||
</reference> | ||||
<reference anchor='RFC6040' target='https://www.rfc-editor.org/info/rfc6040'> | ||||
<front> | ||||
<title>Tunnelling of Explicit Congestion Notification</title> | ||||
<author initials='B.' surname='Briscoe' fullname='B. Briscoe'><organization /></ | ||||
author> | ||||
<date year='2010' month='November' /> | ||||
<abstract><t>This document redefines how the explicit congestion notification (E | ||||
CN) field of the IP header should be constructed on entry to and exit from any I | ||||
P-in-IP tunnel. On encapsulation, it updates RFC 3168 to bring all IP-in-IP tun | ||||
nels (v4 or v6) into line with RFC 4301 IPsec ECN processing. On decapsulation, | ||||
it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unus | ||||
ed combinations of inner and outer headers. The new rules ensure the ECN field | ||||
is correctly propagated across a tunnel whether it is used to signal one or two | ||||
severity levels of congestion; whereas before, only one severity level was suppo | ||||
rted. Tunnel endpoints can be updated in any order without affecting pre-existi | ||||
ng uses of the ECN field, thus ensuring backward compatibility. Nonetheless, op | ||||
erators wanting to support two severity levels (e.g., for pre-congestion notific | ||||
ation -- PCN) can require compliance with this new specification. A thorough an | ||||
alysis of the reasoning for these changes and the implications is included. In | ||||
the unlikely event that the new rules do not meet a specific need, RFC 4774 give | ||||
s guidance on designing alternate ECN semantics, and this document extends that | ||||
to include tunnelling issues. [STANDARDS-TRACK]</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='6040'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC6040'/> | ||||
</reference> | ||||
<reference anchor='RFC7120' target='https://www.rfc-editor.org/info/rfc7120'> | ||||
<front> | ||||
<title>Early IANA Allocation of Standards Track Code Points</title> | ||||
<author initials='M.' surname='Cotton' fullname='M. Cotton'><organization /></au | ||||
thor> | ||||
<date year='2014' month='January' /> | ||||
<abstract><t>This memo describes the process for early allocation of code points | ||||
by IANA from registries for which "Specification Required", "RFC | ||||
Required", "IETF Review", or "Standa | ||||
rds Action" policies apply. This process can be used to alleviate the prob | ||||
lem where code point allocation is needed to facilitate desired or required impl | ||||
ementation and deployment experience prior to publication of an RFC, which would | ||||
normally trigger code point allocation. The procedures in this document are in | ||||
tended to apply only to IETF Stream documents.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='100'/> | ||||
<seriesInfo name='RFC' value='7120'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7120'/> | ||||
</reference> | ||||
<reference anchor='RFC7510' target='https://www.rfc-editor.org/info/rfc7510'> | ||||
<front> | ||||
<title>Encapsulating MPLS in UDP</title> | ||||
<author initials='X.' surname='Xu' fullname='X. Xu'><organization /></author> | ||||
<author initials='N.' surname='Sheth' fullname='N. Sheth'><organization /></auth | ||||
or> | ||||
<author initials='L.' surname='Yong' fullname='L. Yong'><organization /></author | ||||
> | ||||
<author initials='R.' surname='Callon' fullname='R. Callon'><organization /></au | ||||
thor> | ||||
<author initials='D.' surname='Black' fullname='D. Black'><organization /></auth | ||||
or> | ||||
<date year='2015' month='April' /> | ||||
<abstract><t>This document specifies an IP-based encapsulation for MPLS, called | ||||
MPLS-in-UDP for situations where UDP (User Datagram Protocol) encapsulation is p | ||||
referred to direct use of MPLS, e.g., to enable UDP-based ECMP (Equal-Cost Multi | ||||
path) or link aggregation. The MPLS- in-UDP encapsulation technology must only | ||||
be deployed within a single network (with a single network operator) or networks | ||||
of an adjacent set of cooperating network operators where traffic is managed to | ||||
avoid congestion, rather than over the Internet where congestion control is req | ||||
uired. Usage restrictions apply to MPLS-in-UDP usage for traffic that is not co | ||||
ngestion controlled and to UDP zero checksum usage with IPv6.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7510'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7510'/> | ||||
</reference> | ||||
<reference anchor='RFC7893' target='https://www.rfc-editor.org/info/rfc7893'> | ||||
<front> | ||||
<title>Pseudowire Congestion Considerations</title> | ||||
<author initials='Y(J)' surname='Stein' fullname='Y(J) Stein'><organization /></ | ||||
author> | ||||
<author initials='D.' surname='Black' fullname='D. Black'><organization /></auth | ||||
or> | ||||
<author initials='B.' surname='Briscoe' fullname='B. Briscoe'><organization /></ | ||||
author> | ||||
<date year='2016' month='June' /> | ||||
<abstract><t>Pseudowires (PWs) have become a common mechanism for tunneling traf | ||||
fic and may be found in unmanaged scenarios competing for network resources both | ||||
with other PWs and with non-PW traffic, such as TCP/IP flows. Thus, it is wort | ||||
hwhile specifying under what conditions such competition is acceptable, i.e., th | ||||
e PW traffic does not significantly harm other traffic or contribute more than i | ||||
t should to congestion. We conclude that PWs transporting responsive traffic be | ||||
have as desired without the need for additional mechanisms. For inelastic PWs ( | ||||
such as Time Division Multiplexing (TDM) PWs), we derive a bound under which suc | ||||
h PWs consume no more network capacity than a TCP flow. For TDM PWs, we find th | ||||
at the level of congestion at which the PW can no longer deliver acceptable TDM | ||||
service is never significantly greater, and is typically much lower, than this b | ||||
ound. Therefore, as long as the PW is shut down when it can no longer deliver ac | ||||
ceptable TDM service, it will never do significantly more harm than even a singl | ||||
e TCP flow. If the TDM service does not automatically shut down, a mechanism to | ||||
block persistently unacceptable TDM pseudowires is required.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='RFC' value='7893'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7893'/> | ||||
</reference> | ||||
<reference anchor='RFC7942' target='https://www.rfc-editor.org/info/rfc7942'> | ||||
<front> | ||||
<title>Improving Awareness of Running Code: The Implementation Status Section</t | ||||
itle> | ||||
<author initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></ | ||||
author> | ||||
<author initials='A.' surname='Farrel' fullname='A. Farrel'><organization /></au | ||||
thor> | ||||
<date year='2016' month='July' /> | ||||
<abstract><t>This document describes a simple process that allows authors of Int | ||||
ernet-Drafts to record the status of known implementations by including an Imple | ||||
mentation Status section. This will allow reviewers and working groups to assig | ||||
n due consideration to documents that have the benefit of running code, which ma | ||||
y serve as evidence of valuable experimentation and feedback that have made the | ||||
implemented protocols more mature.</t><t>This process is not mandatory. Authors | ||||
of Internet-Drafts are encouraged to consider using the process for their docum | ||||
ents, and working groups are invited to think about applying the process to all | ||||
of their protocol specifications. This document obsoletes RFC 6982, advancing i | ||||
t to a Best Current Practice.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='205'/> | ||||
<seriesInfo name='RFC' value='7942'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC7942'/> | ||||
</reference> | ||||
<reference anchor='RFC8084' target='https://www.rfc-editor.org/info/rfc8084'> | ||||
<front> | ||||
<title>Network Transport Circuit Breakers</title> | ||||
<author initials='G.' surname='Fairhurst' fullname='G. Fairhurst'><organization | ||||
/></author> | ||||
<date year='2017' month='March' /> | ||||
<abstract><t>This document explains what is meant by the term "network tran | ||||
sport Circuit Breaker". It describes the need for | ||||
Circuit Breakers (CBs) for network tunnels and applications when using non-cong | ||||
estion- controlled traffic and explains where CBs are, and are not, needed. It a | ||||
lso defines requirements for building a CB and the expected outcomes of using a | ||||
CB within the Internet.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='208'/> | ||||
<seriesInfo name='RFC' value='8084'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8084'/> | ||||
</reference> | ||||
<reference anchor='RFC8126' target='https://www.rfc-editor.org/info/rfc8126'> | ||||
<front> | ||||
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title> | ||||
<author initials='M.' surname='Cotton' fullname='M. Cotton'><organization /></au | ||||
thor> | ||||
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></auth | ||||
or> | ||||
<author initials='T.' surname='Narten' fullname='T. Narten'><organization /></au | ||||
thor> | ||||
<date year='2017' month='June' /> | ||||
<abstract><t>Many protocols make use of points of extensibility that use constan | ||||
ts to identify various protocol parameters. To ensure that the values in these | ||||
fields do not have conflicting uses and to promote interoperability, their alloc | ||||
ations are often coordinated by a central record keeper. For IETF protocols, th | ||||
at role is filled by the Internet Assigned Numbers Authority (IANA).</t><t>To ma | ||||
ke assignments in a given registry prudently, guidance describing the conditions | ||||
under which new values should be assigned, as well as when and how modification | ||||
s to existing values can be made, is needed. This document defines a framework | ||||
for the documentation of these guidelines by specification authors, in order to | ||||
assure that the provided guidance for the IANA Considerations is clear and addre | ||||
sses the various issues that are likely in the operation of a registry.</t><t>Th | ||||
is is the third edition of this document; it obsoletes RFC 5226.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='BCP' value='26'/> | ||||
<seriesInfo name='RFC' value='8126'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8126'/> | ||||
</reference> | ||||
<reference anchor='RFC8200' target='https://www.rfc-editor.org/info/rfc8200'> | ||||
<front> | ||||
<title>Internet Protocol, Version 6 (IPv6) Specification</title> | ||||
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></ | ||||
author> | ||||
<author initials='R.' surname='Hinden' fullname='R. Hinden'><organization /></au | ||||
thor> | ||||
<date year='2017' month='July' /> | ||||
<abstract><t>This document specifies version 6 of the Internet Protocol (IPv6). | ||||
It obsoletes RFC 2460.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='STD' value='86'/> | ||||
<seriesInfo name='RFC' value='8200'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8200'/> | ||||
</reference> | ||||
<reference anchor='RFC8201' target='https://www.rfc-editor.org/info/rfc8201'> | ||||
<front> | ||||
<title>Path MTU Discovery for IP version 6</title> | ||||
<author initials='J.' surname='McCann' fullname='J. McCann'><organization /></au | ||||
thor> | ||||
<author initials='S.' surname='Deering' fullname='S. Deering'><organization /></ | ||||
author> | ||||
<author initials='J.' surname='Mogul' fullname='J. Mogul'><organization /></auth | ||||
or> | ||||
<author initials='R.' surname='Hinden' fullname='R. Hinden' role='editor'><organ | ||||
ization /></author> | ||||
<date year='2017' month='July' /> | ||||
<abstract><t>This document describes Path MTU Discovery (PMTUD) for IP version 6 | ||||
. It is largely derived from RFC 1191, which describes Path MTU Discovery for IP | ||||
version 4. It obsoletes RFC 1981.</t></abstract> | ||||
</front> | ||||
<seriesInfo name='STD' value='87'/> | ||||
<seriesInfo name='RFC' value='8201'/> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8201'/> | ||||
</reference> | ||||
<reference anchor='RFC8229' target='https://www.rfc-editor.org/info/rfc8229'> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0 | |||
<front> | 791.xml"/> | |||
<title>TCP Encapsulation of IKE and IPsec Packets</title> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1 | |||
<author initials='T.' surname='Pauly' fullname='T. Pauly'><organization /></auth | 191.xml"/> | |||
or> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
<author initials='S.' surname='Touati' fullname='S. Touati'><organization /></au | 474.xml"/> | |||
thor> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
<author initials='R.' surname='Mantha' fullname='R. Mantha'><organization /></au | 914.xml"/> | |||
thor> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3 | |||
<date year='2017' month='August' /> | 168.xml"/> | |||
<abstract><t>This document describes a method to transport Internet Key Exchange | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
Protocol (IKE) and IPsec packets over a TCP connection for traversing network m | 301.xml"/> | |||
iddleboxes that may block IKE negotiation over UDP. This method, referred to as | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
"TCP encapsulation", involves sending both IKE packets for Security A | 342.xml"/> | |||
ssociation establishment and Encapsulating Security Payload (ESP) packets over a | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
TCP connection. This method is intended to be used as a fallback option when I | 821.xml"/> | |||
KE cannot be negotiated over UDP.</t></abstract> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | |||
</front> | 348.xml"/> | |||
<seriesInfo name='RFC' value='8229'/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | |||
<seriesInfo name='DOI' value='10.17487/RFC8229'/> | 040.xml"/> | |||
</reference> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | |||
120.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
510.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
893.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
084.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
126.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
200.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
201.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
329.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
546.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
899.xml"/> | ||||
<reference anchor='RFC8546' target='https://www.rfc-editor.org/info/rfc8546'> | <reference anchor='RFC9349' target='https://www.rfc-editor.org/info/rfc9349'> | |||
<front> | <front> | |||
<title>The Wire Image of a Network Protocol</title> | <title>Definitions of Managed Objects for IP Traffic Flow Security</title> | |||
<author initials='B.' surname='Trammell' fullname='B. Trammell'><organization /> | <author initials="D." surname="Fedyk" fullname="Don Fedyk"> | |||
</author> | <organization>LabN Consulting, L.L.C.</organization> | |||
<author initials='M.' surname='Kuehlewind' fullname='M. Kuehlewind'><organizatio | </author> | |||
n /></author> | <author initials="E." surname="Kinzie" fullname="Eric Kinzie"> | |||
<date year='2019' month='April' /> | <organization>LabN Consulting, L.L.C.</organization> | |||
<abstract><t>This document defines the wire image, an abstraction of the informa | </author> | |||
tion available to an on-path non-participant in a networking protocol. This abs | <date month="January" year="2023"/> | |||
traction is intended to shed light on the implications that increased encryption | ||||
has for network functions that use the wire image.</t></abstract> | ||||
</front> | </front> | |||
<seriesInfo name='RFC' value='8546'/> | <seriesInfo name="RFC" value="9349"/> | |||
<seriesInfo name='DOI' value='10.17487/RFC8546'/> | <seriesInfo name="DOI" value="10.17487/RFC9349"/> | |||
</reference> | </reference> | |||
<reference anchor='RFC8899' target='https://www.rfc-editor.org/info/rfc8899'> | <reference anchor='RFC9348' target='https://www.rfc-editor.org/info/rfc9348'> | |||
<front> | <front> | |||
<title>Packetization Layer Path MTU Discovery for Datagram Transports</title> | <title>A YANG Data Model for IP Traffic Flow Security</title> | |||
<author initials='G.' surname='Fairhurst' fullname='G. Fairhurst'><organization | <author initials="D." surname="Fedyk" fullname="Don Fedyk"> | |||
/></author> | <organization>LabN Consulting, L.L.C.</organization> | |||
<author initials='T.' surname='Jones' fullname='T. Jones'><organization /></auth | </author> | |||
or> | <author initials="C." surname="Hopps" fullname="Christian Hopps"> | |||
<author initials='M.' surname='Tüxen' fullname='M. Tüxen'><organization /></auth | <organization>LabN Consulting, L.L.C.</organization> | |||
or> | </author> | |||
<author initials='I.' surname='Rüngeler' fullname='I. Rüngeler'><organization /> | <date month="January" year="2023"/> | |||
</author> | ||||
<author initials='T.' surname='Völker' fullname='T. Völker'><organization /></au | ||||
thor> | ||||
<date year='2020' month='September' /> | ||||
<abstract><t>This document specifies Datagram Packetization Layer Path MTU Disco | ||||
very (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for data | ||||
gram Packetization Layers (PLs). It allows a PL, or a datagram application that | ||||
uses a PL, to discover whether a network path can support the current size of da | ||||
tagram. This can be used to detect and reduce the message size when a sender en | ||||
counters a packet black hole. It can also probe a network path to discover wheth | ||||
er the maximum packet size can be increased. This provides functionality for da | ||||
tagram transports that is equivalent to the PLPMTUD specification for TCP, speci | ||||
fied in RFC 4821, which it updates. It also updates the UDP Usage Guidelines to | ||||
refer to this method for use with UDP datagrams and updates SCTP.</t><t>The docu | ||||
ment provides implementation notes for incorporating Datagram PMTUD into IETF da | ||||
tagram transports or applications that use datagram transports.</t><t>This speci | ||||
fication updates RFC 4960, RFC 4821, RFC 6951, RFC 8085, and RFC 8261.</t></abst | ||||
ract> | ||||
</front> | </front> | |||
<seriesInfo name='RFC' value='8899'/> | <seriesInfo name="RFC" value="9348"/> | |||
<seriesInfo name='DOI' value='10.17487/RFC8899'/> | <seriesInfo name="DOI" value="10.17487/RFC9348"/> | |||
</reference> | ||||
<reference anchor="I-D.ietf-ipsecme-mib-iptfs" target="https://www.ietf.org/arch | ||||
ive/id/draft-ietf-ipsecme-mib-iptfs-03.txt"> | ||||
<front> | ||||
<title>Definitions of Managed Objects for IP Traffic Flow Security</title> | ||||
<author fullname="Don Fedyk"> | ||||
<organization>LabN Consulting, L.L.C.</organization> | ||||
</author> | ||||
<author fullname="Eric Kinzie"> | ||||
<organization>LabN Consulting, L.L.C.</organization> | ||||
</author> | ||||
<date day="18" month="November" year="2021"/> | ||||
<abstract> | ||||
<t>This document describes managed objects for the the management of IP Tr | ||||
affic Flow Security additions to IKEv2 and IPsec. This document provides a read | ||||
only version of the objects defined in the YANG module for the same purpose.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-ipsecme-mib-iptfs-03"/> | ||||
</reference> | ||||
<reference anchor="I-D.ietf-ipsecme-yang-iptfs" target="https://www.ietf.org/arc | ||||
hive/id/draft-ietf-ipsecme-yang-iptfs-10.txt"> | ||||
<front> | ||||
<title>A YANG Data Model for IP Traffic Flow Security</title> | ||||
<author fullname="Don Fedyk"> | ||||
<organization>LabN Consulting, L.L.C.</organization> | ||||
</author> | ||||
<author fullname="Christian Hopps"> | ||||
<organization>LabN Consulting, L.L.C.</organization> | ||||
</author> | ||||
<date day="31" month="August" year="2022"/> | ||||
<abstract> | ||||
<t>This document describes a YANG module for the management of IP Traffic | ||||
Flow Security additions to IKEv2 and IPsec.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-ipsecme-yang-iptfs-10"/> | ||||
</reference> | </reference> | |||
</references> | ||||
<section title="Example of An Encapsulated IP Packet Flow" anchor="sec-example-o | </references> | |||
f-an-encapsulated-ip-packet-flow"> | </references> | |||
<t>Below, an example inner IP packet flow within the encapsulating tunnel | <section anchor="sec-example-of-an-encapsulated-ip-packet-flow" numbered="tr | |||
ue" toc="default"> | ||||
<name>Example of an Encapsulated IP Packet Flow</name> | ||||
<t>Below, an example inner IP packet flow within the encapsulating tunnel | ||||
packet stream is shown. Notice how encapsulated IP packets can start | packet stream is shown. Notice how encapsulated IP packets can start | |||
and end anywhere, and more than one or less than 1 may occur in a | and end anywhere, and more than one or less than one may occur in a | |||
single encapsulating packet.</t> | single encapsulating packet.</t> | |||
<figure anchor="sec-inner-and-outer-packet-flow"> | ||||
<figure title="Inner and outer packet flow" anchor="sec-inner-and-outer-packet-f | <name>Inner and Outer Packet Flow</name> | |||
low"><artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
Offset: 0 Offset: 100 Offset: 2000 Offset: 600 | Offset: 0 Offset: 100 Offset: 2000 Offset: 600 | |||
[ ESP1 (1404) ][ ESP2 (1404) ][ ESP3 (1404) ][ ESP4 (1404) ] | [ ESP1 (1404) ][ ESP2 (1404) ][ ESP3 (1404) ][ ESP4 (1404) ] | |||
[--750--][--750--][60][-240-][--3000----------------------][pad] | [--750--][--750--][60][-240-][--3000----------------------][pad] | |||
]]></artwork></figure> | ]]></artwork> | |||
</figure> | ||||
<t>Each outer encapsulating ESPupayload space is a fixed-size of 1404 | <t>Each outer encapsulating ESP space is a fixed size of 1404 | |||
octets the first 4 octets of which contains the AGGFRAG header. | octets, the first 4 octets of which contain the AGGFRAG header. | |||
The encapsulated IP packet flow (lengths include IP header and | The encapsulated IP packet flow (lengths include the IP header and | |||
payload) is as follows: a 750-octet packet, a 750-octet packet, a | payload) is as follows: a 750-octet packet, a 750-octet packet, a | |||
60-octet packet, a 240-octet packet, a 3000-octet packet.</t> | 60-octet packet, a 240-octet packet, and a 3000-octet packet.</t> | |||
<t>The <tt>BlockOffset</tt> values in the 4 AGGFRAG payload headers for th | ||||
<t>The <spanx style='verb'>BlockOffset</spanx> values in the 4 AGGFRAG payload h | is | |||
eaders for this | packet flow would thus be: 0, 100, 2000, and 600, respectively. The first | |||
packet flow would thus be: 0, 100, 2000, 600 respectively. The first | encapsulating packet (ESP1) has a zero <tt>BlockOffset</tt>, which points at the | |||
encapsulating packet (ESP1) has a zero <spanx style='verb'>BlockOffset</spanx> w | ||||
hich points at the | ||||
IP data block immediately following the AGGFRAG header. The following | IP data block immediately following the AGGFRAG header. The following | |||
packet's (ESP2) <spanx style='verb'>BlockOffset</spanx> points inward 100 octets to the start of the | packet's (ESP2) <tt>BlockOffset</tt> points inward 100 octets to the start of th e | |||
60-octet data block. The third encapsulating packet (ESP3) contains the | 60-octet data block. The third encapsulating packet (ESP3) contains the | |||
middle portion of the 3000-octet data block so the offset points past | middle portion of the 3000-octet data block, so the offset points past | |||
its end and into the fourth encapsulating packet. The fourth packet's | its end and into the fourth encapsulating packet. The fourth packet's | |||
(ESP4) offset is 600, pointing at the padding which follows the | (ESP4) offset is 600, pointing at the padding that follows the | |||
completion of the continued 3000-octet packet.</t> | completion of the continued 3000-octet packet.</t> | |||
</section> | ||||
</section> | <section anchor="sec-a-send-and-loss-event-rate-calculation" numbered="true" | |||
toc="default"> | ||||
<section title="A Send and Loss Event Rate Calculation" anchor="sec-a-send-and-l | <name>A Send and Loss Event Rate Calculation</name> | |||
oss-event-rate-calculation"> | <t>The current best practice indicates that congestion control <bcp14>SHOU | |||
<t>The current best practice indicates that congestion control SHOULD be | LD</bcp14> be | |||
done in a TCP-friendly way. A TCP-friendly congestion control algorithm | done in a TCP-friendly way. A TCP-friendly congestion control algorithm | |||
is described in <xref target="RFC5348"/>. For this IP-TFS use case (as with <xre f target="RFC4342"/>), the | is described in <xref target="RFC5348" format="default"/>. For this IP-TFS use c ase (as with <xref target="RFC4342" format="default"/>), the | |||
(fixed) packet size is used as the segment size for the algorithm. The | (fixed) packet size is used as the segment size for the algorithm. The | |||
main formula in the algorithm for the send rate is then as follows:</t> | main formula in the algorithm for the send rate is then as follows:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
1 | 1 | |||
X = ----------------------------------------------- | 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)) | |||
]]></artwork></figure> | ]]></artwork> | |||
<t><tt>X</tt> is the send rate in packets per second, <tt>R</tt> is the | ||||
<t>Where <spanx style='verb'>X</spanx> is the send rate in packets per second, < | RTT estimate, and <tt>p</tt> is the loss event rate (the inverse | |||
spanx style='verb'>R</spanx> is the | ||||
round trip time estimate and <spanx style='verb'>p</spanx> is the loss event rat | ||||
e (the inverse | ||||
of which is provided by the receiver).</t> | of which is provided by the receiver).</t> | |||
<t>In addition, the algorithm in <xref target="RFC5348" format="default"/> | ||||
<t>In addition, the algorithm in <xref target="RFC5348"/> also uses an <spanx st | also uses an <tt>X_recv</tt> value (the | |||
yle='verb'>X_recv</spanx> value (the | receiver's receive rate). For IP-TFS, one <bcp14>MAY</bcp14> set this value acco | |||
receiver's receive rate). For IP-TFS one MAY set this value according to | rding to | |||
the sender's current tunnel send-rate (<spanx style='verb'>X</spanx>).</t> | the sender's current tunnel send rate (<tt>X</tt>).</t> | |||
<t>The IP-TFS receiver, having the RTT estimate from the sender, can use t | ||||
<t>The IP-TFS receiver, having the RTT estimate from the sender can use the | he | |||
same method as described in <xref target="RFC5348"/> and <xref target="RFC4342"/ | same method as described in <xref target="RFC5348" format="default"/> and <xref | |||
> to collect the loss | target="RFC4342" format="default"/> to collect the loss | |||
intervals and calculate the loss event rate value using the weighted | intervals and calculate the loss event rate value using the weighted | |||
average as indicated. The receiver communicates the inverse of this | average as indicated. The receiver communicates the inverse of this | |||
value back to the sender in the AGGFRAG_PAYLOAD payload header field | value back to the sender in the AGGFRAG_PAYLOAD payload header field | |||
<spanx style='verb'>LossEventRate</spanx>.</t> | <tt>LossEventRate</tt>.</t> | |||
<t>The IP-TFS sender now has both the <tt>R</tt> and <tt>p</tt> values and | ||||
<t>The IP-TFS sender now has both the <spanx style='verb'>R</spanx> and <spanx s | can calculate | |||
tyle='verb'>p</spanx> values and can calculate | the correct sending rate. If following <xref target="RFC5348" format="default"/> | |||
the correct sending rate. If following <xref target="RFC5348"/>, the sender shou | , the sender should also | |||
ld also | ||||
use the slow start mechanism described therein when the IP-TFS SA is | use the slow start mechanism described therein when the IP-TFS SA is | |||
first established.</t> | first established.</t> | |||
</section> | ||||
</section> | <section anchor="sec-comparisons-of-ip-tfs" numbered="true" toc="default"> | |||
<name>Comparisons of IP-TFS</name> | ||||
<section title="Comparisons of IP-TFS" anchor="sec-comparisons-of-ip-tfs"> | <section numbered="true" toc="default"> | |||
<name>Comparing Overhead</name> | ||||
<section title="Comparing Overhead"> | <t>For comparing overhead, the overhead of ESP for both normal and AGGFR | |||
<t>For comparing overhead, the overhead of ESP for both normal and AGGFRAG | AG | |||
tunnel packets must be calculated, and so an algorithm for encryption | tunnel packets must be calculated, and so an algorithm for encryption | |||
and authentication must be chosen. For the data below AES-GCM-256 was | and authentication must be chosen. For the data below, AES-GCM-256 was | |||
selected. This leads to an IP+ESP overhead of 54.</t> | selected. This leads to an IP+ESP overhead of 54.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
54 = 20 (IP) + 8 (ESPH) + 2 (ESPF) + 8 (IV) + 16 (ICV) | 54 = 20 (IP) + 8 (ESPH) + 2 (ESPF) + 8 (IV) + 16 (ICV) | |||
]]></artwork></figure> | ]]></artwork> | |||
<t>Additionally, for IP-TFS, non-congestion-control AGGFRAG_PAYLOAD | ||||
<t>Additionally, for IP-TFS, non-congestion control AGGFRAG_PAYLOAD | headers were chosen, which adds 4 octets, for a total overhead of 58.</t> | |||
headers were chosen which adds 4 octets for a total overhead of 58.</t> | <section numbered="true" toc="default"> | |||
<name>IP-TFS Overhead</name> | ||||
<section title="IP-TFS Overhead"> | <t>For comparison, the overhead of an AGGFRAG payload is 58 octets per | |||
<t>For comparison, the overhead of an AGGFRAG payload is 58 octets per outer pac | outer packet. | |||
ket. | ||||
Therefore, the octet overhead per inner packet is 58 divided by the | Therefore, the octet overhead per inner packet is 58 divided by the | |||
number of outer packets required (fractions allowed). The overhead | number of outer packets required (fractions allowed). The overhead | |||
as a percentage of inner packet size is a constant based on the Outer | as a percentage of inner packet size is a constant based on the Outer | |||
MTU size.</t> | MTU size.</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
OH = 58 / Outer Payload Size / Inner Packet Size | OH = 58 / Outer Payload Size / Inner Packet Size | |||
OH % of Inner Packet Size = 100 * OH / Inner Packet Size | OH % of Inner Packet Size = 100 * OH / Inner Packet Size | |||
OH % of Inner Packet Size = 5800 / Outer Payload Size | OH % of Inner Packet Size = 5800 / Outer Payload Size | |||
]]></artwork></figure> | ]]></artwork> | |||
<table anchor="sec-ip-tfs-overhead-as-percentage-of-inner-packet-size" | ||||
<figure title="IP-TFS Overhead as Percentage of Inner Packet Size" anchor="sec-i | align="center"> | |||
p-tfs-overhead-as-percentage-of-inner-packet-size"><artwork><![CDATA[ | <name>IP-TFS Overhead as Percentage of Inner Packet Size</name> | |||
Type IP-TFS IP-TFS IP-TFS | <thead> | |||
MTU 576 1500 9000 | <tr> | |||
PSize 518 1442 8942 | <th>Type</th> | |||
------------------------------- | <th>IP-TFS</th> | |||
40 11.20% 4.02% 0.65% | <th>IP-TFS</th> | |||
576 11.20% 4.02% 0.65% | <th>IP-TFS</th> | |||
1500 11.20% 4.02% 0.65% | </tr> | |||
9000 11.20% 4.02% 0.65% | <tr> | |||
]]></artwork></figure> | <th>MTU</th> | |||
<th>576</th> | ||||
</section> | <th>1500</th> | |||
<th>9000</th> | ||||
<section title="ESP with Padding Overhead"> | </tr> | |||
<t>The overhead per inner packet for constant-send-rate padded ESP | <tr> | |||
(i.e., traditional IPsec TFC) is 36 octets plus any padding, unless | <th>PSize</th> | |||
<th>518</th> | ||||
<th>1442</th> | ||||
<th>8942</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>40</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65% </td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9000</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>ESP with Padding Overhead</name> | ||||
<t>The overhead per inner packet for constant-send-rate-padded ESP | ||||
(i.e., original IPsec TFC) is 36 octets plus any padding, unless | ||||
fragmentation is required.</t> | fragmentation is required.</t> | |||
<t>When fragmentation of the inner packet is required to fit in the | ||||
<t>When fragmentation of the inner packet is required to fit in the | ||||
outer IPsec packet, overhead is the number of outer packets required | outer IPsec packet, overhead is the number of outer packets required | |||
to carry the fragmented inner packet times both the inner IP overhead | to carry the fragmented inner packet times both the inner IP Overhead | |||
(20) and the outer packet overhead (54) minus the initial inner IP | (20) and the outer packet overhead (54) minus the initial inner IP | |||
overhead plus any required tail padding in the last encapsulation | Overhead plus any required tail padding in the last encapsulation | |||
packet. The required tail padding is the number of required packets | packet. The required tail padding is the number of required packets | |||
times the difference of the Outer Payload Size and the IP Overhead | times the difference of the Outer Payload Size and the IP Overhead | |||
minus the Inner Payload Size. So:</t> | minus the Inner Payload Size. So:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
<figure><artwork><![CDATA[ | ||||
Inner Payload Size = IP Packet Size - IP Overhead | Inner Payload Size = IP Packet Size - IP Overhead | |||
Outer Payload Size = MTU - IPsec Overhead | Outer Payload Size = MTU - IPsec Overhead | |||
Inner Payload Size | Inner Payload Size | |||
NF0 = ---------------------------------- | NF0 = ---------------------------------- | |||
Outer Payload Size - IP Overhead | Outer Payload Size - IP Overhead | |||
NF = CEILING(NF0) | NF = CEILING(NF0) | |||
OH = NF * (IP Overhead + IPsec Overhead) | OH = NF * (IP Overhead + IPsec Overhead) | |||
- IP Overhead | - IP Overhead | |||
+ NF * (Outer Payload Size - IP Overhead) | + NF * (Outer Payload Size - IP Overhead) | |||
- Inner Payload Size | - Inner Payload Size | |||
OH = NF * (IPsec Overhead + Outer Payload Size) | OH = NF * (IPsec Overhead + Outer Payload Size) | |||
- (IP Overhead + Inner Payload Size) | - (IP Overhead + Inner Payload Size) | |||
OH = NF * (IPsec Overhead + Outer Payload Size) | OH = NF * (IPsec Overhead + Outer Payload Size) | |||
- Inner Packet Size | - Inner Packet Size | |||
]]></artwork></figure> | ]]></artwork> | |||
</section> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
</section> | <name>Overhead Comparison</name> | |||
<t>The following tables collect the overhead values for some common L3 | ||||
<section title="Overhead Comparison"> | ||||
<t>The following tables collect the overhead values for some common L3 | ||||
MTU sizes in order to compare them. The first table is the number of | MTU sizes in order to compare them. The first table is the number of | |||
octets of overhead for a given L3 MTU sized packet. The second table | octets of overhead for a given L3 MTU-sized packet. The second table | |||
is the percentage of overhead in the same MTU sized packet.</t> | is the percentage of overhead in the same MTU-sized packet.</t> | |||
<table anchor="sec-overhead-comparison-in-octets" align="center"> | ||||
<t></t> | <name>Overhead Comparison in Octets</name> | |||
<thead> | ||||
<figure title="Overhead comparison in octets" anchor="sec-overhead-comparison-in | <tr> | |||
-octets"><artwork><![CDATA[ | <th>Type</th> | |||
Type ESP+Pad ESP+Pad ESP+Pad IP-TFS IP-TFS IP-TFS | <th>ESP+Pad</th> | |||
L3 MTU 576 1500 9000 576 1500 9000 | <th>ESP+Pad</th> | |||
PSize 522 1446 8946 518 1442 8942 | <th>ESP+Pad</th> | |||
----------------------------------------------------------- | <th>IP-TFS</th> | |||
40 482 1406 8906 4.5 1.6 0.3 | <th>IP-TFS</th> | |||
128 394 1318 8818 14.3 5.1 0.8 | <th>IP-TFS</th> | |||
256 266 1190 8690 28.7 10.3 1.7 | </tr> | |||
518 4 928 8428 58.0 20.8 3.4 | <tr> | |||
576 576 870 8370 64.5 23.2 3.7 | <th>L3 MTU</th> | |||
1442 286 4 7504 161.5 58.0 9.4 | <th>576</th> | |||
1500 228 1500 7446 168.0 60.3 9.7 | <th>1500</th> | |||
8942 1426 1558 4 1001.2 359.7 58.0 | <th>9000</th> | |||
9000 1368 1500 9000 1007.7 362.0 58.4 | <th>576</th> | |||
]]></artwork></figure> | <th>1500</th> | |||
<th>9000</th> | ||||
<figure title="Overhead as Percentage of Inner Packet Size" anchor="sec-overhead | </tr> | |||
-as-percentage-of-inner-packet-size"><artwork><![CDATA[ | <tr> | |||
Type ESP+Pad ESP+Pad ESP+Pad IP-TFS IP-TFS IP-TFS | <th>PSize</th> | |||
MTU 576 1500 9000 576 1500 9000 | <th>522</th> | |||
PSize 522 1446 8946 518 1442 8942 | <th>1446</th> | |||
----------------------------------------------------------- | <th>8946</th> | |||
40 1205.0% 3515.0% 22265.0% 11.20% 4.02% 0.65% | <th>518</th> | |||
128 307.8% 1029.7% 6889.1% 11.20% 4.02% 0.65% | <th>1442</th> | |||
256 103.9% 464.8% 3394.5% 11.20% 4.02% 0.65% | <th>8942 </th> | |||
518 0.8% 179.2% 1627.0% 11.20% 4.02% 0.65% | </tr> | |||
576 100.0% 151.0% 1453.1% 11.20% 4.02% 0.65% | </thead> | |||
1442 19.8% 0.3% 520.4% 11.20% 4.02% 0.65% | <tbody> | |||
1500 15.2% 100.0% 496.4% 11.20% 4.02% 0.65% | <tr> | |||
8942 15.9% 17.4% 0.0% 11.20% 4.02% 0.65% | <td>40</td> | |||
9000 15.2% 16.7% 100.0% 11.20% 4.02% 0.65% | <td>482</td> | |||
]]></artwork></figure> | <td>1406</td> | |||
<td>8906</td> | ||||
</section> | <td>4.5</td> | |||
<td>1.6</td> | ||||
<section title="Comparing Available Bandwidth"> | <td>0.3</td> | |||
<t>Another way to compare the two solutions is to look at the amount of | </tr> | |||
<tr> | ||||
<td>128</td> | ||||
<td>394</td> | ||||
<td>1318</td> | ||||
<td>8818</td> | ||||
<td>14.3</td> | ||||
<td>5.1</td> | ||||
<td>0.8</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256</td> | ||||
<td>266</td> | ||||
<td>1190</td> | ||||
<td>8690</td> | ||||
<td>28.7</td> | ||||
<td>10.3</td> | ||||
<td>1.7</td> | ||||
</tr> | ||||
<tr> | ||||
<td>518</td> | ||||
<td>4</td> | ||||
<td>928</td> | ||||
<td>8428</td> | ||||
<td>58.0</td> | ||||
<td>20.8</td> | ||||
<td>3.4 </td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>576</td> | ||||
<td>870</td> | ||||
<td>8370</td> | ||||
<td>64.5</td> | ||||
<td>23.2</td> | ||||
<td>3.7</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1442</td> | ||||
<td>286</td> | ||||
<td>4</td> | ||||
<td>7504</td> | ||||
<td>161.5</td> | ||||
<td>58.0</td> | ||||
<td>9.4</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>228</td> | ||||
<td>1500</td> | ||||
<td>7446</td> | ||||
<td>168.0</td> | ||||
<td>60.3</td> | ||||
<td>9.7</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8942</td> | ||||
<td>1426</td> | ||||
<td>1558</td> | ||||
<td>4</td> | ||||
<td>1001.2</td> | ||||
<td>359.7</td> | ||||
<td>58.0</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9000</td> | ||||
<td>1368</td> | ||||
<td>1500</td> | ||||
<td>9000</td> | ||||
<td>1007.7</td> | ||||
<td>362.0</td> | ||||
<td>58.4</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<table anchor="sec-overhead-as-percentage-of-inner-packet-size" align="c | ||||
enter"> | ||||
<name>Overhead as Percentage of Inner Packet Size</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Type</th> | ||||
<th>ESP+Pad</th> | ||||
<th>ESP+Pad</th> | ||||
<th>ESP+Pad</th> | ||||
<th>IP-TFS</th> | ||||
<th>IP-TFS</th> | ||||
<th>IP-TFS</th> | ||||
</tr> | ||||
<tr> | ||||
<th>MTU</th> | ||||
<th>576</th> | ||||
<th>1500</th> | ||||
<th>9000</th> | ||||
<th>576</th> | ||||
<th>1500</th> | ||||
<th>9000</th> | ||||
</tr> | ||||
<tr> | ||||
<th>PSize</th> | ||||
<th>522</th> | ||||
<th>1446</th> | ||||
<th>8946</th> | ||||
<th>518</th> | ||||
<th>1442</th> | ||||
<th>8942</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>40</td> | ||||
<td>1205.0%</td> | ||||
<td>3515.0%</td> | ||||
<td>22265.0%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>128</td> | ||||
<td>307.8%</td> | ||||
<td>1029.7%</td> | ||||
<td>6889.1%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256</td> | ||||
<td>103.9%</td> | ||||
<td>464.8%</td> | ||||
<td>3394.5%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>518</td> | ||||
<td>0.8%</td> | ||||
<td>179.2%</td> | ||||
<td>1627.0%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>100.0%</td> | ||||
<td>151.0%</td> | ||||
<td>1453.1%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1442</td> | ||||
<td>19.8%</td> | ||||
<td>0.3%</td> | ||||
<td>520.4%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>15.2%</td> | ||||
<td>100.0%</td> | ||||
<td>496.4%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8942</td> | ||||
<td>15.9%</td> | ||||
<td>17.4%</td> | ||||
<td>0.0%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9000</td> | ||||
<td>15.2%</td> | ||||
<td>16.7%</td> | ||||
<td>100.0%</td> | ||||
<td>11.20%</td> | ||||
<td>4.02%</td> | ||||
<td>0.65%</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Comparing Available Bandwidth</name> | ||||
<t>Another way to compare the two solutions is to look at the amount of | ||||
available bandwidth each solution provides. The following sections | available bandwidth each solution provides. The following sections | |||
consider and compare the percentage of available bandwidth. For the | consider and compare the percentage of available bandwidth. For the | |||
sake of providing a well-understood baseline normal (unencrypted) | sake of providing a well-understood baseline, normal (unencrypted) | |||
Ethernet as well as normal ESP values are included.</t> | Ethernet and normal ESP values are included.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Ethernet"> | <name>Ethernet</name> | |||
<t>In order to calculate the available bandwidth the per packet overhead | <t>In order to calculate the available bandwidth, the per-packet overh | |||
ead | ||||
is calculated first. The total overhead of Ethernet is 14+4 octets of | is calculated first. The total overhead of Ethernet is 14+4 octets of | |||
header and CRC plus an additional 20 octets of framing (preamble, | header and Cyclic Redundancy Check (CRC) plus an additional 20 octets of framing (preamble, | |||
start, and inter-packet gap), for a total of 38 octets. Additionally, | start, and inter-packet gap), for a total of 38 octets. Additionally, | |||
the minimum payload is 46 octets.</t> | the minimum payload is 46 octets.</t> | |||
<table anchor="sec-l2-octets-per-packet" align="center"> | ||||
<figure title="L2 Octets Per Packet" anchor="sec-l2-octets-per-packet"><artwork> | <name>L2 Octets Per Packet</name> | |||
<![CDATA[ | <thead> | |||
Size E + P E + P E + P IPTFS IPTFS IPTFS Enet ESP | <tr> | |||
MTU 590 1514 9014 590 1514 9014 any any | <th>Size</th> | |||
OH 92 92 92 96 96 96 38 74 | <th>E + P</th> | |||
------------------------------------------------------------ | <th>E + P</th> | |||
40 614 1538 9038 47 42 40 84 114 | <th>E + P</th> | |||
128 614 1538 9038 151 136 129 166 202 | <th>IPTFS</th> | |||
256 614 1538 9038 303 273 258 294 330 | <th>IPTFS</th> | |||
518 614 1538 9038 614 552 523 574 610 | <th>IPTFS</th> | |||
576 1228 1538 9038 682 614 582 614 650 | <th>Enet</th> | |||
1442 1842 1538 9038 1709 1538 1457 1498 1534 | <th>ESP</th> | |||
1500 1842 3076 9038 1777 1599 1516 1538 1574 | </tr> | |||
8942 11052 10766 9038 10599 9537 9038 8998 9034 | <tr> | |||
9000 11052 10766 18076 10667 9599 9096 9038 9074 | <th>MTU</th> | |||
]]></artwork></figure> | <th>590</th> | |||
<th>1514</th> | ||||
<figure title="Packets Per Second on 10G Ethernet" anchor="sec-packets-per-secon | <th>9014</th> | |||
d-on-10g-ethernet"><artwork><![CDATA[ | <th>590</th> | |||
Size E + P E + P E + P IPTFS IPTFS IPTFS Enet ESP | <th>1514</th> | |||
MTU 590 1514 9014 590 1514 9014 any any | <th>9014</th> | |||
OH 92 92 92 96 96 96 38 74 | <th>any</th> | |||
-------------------------------------------------------------- | <th>any</th> | |||
40 2.0M 0.8M 0.1M 26.4M 29.3M 30.9M 14.9M 11.0M | </tr> | |||
128 2.0M 0.8M 0.1M 8.2M 9.2M 9.7M 7.5M 6.2M | <tr> | |||
256 2.0M 0.8M 0.1M 4.1M 4.6M 4.8M 4.3M 3.8M | <th>OH</th> | |||
518 2.0M 0.8M 0.1M 2.0M 2.3M 2.4M 2.2M 2.1M | <th>92</th> | |||
576 1.0M 0.8M 0.1M 1.8M 2.0M 2.1M 2.0M 1.9M | <th>92</th> | |||
1442 678K 812K 138K 731K 812K 857K 844K 824K | <th>92</th> | |||
1500 678K 406K 138K 703K 781K 824K 812K 794K | <th>96</th> | |||
8942 113K 116K 138K 117K 131K 138K 139K 138K | <th>96</th> | |||
9000 113K 116K 69K 117K 130K 137K 138K 137K | <th>96</th> | |||
]]></artwork></figure> | <th>38</th> | |||
<th>74</th> | ||||
<figure title="Percentage of Bandwidth on 10G Ethernet" anchor="sec-percentage-o | </tr> | |||
f-bandwidth-on-10g-ethernet"><artwork><![CDATA[ | </thead> | |||
Size E + P E + P E + P IPTFS IPTFS IPTFS Enet ESP | <tbody> | |||
590 1514 9014 590 1514 9014 any any | <tr> | |||
92 92 92 96 96 96 38 74 | <td>40</td> | |||
40 6.51% 2.60% 0.44% 84.36% 93.76% 98.94% 47.62% 35.09% | <td>614</td> | |||
128 20.85% 8.32% 1.42% 84.36% 93.76% 98.94% 77.11% 63.37% | <td>1538</td> | |||
256 41.69% 16.64% 2.83% 84.36% 93.76% 98.94% 87.07% 77.58% | <td>9038</td> | |||
518 84.36% 33.68% 5.73% 84.36% 93.76% 98.94% 93.17% 87.50% | <td>47</td> | |||
576 46.91% 37.45% 6.37% 84.36% 93.76% 98.94% 93.81% 88.62% | <td>42</td> | |||
1442 78.28% 93.76% 15.95% 84.36% 93.76% 98.94% 97.43% 95.12% | <td>40</td> | |||
1500 81.43% 48.76% 16.60% 84.36% 93.76% 98.94% 97.53% 95.30% | <td>84</td> | |||
8942 80.91% 83.06% 98.94% 84.36% 93.76% 98.94% 99.58% 99.18% | <td>114</td> | |||
9000 81.43% 83.60% 49.79% 84.36% 93.76% 98.94% 99.58% 99.18% | </tr> | |||
]]></artwork></figure> | <tr> | |||
<td>128</td> | ||||
<t>A sometimes unexpected result of using an AGGFRAG tunnel (or any packet | <td>614</td> | |||
<td>1538</td> | ||||
<td>9038</td> | ||||
<td>151</td> | ||||
<td>136</td> | ||||
<td>129</td> | ||||
<td>166</td> | ||||
<td>202</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256</td> | ||||
<td>614</td> | ||||
<td>1538</td> | ||||
<td>9038</td> | ||||
<td>303</td> | ||||
<td>273</td> | ||||
<td>258</td> | ||||
<td>294</td> | ||||
<td>330</td> | ||||
</tr> | ||||
<tr> | ||||
<td>518</td> | ||||
<td>614</td> | ||||
<td>1538</td> | ||||
<td>9038</td> | ||||
<td>614</td> | ||||
<td>552</td> | ||||
<td>523</td> | ||||
<td>574</td> | ||||
<td>610</td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>1228</td> | ||||
<td>1538</td> | ||||
<td>9038</td> | ||||
<td>682</td> | ||||
<td>614</td> | ||||
<td>582</td> | ||||
<td>614</td> | ||||
<td>650</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1442</td> | ||||
<td>1842</td> | ||||
<td>1538</td> | ||||
<td>9038</td> | ||||
<td>1709</td> | ||||
<td>1538</td> | ||||
<td>1457</td> | ||||
<td>1498</td> | ||||
<td>1534</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>1842</td> | ||||
<td>3076</td> | ||||
<td>9038</td> | ||||
<td>1777</td> | ||||
<td>1599</td> | ||||
<td>1516</td> | ||||
<td>1538</td> | ||||
<td>1574</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8942</td> | ||||
<td>11052</td> | ||||
<td>10766</td> | ||||
<td>9038</td> | ||||
<td>10599</td> | ||||
<td>9537</td> | ||||
<td>9038</td> | ||||
<td>8998</td> | ||||
<td>9034</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9000</td> | ||||
<td>11052</td> | ||||
<td>10766</td> | ||||
<td>18076</td> | ||||
<td>10667</td> | ||||
<td>9599</td> | ||||
<td>9096</td> | ||||
<td>9038</td> | ||||
<td>9074</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<table anchor="sec-packets-per-second-on-10g-ethernet"> | ||||
<name>Packets Per Second on 10G Ethernet</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Size</th> | ||||
<th>E + P</th> | ||||
<th>E + P</th> | ||||
<th>E + P</th> | ||||
<th>IPTFS</th> | ||||
<th>IPTFS</th> | ||||
<th>IPTFS</th> | ||||
<th>Enet</th> | ||||
<th>ESP</th> | ||||
</tr> | ||||
<tr> | ||||
<th>MTU</th> | ||||
<th>590</th> | ||||
<th>1514</th> | ||||
<th>9014</th> | ||||
<th>590</th> | ||||
<th>1514</th> | ||||
<th>9014</th> | ||||
<th>any</th> | ||||
<th>any</th> | ||||
</tr> | ||||
<tr> | ||||
<th>OH</th> | ||||
<th>92</th> | ||||
<th>92</th> | ||||
<th>92</th> | ||||
<th>96</th> | ||||
<th>96</th> | ||||
<th>96</th> | ||||
<th>38</th> | ||||
<th>74</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>40</td> | ||||
<td>2.0M</td> | ||||
<td>0.8M</td> | ||||
<td>0.1M</td> | ||||
<td>26.4M</td> | ||||
<td>29.3M</td> | ||||
<td>30.9M</td> | ||||
<td>14.9M</td> | ||||
<td>11.0M</td> | ||||
</tr> | ||||
<tr> | ||||
<td>128</td> | ||||
<td>2.0M</td> | ||||
<td>0.8M</td> | ||||
<td>0.1M</td> | ||||
<td>8.2M</td> | ||||
<td>9.2M</td> | ||||
<td>9.7M</td> | ||||
<td>7.5M</td> | ||||
<td>6.2M</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256</td> | ||||
<td>2.0M</td> | ||||
<td>0.8M</td> | ||||
<td>0.1M</td> | ||||
<td>4.1M</td> | ||||
<td>4.6M</td> | ||||
<td>4.8M</td> | ||||
<td>4.3M</td> | ||||
<td>3.8M</td> | ||||
</tr> | ||||
<tr> | ||||
<td>518</td> | ||||
<td>2.0M</td> | ||||
<td>0.8M</td> | ||||
<td>0.1M</td> | ||||
<td>2.0M</td> | ||||
<td>2.3M</td> | ||||
<td>2.4M</td> | ||||
<td>2.2M</td> | ||||
<td>2.1M</td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>1.0M</td> | ||||
<td>0.8M</td> | ||||
<td>0.1M</td> | ||||
<td>1.8M</td> | ||||
<td>2.0M</td> | ||||
<td>2.1M</td> | ||||
<td>2.0M</td> | ||||
<td>1.9M</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1442</td> | ||||
<td>678K</td> | ||||
<td>812K</td> | ||||
<td>138K</td> | ||||
<td>731K</td> | ||||
<td>812K</td> | ||||
<td>857K</td> | ||||
<td>844K</td> | ||||
<td>824K</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>678K</td> | ||||
<td>406K</td> | ||||
<td>138K</td> | ||||
<td>703K</td> | ||||
<td>781K</td> | ||||
<td>824K</td> | ||||
<td>812K</td> | ||||
<td>794K</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8942</td> | ||||
<td>113K</td> | ||||
<td>116K</td> | ||||
<td>138K</td> | ||||
<td>117K</td> | ||||
<td>131K</td> | ||||
<td>138K</td> | ||||
<td>139K</td> | ||||
<td>138K</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9000</td> | ||||
<td>113K</td> | ||||
<td>116K</td> | ||||
<td>69K</td> | ||||
<td>117K</td> | ||||
<td>130K</td> | ||||
<td>137K</td> | ||||
<td>138K</td> | ||||
<td>137K</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<table anchor="sec-percentage-of-bandwidth-on-10g-ethernet" align="cen | ||||
ter"> | ||||
<name>Percentage of Bandwidth on 10G Ethernet</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Size</th> | ||||
<th>E + P</th> | ||||
<th>E + P</th> | ||||
<th>E + P</th> | ||||
<th>IP-TFS</th> | ||||
<th>IP-TFS</th> | ||||
<th>IP-TFS</th> | ||||
<th>Enet</th> | ||||
<th>ESP</th> | ||||
</tr> | ||||
<tr> | ||||
<th>MTU</th> | ||||
<th>590</th> | ||||
<th>1514</th> | ||||
<th>9014</th> | ||||
<th>590</th> | ||||
<th>1514</th> | ||||
<th>9014</th> | ||||
<th>any</th> | ||||
<th>any</th> | ||||
</tr> | ||||
<tr> | ||||
<th>OH</th> | ||||
<th>92</th> | ||||
<th>92</th> | ||||
<th>92</th> | ||||
<th>96</th> | ||||
<th>96</th> | ||||
<th>96</th> | ||||
<th>38</th> | ||||
<th>74</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>40</td> | ||||
<td>6.51%</td> | ||||
<td>2.60%</td> | ||||
<td>0.44%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>47.62%</td> | ||||
<td>35.09%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>128</td> | ||||
<td>20.85%</td> | ||||
<td>8.32%</td> | ||||
<td>1.42%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>77.11%</td> | ||||
<td>63.37%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256</td> | ||||
<td>41.69%</td> | ||||
<td>16.64%</td> | ||||
<td>2.83%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>87.07%</td> | ||||
<td>77.58%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>518</td> | ||||
<td>84.36%</td> | ||||
<td>33.68%</td> | ||||
<td>5.73%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>93.17%</td> | ||||
<td>87.50%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>46.91%</td> | ||||
<td>37.45%</td> | ||||
<td>6.37%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>93.81%</td> | ||||
<td>88.62%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1442</td> | ||||
<td>78.28%</td> | ||||
<td>93.76%</td> | ||||
<td>15.95%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>97.43%</td> | ||||
<td>95.12%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>81.43%</td> | ||||
<td>48.76%</td> | ||||
<td>16.60%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>97.53%</td> | ||||
<td>95.30%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>8942</td> | ||||
<td>80.91%</td> | ||||
<td>83.06%</td> | ||||
<td>98.94%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>99.58%</td> | ||||
<td>99.18%</td> | ||||
</tr> | ||||
<tr> | ||||
<td>9000</td> | ||||
<td>81.43%</td> | ||||
<td>83.60%</td> | ||||
<td>49.79%</td> | ||||
<td>84.36%</td> | ||||
<td>93.76%</td> | ||||
<td>98.94%</td> | ||||
<td>99.58%</td> | ||||
<td>99.18%</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>A sometimes unexpected result of using an AGGFRAG tunnel (or any pa | ||||
cket | ||||
aggregating tunnel) is that, for small- to medium-sized packets, the | aggregating tunnel) is that, for small- to medium-sized packets, the | |||
available bandwidth is actually greater than native Ethernet. This is | available bandwidth is actually greater than plain Ethernet. This is | |||
due to the reduction in Ethernet framing overhead. This increased | due to the reduction in Ethernet framing overhead. This increased | |||
bandwidth is paid for with an increase in latency. This latency is | bandwidth is paid for with an increase in latency. This latency is | |||
the time to send the unrelated octets in the outer tunnel frame. The | the time to send the unrelated octets in the outer tunnel frame. The | |||
following table illustrates the latency for some common values on a | following table illustrates the latency for some common values on a | |||
10G Ethernet link. The table also includes latency introduced by | 10G Ethernet link. The table also includes latency introduced by | |||
padding if using ESP with padding.</t> | padding if using ESP with padding.</t> | |||
<table anchor="sec-added-latency" align="center"> | ||||
<figure title="Added Latency" anchor="sec-added-latency"><artwork><![CDATA[ | <name>Added Latency</name> | |||
ESP+Pad ESP+Pad IP-TFS IP-TFS | <thead> | |||
1500 9000 1500 9000 | <tr> | |||
<th>Size</th> | ||||
------------------------------------------ | <th>ESP+Pad</th> | |||
40 1.12 us 7.12 us 1.17 us 7.17 us | <th>ESP+Pad</th> | |||
128 1.05 us 7.05 us 1.10 us 7.10 us | <th>IP-TFS</th> | |||
256 0.95 us 6.95 us 1.00 us 7.00 us | <th>IP-TFS</th> | |||
518 0.74 us 6.74 us 0.79 us 6.79 us | </tr> | |||
576 0.70 us 6.70 us 0.74 us 6.74 us | <tr> | |||
1442 0.00 us 6.00 us 0.05 us 6.05 us | <th>MTU</th> | |||
1500 1.20 us 5.96 us 0.00 us 6.00 us | <th>1500</th> | |||
]]></artwork></figure> | <th>9000</th> | |||
<th>1500</th> | ||||
<t>Notice that the latency values are very similar between the two | <th>9000</th> | |||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>40</td> | ||||
<td>1.12 us</td> | ||||
<td>7.12 us</td> | ||||
<td>1.17 us</td> | ||||
<td>7.17 us</td> | ||||
</tr> | ||||
<tr> | ||||
<td>128</td> | ||||
<td>1.05 us</td> | ||||
<td>7.05 us</td> | ||||
<td>1.10 us</td> | ||||
<td>7.10 us</td> | ||||
</tr> | ||||
<tr> | ||||
<td>256</td> | ||||
<td>0.95 us</td> | ||||
<td>6.95 us</td> | ||||
<td>1.00 us</td> | ||||
<td>7.00 us</td> | ||||
</tr> | ||||
<tr> | ||||
<td>518</td> | ||||
<td>0.74 us</td> | ||||
<td>6.74 us</td> | ||||
<td>0.79 us</td> | ||||
<td>6.79 us</td> | ||||
</tr> | ||||
<tr> | ||||
<td>576</td> | ||||
<td>0.70 us</td> | ||||
<td>6.70 us</td> | ||||
<td>0.74 us</td> | ||||
<td>6.74 us</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1442</td> | ||||
<td>0.00 us</td> | ||||
<td>6.00 us</td> | ||||
<td>0.05 us</td> | ||||
<td>6.05 us</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1500</td> | ||||
<td>1.20 us</td> | ||||
<td>5.96 us</td> | ||||
<td>0.00 us</td> | ||||
<td>6.00 us</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Notice that the latency values are very similar between the two | ||||
solutions; however, whereas IP-TFS provides for constant high | solutions; however, whereas IP-TFS provides for constant high | |||
bandwidth, in some cases even exceeding native Ethernet, ESP with | bandwidth, in some cases even exceeding plain Ethernet, ESP with | |||
padding often greatly reduces available bandwidth.</t> | padding often greatly reduces available bandwidth.</t> | |||
</section> | ||||
</section> | </section> | |||
</section> | ||||
</section> | <section numbered="false" toc="default"> | |||
<name>Acknowledgements</name> | ||||
</section> | <t>We would like to thank <contact fullname="Don Fedyk"/> for help in revi | |||
ewing and editing | ||||
<section title="Acknowledgements"> | this work. We would also like to thank <contact fullname="Michael Richardson"/>, | |||
<t>We would like to thank Don Fedyk for help in reviewing and editing | <contact fullname="Sean | |||
this work. We would also like to thank Michael Richardson, Sean | Turner"/>, <contact fullname="Valery Smyslov"/>, and <contact fullname="Tero Kiv | |||
Turner, Valery Smyslov and Tero Kivinen for reviews and many | inen"/> for reviews and many | |||
suggestions for improvements, as well as Joseph Touch for the | suggestions for improvements, as well as <contact fullname="Joseph Touch"/> for | |||
the | ||||
transport area review and suggested improvements.</t> | transport area review and suggested improvements.</t> | |||
</section> | ||||
</section> | <section numbered="false" toc="default"> | |||
<name>Contributors</name> | ||||
<section title="Contributors"> | <t>The following person made significant contributions to this document.</ | |||
<t>The following people made significant contributions to this document.</t> | t> | |||
<contact fullname="Lou Berger"> | ||||
<figure><artwork><![CDATA[ | <organization>LabN Consulting, L.L.C.</organization> | |||
Lou Berger | <address> | |||
LabN Consulting, L.L.C. | <email>lberger@labn.net</email> | |||
</address> | ||||
Email: lberger@labn.net | </contact> | |||
]]></artwork></figure> | </section> | |||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 194 change blocks. | ||||
1809 lines changed or deleted | 1847 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |