<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>

<?rfc toc="yes"?>
<?rfc strict="yes"?>
<!--<?rfc tocompact="yes"?>-->
<!--<?rfc compact="yes"?>
<?rfc subcompact="no"?>-->
<?rfc tocdepth="1"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes" ?>
<?rfc rfcedstyle="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc iprnotified="no" ?>
<rfc category="std"
     docName="draft-denis-behave-nat-dccp-00.txt"
     ipr="full3978">
  <front>
    <title abbrev="NAT DCCP Requirements">
      Network Address Translation (NAT) Behavioral Requirements
      for DCCP</title>

    <author fullname="R&eacute;mi Denis-Courmont" initials="R." surname="Denis-Courmont">
      <organization>VideoLAN project</organization>
      <address>
        <email>rem@videolan.org</email>
        <uri>http://www.videolan.org/</uri>
      </address>
    </author>

    <date year="2007"/>

    <area>Transport Area</area>
    <workgroup>Behavior Engineering for Hindrance Avoidance (if taken)</workgroup>

    <abstract>
      <t>This document would define a set of requirements for NATs that handle DCCP.
      </t>
    </abstract>
  </front>

  <middle>

    <section anchor="intro" title="Introduction">
      <t> For historical reasons, NAT devices are not typically capable of
        handling datagrams and flows for application using the
        Datagram Congestion Control Protocol (DCCP)<xref target="RFC4340"/>.
      </t>
      <t> This draft discusses the technical issues involved,
        and proposes different potential solutions.
        It is however expected that not all of them (if any) will be carried on.
      </t>
    </section>

    <section anchor="defs" title="Definitions">
      <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"/>.
      </t>
     </section>

    <section anchor="appl" title="Applicability">
      <t> This document applies to NAT devices that want to handle DCCP
        datagrams. It is not the intent of this document to deprecate
        the overwhelming majority of deployed NAT devices.
        These NATs are simply not expected to handle DCCP,
        so this memo is not applicable to them.
      </t>
      <t> TBD: This draft does not currently specify any clear requirement
        anyway.
      </t>
    </section>

    <section anchor="natreq" title="Requirements for NATs">
      <t> The first approach to using DCCP through NAT devices involves
        changing the NAT devices to handle DCCP explicitly.
        Processing of DCCP packets by a NAT device would then be very
        similar to processing of TCP packets, as already specified in
        <xref target="I-D.ietf-behave-tcp"/>.
      </t>
      <t> In addition to the usual changes to the IP header,
        NAT devices would need to mangle:
        <list style="symbols">
          <t>DCCP source port, for outgoing packets,
            depending on the NAT mapping</t>
          <t>DCCP destination port, for incoming packets,
            depending on the NAT mapping</t>
          <t>DCCP checksum, to compensate for IP address and port number
            modifications.
          </t>
        </list>
      </t>
      <t>
        Because changing the the source or destination IP address of a DCCP
        packet will normally invalidate the DCCP checksum, it is not possible
        to use DCCP through a NAT without dedicated support.
        Some NAT devices are known to provide a &quot;generic&quot; transport
        protocol support, whereby only the IP header is mangled.
        That scheme will not work with DCCP at all.
      </t>
      <t> TBD: write down actual mapping and timing requirements, etc.
        See behave-nat-tcp as a start.
      </t>
    </section>

    <section anchor="tunnel" title="Tunnelling">
      <t> Tunnelling is another approach:
        DCCP datagram would be encapsulated into an additionnal UDP transport
        header. This relies on the fact that many NATs are capable of handling
        UDP datagrams. This solution has tha major advantage of not needing
        any changes to the existing deployed NAT devices.
      </t>
      <t> Issues with this solution include:
        <list style="symbols">
          <t> Both sides of the DCCP session need to be updated to use
            tunnelling,
            even though only one side might be hindered with a NAT.
            This implies a non-backward compatible extension
            to <xref target="RFC4340"/>.
          </t>
          <t> A method MUST be defined to negociate when to use tunnelling.
          </t>
          <t> The per-packet overhead is increased.
          </t>
        </list>
      </t>
      <t> Various actual tunnelling solutions are already defined, such
        as ESP-in-UDP<xref target="RFC3948"/> (especially with the NULL
        cipher suite) or Teredo<xref target="RFC4380"/>.
      </t>
    </section>

    <section anchor="simopen" title="DCCP simultaneous open">
      <t> When both parties to an intended DCCP session are located behind
        either a NAT device or a stateful firewall, neither can act as the
        paassive endpoint in the connection establishment.
      </t>
      <t> Unfortunately, at the time of writing, the DCCP connection state
        machine does not allow both peers to behave as active endpoint,
        as is the case in TCP simultaneous open.
        It is expected that this issue will be tackled in the DCCP working
        group shortly (TODO: reference relevant I-D).
      </t>
    </section>

    <section anchor="security" title="Security Considerations">
      <t> TBD.
      </t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t> This document raises no IANA considerations.
      </t>
    </section>

    <section anchor="ack" title="Acknowledgments">
      <t>The authors would like to thank ... for their comments on this document.
      </t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119" ?>
      <?rfc include="reference.RFC.4340" ?>
    </references>
    <references title="Informative References">
      <?rfc include="reference.RFC.3948" ?>
      <?rfc include="reference.RFC.4380" ?>
      <?rfc include="reference.I-D.draft-ietf-behave-tcp-07" ?>
    </references>
  </back>
</rfc>
