



Internet Engineering Task Force                          G. D'Amore, Ed.
Internet-Draft
Intended status: Informational                                M. Sustrik
Expires: April 29, 2017
                                                        October 26, 2016


                 UDP Mapping for Scalability Protocols
                           sp-udp-mapping-01

Abstract

   This document defines the UDP mapping for scalability protocols.

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 29, 2017.

Copyright Notice

   Copyright (c) 2016 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
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.






D'Amore & Sustrik        Expires April 29, 2017                 [Page 1]

Internet-Draft             UDP mapping for SPs              October 2016


1.  Underlying protocol

   This mapping should be layered directly on the top of UDP.

   There's no fixed UDP port to use for the communication.  Instead,
   port numbers are assigned to individual services by the user.

2.  Message delimitation

   Each UDP packet maps to exactly one SP message.

   There is no way to split one SP message into multiple UDP packets and
   therefore SP messages larger than existing path MTU will be dropped
   silently.

   There is also no way to pack multiple SP messages into a single UDP
   packet.

3.  Packet layout

   Each packet consists of an 8-byte header followed by the opaque
   message payload:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      0x00     |      0x53     |      0x50     |     opcode    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             type              |            reserved           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        payload ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-

   The first three bytes of the protocol header are used to make sure
   that the peer's protocol is compatible with the protocol used by the
   local endpoint.  Keep in mind that this protocol is designed to run
   on an arbitrary UDP port, thus the standard compatibility check -- if
   it runs on port X and protocol Y is assigned to X by IANA, it speaks
   protocol Y -- does not apply.  We have to use an alternative
   mechanism.

   The first three bytes of the protocol header MUST be set to 0x00,
   0x53 and 0x50.  If the protocol header received from the peer
   differs, the UDP packet MUST be ignored.

   The fact that the first byte of the protocol header is binary zero
   eliminates any text-based protocols that were accidentally sending to
   the endpoint.  Subsequent two bytes make the check even more



D'Amore & Sustrik        Expires April 29, 2017                 [Page 2]

Internet-Draft             UDP mapping for SPs              October 2016


   rigorous.  At the same time they can be used as a debugging hint to
   indicate that the connection is supposed to use one of the
   scalability protocols -- ASCII representation of these bytes is 'SP'
   that can be easily spotted in when capturing the network traffic.

3.1.  Opcode

   The fourth byte is an operation code (opcode), which is used to
   indicate a transport-specific type of operation.  The following
   operations are defined:

      0x00 -- DATA: The packet carries SP payload data.

      0x01 -- CREQ: The packet requests (initiates) a logical
      connection.

      0x02 -- CACK: The packet confirms creation of a logical
      connection.

      0x03 -- DISC: The packet terminates a logical connection.

   It is intended that if the protocol must be revised, that additional
   op codes can be assigned, obviating the need for an explicit version
   field.

   These operation codes are used in the management of logical
   connections, and are described in more detail in the Logical
   Connections section below.

3.2.  SP Type

   The fifth and sixth bytes of the header form a 16-bit unsigned
   integer in network byte order representing the type of SP endpoint on
   the layer above.  The value SHOULD NOT be interpreted by the mapping,
   rather the interpretation should be delegated to the scalability
   protocol above the mapping.  For informational purposes, it should be
   noted that the field encodes information such as SP protocol ID,
   protocol version and the role of endpoint within the protocol.
   Individual values are assigned by IANA.

3.3.  Reserved Field

   Finally, the last two bytes of the protocol header are reserved for
   future use and must be set to binary zeroes.  If the protocol header
   from the peer contains anything else than zeroes in this field, the
   implementation MUST ignore the UDP packet.





D'Amore & Sustrik        Expires April 29, 2017                 [Page 3]

Internet-Draft             UDP mapping for SPs              October 2016


3.4.  Payload

   The packet header is followed by the opaque message payload which
   spans all the way to the end of the packet.  The payload contents are
   the SP message content itself, except in the case of DISC messages.

4.  Unicast Only

   This mapping operates only over Unicast UDP.  Messages with source or
   destination addresses that are not unicast MUST be discarded.

   Furthermore, there is an assumption that bidirectional communication
   is possible.  Various SP protocols have this requirement anyway.

5.  Logical Connections

   This mapping of the SP protocols is layered on top of a
   connectionless transport layer.  However the SP protocols require use
   of logical connections in order to pass "connection IDs" in some of
   the fields (such as the backtrace information used for the Request/
   Reply Scalability Protocol.

   Hence it is desirable to create logical connections, and to be able
   to ensure that the connections are kept active either by monitoring
   activity passively, or by active probing.  It is also desirable for a
   peer to be able to indicate that it's partner may release resources
   used for tracking the connection.

   The logical connection itself is still best-effort only, and packets
   may be corrupted, lost, or reordered.  The packets are also subject
   to inspecion, modification, and replay, if the underlying IP
   transport is not secured.

5.1.  Connection roles

   As with other transports like TCP, we intentionally create the notion
   of a connection initiator, and a connection accepter.  The initiator
   is always the party who initiates the connection, and is the party
   responsible for sending CREQ messages.  The accepter is the party
   that receives the CREQ messages, and replies with CACK (or possibly
   DISC).

   The role of initiator and accepter do not change during the course of
   a single logical connection.







D'Amore & Sustrik        Expires April 29, 2017                 [Page 4]

Internet-Draft             UDP mapping for SPs              October 2016


5.2.  Keeping the Connection Alive

   In order to keep session state, implementations will generally store
   data for each session.  In order to prevent a stale session from
   consuming these resources forever, and in order to keep any
   intervening state active (e.g. NAT rules), a CACK message may be sent
   at any time by the initiator.

   In the event of an error, the accepter MAY reply with an DISC
   message.  Otherwise it MUST reply with a CREQ message.

   An accepter MUST NOT send a CACK message.

   The initiator MUST send CREQ messages every T1 seconds.

   An accepter that has not received a CREQ message for at least T2
   seconds, or an initiator that has not received a CACK message for at
   least T2 seconds, SHOULD assume the connection has failed, and and
   may discard any state associated with the logical connection.

   It is recommended that T1 and T2 be configurable, with recommended
   default values of 30 and 300.  This means that sessions that go
   inexplicably silent for 5 minutes will be closed, and their resources
   reclaimed.

   Note that values for T1 and T2 must match on both initiator and
   accepter for correct operation.  Failure to do so will likely result
   in permature connection termination.

6.  Message Types

6.1.  DATA messages

   DATA messages (opcode 0x00) are used on an established logical,
   connection and, and carry SP messages.  The payload part of the
   message is the SP payload.  Data messages are unacknowledged.

   A DATA message that is received by a party which does not have a
   corresponding logical connection set up SHOULD be replied to with a
   DISC message, using error code 0x04 (not connected).

   DATA messages may only be sent on an active connection, and may be
   sent at any time by either party.








D'Amore & Sustrik        Expires April 29, 2017                 [Page 5]

Internet-Draft             UDP mapping for SPs              October 2016


6.2.  CREQ messages

   CREQ messages are used to establish a logical connection.  The
   initiator sends a CREQ message to the listener.  On success, the
   accepter will record the full UDP source and destination addresses
   (including IP addresses and port numbers), creating a local entry in
   a list of logical connections.

   If this is successful, the accepter MUST respond with an CACK
   message.  Otherwise it SHOULD respond with an appropriately formed
   DISC message.  CREQ messages have no payload.  A CREQ message may be
   sent at any time, and is idempotent.  (If the receiver of a CREQ
   already has the logical connection established, it need simply reply
   with the CACK.

6.3.  CACK messages

   CACK messages are sent in response to a CREQ, when the connection is
   either already established, or after a new connection is established.
   As noted above, CREQ is meant to be idempotent, and indeed may be
   sent periodically to keep a connection from idling out, and so a CACK
   message is also expected to be sent over the network periodically.

6.4.  DISC messages

   DISC messages are sent by one side of a logical connection to
   terminate the logical connection.  This notification allows the
   remote partner to either terminate an existing connection, such as
   when it is shutting down, or to reject a connection attempt made with
   CREQ.

   DISC messages carry in their payload, a single byte indicating a
   reason for the disconnect, along with a human readable reason as an
   ASCII byte array.  (This MAY not be present, and SHOULD NOT be zero
   terminated.)

   The following reasons for DISC are defined:

      0x00 - normal close of a socket or endpoint

      0x01 - connection rejected

      0x02 - SP protocol invalid

      0x03 - invalid address (such as multicast)

      0x04 - not connected




D'Amore & Sustrik        Expires April 29, 2017                 [Page 6]

Internet-Draft             UDP mapping for SPs              October 2016


      0xff - Other error

7.  Latency Considerations

   A full round trip is required to establish a logical connection.

   However, a particularly optimistic initiator could send a CREQ and a
   DATA message in rapid succession, and hope that the DATA was
   received.  Since these protocols are best effort only, this might not
   be a terrible thing to do.

   A future extension might be to offer a new opcode, allowing DATA to
   be combined with a CREQ or CACK.  However, given that typical uses of
   these protocols are for long-lived use cases, there does not seem to
   be any particular urgency in doing this.

8.  IANA Considerations

   This memo includes no request to IANA.

9.  Security Considerations

   The mapping isn't intended to provide any additional security in
   addition to UDP.  If this is a concern, it is recommended that IPsec
   or similar approaches be used to secure the underlying transport.

Authors' Addresses

   Garrett D'Amore (editor)

   Email: garrett@damore.org


   Martin Sustrik

   Email: sustrik@250bpm.com















D'Amore & Sustrik        Expires April 29, 2017                 [Page 7]
