<?xml version='1.0' encoding='utf-8'?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?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. -->
<rfc
      xmlns:xi="http://www.w3.org/2001/XInclude"
      category="info"
      docName="draft-kang-tcpm-fault-management-in-mptcp-session-02"
      ipr="trust200902"
      obsoletes=""
      updates=""
      submissionType="IETF"
      xml:lang="en"
      tocInclude="true"
      tocDepth="4"
      symRefs="true"
      sortRefs="true"
      version="3">
  <!-- xml2rfc v2v3 conversion 2.38.1 -->
  <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

 <!-- ***** 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="Fault Management in MPTCP">Fault Management Mechanism in MPTCP Session</title>
    <seriesInfo name="Internet-Draft" value="draft-kang-tcpm-fault-management-in-mptcp-session-02"/>
    <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

    <author fullname="Jiao Kang" initials="J." surname="Kang">
      <organization>Huawei</organization>
      <address>
        <email>jiao_kang2022@163.com</email>
     </address>
    </author>
	<author fullname="Qiandeng Liang" initials="Q." surname="Liang">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>No. 207, Jiufeng 3rd Road, East Lake High-tech Development Zone</street>
          <city>Wuhan</city>
          <country>China</country>
        </postal>
        <phone>+86 18651640216</phone>
        <email>liangqiandeng@huawei.com</email>
     </address>
    </author>
    
	<author fullname="XinCai Fei" initials="X." role="editor" surname="Fei">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>No. 410, Jianghong Road, Binjiang District</street>
          <city>Hangzhou</city>
          <country>China</country>
        </postal>
        <email>feixincai1@huawei.com</email>
     </address>
    </author>
	
	<date year="2023"/>
   <area>Transport Area</area>
    <workgroup>TCP Maintenance and Minor Extensions</workgroup>
   <keyword>mptcp</keyword>

   <abstract>
      <t>This document presents a mechanism for fault management during a MPTCP session. It is used to convey subflow failure information from client to server by other subflow running normally. It includes: 1) a new Fault Announce Option for describing subflow failure, 2) implementation and interoperability of this option during a MPTCP session when one subflow suffers a failure. In fact, the server is able to determine network problems accurately based on these fault information reported from multiple clients for their connections.</t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>During data transmission in a MPTCP session, subflows may encounter some problems, for example, port failure on one endpoint, network failure, or middlebox working abnormally. Current MPTCP protocol does not provide exchanges between client and server when a fault happens on a subflow which will cause transmission failure or delay.</t> 

      <t><xref target="RFC8684" format="default">RFC8684</xref> introduces TCP RST Reason (MP_TCPRST) option to signal reasons for sending a RST on a subflow which can help an implementation decide whether to attempt later reconnection. TCP RST Reason (MP_TCPRST) option only reports the reason for a specific subflow that has been determined to be closed later. This solution does not cover the case of abnormal termination of one ongoing subflow.</t> 
	  
      <section numbered="true" toc="default">
        <name>Requirements Language</name>
        <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" format="default">RFC 2119</xref>.</t>
      </section>
    </section>
	
	<section numbered="true" toc="default">
      <name>Fault Announce Exchanges</name>
      <t>This document proposes a fault announce mechanism with a new option that can be used to deliver failure information of abnormal subflow between client and server via another subflow in the MPTCP session that works properly. The flow is illustrated in Figure 1.</t>

     <figure anchor="sending_fault_announce">
	    <name slugifiedName="flow_fault">Client sends Fault Announce to server during a MPTCP Session</name>
        <artwork align="left" name="" type="" alt=""><![CDATA[
       +--------+                               +--------+               
       | Client |                               | Server |
       +--------+                               +--------+
           |                                         |
           |<---MPTCP Session setup with subflows--->|           
           |                                         |
Determine that one ongoing subflow                   |  
      is faulty                                      |
           |                                         |
           |-------Send Fault Announce option------->|
           |     indicating suflow failure via       | 
           |           another subflow               |
           |                                         |	
           |                                         |	
           |                                         |			   
           ]]></artwork>
      </figure>
	  
	  <t>The Fault Announce option is carried on SYN, ACK or data packets.</t>
	  
	  <t>Client may detect a local fault, for example, local port or network card failure, or an error in local protocol processing. In this way, the client can determine the fault cause.</t>
	  
	  <t>Client may actively detect subflow failure by a detecting task to determine the fault cause. For example, the client may deploy a detection task using a bidirectional forwarding detection (BFD) to determine whether the subflow is faulty.</t>
	  
	  <t>Client may send an ICMP request to server and determine the exceptions by the duration of a response. Specifically, if the client cannot receive a response within a preset time, it means that this subflow is not working properly.</t>
	  
	  <t>Another way for client to determine the fault reason is ICMP error report. Client may receive an ICMP error report from a third device (e.g., middlebox on the faulty subflow), in which indicates the fault cause.</t>
	  
    </section>
	
    <section numbered="true" toc="default">
      <name>Fault Announce option</name>
	  <t>A new Fault Announce option is defined to describe the fault in detail occurring on one subflow. If it is set, the faulty subflow is identified by its source address ID (SrcAddressID) and destination address ID (SrcAddressID). The mapping between IP addresses and addresses IDs should be created on both client and server through the process of ADD_ADDR defined in <xref target="RFC8684" format="default">RFC8684</xref> and <xref target="RFC6824" format="default">RFC6824</xref>.</t>

      <section numbered="true" toc="default">
        <name>Option format</name>
        <t>The format of the Fault Announce option (FAULT_ANNOUNCE) is depicted in Figure 2:</t>
		     <figure anchor="fault_announce" align="left" suppress-title="false">
              <name slugifiedName="name-fault_announce">Fault Announce (FAULT_ANNOUNCE) Option</name>
              <artwork align="center" name="" type="" alt=""><![CDATA[
                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+-------+-------+---------------+
|     Kind      |    Length     |Subtype| (rsv) |     Cause     |
+---------------+---------------+-------+-------+---------------+
| DestAddressID |  SrcAddressID |                               |
+---------------+---------------+-------------------------------+

]]></artwork>
            </figure>		
	  <t>A new subtype should be allocated to indicate Fault Announce option.</t>
	  <t>"Cause" is an 8-bit field to describe the reason code for which causes the subflow to malfunction. Client detects the fault and determines the cause. Following values (partially mapped to the Exception Code in ICMP error report) are defined in this document:</t>
	   <ul spacing="normal" bare="false" empty="false">
          <li>0x00~0x09 is reserved. It is compatible with "Reason" defined in RFC8684.</li>
		  <li>Network is unreachable (code 0x0A).</li>
		  <li>Host is unreachable (code 0x0B).</li>
		  <li>Routing is failed (code 0x0C).</li>
		  <li>Server Suppression (code 0x0D).</li>
		  <li>TTL equals zero (IP loops may occur) (code 0x0E).</li>
       </ul>
	  <t>"SrcAddressID" is used to identify source address ID for the faulty subflow.</t>	
	  <t>"DestAddressID" is used to identify destination address ID for the faulty subflow.</t> 
     </section>
	
	<section numbered="true" toc="default">
        <name>Additional requirements to be considered</name>
        <t></t>
		<section numbered="true" toc="default">
          <name>Scenario of middlebox failure</name>
          <t>In some actual scenarios, it is the middlebox failure that causes blocking of one subflow. So client should report to server the information of the faulty middlebox by Fault Announce option so that the server can quickly locate it. The information of a faulty middlebox may include:</t>
		  <t>Middlebox IP: The IP address of the faulty middlebox.</t>
		  <t>IP protocol version: The IP protocol version adopted by the faulty middlebox, i.e. IPv4 or IPv6. Server can use it to parse the field of "Middlebox IP address".</t>
		  <t>Flag ‘A’: If "Middlebox IP address" is optional, this flag should be defined to indicate whether the field of "Middlebox IP address" is carried in Fault Announce option.</t>  
        </section>
		<section numbered="true" toc="default">
          <name>Scenario of distinguishing fault types</name>
          <t>In some possible implementations, faults are classified into transient fault and non-transitory fault. So a field of "fault type" may be added to identify the type (transient fault or non-transitory fault) for subsequent processing.</t>
        </section>
      </section>
    </section>	

    <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>IANA is requested to assign a MPTCP option subtype for the Fault Announce option.</t>
    </section>
	
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Fault Announce option is neither encrypted nor authenticated, so on-path attackers and middleboxes could remove, add or modify this option on observed Multipath TCP connections.</t>
    </section>
  </middle>
  <!--  *****BACK MATTER ***** -->

 <back>
   <references>
      <name>References</name>	  
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
	
		<reference anchor="RFC0793" target="https://www.rfc-editor.org/info/rfc793" quoteTitle="true" derivedAnchor="RFC0793">
          <front>
            <title>Transmission Control Protocol</title>
            <seriesInfo name="STD" value="7"/>
            <seriesInfo name="RFC" value="793"/>
            <seriesInfo name="DOI" value="10.17487/RFC0793"/>
            <author initials="J." surname="Postel" fullname="J. Postel">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1981" month="September"/>
          </front>
        </reference>
		<reference anchor="RFC6824" target="https://www.rfc-editor.org/info/rfc6824" quoteTitle="true" derivedAnchor="RFC6824">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <seriesInfo name="RFC" value="6824"/>
            <seriesInfo name="DOI" value="10.17487/RFC6824"/>
            <author initials="A." surname="Ford" fullname="A. Ford">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Raiciu" fullname="C. Raiciu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Handley" fullname="M. Handley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="O." surname="Bonaventure" fullname="O. Bonaventure">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="January"/>
            <abstract>
              <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers.  The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.</t>
              <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional TCP to support multipath operation.  The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.  This  document defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
        </reference>
		
		<reference anchor="RFC8684" target="https://www.rfc-editor.org/info/rfc8684" quoteTitle="true" derivedAnchor="RFC8684">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <seriesInfo name="RFC" value="8684"/>
            <seriesInfo name="DOI" value="10.17487/RFC8684"/>
            <author initials="A." surname="Ford" fullname="A. Ford">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Raiciu" fullname="C. Raiciu">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Handley" fullname="M. Handley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="O." surname="Bonaventure" fullname="O. Bonaventure">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Paasch" fullname="C. Paasch">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="March"/>
            <abstract>
              <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
              <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
              <t>This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
 </back>
</rfc>
