Network Working Group M. Andrews
Internet-Draft ISC
Intended status: Informational October 15, 2015
Expires: April 17, 2016
TCP Fails To Respect IPV6_USE_MINMTU
draft-andrews-tcp-and-ipv6-use-minmtu-00
Abstract
The IPV6_USE_MINMTU socket option is used to set the maximum IPv6
packet size to be used on a socket. Many implementations of TCP
running over IPv6 neglect to check the IPV6_USE_MINMTU value when
performing MSS negotiation and when contructing a TCP segment. This
lead to oversized IPv6 packets being sent resulting in unintended
Path Maximum Transport Unit Discovery (PMTUD) being performed and to
fragmented IPv6 packets being sent.
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 April 17, 2016.
Copyright Notice
Copyright (c) 2015 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
Andrews Expires April 17, 2016 [Page 1]
Internet-Draft tcp-and-ipv6-use-minmtu October 2015
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Reserved Words . . . . . . . . . . . . . . . . . . . . . 2
2. MSS Negotiation . . . . . . . . . . . . . . . . . . . . . . . 2
3. Segment Size Calculation . . . . . . . . . . . . . . . . . . 3
4. Current Usage . . . . . . . . . . . . . . . . . . . . . . . . 3
5. Normative References . . . . . . . . . . . . . . . . . . . . 3
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 3
1. Introduction
The IPV6_USE_MINMTU [RFC3542] socket option is used to set the
maximum IPv6 packet size to be used on a socket. Many
implementations of TCP running over IPv6 neglect to check this value
when performing MSS negotiation and when contructing a TCP segment.
This lead to oversized IPv6 packets being sent resulting unintended
PMTUD [RFC1191] being performed and to fragmented IPv6 packets being
sent.
TCP when running over IPv6 SHOULD check the state of the
IPV6_USE_MINMTU when performing MSS negotiation. TCP implementions
already use learnt PMTU and interface MTU when performing MSS
negotiation.
TCP, when running over IPv6, SHOULD check the state of the
IPV6_USE_MINMTU when calculating the segment size to send. TCP
implementions already use learnt PMTU and interface MTU when
performing calculating the segment size to send.
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 [RFC2119].
2. MSS Negotiation
TCP when running over IPv6 SHOULD check the state of the
IPV6_USE_MINMTU when performing MSS negotiation. If the value of
IPV6_USE_MINMTU is one (1) then the application has requested that
PMTUD not be performed on the is socket and that IPv6 packets be sent
at a size no greater then the network minumum MTU of 1280 bytes.
This means that the TCP MSS negotiation size SHOULD be no bigger than
Andrews Expires April 17, 2016 [Page 2]
Internet-Draft tcp-and-ipv6-use-minmtu October 2015
1220 (1280 - 40 - 20) to account for the IPv6 header and the TCP
header and MAY be smaller.
If this negotiation is properly performed then PMTUD of reply traffic
should not normally occur.
3. Segment Size Calculation
TCP when running over IPv6 SHOULD check the state of the
IPV6_USE_MINMTU when calculation the next segment to send. If the
value of IPV6_USE_MINMTU is one (1) them the maximum segment size
SHOULD be 1220.
If the TCP layer neglects to check the value of IPV6_USE_MINMTU and
it is one (1), the packet, when passed to the IPv6 layer, will be
fragmented if the resulting packet is bigger that 1280 octets. This
can result in communications failures due too itermediate nodes not
passing fragmented packets.
4. Current Usage
The IPV6_USE_MINMTU and TCP are used together in DNS nameservers as
TCP message streams are normally no more than a couple of IPv6
packets, there are lots of servers / clients and there are external
time contraints where recovery from lost ICMPv6 PTB will fall outside
of the time constraint window.
5. Normative References
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
DOI 10.17487/RFC1191, November 1990,
<http://www.rfc-editor.org/info/rfc1191>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/
RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC3542] Stevens, W., Thomas, M., Nordmark, E., and T. Jinmei,
"Advanced Sockets Application Program Interface (API) for
IPv6", RFC 3542, DOI 10.17487/RFC3542, May 2003,
<http://www.rfc-editor.org/info/rfc3542>.
Author's Address
Andrews Expires April 17, 2016 [Page 3]
Internet-Draft tcp-and-ipv6-use-minmtu October 2015
M. Andrews
Internet Systems Consortium
950 Charter Street
Redwood City, CA 94063
US
Email: marka@isc.org
Andrews Expires April 17, 2016 [Page 4]