Internet DRAFT - draft-andrews-6man-force-fragmentation
draft-andrews-6man-force-fragmentation
Network Working Group M. Andrews
Internet-Draft ISC
Updates: RFC 3542 (if approved) January 22, 2012
Intended status: Informational
Expires: July 25, 2012
Forcing Fragmentation of IPv6 Packets
draft-andrews-6man-force-fragmentation-01
Abstract
Extend The Advanced Sockets API for IPv6 (RFC 3542) to provide a
mechanism to force a Fragment header to be added to a packet.
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on July 25, 2012.
Copyright Notice
Copyright (c) 2012 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Andrews Expires July 25, 2012 [Page 1]
Internet-Draft Forcing Fragmentation of IPv6 Packets January 2012
Table of Contents
1. Background . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Reserved Words . . . . . . . . . . . . . . . . . . . . . . 3
2. Background . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Extend IPV6_USE_MIN_MTU . . . . . . . . . . . . . . . . . . . . 4
4. Extend IPV6_DONTFRAG . . . . . . . . . . . . . . . . . . . . . 4
5. Add IPV6_DOFRAG . . . . . . . . . . . . . . . . . . . . . . . . 4
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 4
7. Security Considerations . . . . . . . . . . . . . . . . . . . . 5
8. Normative References . . . . . . . . . . . . . . . . . . . . . 5
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 5
Andrews Expires July 25, 2012 [Page 2]
Internet-Draft Forcing Fragmentation of IPv6 Packets January 2012
1. Background
In order to avoid Path MTU Discover (MTUD) [RFC 1191] in IPv6 an
application must not only force packets to be fragmented at the
minimum IPv6 MTU it must also force the addition of a Fragment header
to unfragmented packets otherwise PTB ICMPv6 may be sent if the
packet goes through a IPv6 to IPv4 translating router [RFC 2460].
The Advanced Sockets API for IPv6 [RFC 3542] provides mechanisms to
force fragmentation of a packet greater than the minimum IPv6 MTU
(IPV6_USE_MIN_MTU). It also provides mechanisms to prevent
fragmentation of a packet (IPV6_DONTFRAG). It however does not
provide a mechanism to force a fragmentation header to be added.
This document intends to add such a mechanism.
There appears to be 3 viable alternatives. 1) extend IPV6_USE_MIN_MTU
to force the inclusion of a Fragment header. 2) extend IPV6_DONTFRAG
to signal that a Fragment header needs to be included. 3) add a new
socket option like IPV6_DOFRAG.
While there are multiple options available we should select exactly
one.
1.1. Reserved Words
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC 2119].
2. Background
Path MTU Discover assumes that the application / network stack will
be in the position to retransmit the packet apon reception of a PTB
ICMPv6 message. While this is true of TCP, there is class of
protocols for which this is not true, like DNS/UDP. DNS/UDP is a
stateless single packet exchange protocol. The client asks a query
of the server and the server responds, usually with a bigger
response, then immediately forgets the request. This works well for
IPv4 where routers fragment the packets. For IPv6, however, it
requires the client to timeout as the PTB message is usually being
sent to the server which has no memory of the packet that triggered
the PTB message. Setting IPV6_USE_MIN_MTU to 1 on the UDP socket
reduces but does not remove the problem as the "minimum IPv6 MTU" of
1280 is not a true minimum.
[RFC 2460] permits PTB messages with values smaller than 1280 and
requires the sending node to add a fragmentation header to subsequent
Andrews Expires July 25, 2012 [Page 3]
Internet-Draft Forcing Fragmentation of IPv6 Packets January 2012
packets. To avoid timeouts protocols, like DNS/UDP, need a way to
force the addition of a fragment header to packets at or below the
minimum IPv6 MTU.
3. Extend IPV6_USE_MIN_MTU
Currently IPV6_USE_MIN_MTU only requires a Fragmentation header to be
added when the packet size is greater that 1280 byte, packets less
that 1280 bytes are not required to have a Fragment header added.
This change would result in a Fragmentation header also being added
to packets that are 1280 bytes or less.
If IPV6_USE_MIN_MTU is set to 1 then a Fragment header MUST be added
to both multicast and unicast packets.
If IPV6_USE_MIN_MTU is set to -1 then a Fragment header MUST be added
to multicast packets.
Alternatively, one could use 2 and -2 to indicate the forced addition
of a Fragment header in addition to limiting the MTU.
4. Extend IPV6_DONTFRAG
If IPV6_DONTFRAG is set to -1 (new value) then a Fragment header MUST
be added to the packet.
5. Add IPV6_DOFRAG
This is similar to IPV6_USE_MIN_MTU in that it is a tri-state flag.
When set to -1 a Fragment header MUST be added to multicast packets.
When set to 1 a Fragment header MUST be added to both multicast and
unicast packets. When set to 0 a Fragment header is only added if
fragmentation would otherwise happen.
int on = 1;
setsockopt(fd, IPPROTO_IPV6, IPV6_DOFRAG, &on, sizeof(on));
Setting IPV6_DONTFRAG to 1 will force IPV6_DOFRAG to 0.
Setting IPV6_DOFRAG to 1 or -1 will force IPV6_DONTFRAG to 0.
6. IANA Considerations
No IANA Considerations.
Andrews Expires July 25, 2012 [Page 4]
Internet-Draft Forcing Fragmentation of IPv6 Packets January 2012
7. Security Considerations
TBA
8. Normative References
[RFC 1191]
Mogul, J. and S. Deering, "Path MTU Discovery", RFC 1191,
November 1990.
[RFC 2119]
Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC 2460]
Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", RFC 2460, December 1998.
[RFC 3542]
Stevens, W., Thomas, M., Normark, E., and T. Jinmei,
"Advanced Sockets Application Program Interface (API) for
IPv6", RFC 2003, May 2003.
Author's Address
Mark Andrews
Internet Systems Consortium
950 Charter Street
Redwood City, CA 94063
US
Email: marka@isc.org
Andrews Expires July 25, 2012 [Page 5]