rfc9268.original.xml | rfc9268.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
<!-- <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> --> | <!DOCTYPE rfc [ | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | <!ENTITY nbsp " "> | |||
<?rfc strict="yes" ?> | <!ENTITY zwsp "​"> | |||
<?rfc toc="yes"?> | <!ENTITY nbhy "‑"> | |||
<?rfc tocdepth="4"?> | <!ENTITY wj "⁠"> | |||
<?rfc symrefs="yes"?> | ]> | |||
<?rfc sortrefs="yes" ?> | ||||
<?rfc compact="yes" ?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-6man-mtu-opt | |||
<?rfc subcompact="no" ?> | ion-15" | |||
<rfc category="exp" docName="draft-ietf-6man-mtu-option-15" ipr="trust200902" | number="9268" ipr="trust200902" obsoletes="" sortRefs="true" submissionType="IET | |||
obsoletes="" sortRefs="true" submissionType="IETF" symRefs="true" | F" | |||
tocDepth="4" tocInclude="true" updates="" version="3" xml:lang="en"> | category="exp" consensus="true" symRefs="true" tocDepth="4" tocInclude="true" | |||
updates="" version="3" xml:lang="en"> | ||||
<!-- xml2rfc v2v3 conversion 2.35.0 --> | <!-- xml2rfc v2v3 conversion 2.35.0 --> | |||
<front> | <front> | |||
<title abbrev="Path MTU Option">IPv6 Minimum Path MTU Hop-by-Hop | <title abbrev="Path MTU Option">IPv6 Minimum Path MTU Hop-by-Hop | |||
Option</title> | Option</title> | |||
<seriesInfo name="RFC" value="9268"/> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-6man-mtu-option-15" /> | ||||
<author fullname="Robert M. Hinden" initials="R" surname="Hinden"> | <author fullname="Robert M. Hinden" initials="R" surname="Hinden"> | |||
<organization>Check Point Software</organization> | <organization>Check Point Software</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>959 Skyway Road</street> | <street>959 Skyway Road</street> | |||
<!-- Reorder these if your country does things differently --> | ||||
<city>San Carlos</city> | <city>San Carlos</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>94070</code> | <code>94070</code> | |||
<country>United States of America</country> | ||||
<country>USA</country> | ||||
</postal> | </postal> | |||
<phone /> | ||||
<email>bob.hinden@gmail.com</email> | <email>bob.hinden@gmail.com</email> | |||
<!-- uri and facsimile elements may also be added --> | ||||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Godred Fairhurst" initials="G" surname="Fairhurst"> | <author fullname="Godred Fairhurst" initials="G" surname="Fairhurst"> | |||
<organization>University of Aberdeen</organization> | <organization>University of Aberdeen</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>School of Engineering</street> | <extaddr>School of Engineering</extaddr> | |||
<street>Fraser Noble Building</street> | <street>Fraser Noble Building</street> | |||
<city>Aberdeen</city> | <city>Aberdeen</city> | |||
<region/> | ||||
<region /> | ||||
<code>AB24 3UE</code> | <code>AB24 3UE</code> | |||
<country>United Kingdom</country> | ||||
<country>UK</country> | ||||
</postal> | </postal> | |||
<email>gorry@erg.abdn.ac.uk</email> | <email>gorry@erg.abdn.ac.uk</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date day="" month="" year="" /> | <date year="2022" month="August"/> | |||
<area>int</area> | ||||
<workgroup>6man</workgroup> | ||||
<keyword>DPLPMTUD</keyword> | ||||
<keyword>PMTUD</keyword> | ||||
<abstract> | <abstract> | |||
<t>This document specifies a new IPv6 Hop-by-Hop option that is used to | <t>This document specifies a new IPv6 Hop-by-Hop Option that is used to | |||
record the minimum Path MTU along the forward path between a source host | record the Minimum Path MTU (PMTU) along the forward path between a source | |||
host | ||||
to a destination host. The recorded value can then be communicated back | to a destination host. The recorded value can then be communicated back | |||
to the source using the return Path MTU field in the option.</t> | to the source using the return Path MTU field in the Option.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="Intro" numbered="true" title="Introduction" toc="default"> | <section anchor="Intro" numbered="true" title="Introduction" toc="default"> | |||
<t>This document specifies a new IPv6 Hop-by-Hop (HBH) Option to record th e | <t>This document specifies a new IPv6 Hop-by-Hop (HBH) Option to record th e | |||
minimum Maximum Transmission Unit (MTU) along the forward path between a | minimum Maximum Transmission Unit (MTU) along the forward path between a | |||
source and a destination host. The source host creates a packet with | source and a destination host. The source host creates a packet with | |||
this option and initializes the Min-PMTU field with the value of the MTU | this Option and initializes the Min-PMTU field with the value of the MTU | |||
for the outbound link that will be used to forward the packet towards | for the outbound link that will be used to forward the packet towards | |||
the destination host.</t> | the destination host.</t> | |||
<t>At each subsequent hop where the option is processed, the router | <t>At each subsequent hop where the Option is processed, the router | |||
compares the value of the Min-PMTU Field in the option and the MTU of | compares the value of the Min-PMTU field in the Option and the MTU of | |||
its outgoing link. If the MTU of the link is less than the Min-PMTU, it | its outgoing link. If the MTU of the link is less than the Min-PMTU, it | |||
rewrites the value in the option data with the smaller value. When the | rewrites the value in the Option Data with the smaller value. When the | |||
packet arrives at the destination host, the host can send the value of | packet arrives at the destination host, the host can send the value of | |||
the minimum reported MTU for the path back to the source host using the | the minimum Reported MTU for the path back to the source host using the | |||
Rtn-PMTU field in the option. The source host can then use this value as | Rtn-PMTU field in the Option. The source host can then use this value as | |||
input to the method that sets the Path MTU (PMTU) used by upper layer | input to the method that sets the Path MTU (PMTU) used by upper-layer | |||
protocols.</t> | protocols.</t> | |||
<t>The IPv6 Minimum Path MTU Hop-by-Hop (MinPMTU HBH) Option | <t>The IPv6 Minimum Path MTU Hop-by-Hop (MinPMTU HBH) Option | |||
is designed to work with packet sizes that can be | is designed to work with packet sizes that can be | |||
specified in the IPv6 header. The maximum packet size that can be | specified in the IPv6 header. The maximum packet size that can be | |||
specified in an IPv6 header is 65,535 octets (2^^16).</t> | specified in an IPv6 header is 65,535 octets (2<sup>16</sup>).</t> | |||
<t>This method has the potential to complete Path MTU discovery in a | <t>This method has the potential to complete Path MTU Discovery (PMTUD) in | |||
single round trip time, even over paths that have successive links each | a | |||
single round-trip time, even over paths that have successive links, each | ||||
with a lower MTU.</t> | with a lower MTU.</t> | |||
<t>The mechanism defined in this document is focused on Unicast, it does | <t>The mechanism defined in this document is focused on unicast; it does | |||
not describe Multicast. That is left for future work.</t> | not describe multicast. That is left for future work.</t> | |||
<section anchor="Intro1" numbered="true" title="Example Operation" | <section anchor="Intro1" numbered="true" title="Example Operation" | |||
toc="default"> | toc="default"> | |||
<t>The figure below illustrates the operation of the method. In this | <t>The figure below illustrates the operation of the method. In this | |||
case, the path between the source host and the destination host | case, the path between the source host and the destination host | |||
comprises three links, the source has a link MTU of size MTU-S, the | comprises three links: the source has a link MTU of size MTU-S, the | |||
link between routers R1 and R2 has an MTU of size 9000 bytes, and the | link between routers R1 and R2 has an MTU of size 9000 bytes, and the | |||
final link to the destination has an MTU of size MTU-D.</t> | final link to the destination has an MTU of size MTU-D.</t> | |||
<figure> | <figure anchor="fig1"> | |||
<name>An Example Path between the Source Host and the Destination Host< | ||||
/name> | ||||
<artwork align="center" alt="" name="" type=""><![CDATA[ | <artwork align="center" alt="" name="" type=""><![CDATA[ | |||
+--------+ +----+ +----+ +-------+ | ||||
+--------+ +----+ +----+ +-------+ | | | | | | | | | | |||
| | | | | | | | | | Sender +---------+ R1 +--------+ R2 +-------- + Dest. | | |||
| Sender +---------+ R1 +--------+ R2 +-------- + Dest. | | | | | | | | | | | |||
| | | | | | | | | +--------+ MTU-S +----+ 9000B +----+ MTU-D +-------+ | |||
+--------+ MTU-S +----+ 9000B +----+ MTU-D +-------+ | ]]></artwork> | |||
]]></artwork> | ||||
</figure> | </figure> | |||
<t>Three scenarios are described:</t> | <t>Three scenarios are described:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li> | <li> | |||
<t>Scenario 1, considers all links to have an 9000 byte MTU and | <t>Scenario 1 considers all links to have a 9000 byte MTU, and | |||
the method is supported by both routers. The initial Min-PMTU is | the method is supported by both routers. The initial Min-PMTU is | |||
not modified along the path, and therefore the PMTU is 9000 | not modified along the path. Therefore, the PMTU is 9000 | |||
bytes.</t> | bytes.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>Scenario 2, considers the link between R2 and destination host | <t>Scenario 2 considers the link between R2 and the destination host | |||
(MTU-D) to have an MTU of 1500 bytes. This is the smallest MTU, | (MTU-D) to have an MTU of 1500 bytes. This is the smallest MTU. | |||
router R2 updates the Min-PMTU to 1500 bytes and the method | Router R2 updates the Min-PMTU to 1500 bytes, and the method | |||
correctly updates the PMTU to 1500 bytes. Had there been another | correctly updates the PMTU to 1500 bytes. Had there been another | |||
smaller MTU at a link further along the path that also supports | smaller MTU at a link further along the path that also supports | |||
the method, the lower MTU would also have been detected.</t> | the method, the lower MTU would also have been detected.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>Scenario 3, considers the case where the router preceding the | <t>Scenario 3 considers the case where the router preceding the | |||
smallest link (R2) does not support the method, and the link to | smallest link (R2) does not support the method, and the link to | |||
the destination host (MTU-D) has an MTU of 1500 bytes. Therefore, | the destination host (MTU-D) has an MTU of 1500 bytes. Therefore, | |||
router R2 does not update the Min-PMTU to 1500 bytes. The method | router R2 does not update the Min-PMTU to 1500 bytes. The method | |||
then fails to detect the actual PMTU.</t> | then fails to detect the actual PMTU.</t> | |||
</li> | </li> | |||
</ul> | </ul> | |||
<t>In Scenarios 2 and 3, a lower PMTU would also fail to be detected | <t>In Scenarios 2 and 3, a lower PMTU would also fail to be detected | |||
in the case where PMTUD had been used and an ICMPv6 Packet Too Big | in the case where PMTUD had been used and an ICMPv6 Packet Too Big | |||
(PTB) message had not been delivered to the sender <xref | (PTB) message had not been delivered to the sender <xref | |||
format="default" target="RFC8201" />.</t> | format="default" target="RFC8201" />.</t> | |||
<t>These scenarios are summarized in the table below. "H" in R1 and/or | <t>These scenarios are summarized in the table below. "H" in R1 and/or | |||
R2 columns means the router understands the MinPMTU HBH option.</t> | R2 columns means the router understands the MinPMTU HBH Option.</t> | |||
<table align="center"> | ||||
<figure> | <name>Three Scenarios That Arise from Using the Path Shown in Figure 1< | |||
<artwork align="center" alt="" name="" type=""><![CDATA[ | /name> | |||
<thead> | ||||
+-+-----+-----+----+----+----------+-----------------------+ | <tr> | |||
| |MTU-S|MTU-D| R1 | R2 | Rec PMTU | Note | | <th></th> | |||
+-+-----+-----+----+----+----------+-----------------------+ | <th>MTU-S</th> | |||
|1|9000B|9000B| H | H | 9000 B | Endpoints attempt to | | <th>MTU-D</th> | |||
| | | | | | use a 9000 B PMTU. | | <th>R1</th> | |||
+-+-----+-----+----+----+----------+-----------------------+ | <th>R2</th> | |||
|2|9000B|1500B| H | H | 1500 B | Endpoints attempt to | | <th>Rec PMTU</th> | |||
| | | | | | | use a 1500 B PMTU. | | <th>Note</th> | |||
+-+-----+-----+----+----+----------+-----------------------+ | </tr> | |||
|3|9000B|1500B| H | - | 9000 B | Endpoints attempt to | | </thead> | |||
| | | | | | | use a 9000 B PMTU, | | <tbody> | |||
| | | | | | | but need to implement | | <tr> | |||
| | | | | | | a method to fall back | | <td>1</td> | |||
| | | | | | | to discover and use a | | <td>9000 B</td> | |||
| | | | | | | 1500 B PMTU. | | <td>9000 B</td> | |||
+-+-----+-----+----+----+----------+-----------------------+ | <td>H</td> | |||
<td>H</td> | ||||
]]></artwork> | <td>9000 B</td> | |||
</figure> | <td>Endpoints attempt to use a 9000 B PMTU.</td> | |||
</tr> | ||||
<tr> | ||||
<td>2</td> | ||||
<td>9000 B</td> | ||||
<td>1500 B</td> | ||||
<td>H</td> | ||||
<td>H</td> | ||||
<td>1500 B</td> | ||||
<td>Endpoints attempt to use a 1500 B PMTU.</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3</td> | ||||
<td>9000 B</td> | ||||
<td>1500 B</td> | ||||
<td>H</td> | ||||
<td>-</td> | ||||
<td>9000 B</td> | ||||
<td>Endpoints attempt to use a 9000 B PMTU but | ||||
need to implement a method to fall back to discover | ||||
and use a 1500 B PMTU.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | </section> | |||
<section anchor="Intro2" numbered="true" | <section anchor="Intro2" numbered="true" | |||
title="Use of the IPv6 Hop-by-Hop Options Header" toc="default"> | title="Use of the IPv6 Hop-by-Hop Options Header" toc="default"> | |||
<t>IPv6 as specified in <xref format="default" target="RFC8200" /> | <t>As specified in <xref format="default" target="RFC8200"/>, IPv6 | |||
allows nodes to optionally process the Hop-by-Hop header. | allows nodes to optionally process the Hop-by-Hop header. | |||
Specifically, from Section 4:</t> | Specifically, from <xref target="RFC8200" sectionFormat="of" section="4" | |||
format="default"/>:</t> | ||||
<ul spacing="normal"> | <blockquote> | |||
<li> | ||||
<t>The Hop-by-Hop Options header is not inserted or deleted, but | <t>The Hop-by-Hop Options header is not inserted or deleted, but | |||
may be examined or processed by any node along a packet's delivery | may be examined or processed by any node along a packet's delivery | |||
path, until the packet reaches the node (or each of the set of | path, until the packet reaches the node (or each of the set of | |||
nodes, in the case of multicast) identified in the Destination | nodes, in the case of multicast) identified in the Destination | |||
Address field of the IPv6 header. The Hop-by-Hop Options header, | Address field of the IPv6 header. The Hop-by-Hop Options header, | |||
when present, must immediately follow the IPv6 header. Its | when present, must immediately follow the IPv6 header. Its | |||
presence is indicated by the value zero in the Next Header field | presence is indicated by the value zero in the Next Header field | |||
of the IPv6 header.</t> | of the IPv6 header.</t> | |||
</li> | ||||
<li> | ||||
<t>NOTE: While <xref format="default" target="RFC2460" /> required | <t>NOTE: While <xref format="default" target="RFC2460" /> required | |||
that all nodes must examine and process the Hop-by-Hop Options | that all nodes must examine and process the Hop-by-Hop Options | |||
header, it is now expected that nodes along a packet's delivery | header, it is now expected that nodes along a packet's delivery | |||
path only examine and process the Hop-by-Hop Options header if | path only examine and process the Hop-by-Hop Options header if | |||
explicitly configured to do so.</t> | explicitly configured to do so.</t> | |||
</li> | </blockquote> | |||
</ul> | ||||
<t>The Hop-by-Hop Option defined in this document is designed to take | <t>The Hop-by-Hop Option defined in this document is designed to take | |||
advantage of this property of how Hop-by-Hop options are processed. | advantage of this property of how Hop-by-Hop Options are processed. | |||
Nodes that do not support this Option SHOULD ignore them. This can | Nodes that do not support this Option <bcp14>SHOULD</bcp14> ignore them. | |||
This can | ||||
mean that the Min-PMTU value does not account for all links along a | mean that the Min-PMTU value does not account for all links along a | |||
path.</t> | path.</t> | |||
<!-- | ||||
<t>The Hop-by-Hop option defined in this document is designed to work | ||||
with PMTUs up to 65,574 bytes (the maximum size represented by the | ||||
encoding format).</t> | ||||
--> | ||||
</section> | </section> | |||
</section> | </section> | |||
<!-- End of Into Section--> | ||||
<section anchor="motivation" numbered="true" | <section anchor="motivation" numbered="true" | |||
title="Motivation and Problem Solved" toc="default"> | title="Motivation and Problem Solved" toc="default"> | |||
<t>The current state of Path MTU Discovery on the Internet is | <t>The current state of Path MTU Discovery on the Internet is | |||
problematic. The mechanisms defined in <xref format="default" | problematic. The mechanisms defined in <xref format="default" | |||
target="RFC8201" /> are known to not work well in all environments. It | target="RFC8201" /> are known to not work well in all environments. It | |||
fails to work in various cases, including when nodes in the middle of | fails to work in various cases, including when nodes in the middle of | |||
the network do not send ICMPv6 PTB messages, or rate-limited ICMPv6 | the network do not send ICMPv6 PTB messages or rate-limited ICMPv6 | |||
messages, or do not have a return path to the source host.</t> | messages or do not have a return path to the source host. This results in | |||
many transport-layer connections being configured to | ||||
<t>This results in many transport layer connections being configured to | ||||
use smaller packets (e.g., 1280 bytes) by default and makes it difficult | use smaller packets (e.g., 1280 bytes) by default and makes it difficult | |||
to take advantage of paths with a larger PMTU where they do exist. | to take advantage of paths with a larger PMTU where they do exist. | |||
Applications that send large packets are forced to use IPv6 | Applications that send large packets are forced to use IPv6 | |||
Fragmentation <xref format="default" target="RFC8200" />, which can | fragmentation <xref format="default" target="RFC8200" />, which can | |||
reduce the reliability of Internet communication <xref format="default" | reduce the reliability of Internet communication <xref format="default" | |||
target="RFC8900" />.</t> | target="RFC8900" />.</t> | |||
<t>Encapsulations and network-layer tunnels further reduce the payload | <t>Encapsulations and network-layer tunnels further reduce the payload | |||
size available for a transport protocol to use. Also, some use-cases | size available for a transport protocol to use. Also, some use cases | |||
increase packet overhead, for example, Network Virtualization Using | increase packet overhead, for example, Network Virtualization Using | |||
Generic Routing Encapsulation (NVGRE) <xref format="default" | Generic Routing Encapsulation (NVGRE) <xref format="default" | |||
target="RFC7637" /> encapsulates L2 packets in an outer IP header and | target="RFC7637" /> encapsulates Layer 2 (L2) packets in an outer IP heade | |||
does not allow IP Fragmentation.</t> | r and | |||
does not allow IP fragmentation.</t> | ||||
<!-- | ||||
<t>Sending larger packets can improve host performance, e.g., | ||||
avoiding limits to packet processing by the packet rate. | ||||
The potential of multi-gigabit | ||||
Ethernet will only be realized if the packet size is increased above 1280 | ||||
bytes, to avoid exceeding a packet per second sending rate that | ||||
most hosts can process. | ||||
For example, the packet per second rate required to reach | ||||
wire speed on a 10G Ethernet link with 1280 byte packets is about 977K | ||||
packets per second (pps), vs. 139K pps for 9000 byte packets. A | ||||
significant difference.</t> | ||||
<t>Sending larger packets can improve host performance, e.g., avoiding | <t>Sending larger packets can improve host performance, e.g., avoiding | |||
limits to packet processing by the packet rate. For example, the packet | limits to packet processing by the packet rate. An example of this is how | |||
per second rate required to reach wire speed on a 10G link with 1280 | the | |||
byte packets is about 977K packets per second (pps), vs. 139K pps for | packet-per-second | |||
rate required to reach wire speed on a 10G link with 1280 | ||||
byte packets is about 977K packets per second (pps) vs. 139K pps for | ||||
9000 byte packets.</t> | 9000 byte packets.</t> | |||
<t>The purpose of this document is to improve the situation by defining | <t>The purpose of this document is to improve the situation by defining | |||
a mechanism that does not rely on reception of ICMPv6 Packet Too Big | a mechanism that does not rely on reception of ICMPv6 PTB | |||
messages from nodes in the middle of the network. Instead, this provides | messages from nodes in the middle of the network. Instead, this provides | |||
information to the destination host about the minimum Path MTU, and | information to the destination host about the Minimum Path MTU and | |||
sends this information back to the source host. This is expected to work | sends this information back to the source host. This is expected to work | |||
better than the current RFC8201-based mechanisms.</t> | better than the current mechanisms based on <xref target="RFC8201" | |||
format="default"/>.</t> | ||||
<t>A similar mechanism was proposed in 1988 for IPv4 in <xref | <t>A similar mechanism was proposed in 1988 for IPv4 in <xref | |||
format="default" target="RFC1063" /> by Jeff Mogul, C. Kent, Craig | format="default" target="RFC1063" /> by Jeff Mogul, C. Kent, Craig | |||
Partridge, and Keith McCloghire. It was later obsoleted in 1990 by <xref | Partridge, and Keith McCloghire. It was later obsoleted in 1990 by <xref | |||
format="default" target="RFC1191" />, the current deployed approach to | format="default" target="RFC1191" />, which is the current deployed approa ch to | |||
Path MTU Discovery. In contrast, the method described in this document | Path MTU Discovery. In contrast, the method described in this document | |||
uses the Hop-by-Hop option of IPv6. It does not replace PMTUD <xref | uses the Hop-by-Hop Option of IPv6. It does not replace PMTUD <xref | |||
format="default" target="RFC8201" />, PLPPMTUD <xref format="default" | format="default" target="RFC8201" />, Packetization Layer Path MTU Discove | |||
target="RFC4821" /> or Datagram PLPMTUD <xref format="default" | ry | |||
target="RFC8899" />, but rather is designed to compliment these | (PLPMTUD) <xref format="default" | |||
target="RFC4821" />, or Datagram Packetization Layer PMTU Discovery (DPLPM | ||||
TUD) <xref format="default" | ||||
target="RFC8899" /> but rather is designed to compliment these | ||||
methods.</t> | methods.</t> | |||
</section> | </section> | |||
<section numbered="true" title="Requirements Language" toc="default"> | <section numbered="true" title="Requirements Language" toc="default"> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp1 | |||
"OPTIONAL" in this document are to be interpreted as described in BCP 14 | 4>", | |||
<xref format="default" target="RFC2119" /> <xref format="default" | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED< | |||
/bcp14>", | ||||
"<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and | ||||
"<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as descri | ||||
bed in | ||||
BCP 14 <xref format="default" target="RFC2119" /> <xref format="defau | ||||
lt" | ||||
target="RFC8174" /> when, and only when, they appear in all capitals, as | target="RFC8174" /> when, and only when, they appear in all capitals, as | |||
shown here.</t> | shown here.</t> | |||
</section> | </section> | |||
<!-- Requirements Language --> | <section numbered="true" title="Applicability Statements" toc="default" | |||
anchor="app-state"> | ||||
<section numbered="true" title="Applicability Statements" toc="default"> | <t>The Path MTU Option is designed for environments where there is | |||
<t>The Path MTU option is designed for environments where there is | control over the hosts and nodes that connect them and where there is | |||
control over the hosts and nodes that connect them, and where there is | more than one MTU size in use, for example, in data centers and on paths | |||
more than one MTU size in use. For example, in Data Centers and on paths | between data centers to allow hosts to better take advantage of a path | |||
between Data Centers, to allow hosts to better take advantage of a path | ||||
that is able to support a large PMTU.</t> | that is able to support a large PMTU.</t> | |||
<t>The design of the option is sufficiently simple that it can be | <t>The design of the Option is so sufficiently simple that it can be | |||
executed on a router's fast path. A successful experiment depends on | executed on a router's fast path. A successful experiment depends on | |||
both implementation by host and router vendors and deployment by | both implementation by host and router vendors and deployment by | |||
operators. The contained use-case of connections within and between Data | operators. The contained use case of connections within and between data | |||
Centers could be a driver for deployment.</t> | centers could be a driver for deployment.</t> | |||
<t>The method could also be useful in other environments, including the | <t>The method could also be useful in other environments, including the | |||
general Internet, and offers advantage when this Hop-by-Hop Option is | general Internet, and offers an advantage when this Hop-by-Hop Option is | |||
supported on all paths. The method is more robust when used to probe the | supported on all paths. The method is more robust when used to probe the | |||
path using packets that do not carry application data and when also | path using packets that do not carry application data and when also | |||
paired with a method such as Packetization Layer PMTUD <xref | paired with a method like Packetization Layer PMTUD <xref | |||
format="default" target="RFC4821" /> or Datagram PLPMTUD <xref | format="default" target="RFC4821" /> or Datagram Packetization Layer PMTU | |||
Discovery (DPLPMTUD) <xref | ||||
format="default" target="RFC8899" />.</t> | format="default" target="RFC8899" />.</t> | |||
</section> | </section> | |||
<!-- Applicability Statements --> | ||||
<section anchor="HBH" numbered="true" | <section anchor="HBH" numbered="true" | |||
title="IPv6 Minimum Path MTU Hop-by-Hop Option" toc="default"> | title="IPv6 Minimum Path MTU Hop-by-Hop Option" toc="default"> | |||
<t>The Minimum Path MTU Hop-by-Hop Option has the following format:</t> | <t>The Minimum Path MTU Hop-by-Hop Option has the following format:</t> | |||
<figure> | <figure> | |||
<name>Format of the Minimum Path MTU Hop-by-Hop Option</name> | ||||
<artwork align="center" alt="" name="" type=""><![CDATA[ | <artwork align="center" alt="" name="" type=""><![CDATA[ | |||
Option Option Option | Option Option Option | |||
Type Data Len Data | Type Data Len Data | |||
+--------+--------+--------+--------+---------+-------+-+ | +--------+--------+--------+--------+---------+-------+-+ | |||
|BBCTTTTT|00000100| Min-PMTU | Rtn-PMTU |R| | |BBCTTTTT|00000100| Min-PMTU | Rtn-PMTU |R| | |||
+--------+--------+--------+--------+---------+-------+-+ | +--------+--------+--------+--------+---------+-------+-+ | |||
]]></artwork> | ||||
</figure> | ||||
Option Type (see Section 4.2 of [RFC8200]): | <t>Option Type (see <xref target="RFC8200" section="4.2" sectionFormat="of"/>):< | |||
/t> | ||||
BB 00 Skip over this option and continue processing. | <artwork align="center" alt="" name="" type=""><![CDATA[ | |||
BB 00 Skip over this Option and continue processing. | ||||
C 1 Option data can change en route to the packet's final | C 1 Option Data can change en route to the packet's final | |||
destination. | destination. | |||
TTTTT 10000 Option Type assigned from IANA [IANA-HBH]. | TTTTT 10000 Option Type assigned from IANA [IANA-HBH]. | |||
Length: 4 The size of the value field in Option Data | Length: 4 The size of the value field in Option Data | |||
field supports PMTU values from 0 to 65,534 octets, the | field supports PMTU values from 0 to 65,534 | |||
maximum size represented by the Path MTU option. | octets, the maximum size represented by the | |||
Path MTU Option. | ||||
Min-PMTU: n 16-bits. The minimum MTU recorded along the path | Min-PMTU: n 16-bits. The minimum MTU recorded along the path | |||
in octets, reflecting the smallest link MTU that | in octets, reflecting the smallest link MTU that | |||
the packet experienced along the path. | the packet experienced along the path. | |||
A value less than the IPv6 minimum link | A value less than the IPv6 minimum link | |||
MTU [RFC8200] MUST be ignored. | MTU [RFC8200] MUST be ignored. | |||
Rtn-PMTU: n 15-bits. The returned Path MTU field, carrying the 15 | Rtn-PMTU: n 15-bits. The returned Path MTU field, carrying the 15 | |||
most significant bits of the latest received Min-PMTU | most significant bits of the latest received Min-PMTU | |||
field for the forward path. The value zero means that | field for the forward path. The value zero means that | |||
no Reported MTU is being returned. | no Reported MTU is being returned. | |||
R n 1-bit. R-Flag. Set by the source to signal that | R n 1-bit. R-Flag. Set by the source to signal that | |||
the destination host should include the received | the destination host should include the received | |||
Rtn-PMTU field updated by the reported Min-PMTU value | Rtn-PMTU field updated by the reported Min-PMTU value | |||
when the destination host is to send a PMTU Option back | when the destination host is to send a PMTU Option back | |||
to the source host. | to the source host. | |||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
<t>NOTE: The encoding of the final two octets (Rtn-PMTU and R-Flag) | <t>NOTE: The encoding of the final two octets (Rtn-PMTU and R-Flag) | |||
could be implemented by a mask of the latest received Min-PMTU value | could be implemented by a mask of the latest received Min-PMTU value | |||
with 0xFFFE, discarding the right-most bit and then performing a logical | with 0xFFFE, discarding the right-most bit and then performing a logical | |||
'OR' with the R-Flag value of the sender. This encoding fits in the | 'OR' with the R-Flag value of the sender. This encoding fits in the | |||
minimum-sized Hop-by-Hop Option header.</t> | minimum-sized Hop-by-Hop Option header.</t> | |||
</section> | </section> | |||
<!-- End of Option Defination section --> | ||||
<section anchor="Behavior" numbered="true" | <section anchor="Behavior" numbered="true" | |||
title="Router, Host, and Transport Layer Behaviors" toc="default"> | title="Router, Host, and Transport Layer Behaviors" toc="default"> | |||
<section anchor="router" numbered="true" title="Router Behavior" | <section anchor="router" numbered="true" title="Router Behavior" | |||
toc="default"> | toc="default"> | |||
<t>Routers that are not configured to support Hop-by-Hop Options are | <t>Routers that are not configured to support Hop-by-Hop Options are | |||
not expected to examine or process the contents of this option <xref | not expected to examine or process the contents of this Option <xref | |||
format="default" target="RFC8200" />.</t> | format="default" target="RFC8200" />.</t> | |||
<!-- | <t>Routers that support Hop-by-Hop Options but are not configured to | |||
<t>Routers that are not configured to support Hop-by-Hop Options | support this Option <bcp14>SHOULD</bcp14> skip over this Option and cont | |||
SHOULD ignore this option and SHOULD forward the packet <xref | inue to | |||
format="default" target="RFC8200" />.</t> | process the header <xref format="default" target="RFC8200" />.</t> | |||
<t>PROPOSED by Alvaro Retana</t> | ||||
<ul> | ||||
<li><t>Routers that are not configured to support Hop-by-Hop Options | ||||
are not expected to examine or process the contents | ||||
<xref format="default" target="RFC8200" />.</t></li> | ||||
</ul> | ||||
<t>Routers that support Hop-by-Hop Options, but are not configured to | ||||
support this option SHOULD skip over this option and continue to | ||||
processing the header <xref format="default" target="RFC8200" />.</t> | ||||
<!-- | ||||
<t>Routers that support Hop-by-Hop Options, but that are not | ||||
configured to support this option SHOULD ignore the option and SHOULD | ||||
forward the packet.</t> | ||||
<t>PROPOSED by Alvaro Retana</t> | ||||
<ul> | ||||
<li><t>Routers that support Hop-by-Hop Options, but that do not | ||||
recognize this new option will skip over the option and continue | ||||
processing the header.<xref format="default" target="RFC8200" />.</t> </l | ||||
i> | ||||
</ul> | ||||
<t>Routers that support this option MUST compare the value of the | <t>Routers that support this Option <bcp14>MUST</bcp14> compare the valu e of the | |||
Min-PMTU field with the MTU configured for the outgoing link. If the | Min-PMTU field with the MTU configured for the outgoing link. If the | |||
MTU of the outgoing link is less than the Min-PMTU, the router | MTU of the outgoing link is less than the Min-PMTU, the router | |||
rewrites the Min-PMTU in the Option to use the smaller value. (The | rewrites the Min-PMTU in the Option to use the smaller value. (The | |||
router processing is performed without checking the valid range of the | router processing is performed without checking the valid range of the | |||
Min-PMTU or the Rtn-PMTU fields.)</t> | Min-PMTU or the Rtn-PMTU fields.)</t> | |||
<t>A router MUST ignore and MUST NOT change the Rtn-PMTU field or the | <t>A router <bcp14>MUST</bcp14> ignore and <bcp14>MUST NOT</bcp14> chang | |||
R-Flag in the option.</t> | e the | |||
Rtn-PMTU field or the R-Flag in the Option.</t> | ||||
<!-- | ||||
<t>Discussion:</t> | ||||
<ul spacing="normal"> | ||||
<li> | ||||
<t>The design of this option makes it feasible to be implemented | ||||
within the fast path of a router, because the processing | ||||
requirements are minimal.</t> | ||||
</li> | ||||
</ul> | ||||
</section> | </section> | |||
<!--End of Router Behavior subsection--> | ||||
<section anchor="host-os" numbered="true" | <section anchor="host-os" numbered="true" | |||
title="Host Operating System Behavior" toc="default"> | title="Host Operating System Behavior" toc="default"> | |||
<!-- | ||||
<t>The PMTU entry associated with the destination in the IP | ||||
layer cache can be updated using PMTUD after detecting a change | ||||
using the IPv6 Minimum Path MTU Hop-by-Hop Option. This cached | ||||
value can be used by other flows that share the IP cache.</t> | ||||
<t>The PMTU entry associated with the destination in the host's | <t>The PMTU entry associated with the destination in the host's | |||
destination cache <xref format="default" target="RFC4861" /> SHOULD be | destination cache <xref format="default" target="RFC4861" /> | |||
<bcp14>SHOULD</bcp14> be | ||||
updated after detecting a change using the IPv6 Minimum Path MTU | updated after detecting a change using the IPv6 Minimum Path MTU | |||
Hop-by-Hop Option. This cached value can be used by other flows that | Hop-by-Hop Option. This cached value can be used by other flows that | |||
share the host's destination cache.</t> | share the host's destination cache.</t> | |||
<!-- | <t>The value in the host destination cache <bcp14>SHOULD</bcp14> be used | |||
** Watch out for confusing use of PMTUD? Is it referring to 8201 or this mechani | by | |||
sm? | PLPMTUD to select an initial PMTU for a flow. The cached PMTU is only | |||
<!-- | ||||
<t>The value in the host IP layer cache could, for instance, be | ||||
used by PLPMTUD to select an initial PMTU for each flow before | ||||
a flow determines a PMTU for the specific path it is using | ||||
(e.g., using the IPv6 Minimum Path MTU Hop-by-Hop Option and | ||||
DPLPMTUD). The cached PMTU is only increased by PLPMTUD when | ||||
the PL determines the path actually supports a larger PMTU | ||||
<xref format="default" target="RFC4821" /> <xref | ||||
format="default" target="RFC8899" />. | ||||
</t> | ||||
<t>The value in the host destination cache SHOULD be used by PLPMTUD | ||||
to select an initial PMTU for a flow. The cached PMTU is only | ||||
increased by PLPMTUD when the Packetization Layer determines the path | increased by PLPMTUD when the Packetization Layer determines the path | |||
actually supports a larger PMTU <xref format="default" | actually supports a larger PMTU <xref format="default" | |||
target="RFC4821" /> <xref format="default" target="RFC8899" />.</t> | target="RFC4821" /> <xref format="default" target="RFC8899" />.</t> | |||
<t>When requested to send an IPv6 packet with the MinPMTU HBH | <t>When requested to send an IPv6 packet with the MinPMTU HBH | |||
option, the source host includes the option in an outgoing packet. The | Option, the source host includes the Option in an outgoing packet. The | |||
source host MUST fill the Min-PMTU field with the MTU configured for | source host <bcp14>MUST</bcp14> fill the Min-PMTU field with the MTU | |||
the link over which it will send the packet on the next hop towards | configured for the link over which it will send the packet on the next ho | |||
p towards | ||||
the destination host.</t> | the destination host.</t> | |||
<t>When a host includes the option in a packet it sends, the host | <t>When a host includes the Option in a packet it sends, the host | |||
SHOULD set the Rtn-PMTU field to the previously cached value of the | <bcp14>SHOULD</bcp14> set the Rtn-PMTU field to the previously cached va | |||
lue of the | ||||
received Minimum Path MTU for the flow in the Rtn-PMTU field (see | received Minimum Path MTU for the flow in the Rtn-PMTU field (see | |||
<xref target="transportrec" />). If this value is not set (for | <xref target="transportrec" />). If this value is not set (for | |||
example, because there is no cached reported Min-PMTU value), the | example, because there is no cached reported Min-PMTU value), the | |||
Rtn-PMTU field value MUST be set to zero.</t> | Rtn-PMTU field value <bcp14>MUST</bcp14> be set to zero.</t> | |||
<t>The source host MAY request the destination host to return the | <t>The source host <bcp14>MAY</bcp14> request the destination host to re | |||
reported Min-PMTU value by setting the R-Flag in the option of an | turn the | |||
outgoing packet. The R-Flag SHOULD NOT be set when the MinPMTU | reported Min-PMTU value by setting the R-Flag in the Option of an | |||
outgoing packet. The R-Flag <bcp14>SHOULD NOT</bcp14> be set when the Mi | ||||
nPMTU | ||||
HBH Option was sent solely to provide requested feedback on the return | HBH Option was sent solely to provide requested feedback on the return | |||
Path MTU to avoid each response generating another response.</t> | Path MTU to avoid each response generating another response.</t> | |||
<t>The destination host controls when to send a packet with this | <t>The destination host controls when to send a packet with this | |||
option in response to an R-flag, as well as which packets to include | Option in response to an R-Flag, as well as which packets to include | |||
it in. The destination host MAY limit the rate at which it sends these | it in. The destination host <bcp14>MAY</bcp14> limit the rate at which i | |||
t sends these | ||||
packets.</t> | packets.</t> | |||
<t>A destination host only sets the R Flag if it wishes the source | <t>A destination host only sets the R-Flag if it wishes the source | |||
host to also return the discovered PMTU value for the path from the | host to also return the discovered PMTU value for the path from the | |||
destination to the source.</t> | destination to the source.</t> | |||
<!-- | ||||
<t>The normal sequence of operation of the R-Flag using the terminolog | ||||
y from | ||||
the diagram in Figure 1 is:</t> | ||||
<ol type="1"> | ||||
<li><t>Sender sends probe to Dest. Sender MUST set the R-Flag</t></li | ||||
> | ||||
<li><t>Dest responds by sending a probe including the | ||||
received Min-PMTU as the Rtn-PMTU. Dest sets R-Flag only if response | ||||
is | ||||
desired</t></li> | ||||
<li><t>Sender sends response probe back to Dest, MUST NOT set | ||||
R-Flag.</t></li> | ||||
</ol> | ||||
<t>The normal sequence of operation of the R-Flag using the | <t>The normal sequence of operation of the R-Flag using the | |||
terminology from the diagram in Figure 1 is:</t> | terminology from the diagram in <xref target="fig1"/> is:</t> | |||
<ol type="1"> | <ol type="1"> | |||
<li> | <li> | |||
<t>The source sends a probe to the destination. The sender sets | <t>The source sends a probe to the destination. The sender sets | |||
the R-Flag.</t> | the R-Flag.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>The destination responds by sending a probe including the | <t>The destination responds by sending a probe including the | |||
received Min-PMTU as the Rtn-PMTU. A destination that does not | received Min-PMTU as the Rtn-PMTU. A destination that does not | |||
wish to probe the return path sets the R-Flag to 0.</t> | wish to probe the return path sets the R-Flag to 0.</t> | |||
</li> | </li> | |||
</ol> | </ol> | |||
</section> | </section> | |||
<!-- End of Host OS section--> | ||||
<section anchor="Transport" numbered="true" | <section anchor="Transport" numbered="true" | |||
title="Transport Layer Behavior" toc="default"> | title="Transport Layer Behavior" toc="default"> | |||
<t>This Hop-by-Hop option is intended to be used with a path MTU | <t>This Hop-by-Hop Option is intended to be used with a Path MTU | |||
discovery method.</t> | Discovery method.</t> | |||
<!-- | ||||
<t>Section 4.1 of <xref format="default" target="RFC9000" /> | ||||
describes different types of PMTU Probe, depending on whether the | ||||
probe packets carry application data. When the path is expected to | ||||
support use of the option, the PMTU Probe can be sent on packets | ||||
that include application data, but needs to be robust to potential | ||||
loss of the packet with the possibility that retransmission might be | ||||
needed. Using a PMTU Probe on packets that do not carry application | ||||
data will avoid the need for loss recovery if a router on the path | ||||
later drops packets that set this option. | ||||
This avoids the transport needing to retransmit a lost packet | ||||
that includes this option. </t> | ||||
<t>PLPMTUD <xref format="default" target="RFC9000" /> uses probe | <t>PLPMTUD <xref format="default" target="RFC8899" /> uses probe | |||
packets for two distinct functions:</t> | packets for two distinct functions:</t> | |||
<ul> | <ul> | |||
<li>Probe packets are used to confirm connectivity. Such probes can | <li>Probe packets are used to confirm connectivity. Such probes can | |||
be of any size up to the PLPMTU. These probe packets are sent to | be of any size up to the Packetization Layer Path MTU (PLPMTU). These | |||
solicit a response use the path to the remote node. These probe | probe packets are sent to | |||
packets can carry the Hop-by-Hop PMTU option, providing the final | solicit a response using the path to the remote node. These probe | |||
packets can carry the Hop-by-Hop PMTU Option, providing the final | ||||
size of the packet does not exceed the current PLPMTU. After | size of the packet does not exceed the current PLPMTU. After | |||
validating that the packet originates from the path (section 4.6.1), | validating that the packet originates from the path (<xref target="RFC | |||
the PLPMTUD method can use the reported size from the Hop-by-Hop optio | 8899" | |||
n as | section="4.6.1" sectionFormat="of"/>), | |||
the PLPMTUD method can use the reported size from the Hop-by-Hop Optio | ||||
n as | ||||
the next search point when it resumes the search algorithm. (This | the next search point when it resumes the search algorithm. (This | |||
use resembles the use of the PTB_SIZE information in section 4.6.2 | use resembles the use of the PTB_SIZE information in <xref format="def | |||
of <xref format="default" target="RFC8899" /></li> | ault" | |||
target="RFC8899" section="4.6.2" sectionFormat="of"/>.)</li> | ||||
<li>A second use of probe packets is to explore if a path supports a | <li>A second use of probe packets is to explore if a path supports a | |||
packet size greater than the current PLPMTU. If this probe packet is | packet size greater than the current PLPMTU. If this probe packet is | |||
successfully delivered (as determined by the source host), then the | successfully delivered (as determined by the source host), then the | |||
PLPMTU is raised to the size of the successful probe. These probe | PLPMTU is raised to the size of the successful probe. These probe | |||
packets do not usually set the Path MTU Hop-by-Hop option. See | packets do not usually set the Path MTU Hop-by-Hop Option. See | |||
section 1.2 of <xref format="default" target="RFC8899" />. Section | <xref target="RFC8899" section="1.2" sectionFormat="of"/>. <xref | |||
4.1 of <xref format="default" target="RFC8899" /> also describes | format="default" target="RFC8899" section="4.1" sectionFormat="of"/> al | |||
ways that a Probe Packet can be constructed, depending on whether | so | |||
describes ways that a probe packet can be constructed, depending on whe | ||||
ther | ||||
the probe packets carry application data.</li> | the probe packets carry application data.</li> | |||
</ul> | ||||
<li>The PMTU Hop-by-Hop Option Probe can be sent on packets that | <t>The PMTU Hop-by-Hop Option probe can be sent on packets that | |||
include application data, but needs to be robust to potential loss | include application data but needs to be robust to potential loss | |||
of the packet (i.e., with the possibility that retransmission might | of the packet (i.e., with the possibility that retransmission might | |||
be needed if the packet is lost).</li> | be needed if the packet is lost).</t> | |||
<li>Using a PMTU Probe on packets that do not carry application data | <t>Using a PMTU probe on packets that do not carry application data | |||
will avoid the need for loss recovery if a router on the path drops | will avoid the need for loss recovery if a router on the path drops | |||
packets that set this option. (This avoids the transport needing to | packets that set this Option. (This avoids the transport needing to | |||
retransmit a lost packet that includes this option.) This is the | retransmit a lost packet that includes this Option.) This is the | |||
normal default format for both uses of probes.</li> | normal default format for both uses of probes.</t> | |||
</ul> | ||||
<!-- subsections... --> | ||||
<section anchor="transportsend" numbered="true" | <section anchor="transportsend" numbered="true" | |||
title="Including the Option in an Outgoing Packet" | title="Including the Option in an Outgoing Packet" | |||
toc="default"> | toc="default"> | |||
<t>The upper layer protocol can request the MinPMTU HBH option | <t>The upper-layer protocol can request the MinPMTU HBH Option | |||
to be included in an outgoing IPv6 packet. A transport protocol (or | to be included in an outgoing IPv6 packet. A transport protocol (or | |||
upper layer protocol) can include this option only on specific | upper-layer protocol) can include this Option only on specific | |||
packets used to test the path. This option does not need to be | packets used to test the path. This Option does not need to be | |||
included in all packets belonging to a flow.</t> | included in all packets belonging to a flow.</t> | |||
<t>NOTE: Including this option in a large packet (e.g., one larger | <t>NOTE: Including this Option in a large packet (e.g., one larger | |||
than the present PMTU) is not likely to be useful, since the large | than the present PMTU) is not likely to be useful, since the large | |||
packet would itself be dropped by any link along the path with a | packet would itself be dropped by any link along the path with a | |||
smaller MTU, preventing the Min-PMTU information from reaching the | smaller MTU, preventing the Min-PMTU information from reaching the | |||
destination host.</t> | destination host.</t> | |||
<t>Discussion:</t> | <t>Discussion:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li> | <li> | |||
<t>In the case of TCP, the option could be included in a packet | <t>In the case of TCP, the Option could be included in a packet | |||
that carries a TCP segment sent after the connection is | that carries a TCP segment sent after the connection is | |||
established. A segment without data could be used, to avoid the | established. A segment without data could be used to avoid the | |||
need to retransmit this data if the probe packet is lost. The | need to retransmit this data if the probe packet is lost. The | |||
discovered value can be used to inform PLPMTUD <xref | discovered value can be used to inform PLPMTUD <xref | |||
format="default" target="RFC4821" />.</t> | format="default" target="RFC4821" />.</t> | |||
<t>NOTE: A TCP SYN can also negotiate the Maximum Segment Size | <t>NOTE: A TCP SYN can also negotiate the Maximum Segment Size | |||
(MSS), which acts as an upper limit to the packet size that can | (MSS), which acts as an upper limit to the packet size that can | |||
be sent by a TCP sender. If this option were to be included in a | be sent by a TCP sender. If this Option were to be included in a | |||
TCP SYN, it could increase the probability that the SYN segment | TCP SYN, it could increase the probability that the SYN segment | |||
is lost when routers on the path drop packets with this option | is lost when routers on the path drop packets with this Option | |||
(see <xref target="HBHblackhole" />), which could have an | (see <xref target="HBHblackhole" />), which could have an | |||
unwanted impact on the result of racing options <xref | unwanted impact on the result of racing Options <xref | |||
format="default" target="I-D.ietf-taps-arch" /> or feature | format="default" target="I-D.ietf-taps-arch" /> or feature | |||
negotiation.</t> | negotiation.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>The use with datagram transport protocols (e.g., UDP) is | <t>The use with datagram transport protocols (e.g., UDP) is | |||
harder to characterize because applications using datagram | harder to characterize because applications using datagram | |||
transports range from very short-lived (low data-volume | transports range from very short-lived (low data-volume | |||
applications) exchanges, to longer (bulk) exchanges of packets | applications) exchanges to longer (bulk) exchanges of packets | |||
between the source and destination hosts <xref format="default" | between the source and destination hosts <xref format="default" | |||
target="RFC8085" />.</t> | target="RFC8085" />.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>Simple-exchange protocols (i.e., low data-volume applications | <t>Simple-exchange protocols (i.e., low data-volume applications | |||
<xref format="default" target="RFC8085" /> that only send one or | <xref format="default" target="RFC8085" /> that only send one or | |||
a few packets per transaction), might assume that the PMTU is | a few packets per transaction) might assume that the PMTU is | |||
symmetrical. That is, the PMTU is the same in both directions, | symmetrical. That is, the PMTU is the same in both directions | |||
or at least not smaller for the return path. This optimization | or at least not smaller for the return path. This optimization | |||
does not hold when the paths are not symmetric.</t> | does not hold when the paths are not symmetric.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>The MinPMTU HBH option can be used with ICMPv6 | <t>The MinPMTU HBH Option can be used with ICMPv6 | |||
<xref format="default" target="RFC4443" />. This requires a | <xref format="default" target="RFC4443" />. This requires a | |||
response from the remote node and therefore is restricted to use | response from the remote node and therefore is restricted to use | |||
with ICMPv6 echo messages. The MinPMTU HBH option | with ICMPv6 echo messages. The MinPMTU HBH Option | |||
could provide additional information about the PMTU that might | could provide additional information about the PMTU that might | |||
be supported by a path. This could be use as a diagnostic tool | be supported by a path. This could be used as a diagnostic tool | |||
to measure the PMTU of a path. As with other uses, the actual | to measure the PMTU of a path. As with other uses, the actual | |||
supported PMTU is only confirmed after receiving a response to a | supported PMTU is only confirmed after receiving a response to a | |||
subsequent probe of the PMTU size.</t> | subsequent probe of the PMTU size.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>A datagram transport can utilise DPLPMTUD <xref | <t>A datagram transport can utilize DPLPMTUD <xref format="default | |||
format="default" target="RFC8899" />. For example, QUIC (see | " | |||
section 14.3 of <xref format="default" target="RFC9000" />), can | target="RFC8899" />. For | |||
example, QUIC (see <xref format="default" target="RFC9000" | ||||
sectionFormat="of" section="14.3"/>) can | ||||
use DPLPMTUD to determine whether the path to a destination will | use DPLPMTUD to determine whether the path to a destination will | |||
support a desired maximum datagram size. When using the IPv6 | support a desired maximum datagram size. When using the IPv6 | |||
MinPMTU HBH option, the option could be added to an | MinPMTU HBH Option, the Option could be added to an | |||
additional QUIC PMTU Probe that is of minimal size (or one no | additional QUIC PMTU probe that is of minimal size (or one no | |||
larger than the currently supported PMTU size). Once the return | larger than the currently supported PMTU size). Once the return | |||
Path MTU value in the MinPMTU HBH option has been | Path MTU value in the MinPMTU HBH Option has been | |||
learned, DPLPMTUD can be triggered to test for a larger PLPMTU | learned, DPLPMTUD can be triggered to test for a larger PLPMTU | |||
using an appropriately sized PLPMTU Probe Packet (see section | using an appropriately sized PLPMTU probe packet (see <xref | |||
5.3.1 of <xref format="default" target="RFC8899" />).</t> | format="default" target="RFC8899" sectionFormat="of" section="5.3.1 | |||
"/>).</t> | ||||
</li> | </li> | |||
<li> | <li> | |||
<t>The use of this option with DNS and DNSSEC over UDP is | <t>The use of this Option with DNS and DNSSEC over UDP is | |||
expected to work for paths where the PMTU is symmetric. The DNS | expected to work for paths where the PMTU is symmetric. The DNS | |||
server will learn the PMTU from the DNS query messages. If the | server will learn the PMTU from the DNS query messages. If the | |||
Rtn-PMTU value is smaller, then a large DNSSEC response might be | Rtn-PMTU value is smaller, then a large DNSSEC response might be | |||
dropped and the known problems with PMTUD will then occur. DNS | dropped and the known problems with PMTUD will then occur. DNS | |||
and DNSSEC over transport protocols that can carry the PMTU | and DNSSEC over transport protocols that can carry the PMTU | |||
ought to work.</t> | ought to work.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>This method also can be used with Anycast to discover the | <t>This method also can be used with anycast to discover the | |||
PMTU of the path, but the use needs to be aware that the Anycast | PMTU of the path, but the use needs to be aware that the anycast | |||
binding might change.</t> | binding might change.</t> | |||
</li> | </li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<!-- End of IPv6 outgoing transport processing --> | ||||
<section anchor="transportvalid" numbered="true" | <section anchor="transportvalid" numbered="true" | |||
title="Validation of the Packet that includes the Option" | title="Validation of the Packet that Includes the Option" | |||
toc="default"> | toc="default"> | |||
<t>An upper layer protocol (e.g., transport endpoint) using this | <t>An upper-layer protocol (e.g., transport endpoint) using this | |||
option needs to provide protection from data injection attacks by | Option needs to provide protection from data injection attacks by | |||
off-path devices <xref format="default" target="RFC8085" />. This | off-path devices <xref format="default" target="RFC8085" />. This | |||
requires a method to assure that the information in the Option Data | requires a method to assure that the information in the Option Data | |||
is provided by a node on the path. This validates that the packet | is provided by a node on the path. This validates that the packet | |||
forms a part of an existing flow, using context available at the | forms a part of an existing flow, using context available at the | |||
upper layer. For example, a TCP connection or UDP application that | upper layer. For example, a TCP connection or UDP application that | |||
maintains the related state and uses a randomized ephemeral port | maintains the related state and uses a randomized ephemeral port | |||
would provide this basic validation to protect from off-path data | would provide this basic validation to protect from off-path data | |||
injection, see Section 5.1 of <xref format="default" | injection; see <xref format="default" target="RFC8085" sectionFormat=" | |||
target="RFC8085" />. IPsec <xref format="default" | of" | |||
section="5.1"/>. IPsec <xref format="default" | ||||
target="RFC4301" /> and TLS <xref format="default" | target="RFC4301" /> and TLS <xref format="default" | |||
target="RFC8446" /> provide greater assurance.</t> | target="RFC8446" /> provide greater assurance.</t> | |||
<t>The upper layer discards any received packet when the packet | <t>The upper layer discards any received packet when the packet | |||
validation fails. When packet validation fails, the upper layer MUST | validation fails. When packet validation fails, the upper layer <bcp14 >MUST</bcp14> | |||
also discard the associated Option Data from the MinPMTU HBH | also discard the associated Option Data from the MinPMTU HBH | |||
option without further processing.</t> | Option without further processing.</t> | |||
</section> | </section> | |||
<!-- End of Validation --> | ||||
<section anchor="transportrec" numbered="true" | <section anchor="transportrec" numbered="true" | |||
title="Receiving the Option" toc="default"> | title="Receiving the Option" toc="default"> | |||
<t>For a connection-oriented upper layer protocol, caching of the | <t>For a connection-oriented upper-layer protocol, caching of the | |||
received Min-PMTU could be implemented by saving the value in the | received Min-PMTU could be implemented by saving the value in the | |||
connection context at the transport layer. A connection-less upper | connection context at the transport layer. A connectionless upper | |||
layer (e.g., one using UDP), requires the upper layer protocol to | layer (e.g., one using UDP) requires the upper-layer protocol to | |||
cache the value for each flow it uses.</t> | cache the value for each flow it uses.</t> | |||
<t>A destination host that receives a MinPMTU HBH Option with | <t>A destination host that receives a MinPMTU HBH Option with | |||
the R-Flag SHOULD include the MinPMTU HBH option in the next | the R-Flag <bcp14>SHOULD</bcp14> include the MinPMTU HBH Option in the next | |||
outgoing IPv6 packet for the corresponding flow.</t> | outgoing IPv6 packet for the corresponding flow.</t> | |||
<t>A simple mechanism could only include this option (with the | <t>A simple mechanism could only include this Option (with the | |||
Rtn-PMTU field set) the first time this option is received or when | Rtn-PMTU field set) the first time this Option is received or when | |||
it notifies a change in the Minimum Path MTU. This limits the number | it notifies a change in the Minimum Path MTU. This limits the number | |||
of packets including the option packets that are sent. However, this | of packets, including the Option packets, that are sent. However, this | |||
does not provide robustness to packet loss or recovery after a | does not provide robustness to packet loss or recovery after a | |||
sender loses state.</t> | sender loses state.</t> | |||
<t>Discussion:</t> | <t>Discussion:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li> | <li> | |||
<t>Some upper layer protocols send packets less frequently than | <t>Some upper-layer protocols send packets less frequently than | |||
the rate at which the host receives packets. This provides less | the rate at which the host receives packets. This provides less | |||
frequent feedback of the received Rtn-PMTU value. However, a | frequent feedback of the received Rtn-PMTU value. However, a | |||
host always sends the most recent Rtn-PMTU value.</t> | host always sends the most recent Rtn-PMTU value.</t> | |||
</li> | </li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<!-- End of IPv6 incoming transport processing --> | ||||
<section anchor="Rtn-MTU" numbered="true" | <section anchor="Rtn-MTU" numbered="true" | |||
title="Using the Rtn-PMTU Field" toc="default"> | title="Using the Rtn-PMTU Field" toc="default"> | |||
<t>The Rtn-PMTU field provides an indication of the PMTU from | <t>The Rtn-PMTU field provides an indication of the PMTU from | |||
on-path routers. It does not necessarily reflect the actual PMTU | on-path routers. It does not necessarily reflect the actual PMTU | |||
between the source and destination hosts. Care therefore needs to be | between the source and destination hosts. Care therefore needs to be | |||
exercised in using the Rtn-PMTU value. Specifically:</t> | exercised in using the Rtn-PMTU value. Specifically:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>The actual PMTU can be lower than the Rtn-PMTU value because | <li>The actual PMTU can be lower than the Rtn-PMTU value because | |||
the Min-PMTU field was not updated by a router on the path that | the Min-PMTU field was not updated by a router on the path that | |||
did not process the option.</li> | did not process the Option.</li> | |||
<li>The actual PMTU may be lower than the Rtn-PMTU value because | <li>The actual PMTU may be lower than the Rtn-PMTU value because | |||
there is a layer-2 device with a lower MTU.</li> | there is a Layer 2 device with a lower MTU.</li> | |||
<li>The actual PMTU may be larger than the Rtn-PMTU value because | <li>The actual PMTU may be larger than the Rtn-PMTU value because | |||
of a corrupted, delayed or mis-ordered response. A source host | of a corrupted, delayed, or misordered response. A source host | |||
MUST ignore a Rtn-PMTU value larger than the MTU configured for | <bcp14>MUST</bcp14> ignore a Rtn-PMTU value larger than the MTU conf | |||
igured for | ||||
the outgoing link.</li> | the outgoing link.</li> | |||
<li>The path might have changed between the time when the probe | <li>The path might have changed between the time when the probe | |||
was sent and when the Rtn-PMTU value received.</li> | was sent and when the Rtn-PMTU value received.</li> | |||
</ul> | </ul> | |||
<t>IPv6 requires that every link in the Internet have an MTU of 1280 | <t>IPv6 requires that every link in the Internet have an MTU of 1280 | |||
octets or greater. A node MUST ignore a Rtn-PMTU value less than | octets or greater. A node <bcp14>MUST</bcp14> ignore a Rtn-PMTU value less than | |||
1280 octets <xref format="default" target="RFC8200" />.</t> | 1280 octets <xref format="default" target="RFC8200" />.</t> | |||
<t>To avoid unintentional dropping of packets that exceed the actual | <t>To avoid unintentional dropping of packets that exceed the actual | |||
PMTU (e.g., Scenario 3 in <xref target="Intro1" />), the source host | PMTU (e.g., Scenario 3 in <xref target="Intro1" />), the source host | |||
can delay increasing the PMTU until a probe packet with the size of | can delay increasing the PMTU until a probe packet with the size of | |||
the Rtn-PMTU value has been successfully acknowledged by the upper | the Rtn-PMTU value has been successfully acknowledged by the upper | |||
layer, confirming that the path supports the larger PMTU. This | layer, confirming that the path supports the larger PMTU. This | |||
probing increases robustness, but adds one additional path round | probing increases robustness but adds one additional path round-trip | |||
trip time before the PMTU is updated. This use resembles that of PTB | time before the PMTU is updated. This use resembles that of PTB | |||
messages in section 4.6 of DPLPMTUD <xref format="default" | messages in <xref format="default" target="RFC8899" | |||
target="RFC8899" /> (with the important difference that a PTB | sectionFormat="of" section="4.6">DPLPMTUD</xref> (with the important di | |||
message can only seek to lower the PMTU, whereas this option could | fference | |||
trigger a probe packet to seek to increase the PMTU.)</t> | being that a PTB | |||
message can only seek to lower the PMTU, whereas this Option could | ||||
trigger a probe packet to seek to increase the PMTU).</t> | ||||
<t>Section 5.2 of <xref format="default" target="RFC8201" /> | <t><xref format="default" target="RFC8201" sectionFormat="of" section= "5.2"/> | |||
provides guidance on the caching of PMTU information and also the | provides guidance on the caching of PMTU information and also the | |||
relation to IPv6 flow labels. Implementations should consider the | relation to IPv6 flow labels. Implementations should consider the | |||
impact of Equal Cost Multipath (ECMP) <xref format="default" | impact of Equal-Cost Multipath (ECMP) <xref format="default" | |||
target="RFC6438" />. Specifically, whether a PMTU ought to be | target="RFC6438" />, specifically, whether a PMTU ought to be | |||
maintained for each transport endpoint, or for each network | maintained for each transport endpoint or for each network | |||
address.</t> | address.</t> | |||
</section> | </section> | |||
<!-- End of Rtn-MTU --> | ||||
<section numbered="true" title="Detecting Path Changes" toc="default"> | <section numbered="true" title="Detecting Path Changes" toc="default"> | |||
<t>Path characteristics can change and the actual PMTU could | <t>Path characteristics can change, and the actual PMTU could | |||
increase or decrease over time. For instance, following a path | increase or decrease over time, for instance, following a path | |||
change when packets are forwarded over a link with a different MTU | change when packets are forwarded over a link with a different MTU | |||
than that previously used. To bound the delay in discovering an | than that previously used. To bound the delay in discovering an | |||
increase in the actual PMTU, a host with a link MTU larger than the | increase in the actual PMTU, a host with a link MTU larger than the | |||
current PMTU SHOULD periodically send the MinPMTU HBH Option | current PMTU <bcp14>SHOULD</bcp14> periodically send the MinPMTU HBH O ption | |||
with the R-bit set. DPLPMTUD provides recommendations concerning how | with the R-bit set. DPLPMTUD provides recommendations concerning how | |||
this could be implemented (see Section 5.3 of <xref format="default" | this could be implemented (see <xref format="default" target="RFC8899" | |||
target="RFC8899" />). Since the option consumes less capacity than a | sectionFormat="of" section="5.3"/>). Since the Option consumes less cap | |||
full-sized probe packet, there can be advantage in using this to | acity | |||
than a full-sized probe packet, there can be an advantage in using this | ||||
to | ||||
detect a change in the path characteristics.</t> | detect a change in the path characteristics.</t> | |||
</section> | </section> | |||
<!-- End of Detecting Path Changes --> | ||||
<section anchor="HBHblackhole" numbered="true" | <section anchor="HBHblackhole" numbered="true" | |||
title="Detection of Dropping Packets that include the Option" | title="Detection of Dropping Packets that Include the Option" | |||
toc="default"> | toc="default"> | |||
<t>There is evidence that some middleboxes drop packets that include | <t>There is evidence that some middleboxes drop packets that include | |||
Hop-by-Hop options. For example, a firewall might drop a packet that | Hop-by-Hop Options. For example, a firewall might drop a packet that | |||
carries an unknown extension header or option. This practice is | carries an unknown extension header or Option. This practice is | |||
expected to decrease as an option becomes more widely used. It could | expected to decrease as an Option becomes more widely used. It could | |||
result in generation of an ICMPv6 message indicating the problem. | result in the generation of an ICMPv6 message that indicates the probl | |||
This could be used to (temporarily) suspend use of this option.</t> | em. | |||
This could be used to (temporarily) suspend use of this Option.</t> | ||||
<t>A middlebox that silently discards a packet with this option | <t>A middlebox that silently discards a packet with this Option | |||
results in dropping of any packet using the option. This dropping | results in the dropping of any packet using the Option. This dropping | |||
can be avoided by appropriate configuration in a controlled | can be avoided by appropriate configuration in a controlled | |||
environment, such as within a data centre, but needs to be | environment, such as within a data center, but it needs to be | |||
considered for Internet usage. <xref target="host-os" /> recommends | considered for Internet usage. <xref target="host-os" /> recommends | |||
that this option is not used on packets where loss might adversely | that this Option is not used on packets where loss might adversely | |||
impact performance.</t> | impact performance.</t> | |||
</section> | </section> | |||
<!-- End of HBH Drop --> | ||||
</section> | </section> | |||
<!-- End of Transport Main subSection --> | ||||
</section> | </section> | |||
<!-- End of Router,Host, Transport Section--> | ||||
<section anchor="IANA" numbered="true" title="IANA Considerations" | <section anchor="IANA" numbered="true" title="IANA Considerations" | |||
toc="default"> | toc="default"> | |||
<t>IANA has assigned and registered an IPv6 Hop-by-Hop Option type with | <t>IANA has registered an IPv6 Hop-by-Hop Option type | |||
Temporary status from the "Destination Options and Hop-by-Hop Options" | in the "Destination Options and Hop-by-Hop Options" | |||
registry <xref format="default" target="IANA-HBH" />. This assignment is | registry within the "Internet Protocol Version 6 (IPv6) Parameters" regist | |||
ry group <xref format="default" target="IANA-HBH"/>. This assignment is | ||||
shown in <xref format="default" target="HBH" />.</t> | shown in <xref format="default" target="HBH" />.</t> | |||
<t>IANA is requested to update this registry to point to this document | ||||
and remove the Temporary status.</t> | ||||
</section> | </section> | |||
<!-- End of IANA Main Section--> | ||||
<section anchor="Security" numbered="true" title="Security Considerations" | <section anchor="Security" numbered="true" title="Security Considerations" | |||
toc="default"> | toc="default"> | |||
<t>This section discusses the security considerations. It first reviews | <t>This section discusses the security considerations. It first reviews | |||
router option processing. It then reviews host processing when receiving | router Option processing. It then reviews host processing when receiving | |||
this option at the network layer. It then considers two ways in which | this Option at the network layer. It then considers two ways in which | |||
the Option Data can be processed, followed by two approaches for using | the Option Data can be processed, followed by two approaches for using | |||
the Option Data. Finally, it discusses middlebox implications related to | the Option Data. Finally, it discusses middlebox implications related to | |||
use in the general Internet.</t> | use in the general Internet.</t> | |||
<section anchor="Security-router" numbered="true" | <section anchor="Security-router" numbered="true" | |||
title="Router Option Processing" toc="default"> | title="Router Option Processing" toc="default"> | |||
<t>This option shares the characteristics of all other IPv6 Hop-by-Hop | <t>This Option shares the characteristics of all other IPv6 Hop-by-Hop | |||
Options, in that if not supported at line rate it could be used to | Options, in that, if not supported at line rate, it could be used to | |||
degrade the performance of a router. This option, while simple, is no | degrade the performance of a router. This Option, while simple, is no | |||
different to other uses of IPv6 Hop-by-Hop options.</t> | different than other uses of IPv6 Hop-by-Hop Options.</t> | |||
<t>It is common for routers to ignore the Hop-by-Hop Option header or | <t>It is common for routers to ignore the Hop-by-Hop Option header or | |||
drop packets containing a Hop-by-Hop Option header. Routers | to drop packets containing a Hop-by-Hop Option header. Routers | |||
implementing IPv6 according to <xref format="default" | implementing IPv6 according to <xref format="default" | |||
target="RFC8200" /> only examine and process the Hop-by-Hop Options | target="RFC8200" /> only examine and process the Hop-by-Hop Options | |||
header if explicitly configured to do so.</t> | header if explicitly configured to do so.</t> | |||
</section> | </section> | |||
<section anchor="Security-net" numbered="true" | <section anchor="Security-net" numbered="true" | |||
title="Network Layer Host Processing" toc="default"> | title="Network-Layer Host Processing" toc="default"> | |||
<t>A malicious attacker can forge a packet directed at a host that | <t>A malicious attacker can forge a packet directed at a host that | |||
carries the MinPMTU HBH option. By design, the fields of this IP | carries the MinPMTU HBH Option. By design, the fields of this IP | |||
option can be modified by the network.</t> | Option can be modified by the network.</t> | |||
<t>For comparison, the ICMPv6 Packet Too Big message used in <xref | <t>For comparison, the ICMPv6 PTB message used in Path MTU Discovery <xr | |||
format="default" target="RFC8201" /> Path MTU Discovery, the source | ef | |||
host has an inherent trust relationship with the destination host | format="default" target="RFC8201"/> and the source | |||
including this option. This trust relationship can be used to help | host have an inherent trust relationship with the destination host | |||
verify the option. ICMPv6 Packet Too Big messages are sent from any | including this Option. This trust relationship can be used to help | |||
router on the path to the destination host, the source host has no | verify the Option. ICMPv6 PTB messages are sent from any | |||
router on the path to the destination host. The source host has no | ||||
prior knowledge of these routers (except for the first hop | prior knowledge of these routers (except for the first hop | |||
router).</t> | router).</t> | |||
<t>Reception of this packet will require processing as the network | <t>Reception of this packet will require processing as the network | |||
stack parses the packet before the packet is delivered to the upper | stack parses the packet before the packet is delivered to the | |||
layer protocol. This network layer option processing is normally | upper-layer protocol. This network-layer Option processing is normally | |||
completed before any upper layer protocol delivery checks are | completed before any upper-layer protocol delivery checks are | |||
performed.</t> | performed.</t> | |||
<t>The network layer does not normally have sufficient information to | <t>The network layer does not normally have sufficient information to | |||
validate that the packet carrying an option originated from the | validate that the packet carrying an Option originated from the | |||
destination (or an on-path node). It also does not typically have | destination (or an on-path node). It also does not typically have | |||
sufficient context to demultiplex the packet to identify the related | sufficient context to demultiplex the packet to identify the related | |||
transport flow. This can mean that any changes resulting from | transport flow. This can mean that any changes resulting from | |||
reception of the option applies to all flows between a pair of | reception of the Option applies to all flows between a pair of | |||
endpoints.</t> | endpoints.</t> | |||
<t>These considerations are no different to other uses of Hop-by-Hop | <t>These considerations are no different than other uses of Hop-by-Hop | |||
options, and this is the use case for PMTUD. The following section | Options, and this is the use case for PMTUD. The following section | |||
describes a mitigation for this attack.</t> | describes a mitigation for this attack.</t> | |||
</section> | </section> | |||
<section anchor="Security-upp" numbered="true" | <section anchor="Security-upp" numbered="true" | |||
title="Validating use of the Option Data" toc="default"> | title="Validating Use of the Option Data" toc="default"> | |||
<t>Transport protocols should be designed to provide protection from | <t>Transport protocols should be designed to provide protection from | |||
data injection attacks by off-path devices and mechanisms should be | data injection attacks by off-path devices, and mechanisms should be | |||
described in the Security Considerations for each transport | described in the Security Considerations section for each transport | |||
specification (see Section 5.1 of the UDP Guidelines <xref | specification (see <xref target="RFC8085" sectionFormat="of" | |||
format="default" target="RFC8085" />). For example, a TCP or UDP | section="5.1">"UDP Usage Guidelines"</xref>). For example, a TCP or UDP | |||
application that maintains the related state and uses a randomized | application that maintains the related state and uses a randomized | |||
ephemeral port would provide basic protection. TLS <xref | ephemeral port would provide basic protection. TLS <xref | |||
format="default" target="RFC8446" /> or IPsec <xref format="default" | format="default" target="RFC8446" /> or IPsec <xref format="default" | |||
target="RFC4301" /> provide cryptographic authentication. An upper | target="RFC4301" /> provide cryptographic authentication. An upper-layer | |||
layer protocol that validates each received packet discards any packet | protocol that validates each received packet discards any packet | |||
when this validation fails. In this case, the host MUST also discard | when this validation fails. In this case, the host <bcp14>MUST</bcp14> a | |||
the associated Option Data from the MinPMTU HBH option without | lso discard | |||
the associated Option Data from the MinPMTU HBH Option without | ||||
further processing (<xref target="Transport" />).</t> | further processing (<xref target="Transport" />).</t> | |||
<t>A network node on the path has visibility of all packets it | <t>A network node on the path has visibility of all packets it | |||
forwards. By observing the network packet payload, the node might be | forwards. By observing the network packet payload, the node might be | |||
able to construct a packet that might be validated by the destination | able to construct a packet that might be validated by the destination | |||
host. Such a node would also be able to drop or limit the flow in | host. Such a node would also be able to drop or limit the flow in | |||
other ways that could be potentially more disruptive. Authenticating | other ways that could be potentially more disruptive. Authenticating | |||
the packet, for example, using IPsec <xref format="default" | the packet, for example, using IPsec <xref format="default" | |||
target="RFC4301" /> or TLS <xref format="default" target="RFC8446" /> | target="RFC4301" /> or TLS <xref format="default" target="RFC8446" /> | |||
mitigates this attack. Note that AH style authentication <xref | mitigates this attack. Note that the authentication style of the Authent | |||
format="default" target="RFC4302" /> while authenticating the payload | ication | |||
and outer IPv6 header, does not check Hop-by-Hop options that change | Header (AH) | |||
<xref format="default" target="RFC4302" />, while authenticating the payl | ||||
oad | ||||
and outer IPv6 header, does not check Hop-by-Hop Options that change | ||||
on route.</t> | on route.</t> | |||
</section> | </section> | |||
<section anchor="Security-pmtud" numbered="true" | <section anchor="Security-pmtud" numbered="true" | |||
title="Direct use of the Rtn-PMTU Value" toc="default"> | title="Direct Use of the Rtn-PMTU Value" toc="default"> | |||
<t>The simplest way to utilize the Rtn-PMTU value is to directly use | <t>The simplest way to utilize the Rtn-PMTU value is to directly use | |||
this to update the PMTU. This approach results in a set of security | this to update the PMTU. This approach results in a set of security | |||
issues when the option carries malicious data:</t> | issues when the Option carries malicious data:</t> | |||
<ul> | <ul> | |||
<li> | <li> | |||
<t>A direct update of the PMTU using the Rtn-PMTU value could | <t>A direct update of the PMTU using the Rtn-PMTU value could | |||
result in an attacker inflating or reducing the size of the host | result in an attacker inflating or reducing the size of the host | |||
PMTU for the destination. Forcing a reduction in the PMTU can | PMTU for the destination. Forcing a reduction in the PMTU can | |||
decrease the efficiency of network use, might increase the number | decrease the efficiency of network use, might increase the number | |||
of packets/fragments required to send the same volume of payload | of packets/fragments required to send the same volume of payload | |||
data, and prevents sending an unfragmented datagram larger than | data, and can prevent sending an unfragmented datagram larger than | |||
the PMTU. Increasing the PMTU can result in black-holing (see | the PMTU. Increasing the PMTU can result in a path silently dropping | |||
Section 1.1 of <xref format="default" target="RFC8899" />) when | packets | |||
(described as a black hole in <xref format="default" target="RFC8899 | ||||
"/>) when | ||||
the source host sends packets larger than the actual PMTU. This | the source host sends packets larger than the actual PMTU. This | |||
persists until the PMTU is next updated.</t> | persists until the PMTU is next updated.</t> | |||
</li> | </li> | |||
<li> | <li> | |||
<t>The method can be used to solicit a response from the | <t>The method can be used to solicit a response from the | |||
destination host. A malicious attacker could forge a packet that | destination host. A malicious attacker could forge a packet that | |||
causes the destination to add the option to a packet sent to the | causes the destination to add the Option to a packet sent to the | |||
source host. A forged value of Rtn-PMTU in the Option Data might | source host. A forged value of Rtn-PMTU in the Option Data might | |||
also impact the remote endpoint, as described in the previous | also impact the remote endpoint, as described in the previous | |||
bullet. This persists until a valid MinPMTU HBH option is | bullet. This persists until a valid MinPMTU HBH Option is | |||
received. This attack could be mitigated by limiting the sending | received. This attack could be mitigated by limiting the sending | |||
of the MinPMTU HBH option in reply to incoming packets that | of the MinPMTU HBH Option in reply to incoming packets that | |||
carry the option.</t> | carry the Option.</t> | |||
</li> | </li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<!-- End of security PMTUD subsection --> | ||||
<section anchor="Security-dplpmtud" numbered="true" | <section anchor="Security-dplpmtud" numbered="true" | |||
title="Using the Rtn-PMTU Value as a Hint for Probing" | title="Using the Rtn-PMTU Value as a Hint for Probing" | |||
toc="default"> | toc="default"> | |||
<t>Another way to utilize the Rtn-PMTU value is to indirectly trigger | <t>Another way to utilize the Rtn-PMTU value is to indirectly trigger | |||
a probe to determine if the path supports a PMTU of size Rtn-PMTU. | a probe to determine if the path supports a PMTU of size Rtn-PMTU. | |||
This approach needs context for the flow, and hence assumes an upper | This approach needs context for the flow and hence assumes an upper-laye | |||
layer protocol that validates the packet that carries the option (see | r | |||
protocol that validates the packet that carries the Option (see | ||||
<xref target="Security-upp" />). This is the case when used in | <xref target="Security-upp" />). This is the case when used in | |||
combination with DPLPMTUD <xref format="default" target="RFC8899" />. | combination with DPLPMTUD <xref format="default" target="RFC8899" />. | |||
A set of security considerations result when an option carries | A set of security considerations result when an Option carries | |||
malicious data:</t> | malicious data:</t> | |||
<ul> | <ul> | |||
<li>If the forged packet carries a validated option with a non-zero | <li>If the forged packet carries a validated Option with a non-zero | |||
Rtn-PMTU field, the upper layer protocol could utilize the | Rtn-PMTU field, the upper-layer protocol could utilize the | |||
information in the Rtn-PMTU field. A Rtn-PMTU larger than the | information in the Rtn-PMTU field. A Rtn-PMTU larger than the | |||
current PMTU can trigger a probe for a new size.</li> | current PMTU can trigger a probe for a new size.</li> | |||
<li>If the forged packet carries a non-zero Min-PMTU field, the | <li>If the forged packet carries a non-zero Min-PMTU field, the | |||
upper layer protocol would change the cached information about the | upper-layer protocol would change the cached information about the | |||
path from the source. The cached information at the destination host | path from the source. The cached information at the destination host | |||
will be overwritten when the host receives another packet that | will be overwritten when the host receives another packet that | |||
includes a MinPMTU HBH option corresponding to the flow.</li> | includes a MinPMTU HBH Option corresponding to the flow.</li> | |||
<li>Processing of the option could cause a destination host to add | <li>Processing of the Option could cause a destination host to add | |||
the MinPMTU HBH option to a packet sent to the source host. | the MinPMTU HBH Option to a packet sent to the source host. | |||
This option will carry a Rtn-PMTU value that could have been updated | This Option will carry a Rtn-PMTU value that could have been updated | |||
by the forged packet. The impact of the source host receiving this | by the forged packet. The impact of the source host receiving this | |||
resembles that discussed previously.</li> | resembles that discussed previously.</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<!-- End of security subsection --> | ||||
<section anchor="Security-mbox" numbered="true" | <section anchor="Security-mbox" numbered="true" | |||
title="Impact of Middleboxes" toc="default"> | title="Impact of Middleboxes" toc="default"> | |||
<t>There is evidence that some middleboxes drop packets that include | <t>There is evidence that some middleboxes drop packets that include | |||
Hop-by-Hop options. For example, a firewall might drop a packet that | Hop-by-Hop Options. For example, a firewall might drop a packet that | |||
carries an unknown extension header or option. This practice is | carries an unknown extension header or Option. This practice is | |||
expected to decrease as the option becomes more widely used. Methods | expected to decrease as the Option becomes more widely used. Methods | |||
to address this are discussed in <xref target="HBHblackhole" />.</t> | to address this are discussed in <xref target="HBHblackhole" />.</t> | |||
<t>When a forged packet causes a packet to be sent including the | <t>When a forged packet causes a packet that includes the MinPMTU HBH | |||
MinPMTU HBH option, and the return path does not forward packets | Option to be sent and the return path does not forward packets with | |||
with this option, the packet will be dropped <xref | this Option, the packet will be dropped (see <xref | |||
target="HBHblackhole" />. This attack is mitigated by validating the | target="HBHblackhole"/>). This attack is mitigated by validating the | |||
option data before use and by limiting the rate of responses | Option Data before use and by limiting the rate of responses | |||
generated. An upper layer could further mitigate the impact by | generated. An upper layer could further mitigate the impact by | |||
responding to an R-Flag by including the option in a packet that does | responding to an R-Flag by including the Option in a packet that does | |||
not carry application data.</t> | not carry application data.</t> | |||
</section> | </section> | |||
<!-- End of security mbox subsection --> | ||||
</section> | </section> | |||
<!-- End of Security Consideraions main section--> | ||||
<section anchor="EXP" numbered="true" title="Experiment Goals" | <section anchor="EXP" numbered="true" title="Experiment Goals" | |||
toc="default"> | toc="default"> | |||
<t>This section describes the experimental goals of this | <t>This section describes the experimental goals of this | |||
specification.</t> | specification.</t> | |||
<t>A successful deployment of the method depends upon several components | <t>A successful deployment of the method depends upon several components | |||
being implemented and deployed:</t> | being implemented and deployed:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Support in the sending node (see <xref format="default" | <li>Support in the sending node (see <xref format="default" | |||
target="host-os" />). This also requires corresponding support in | target="host-os" />). This also requires corresponding support in | |||
upper layer protocols (see <xref format="default" | upper-layer protocols (see <xref format="default" | |||
target="Transport" />).</li> | target="Transport" />).</li> | |||
<li>Router support in nodes (see <xref format="default" | <li>Router support in nodes (see <xref format="default" | |||
target="router" />). The IETF continues to provide recommendations on | target="router" />). The IETF continues to provide recommendations on | |||
the use of IPv6 Hop-by-Hop options, for example <xref format="default" | the use of IPv6 Hop-by-Hop Options, for example, see <xref format="defau lt" | |||
section="2.2.2" target="RFC9099" />. This document does not update the | section="2.2.2" target="RFC9099" />. This document does not update the | |||
way router implementations configure support for Hop-by-Hop options.</li > | way router implementations configure support for Hop-by-Hop Options.</li > | |||
<li>Support in the receiving node (see <xref format="default" | <li>Support in the receiving node (see <xref format="default" | |||
target="transportrec" />).</li> | target="transportrec" />).</li> | |||
</ul> | </ul> | |||
<t>Experience from deployment is an expected input to any decision to | <t>Experience from deployment is an expected input to any decision to | |||
progress this specification from Experimental to IETF Standards Track. | progress this specification from Experimental to IETF Standards Track. | |||
Appropriate inputs might include:</t> | Appropriate inputs might include:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Reports of implementation experience;</li> | <li>reports of implementation experience,</li> | |||
<li>measurements of the number paths where the method can be | ||||
<li>Measurements of the number paths where the method can be | used, or</li> | |||
used;</li> | <li>measurements showing the benefit realized or the implications of | |||
<li>Measurements showing the benefit realized or the implications of | ||||
using specific methods over specific paths.</li> | using specific methods over specific paths.</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<!-- End of Experiment Status section--> | ||||
<section anchor="IMP" numbered="true" title="Implementation Status" | <section anchor="IMP" numbered="true" title="Implementation Status" | |||
toc="default"> | toc="default"> | |||
<t>At the time this document was published there are two known | <t>At the time this document was published, there are two known | |||
implementations of the Path MTU Hop-by-Hop option. These are:</t> | implementations of the Path MTU Hop-by-Hop Option. These are:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Wireshark dissector. This is shipping in production in Wireshark | <li>Wireshark dissector. This is shipping in production in Wireshark | |||
version 3.2 <xref format="default" target="WIRESHARK" />.</li> | version 3.2 <xref format="default" target="WIRESHARK" />.</li> | |||
<li>A prototype in the open source version of the FD.io Vector Packet | <li>A prototype in the open source version of the FD.io Vector Packet | |||
Processing (VPP) technology <xref format="default" target="VPP" />. At | Processing (VPP) technology <xref format="default" target="VPP" />. At | |||
the time this document was published, the source code can be found | the time this document was published, the source code can be found | |||
<xref format="default" target="VPP_SRC" />.</li> | <xref format="default" target="VPP_SRC" />.</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<!-- End of Implementation Status section--> | ||||
<section anchor="Ack" numbered="true" title="Acknowledgments" | ||||
toc="default"> | ||||
<t>Helpful comments were received from Tom Herbert, Tom Jones, Fred | ||||
Templin, Ole Troan, Tianran Zhou, Jen Linkova, Brian Carpenter, Peng | ||||
Shuping, Mark Smith, Fernando Gont, Michael Dougherty, Erik Kline, and | ||||
other members of the 6MAN working group.</t> | ||||
</section> | ||||
<!-- End of Ack Main Section --> | ||||
<section anchor="changes" numbered="true" | ||||
title="Change log [RFC Editor: Please remove]" toc="default"> | ||||
<t>draft-ietf-6man-mtu-option-15, 2022-May-10</t> | ||||
<ul spacing="compact"> | ||||
<li>Correcting an editing mistake in <xref format="default" target="appen | ||||
dix" />.</li> | ||||
<li>Editorial Change.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-14, 2022-April-15</t> | ||||
<ul spacing="compact"> | ||||
<li> | ||||
<t>Area Director Reviews:</t> | ||||
<ul spacing="compact"> | ||||
<li>Lars Eggert's Review: Fixed "nits".</li> | ||||
<li>Eric Vyncke's Review: Added that this work is focused on | ||||
Unicast, removed Discussion from <xref format="default" | ||||
target="router" />, revised text on PLPMTUD probing, changed | ||||
SHOULD to MUST in <xref format="default" target="Rtn-MTU" />, | ||||
and fixed several NITs.</li> | ||||
<li>Alvaro Retana's Review: Changed SHOULD language to more | ||||
general text in <xref format="default" target="router" /></li> | ||||
<li>ARTART Review: Added new Appendix "Examples of Usage" with | ||||
diagrams showing examples of use.</li> | ||||
<li>Zaheduzzaman Sarker's Review: Fixed some editorial issues, and | ||||
updated SHOULD language.</li> | ||||
</ul> | ||||
</li> | ||||
<li>Editorial Changes.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-13, 2022-February-28</t> | ||||
<ul spacing="compact"> | ||||
<li> | ||||
<t>Area Directorate Reviews:</t> | ||||
<ul spacing="compact"> | ||||
<li>SECDIR Review: Fixed "nit".</li> | ||||
<li>TSVART Review: Restructured <xref format="default" | ||||
target="Behavior" /> including making Transport Behavior more | ||||
prominent, added text about ICMPv6 to <xref format="default" | ||||
target="transportsend" />, moved the text about prior work in | ||||
RFC1063 to <xref format="default" target="motivation" />.</li> | ||||
<li>GENART Review: Added text to <xref format="default" | ||||
target="Intro" /> that this option was designed to work with | ||||
packet sizes that can be specified in the IPv6 Header.</li> | ||||
</ul> | ||||
</li> | ||||
<!--- | ||||
<li>Added a new subsection to Router Behavior describing an | ||||
optimization that can be done if all of the routers interfaces | ||||
are configured with the same MTU.</li> | ||||
<li>Editorial Changes.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-12, 2022-January-26</t> | ||||
<ul spacing="compact"> | ||||
<li>Clarified a few issues raised by AD review by Erik Kline AD | ||||
review.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-11, 2021-September-30</t> | ||||
<ul spacing="compact"> | ||||
<li>Clarifications and editorial changes to the Security | ||||
Considerations section based on early AD review by Erik Kline.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-10, 2021-September-27</t> | ||||
<ul spacing="compact"> | ||||
<li>Clarifications and editorial changes based on second chair review | ||||
by Ole Troan.</li> | ||||
<li>Editorial changes.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-09, 2021-September-23</t> | ||||
<ul spacing="compact"> | ||||
<li>Clarifications and editorial changes based on review by Michael | ||||
Dougherty.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-08, 2021-September-7</t> | ||||
<ul spacing="compact"> | ||||
<li>Clarifications and editorial changes based on chair review by Ole | ||||
Troan.</li> | ||||
<li>Correction and clarifications based on review by Fernando | ||||
Gont.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-07, 2021-August-31</t> | ||||
<ul spacing="compact"> | ||||
<li>Added Experiment Goals section.</li> | ||||
<li>Added Implementation Status section.</li> | ||||
<li>Updated the IANA Considerations section to point to this document | ||||
and remove Temporary status.</li> | ||||
<li>Clarifications and editorial changes based on review by Mark | ||||
Smith.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-06, 2021-August-7</t> | ||||
<ul spacing="compact"> | ||||
<li>Transport usage of the mechanism clarified in response to feedback | ||||
and suggestions from Jen Linkova.</li> | ||||
<li>Restructured <xref format="default" target="Behavior" /> to | ||||
improve readability.</li> | ||||
<li>Editorial changes.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-05, 2021-April-28</t> | ||||
<ul spacing="compact"> | ||||
<li>Editorial changes.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-04, 2020-Oct-23</t> | ||||
<ul spacing="compact"> | ||||
<li>Fixes for typos.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-03, 2020-Sept-14</t> | ||||
<ul spacing="compact"> | ||||
<li>Rewrite to make text and terminology more consistent.</li> | ||||
<li>Added the notion of validating the packet before use of the HBH | ||||
option data.</li> | ||||
<li>Method aligned with the way common APIs send/receive HBH option | ||||
data.</li> | ||||
<li>Added reference to DPLPMTUD and clarified upper layer usage.</li> | ||||
<li>Completed security considerations section.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-02, 2020-March-9</t> | ||||
<ul spacing="compact"> | ||||
<li>Editorial changes to make text and terminology more | ||||
consistent.</li> | ||||
<li>Added reference to DPLPMTUD.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-01, 2019-September-13</t> | ||||
<ul spacing="compact"> | ||||
<li>Changes to show IANA assigned code point.</li> | ||||
<li>Editorial changes to make text and terminology more | ||||
consistent.</li> | ||||
<li>Added a reference to RFC8200 in <xref format="default" | ||||
target="motivation" /> and a reference to RFC6438 in <xref | ||||
format="default" target="Transport" />.</li> | ||||
</ul> | ||||
<t>draft-ietf-6man-mtu-option-00, 2019-August-9</t> | ||||
<ul spacing="compact"> | ||||
<li>First 6man w.g. draft version.</li> | ||||
<li>Changes to request IANA allocation of code point.</li> | ||||
<li>Editorial changes.</li> | ||||
</ul> | ||||
<t>draft-hinden-6man-mtu-option-02, 2019-July-5</t> | ||||
<ul spacing="compact"> | ||||
<li>Changed option format to also include the Returned PMTU value and | ||||
Return flag and made related text changes in <xref format="default" | ||||
target="host-os" /> to describe this behavior.</li> | ||||
<li>ICMPv6 Packet Too Big messages are no longer used for feedback to | ||||
the source host.</li> | ||||
<li>Added to Acknowledgements Section that a similar mechanism was | ||||
proposed for IPv4 in 1988 in <xref format="default" | ||||
target="RFC1063" />.</li> | ||||
<li>Editorial changes.</li> | ||||
</ul> | ||||
<t>draft-hinden-6man-mtu-option-01, 2019-March-05</t> | ||||
<ul spacing="compact"> | ||||
<li>Changed requested status from Standards Track to Experimental to | ||||
allow use of experimental option type (11110) to allow for | ||||
experimentation. Removed request for IANA Option assignment.</li> | ||||
<li>Added <xref format="default" target="motivation" /> "Motivation | ||||
and Problem Solved" section to better describe what the purpose of | ||||
this document is.</li> | ||||
<li>Added appendix describing planned experiments and how the results | ||||
will be measured.</li> | ||||
<li>Editorial changes.</li> | ||||
</ul> | ||||
<t>draft-hinden-6man-mtu-option-00, 2018-Oct-16</t> | ||||
<ul spacing="compact"> | ||||
<li>Initial draft.</li> | ||||
</ul> | ||||
</section> | ||||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="I-D.ietf-taps-arch" to="TAPS-ARCH"/> | ||||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8200.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8201.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <reference anchor="IANA-HBH" target="https://www.iana.org/assignments/ip | |||
ence.RFC.8200.xml" | v6-parameters/"> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8201.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2119.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8174.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<reference anchor="IANA-HBH" | ||||
target="https://www.iana.org/assignments/ipv6-parameters/ipv6 | ||||
-parameters.xhtml#ipv6-parameters-2"> | ||||
<front> | <front> | |||
<title>Destination Options and Hop-by-Hop Options</title> | <title>Destination Options and Hop-by-Hop Options</title> | |||
<author> | ||||
<author /> | <organization>IANA</organization> | |||
</author> | ||||
<date /> | ||||
</front> | </front> | |||
</reference> | </reference> | |||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.1063.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.1191.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.2460.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4301.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4302.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4443.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4861.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4821.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6438.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7637.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8085.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8446.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8899.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8900.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.9000.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.9099.xml"/> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <reference anchor="I-D.ietf-taps-arch" target="https://datatracker.ietf. | |||
ence.RFC.1063.xml" | org/doc/bibxml3/draft-ietf-taps-arch.xml"> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | <front> | |||
<title>An Architecture for Transport Services</title> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <author initials='T' surname='Pauly' fullname='Tommy Pauly' role='ed | |||
ence.RFC.1191.xml" | itor'> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | <organization/> | |||
</author> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <author initials='B' surname='Trammell' fullname='Brian Trammell' ro | |||
ence.RFC.2460.xml" | le='editor'> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | <organization/> | |||
</author> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <author initials='A' surname='Brunstrom' fullname='Anna Brunstrom'> | |||
ence.RFC.4301.xml" | <organization/> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | </author> | |||
<author initials='G' surname='Fairhurst' fullname='Godred Fairhurst' | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | > | |||
ence.RFC.4302.xml" | <organization/> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | </author> | |||
<author initials='C' surname='Perkins' fullname='Colin Perkins'> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <organization/> | |||
ence.RFC.4443.xml" | </author> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | <date month='June' year='2022'/> | |||
</front> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | <seriesInfo name="Internet-Draft" value="draft-ietf-taps-arch-12"/> | |||
ence.RFC.4861.xml" | </reference> | |||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.4821.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.6438.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.7637.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8085.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8446.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8899.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.8900.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.9000.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
ence.RFC.9099.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference. | ||||
I-D.ietf-taps-arch.xml" | ||||
xmlns:xi="http://www.w3.org/2001/XInclude" /> | ||||
<reference anchor="VPP" | <reference anchor="VPP" | |||
target="https://wiki.fd.io/view/VPP/What_is_VPP%3F"> | target="https://wiki.fd.io/view/VPP/What_is_VPP%3F"> | |||
<front> | <front> | |||
<title>VPP/What is VPP?</title> | <title>VPP/What is VPP?</title> | |||
<author> | ||||
<author /> | <organization>FD.io</organization> | |||
</author> | ||||
<date /> | ||||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="VPP_SRC" | <reference anchor="VPP_SRC" | |||
target="https://gerrit.fd.io/r/c/vpp/+/21948"> | target="https://gerrit.fd.io/r/c/vpp/+/21948"> | |||
<front> | <front> | |||
<title>VPP Source</title> | <title>vpp</title> | |||
<author/> | ||||
<author /> | ||||
<date /> | <date /> | |||
</front> | </front> | |||
<refcontent>commit 21948, ip: HBH MTU recording for IPv6</refcontent> | ||||
</reference> | </reference> | |||
<reference anchor="WIRESHARK" target="https://www.wireshark.org"> | <reference anchor="WIRESHARK" target="https://www.wireshark.org"> | |||
<front> | <front> | |||
<title>Wireshark Network Protocol Analyzer</title> | <title>Wireshark Network Protocol Analyzer</title> | |||
<author /> | <author /> | |||
<date /> | <date /> | |||
</front> | </front> | |||
</reference> | </reference> | |||
</references> | </references> | |||
</references> | </references> | |||
<!--Appendix on Useage | ||||
--> | ||||
<section anchor="appendix" numbered="true" toc="default"> | <section anchor="appendix" numbered="true" toc="default"> | |||
<name>Examples of Usage</name> | <name>Examples of Usage</name> | |||
<t>This section provides examples that illustrate a use of the MinPMTU | <t>This section provides examples that illustrate a use of the MinPMTU | |||
HBH option by a source using DPLPMTUD to discover the PLPMTU supported | HBH Option by a source using DPLPMTUD to discover the PLPMTU supported | |||
by a path. They consider a path where the on-path router has been | by a path. They consider a path where the on-path router has been | |||
configured with an outgoing MTU of d'. The source starts by transmission | configured with an outgoing MTU of d'. The source starts by transmission | |||
of packets of size a, and then uses DPLPMTUD to seek to increase the | of packets of size a and then uses DPLPMTUD to seek to increase the | |||
size in steps resulting in sizes of b,c,d,e, etc., (chosen by the search | size in steps resulting in sizes of b, c, d, e, etc. (chosen by the search | |||
algorithm used by DPLPMTUD). The search algorithm terminates with a | algorithm used by DPLPMTUD). The search algorithm terminates with a | |||
PLPMTU that is at least d and is less than or equal to d'.</t> | PLPMTU that is at least d and is less than or equal to d'.</t> | |||
<t>The first example considers DPLPMTUD without using the MinPMTU HBH | <t>The first example considers DPLPMTUD without using the MinPMTU HBH | |||
option. In this case, DPLPMTUD searches using an increasing size of | Option. In this case, DPLPMTUD searches using a probe packet that increase | |||
probe packet. Probe packets of size (e) are sent, which are larger than | s in | |||
size. Probe packets of size e are sent, which are larger than | ||||
the actual PMTU. In this example, PTB messages are not received from the | the actual PMTU. In this example, PTB messages are not received from the | |||
routers and repeated unsuccessful probes result in the search phase | routers, and repeated unsuccessful probes result in the search phase | |||
completing. Packets of data are never sent with a size larger than the | completing. Packets of data are never sent with a size larger than the | |||
size of the last confirmed probe packet. ACKs of data packets are not | size of the last confirmed probe packet. Acknowledgments (ACKs) of data pa | |||
shown.</t> | ckets | |||
are not shown.</t> | ||||
<figure> | <figure> | |||
<artwork align="center" alt="" | <artwork align="center" alt="" | |||
name="DPLPMTUD without the MinPMTU HBH option" type=""><![CDATA | name="DPLPMTUD without the MinPMTU HBH Option" type=""><![CDATA | |||
[ | [ | |||
----Packets of data size a ------------------------------> | ||||
----Probe size b ----------------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
----Packets of data size b ------------------------------> | ||||
----Probe size c ----------------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
----Packets of data size c ------------------------------> | ||||
----Probe size d ----------------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
----Packets of data size d ------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
... | ... | |||
X----ICMPv6 PTB (d') --| | ----Probe size e --------------X | |||
X----ICMPv6 PTB (d') --| | X----ICMPv6 PTB d' ----| | |||
----Packets of data size d ------------------------------> | ||||
----Probe size e --------------X (again) | ||||
X----ICMPv6 PTB d' ----| | ||||
----Packets of data size d ------------------------------> | ||||
... | ... | |||
etc, until MaxProbes are unsuccessful and search phase completes. | etc. until MaxProbes are unsuccessful and search phase completes. | |||
----Packets of data size d ------------------------------> | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>The second example considers DPLPMTUD with the MinPMTU HBH option set | <t>The second example considers DPLPMTUD with the MinPMTU HBH Option set | |||
on a connectivity probe packet.</t> | on a connectivity probe packet.</t> | |||
<t>The IPv6 option is sent end-to-end, and the Min-PMTU is updated by a | <t>The IPv6 Option is sent end to end, and the Min-PMTU is updated by a | |||
router on the path to d', which is returned in a response that also sets | router on the path to d', which is returned in a response that also sets | |||
the MinPMTU HBH option. Upon receiving Rtn-PMTU value is received, | the MinPMTU HBH Option. Upon receiving the Rtn-PMTU value, | |||
DPLPMTUD immediately sends a probe packet of the target size (d'). If | DPLPMTUD immediately sends a probe packet of the target size d'. If | |||
the probe packet is confirmed for the path, the PLPMTU is updated, | the probe packet is confirmed for the path, the PLPMTU is updated, | |||
allowing the source to use data packets up to size d'. (The search | allowing the source to use data packets up to size d'. (The search | |||
algorithm is allowed to continue to probe to see if the path supports a | algorithm is allowed to continue to probe to see if the path supports a | |||
larger size.) | larger size.) | |||
Packets of data are never sent with a size larger than the last | Packets of data are never sent with a size larger than the last | |||
confirmed probe size, d'. | confirmed probe size d'. | |||
<!-- | ||||
If an ICMPv6 PTB message is received, the algorithm finally probes for | ||||
the indicated PTB_SIZE (d'), otherwise the final PLPMTU is d. | ||||
--> | ||||
</t> | </t> | |||
<figure> | <figure> | |||
<artwork align="center" alt="" | <artwork align="center" alt="" | |||
name="DPLPMTUD with the MinPMTU HBH Option" type=""><![CDATA[ | name="DPLPMTUD with the MinPMTU HBH Option" type=""><![CDATA[ | |||
----Packets of data size a ------------------------------> | ||||
----Connectivity probe with MinPMTU- | ----Connectivity probe with MinPMTU- | |||
+--updated to minPMTU=d'-----> | +--updated to minPMTU=d'-----> | |||
<-----------------ACK with Rtn-PMTU=d'-------------------- | <-----------------ACK with Rtn-PMTU=d'-------------------- | |||
----Packets of data size a ------------------------------> | ||||
----Probe size d' ---------------------------------------> | ||||
<---------------------------------- ACK of probe --------- | <---------------------------------- ACK of probe --------- | |||
-----Packets of data size d' ----------------------------> | ||||
Search phase completes. | Search phase completes. | |||
-----Packets of data size d' ----------------------------> | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>The final example considers DPLPMTUD with the MinPMTU HBH option set | <t>The final example considers DPLPMTUD with the MinPMTU HBH Option set | |||
on a connectivity probe packet, but shows the effect when this | on a connectivity probe packet but shows the effect when this | |||
connectivity probe packet is dropped.</t> | connectivity probe packet is dropped.</t> | |||
<t>In this case, the packet with the MinPMTU HBH option is not received. | <t>In this case, the packet with the MinPMTU HBH Option is not received. | |||
DPLPMTUD searches using probe packets of increasing size, increasing the | DPLPMTUD searches using probe packets of increasing size, increasing the | |||
PLPMTU when the probes are confirmed. An ICMPv6 PTB message is received | PLPMTU when the probes are confirmed. An ICMPv6 PTB message is received | |||
when the probed size exceeds the actual PMTU, indicating a PTB_SIZE of | when the probed size exceeds the actual PMTU, indicating a PTB_SIZE of | |||
d'. DPLPMTUD immediately sends a probe packet of the target size (d'). | d'. DPLPMTUD immediately sends a probe packet of the target size d'. | |||
If the probe packet is confirmed for the path, the PLPMTU is updated, | If the probe packet is confirmed for the path, the PLPMTU is updated, | |||
allowing the source to use data packets up to size d'. If the ICMPv6 PTB | allowing the source to use data packets up to size d'. If the ICMPv6 PTB | |||
message is not received, the DPLPMTU will be the last confirmed probe | message is not received, the DPLPMTU will be the last confirmed probe | |||
size, d.</t> | size, which is d.</t> | |||
<figure> | <figure> | |||
<artwork align="center" alt="" name="" | <artwork align="center" alt="" name="" | |||
type="DPLPMTUD with dropped MinPMTU HBH option"><![CDATA[ | type="DPLPMTUD with Dropped MinPMTU HBH Option"><![CDATA[ | |||
----Packets of data size a -------------------------------> | ||||
----Connectivity probe with MinPMTU --------X | ----Connectivity probe with MinPMTU --------X | |||
----Packets of data size a -------------------------------> | ||||
----Probe size b -----------------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
----Packets of data size b -------------------------------> | ||||
----Probe size c -----------------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
----Packets of data size c -------------------------------> | ||||
----Probe size d -----------------------------------------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
<--ICMPv6 PTB PTB_SIZE(d') -| | ----Packets of data size d -------------------------------> | |||
----Probe size e ------------X | ||||
<--ICMPv6 PTB PTB_SIZE d' --| | ||||
----Packets of data size d -------------------------------> | ||||
----Probe size d' using target set by PTB_SIZE -----------> | ||||
<---------------------------------- ACK of probe -------- | <---------------------------------- ACK of probe -------- | |||
Search phase completes. | Search phase completes. | |||
----Packets of data size d' ------------------------------> | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>The number of probe rounds depends on the number of steps needed by | <t>The number of probe rounds depends on the number of steps needed by | |||
the search algorithm, and is typically larger for a larger PMTU.</t> | the search algorithm and is typically larger for a larger PMTU.</t> | |||
</section> | </section> | |||
<!-- <section anchor="exp" numbered="true" toc="default"> | <section anchor="Ack" numbered="false" title="Acknowledgments" | |||
<name>Planned Experiments</name> | toc="default"> | |||
<t>TBD </t> | <t>Helpful comments were received from <contact fullname="Tom Herbert"/>, | |||
<t>This section will describe a set of experiments planned for the use | <contact fullname="Tom Jones"/>, <contact fullname="Fred | |||
of the option defined in this document. There are many aspects of the | Templin"/>, <contact fullname="Ole Troan"/>, <contact fullname="Tianran Zh | |||
design that require experimental data or experience to evaluate this | ou"/>, | |||
experimental specification.</t> | <contact fullname="Jen Linkova"/>, <contact fullname="Brian Carpenter"/>, | |||
<t>This includes experiments to understand the pathology of packets sent | <contact fullname="Peng Shuping"/>, <contact fullname="Mark Smith"/>, | |||
with the specified option to determine the likelihood that they are lost | <contact fullname="Fernando Gont"/>, <contact fullname="Michael Dougherty" | |||
within specific types of network segment.</t> | />, | |||
<t>This includes consideration of the cost and alternatives for | <contact fullname="Erik Kline"/>, and | |||
providing the feedback required by the mechanism and how to effectively | other members of the 6MAN Working Group.</t> | |||
limit the rate of transmission.</t> | ||||
<t>This includes consideration of the potential for integration in | ||||
frameworks such as that offered by DPLPMTUD.</t> | ||||
<t>There are also security-related topics to be understood as described | ||||
in the <xref target="Security" format="default">Security Considerations</x | ||||
ref>.</t> | ||||
</section> | </section> | |||
--> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 239 change blocks. | ||||
897 lines changed or deleted | 553 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |