Internet DRAFT - draft-rosenau-flexible-tcp

draft-rosenau-flexible-tcp







Network Working Group                                         M. Rosenau
Internet-Draft                                         November 16, 2015
Intended status: Experimental
Expires: May 19, 2016


           The Flexible Transmission Control Protocol (FTCP)
                     draft-rosenau-flexible-tcp-00

Abstract

   This document describes a protocol that may be used as replacement
   for the Transmission Control Protocol (TCP).

   The protocol allows changing the lower-layer address (such as IP
   address) or even a change or the lower-layer protocol (e.g. from IPv4
   to IPv6) in the middle of the connection.

   Use cases are private peer-to-peer applications (such as computer
   games) or mobile communication.

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 May 19, 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



Rosenau                   Expires May 19, 2016                  [Page 1]

Internet-Draft                    FTCP                     November 2015


   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.

1.  Introduction

   Traditionally for connection-oriented data exchange the Transmission
   Control Protocol (TCP) [RFC0793] is used.  This protocol relies on
   the fact that the IP addresses of the two hosts involved in a
   connection do not change during the connection.

   Many private internet connections (such as DSL) are "hung up" once in
   24 hours and the IPv4 address of the host changes.  This was done
   because the IPv4 address shortage was easier to handle this way by
   the internet provider.

   Using IPv6 it would theoretically be possible to assign a fixed IPv6
   address to each customer however many internet providers change the
   IPv6 addresses even multiple times in an hour because of security
   and/or privacy reasons.

   As a result it is not possible to establish a TCP-based connection
   for more than 24 hours.

   The protocol described in this document can be used as a replacement
   for the Transmission Control Protocol (TCP) which allows a change of
   the lower-layer address (e.g.  IP address) or even the lower-layer
   protocol (e.g. from IPv4 to IPv6) while the connection is active.

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in BCP
   14, RFC 2119 [RFC2119] and indicate requirement levels for compliant
   implementations.

3.  Functional specification

3.1.  Datagram format

   The Flexible Transmission Control Protocol may use many different
   protocols as lower-layer protocol.  Examples are: IPv4, IPv6, raw
   Ethernet frames, encapsulated into UDP packets...

   A Flexible Transmission Control Protocol datagram has the following
   form (not containing the lower-layer header):



Rosenau                   Expires May 19, 2016                  [Page 2]

Internet-Draft                    FTCP                     November 2015


       0                   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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Source Connection                       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Destination Connection                    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                        Sequence Number                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                   Acknowledgement Number                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Type  |       Reserved        |            Window             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
      |                                                               |
      |                           Data                +-+-+-+-+-+-+-+-+
      |                                               |    Padding    '
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - - - - - - +

                          Figure 1: FTCP datagram

   Source Connection: 32 bits
      This field describes the sending host's identifier of the
      connection.
      Using traditional TCP a connection is identified using source
      address, destination address, source port and destination port.
      All these four fields are required to uniquely identify a
      connection.
      Using the Flexible Transmission Control Protocol however the
      "source connection" field uniquely identifies the connection on
      the source host and the "destination connection" field uniquely
      identifies the connection on the destination host.  For security
      reasons the receiving host SHOULD check if the "source connection"
      field matches the "destination connection" field.

   Destination Connection: 32 bits
      This field describes the receiving host's identifier of the
      connection.

   Sequence Number: 32 bits
      The sequence number of the first data octet in this segment.  The
      calculation of the sequence number differs from the calculation in
      traditional TCP.

   Acknowledgement Number: 32 bits
      The sequence number the sender is expecting to receive.




Rosenau                   Expires May 19, 2016                  [Page 3]

Internet-Draft                    FTCP                     November 2015


   Type: 4 bits
      This field contains the type of the datagram:
      0 - Acknowledge
      1 - Data
      2 - Connection request
      3 - Connection response
      4 - Connection reject
      5 - Disconnection request
      6 - Disconnection response
      7 - Type reject
      8 - Options (optional)
      9 - Hold request (optional)
      10 - Hold response (optional)
      11 - Continue (optional)
      12-15 - Reserved

   Reserved: 12 bits
      Reserved for future use.  MUST be zero.

   Window: 16 bits
      Size of the "data" field measured in octets.

   Checksum: 16 bits
      The checksum field is the 16 bit one's complement of the one's
      complement sum of all 16 bit words in the datagram NOT including
      the lower-level headers nor the padding.
      If the datagram contains an odd number of octets ("window" is odd)
      a zero octet is appended to the "data" field for the checksum
      calculation.
      The "checksum" field itself is set to zero for the checksum
      calculation.
      Note: Unlike traditional TCP the IP addresses are NOT used for
      checksum calculation (traditional TCP uses a "pseudo-header").

   Data: variable
      Content depends on the "state" field.

   Padding: variable
      Additional bytes used if the lower-layer protocol requires the
      datagram to have a certain size.  The sender SHOULD use zero
      bytes; the receiver MUST ignore the bytes.  The padding is NOT
      part of the Flexible TCP datagram but it is seen as part of the
      lower-layer protocol.








Rosenau                   Expires May 19, 2016                  [Page 4]

Internet-Draft                    FTCP                     November 2015


3.2.  Establishing a connection

   To establish a connection a host sends a datagram of the type
   "connection request" (type=2) to the listening host.

   The sequence number, acknowledgement number and destination
   connection fields MUST be zero; the source connection field is set to
   a value chosen by the host.

   Unlike traditional TCP there is no "destination port" which is used
   to identify the service (such as port number 80 to identify HTTP).

   Instead the "data" field identifies the service:

   An empty data field ("window"=0) is used if the lower-layer protocol
   already specifies the service to be used.  An example would be an
   application that uses FTCP-over-UDP; in this case the lower-layer
   protocol (the UDP destination port number) is used to route the
   incoming datagram to the correct application.

   If the lower-layer protocol is not sufficient to route incoming
   datagrams to the correct application (for example if FTCP is really
   used as replacement for TCP on operating system level) the "data"
   field contains the name of the service to be connected to.  The
   "window" field is the length of the name in characters.  No padding
   or termination (such as NUL-termination) characters are used in the
   "data" field.

   "Standard" services (as defined in "/etc/services" files) are
   identified by lower-case letters (such as "http" for HTTP or "ftp"
   for FTP).

   Vendor-defined services are specified by a "reverse-domain-name"
   scheme: The owner of the domain "hello.example.com" might define a
   vendor-specific service "com.example.hello.world".

   When the connection is accepted the listening host answers with a
   "connection response" datagram (type=3).
   The acknowledgement number and the sequence number are zero; the
   source connection is the connection identifier chosen by the
   listening host and the destination connection field is the value of
   the source connection field.
   The "data" field is empty ("window"=0).

   If the connection is rejected a "connection reject" datagram (type=4)
   is sent.  In this case the source connection field SHALL also be
   zero.




Rosenau                   Expires May 19, 2016                  [Page 5]

Internet-Draft                    FTCP                     November 2015


3.3.  Data transmission

   To transmit data a "data" packet (type=1) is sent. "data" contains
   the actual data to be transmitted.

   An FTCP datagram does not have an "options" field (as present in the
   TCP datagram).  Instead the special datagram type "options" (type=8)
   is used.  In this datagram the "data" field contains TCP options as
   described in RFC 793 [RFC0793].

   The sequence number and the acknowledgement number are incremented by
   "data" and "options" datagrams.  The numbers are incremented by the
   number of octets in the "data" field (the value of the "window"
   field).  Both fields use an ones-complement sum, so the next value
   after (2^32-1) is 1, not 0.  Note that in traditional TCP the length
   of the "options" field does not affect these numbers while in
   Flexible TCP it does.

   An empty datagram is sent if it is only desired to acknowledge the
   reception of a datagram or not to cause a connection time-out.  These
   datagrams have the type 0 ("acknowledge packet").

   If a packet of types 8-15 is received which is not supported by the
   receiver the receiver answers with a "type reject" packet (type=7).
   The "data" field is 1 byte long ("window"=1) and contains the value
   of the "Type" field which was not understood by the receiver.
   Neither acknowledgement number nor sequence number are modified in
   this case (independent of the "window" field of the packet type not
   supported and although the "type reject" packet has a "data" length
   of 1 octet).

3.4.  Regular disconnection

   If one host wishes to hang up (disconnect) the connection it sends a
   "disconnection request" packet (type=5).  The sequence number and
   acknowledgement number fields SHALL be set correctly but the receiver
   SHALL ignore these fields.  The data of this packet is empty
   ("window"=0).

   The receiver answers with a "disconnection response" packet (type=6;
   "window"=0).

   The sender of "disconnection response" SHALL ignore all further
   packets belonging to this connection but "disconnection request"
   after sending this packet.  It SHOULD be prepared to receive an
   additional "disconnection request" packet if the "disconnection
   response" packet was lost.  In this case the "disconnection response"
   packet is repeated.



Rosenau                   Expires May 19, 2016                  [Page 6]

Internet-Draft                    FTCP                     November 2015


   Once the sender of the "disconnection request" packet received the
   "disconnection response" it SHALL ignore all further packets
   belonging to this connection.

4.  Address changes

   The main reason for using the Flexible Transmission Control Protocol
   instead of traditional TCP is that the lower-layer address of a host
   is changing while the connection is active.

   To allow such address changes a host will check if the sequence
   number, acknowledgement number and source connection fields of a
   datagram received are matching to the destination connection field.
   However the host does NOT check if the lower-layer address (such as
   the IP address) is matching.  Instead the host SHALL assume that the
   lower-layer address (or even protocol) of the other host has changed
   if the address is not matching this host's idea of the other host's
   lower-layer address.

   Example:

   o  Host A supports two lower-layer protocols for the Flexible TCP
      protocol: IPv6 (Flexible TCP is the "next header" protocol of
      IPv6) and UDP/IPv4 (Flexible TCP frames are packed into UDP
      packets).

   o  There is an active Flexible TCP connection between host A and host
      B

   o  Host B has the IPv4 address 192.168.0.1, UDP port 1234

   o  Host A receives a Flexible TCP packet from address 192.168.0.2,
      UDP source port 4321

   o  The destination connection and source connection fields match the
      connection between hosts A and B.  The source connection, sequence
      number and acknowledgement number fields are plausible.  (The
      check of the sequence number and acknowledgement number is
      necessary to detect old packets that are not longer valid.)

   o  Now host A assumes that host B will use UDP port 4321 instead of
      1234 for this Flexible TCP connection.

   o  Host A receives a Flexible TCP packet from address 192.168.2.3,
      UDP source port 5678.  The fields (source connection, destination
      connection, sequence number, acknowledgement number) match the
      active connection.




Rosenau                   Expires May 19, 2016                  [Page 7]

Internet-Draft                    FTCP                     November 2015


   o  Host A assumes that the IPv4 address of host B has changed from
      192.168.0.1 to 192.168.2.3.  Note that traditional TCP connection
      would assume that the datagram belongs to another connection in
      this case.

   o  Host A receives a packet from IPv6 address FC00::2 while all the
      fields are matching the active connection.

   o  Host A assumes that host B is now using IPv6 instead of UDP/IPv4
      for this connection.

   Both hosts MUST be prepared for an address change of the other host.

   Support for lower-layer protocol changes (such as from UDP/IPv4 to
   IPv6 as shown in the example) is optional.

5.  "Hold" feature

   The "hold" feature may be used to remove a host from the network
   without hanging up the FTCP connection.  Mobile devices might be a
   possible use case.  Virtual private networks may be another use case.

   One host sends a "hold request" packet (type=9; "window"=0).

   If the other host supports the "hold" feature it answers with "hold
   response" (type=10; "window"=0).  (Otherwise a "type reject" packet
   is sent.)

   After having received the "hold request" or "hold response" packet
   the connection is in "hold" state.  In "hold" state there is no
   connection time-out and no packets are sent.  All packets but "hold
   request" and "continue" are ignored.  "Hold request" packets are not
   ignored because the "hold response" packet may have been lost so the
   other host may send additional "hold request" packets to request a
   (additional) "hold response" packet from this host.

   To exit hold state the higher-level application of one of the two
   hosts must explicitly request leaving "hold" state.  Typically this
   will be done by a human user interaction.  A "continue" packet
   (type=11) is sent to the other host.  The other host acknowledges
   this "continue" packet using an "acknowledge" packet (type=0).

6.  References








Rosenau                   Expires May 19, 2016                  [Page 8]

Internet-Draft                    FTCP                     November 2015


6.1.  Normative References

   [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>.

6.2.  Informational References

   [RFC0793]  Postel, J., "Transmission Control Protocol", STD 7, RFC
              793, DOI 10.17487/RFC0793, September 1981,
              <http://www.rfc-editor.org/info/rfc793>.

Author's Address

   Martin D. J. Rosenau

   Email: martin@rosenau-ka.de

































Rosenau                   Expires May 19, 2016                  [Page 9]