<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC0793 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0793.xml">
<!ENTITY RFC1122 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1122.xml">
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC6994 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6994.xml">

<!ENTITY RFC1072 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1072.xml">
<!ENTITY I-D.ietf-tcpm-tcp-edo SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tcpm-tcp-edo.xml">
<!ENTITY I-D.briscoe-tcpm-inner-space SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.briscoe-tcpm-inner-space.xml">
]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most
	 I-Ds might want to use.  (Here they are set differently than their
	 defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="no"?>
<!-- generate a ToC -->
<?rfc tocdepth="3"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->

<rfc category="std" docName="draft-zimmermann-tcpm-echo-option-00"
	ipr="trust200902">

	<!-- ***** FRONT MATTER ***** -->
	<front>
		<!-- The abbreviated title is used in the page header - it is only
			 necessary if the full title is longer than 39 characters -->
		<title abbrev="TCP Echo &amp; Echo Reply Options">The TCP Echo and TCP
		Echo Reply Options</title>

		<author fullname="Alexander Zimmermann" initials="A"
				surname="Zimmermann">
			<organization>NetApp, Inc.</organization>
			<address>
				<postal>
					<street>Sonnenallee 1</street>
					<city>Kirchheim</city>
					<code>85551</code>
					<country>Germany</country>
				</postal>
				<phone>+49 89 900594712</phone>
				<email>alexander.zimmermann@netapp.com</email>
			</address>
		</author>

		<author fullname="Bob Briscoe" initials="B" surname="Briscoe">
			<organization>BT</organization>
			<address>
				<postal>
					<street>B54/77, Adastral Park</street>
					<street>Martlesham Heath</street>
					<city>Ipswich</city>
					<code>IP5 3RE</code>
					<country>UK</country>
				</postal>
				<phone>+44 1473 645196</phone>
				<email>bob.briscoe@bt.com</email>
				<uri>http://bobbriscoe.net/</uri>
			</address>
		</author>

		<author fullname="Richard Scheffenegger" initials="R"
				surname="Scheffenegger">
			<organization>NetApp, Inc.</organization>
			<address>
				<postal>
					<street>Am Euro Platz 2</street>
					<city>Vienna</city>
					<code>1120</code>
					<country>Austria</country>
				</postal>
				<email>rs@netapp.com</email>
			</address>
		</author>

		<date month="November" year="2014"/>

		<!-- Meta-data Declarations -->
		<area>Transport</area>

		<workgroup>TCP Maintenance and Minor Extensions (tcpm)</workgroup>

		<keyword>Internet-Draft</keyword>

		<keyword>I-D</keyword>

		<abstract>
			<t>This document specifies the TCP Echo and TCP Echo Reply options.
			It provides a single field a TCP sender can use to store any type
			of data that a TCP receiver simply echo unmodified back. In
			contrast to the original TCP Echo and TCP Echo Reply options
			defined in RFC 1072 the options specified in this document have
			slightly different semantics and support a variable option
			length.</t>
		</abstract>
	</front>

	<!-- ***** MAIN MATTER ***** -->
	<middle>
		<section title="Introduction">
			<t>This document specifies the TCP Echo and TCP Echo Reply options.
			It provides a single field a TCP sender can use to store any type
			of data that a TCP receiver simply echo unmodified back. In
			contrast to the original TCP Echo and TCP Echo Reply options
			defined in RFC 1072 <xref target="RFC1072"/> the options specified
			in this document have a slightly different semantics and support a
			variable option length.</t>
		</section>

		<section anchor="Terminology" title="Terminology">
			<t>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
			<xref target="RFC2119"/>. These words only have such normative
			significance when in ALL CAPS, not when in lower case.</t>
		</section>

		<section anchor="Echo_option" title="The TCP Echo and TCP Echo Reply options">
			<t>The general structure of TCP options is defined in <xref
			target="RFC0793"/>. The TCP Echo option is organized as indicated
			in <xref target="Fig_Echo"/>.</t>

			<figure align="center" anchor="Fig_Echo" title="The TCP Echo option">
				<artwork><![CDATA[
        0                   1                   2
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 ...
        +---------------+---------------+-------- ... ------+
        |    Kind A     |    Length     |    Data           |
        +---------------+---------------+-------- ... ------+
				]]></artwork>
			</figure>

			<t>The codepoint value of the TCP Echo 'Kind A' is {ToDo: Value
			TBA}. The value of the 'Length' field in octets can be any value
			greater than 1 as long as the TCP Echo option completely fits into
			TCP option space, which may be extended (see <xref
				target="RFC0793"/>, <xref target="I-D.ietf-tcpm-tcp-edo"/>,
			<xref target="I-D.briscoe-tcpm-inner-space"/>). The optional 'Data'
			field is available for the TCP sender to fill with any amount of
			any type of data it wishes to be send back by the TCP receiver in a
			subsequent TCP Echo Reply option (see <xref
				target="Fig_Echo_Reply"/>). It is only be constrained in size
			to an integer number of octets.</t>

			<t>The TCP Echo facility is determined in both directions using a
			single exchange during the 3-way handshake <xref
				target="RFC0793"/>. A TCP seeking to use TCP Echo facility
			includes the TCP Echo option in the initial SYN or SYN/ACK. If the
			TCP receiver of that SYN or SYN/ACK agrees to support TCP Echo
			facility, it MUST respond with TCP Echo Reply option (see <xref
				target="Fig_Echo_Reply"/>) in its corresponding segment.</t>

			<t>Both TCP endpoints MAY use the TCP Echo facility in any segment,
			but only if the TCP Echo option was received in a segment with the
			SYN bit set (i.e., SYN and SYN/ACK) or the TCP Echo Reply option
			was received in response to a sent TCP Echo option. In all cases
			an endpoint MUST NOT include more than one TCP Echo option per
			segment.</t>

			<t>A TCP sender MAY send an empty TCP Echo option with Length=2
			on the SYN, to only indicate that it supports the TCP Echo
			facility. In that case, the TCP receiver of that SYN MUST response
			with and empty TCP Echo Reply option with Length=2 accordingly.</t>

			<t>The TCP Echo Reply option is organized as indicated in <xref
			target="Fig_Echo_Reply"/>.</t>

			<figure align="center" anchor="Fig_Echo_Reply" title="The TCP Echo
			Reply Option">
				<artwork><![CDATA[
        0                   1                   2
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 ...
        +---------------+---------------+-------- ... ------+
        |    Kind B     |    Length     |    Data           |
        +---------------+---------------+-------- ... ------+
				]]></artwork>
			</figure>

			<t>A TCP receiver that does not implement the TCP Echo facility or
			decides to not use the TCP Echo facility for this particular
			connection MUST silently ignore any TCP Echo options it receives
			for this connection. If the TCP receiver has reflected the TCP
			Echo option in its SYN/ACK during the 3-way handshake, it MUST
			reply to any TCP Echo option received during this connection.</t>

			<t>Once enabled on a connection, a TCP receiver that receives a TCP
			Echo option MUST return the same bytes of the Data field in a TCP
			Echo Reply option. This TCP Echo Reply option MUST returned in the
			next segment (e.g., an ACK segment) that is sent. If due to the
			delayed ACK algorithm <xref target="RFC1122"/> more than one TCP
			Echo option is received before a reply segment is sent, the TCP
			receiver MUST choose only one of the options to echo, ignoring the
			others; specifically, it MUST choose the most recently received TCP
			Echo option to echo back (i.e. Last In, First Out - LIFO).</t>
	    </section>

		<section anchor="IANA" title="IANA Considerations">
			<t>This specification requires IANA to allocate a value from the
			TCP option kind name-space against the name
				<?rfc subcompact="yes"?>
				<list style="empty">
					<t>'Kind A'</t>
					<t>'Kind B'</t>
				</list>
				<?rfc subcompact="no"?>
			</t>

			<t>Early implementation before the IANA allocation MUST follow
			<xref target="RFC6994"/> and use experimental option 254 and
			respective Experiment ID:
				<?rfc subcompact="yes"?>
				<list style="empty">
					<t>0xEC01 (16 bits) for the TCP Echo option;</t>
					<t>0xEC02 (16 bits) for the TCP Echo Reply option;</t>
				</list>
				<?rfc subcompact="no"?>
			</t>

			<t>The Echo option defined in RFC1072 <xref target="RFC1072"/>
			specifies different semantics, which do not lend themselves for
			reuse. Specifically, RFC1072 <xref target="RFC1072"/> specifies to
			select the TCP Echo option data from the newest segment with the
			oldest sequence number, while herein we specify to return the TCP
			Echo option of the most recently received segment, regardless of
			sequence numbers.</t>

			<t>{ToDo: Values TBA and register them with IANA} then migrate to
			the assigned option after allocation.}</t>
		</section>

		<section anchor="Security" title="Security Considerations">
			<t>An implementation should not rely for critical TCP mechanisms on
			this facility, before ensuring that the TCP Echo option data field
			is reflected back properly and unmodified. If the TCP Echo option
			is considered critical, a TCP mechanism should have means to verify
			the integrity of the data contained in the TCP Echo Reply
			option.</t>

			<t>Since TCP options are not delivered reliably, a TCP Echo or TCP
			Echo Reply option may be lost or reordered at any time, a TCP
			mechanisms MUST to deal appropriately with this occurrences.</t>

			<t>If multiple TCP mechanisms want to make use of the TCP Echo
			facility, the implementer should accommodate for that, for example
			by encoding the multiple inputs accordingly into the data field of
			the TCP Echo option.</t>

			<t>Some middleboxes have been known to remove TCP options unknown
			to them like those described in this document <xref
				target="Honda11"/>. As the TCP Echo and TCP Echo Reply option
			use two different option numbers, it is conceivable that only one
			or the other may get stripped from a segment, resulting in a
			unidirectional usability of the TCP Echo facility.</t>
		</section>

		<section title="Privacy Considerations">
			<t>This document describes a new mechanism to tag individual TCP
			segments. However, the TCP options described do not expose
			individual user's data. In order to better maintain the
			confidentiality of data exchanged on the wire, and to address some
			aspects of security, it is NOT RECOMMENDED to send easily
			decipherable data in the clear as data in the TCP Echo option.</t>
		</section>

		<section title="Acknowledgements">
			<t>Bob Briscoe's contribution is part-funded by the European
			Community under its Seventh Framework Programme through the Trilogy
			2 project (ICT-317756). The views expressed here are solely those
			of the author.</t>
		</section>
	</middle>

	<!-- ***** BACK MATTER ***** -->
	<back>
		<references title="Normative References">
			&RFC0793;
			&RFC1122;
			&RFC2119;
			&RFC6994;
		</references>

		<references title="Informative References">
			&RFC1072;
			&I-D.ietf-tcpm-tcp-edo;
			&I-D.briscoe-tcpm-inner-space;

			<reference anchor="Honda11" target="">
				<front>
					<title>Is it still possible to extend TCP?</title>
					<author initials="M." surname="Honda"/>
					<author initials="Y." surname="Nishida"/>
					<author initials="C." surname="Raiciu"/>
					<author initials="A." surname="Greenhalgh"/>
					<author initials="M." surname="Handley"/>
					<author initials="H." surname="Tokuda"/>
					<date month="November" year="2011"/>
				</front>
				<seriesInfo name="Proc. of ACM Internet Measurement Conference"
				value="(IMC) '11"/>
			</reference>

		</references>
	</back>
</rfc>
