Internet DRAFT - draft-frindell-webtrans-devious-baton
draft-frindell-webtrans-devious-baton
WebTransport A. Frindell
Internet-Draft Meta
Intended status: Informational 10 July 2023
Expires: 11 January 2024
Devious Baton Protocol for Exercising WebTransport
draft-frindell-webtrans-devious-baton-00
Abstract
This document describes a simple protocol that can be used to
exercise the functionality provided by WebTransport. The protocol
passes a "baton" between endpoints, using both unidirectional and
bidirectional streams.
About This Document
This note is to be removed before publishing as an RFC.
The latest revision of this draft can be found at
https://afrind.github.io/draft-frindell-webtrans-devious-baton/draft-
frindell-webtrans-devious-baton.html. Status information for this
document may be found at https://datatracker.ietf.org/doc/draft-
frindell-webtrans-devious-baton/.
Discussion of this document takes place on the WebTransport Working
Group mailing list (mailto:webtransport@ietf.org), which is archived
at https://mailarchive.ietf.org/arch/browse/webtransport/. Subscribe
at https://www.ietf.org/mailman/listinfo/webtransport/.
Source for this draft and an issue tracker can be found at
https://github.com/afrind/draft-frindell-webtrans-devious-baton.
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 https://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."
Frindell Expires 11 January 2024 [Page 1]
Internet-Draft devious-baton July 2023
This Internet-Draft will expire on 11 January 2024.
Copyright Notice
Copyright (c) 2023 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 (https://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 Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3
3. Session Establishment . . . . . . . . . . . . . . . . . . . . 3
3.1. Query Parameters . . . . . . . . . . . . . . . . . . . . 3
3.2. Protocol Version . . . . . . . . . . . . . . . . . . . . 4
4. Protocol Behavior . . . . . . . . . . . . . . . . . . . . . . 4
4.1. Setup . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2. Processing a Baton Message . . . . . . . . . . . . . . . 4
4.3. Baton message . . . . . . . . . . . . . . . . . . . . . . 5
4.4. Datagrams . . . . . . . . . . . . . . . . . . . . . . . . 6
4.5. Session Closure . . . . . . . . . . . . . . . . . . . . . 6
4.6. Error Handling . . . . . . . . . . . . . . . . . . . . . 6
4.6.1. Stream Error Codes . . . . . . . . . . . . . . . . . 6
4.6.2. Session Error Codes . . . . . . . . . . . . . . . . . 7
5. Security Considerations . . . . . . . . . . . . . . . . . . . 7
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
7. Normative References . . . . . . . . . . . . . . . . . . . . 7
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 8
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 8
1. Introduction
WebTransport offers applications the ability to send and receive data
over bidirectional and unidirectional streams, as well as send and
received datagrams. The Devious Baton protocol is an application
that can be used to test the full suite of functionality in a
WebTransport implementation and demonstrate interoperability.
Frindell Expires 11 January 2024 [Page 2]
Internet-Draft devious-baton July 2023
The protocol works by passing a "baton" -- a one byte integer --
between endpoints using streams. A receiving endpoint increments the
baton value modulo 256 and sends it to the peer until the baton's
value reaches 0.
2. Conventions and Definitions
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 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
Client: The endpoint that initiates the WebTransport session
Server: The endpoint that did not initiate the WebTransport session
Devious Baton Session: A single WebTransport session initiated as
described in Section 3
3. Session Establishment
The client initiates a WebTransport session as defined in [OVERVIEW].
The protocol can be used by any endpoint, but for interoperability it
is RECOMMENDED that the URL path be /webtransport/devious-baton.
3.1. Query Parameters
The behavior of the protocol can be configured by parameters
indicated by the client. These parameters are transmitted in query
parameters in the session establishment URL. Sending parameters is
optional but omission of a parameter requires the server to interpret
that as the default value.
The server MUST support the following optional query parameters:
* version - an integer specifying the draft version of Devious Baton
the client intends to use
If the version is invalid or the server does not support the
specified version, it MUST reject the WebTransport session with a 4xx
status code. The default value is 0.
* baton - an integer between 1 and 255, inclusive, which the server
will use as the initial baton value for all batons.
Frindell Expires 11 January 2024 [Page 3]
Internet-Draft devious-baton July 2023
If the baton value is invalid, the server MUST reject the
WebTransport session with a 4xx status code. There is no default -
if unspecified the server chooses a random baton value between 1 and
255, inclusive.
* count - a positive integer specifying how many batons will be sent
in parallel
The default value is 1. If the client asks for more batons than the
server is capable of sending, the server MUST reject the WebTransport
session with a 4xx status code.
3.2. Protocol Version
This draft defines Devious Baton protocol version 0.
4. Protocol Behavior
4.1. Setup
Upon successful negotiation of a WebTransport session to the Devious
Baton endpoint, the server opens a unidirectional stream for each
baton. If there is insufficient stream credit to open a
unidirectional stream, the server MUST close the WebTransport session
with the DA_YAMN session error code. The server sends a Baton
message with the initial baton value on each stream and closes it.
4.2. Processing a Baton Message
When either endpoint receives a Baton message on a stream, it takes
the following actions:
* If the value of the baton is 0, the endpoint decrements the number
of active batons by one.
* If the value of the baton is not 0, the endpoint MUST send a new
Baton message with a baton value equal to the incoming baton value
+ 1 modulo 256. The new Baton message is sent on a stream,
decribed below.
* After sending the Baton message, the endpoint MUST send a FIN on
the stream.
The endpoint selects the outgoing Baton message stream based on how
the incoming Baton message arrived.
Frindell Expires 11 January 2024 [Page 4]
Internet-Draft devious-baton July 2023
* If the incoming Baton message arrived on a unidirectional stream,
the endpoint opens a bidirectional stream and sends the outgoing
Baton message on it.
* If the Baton message arrived on a peer-initiated bidirectional
stream, the endpoint sends the outgoing Baton message on that
stream.
* If the Baton message arrived on a self-initiated bidirectional
stream, the endpoint opens a unidirectional stream and sends the
outgoing Baton message on it.
If an endpoint receives a baton message with an unexpected value, it
MAY close the WebTransport session with the SUS session error code.
If the endpoint has insufficient stream credit to open the correct
type of stream, it MUST close the WebTransport session with the
DA_YAMN session error code.
If the endpoint has insufficient flow control credit to send the
Baton message, it SHOULD send as much as limits allow, and wait for
additional credit. The endpoint SHOULD close the WebTransport
session with the BORED session error code if the peer takes too long
to grant credit.
4.3. Baton message
Baton Message {
padding length(i)
padding(...)
baton(1)
}
To allow for exercising of long streams and flow control, the Baton
message begins with an aribtrary amount of padding. padding length
specifies the number of bytes of padding. The padding field contains
padding length octets of padding. The receiver ignores the bytes
themselves so they can be any value, for example 0 or random data.
baton contains the current value of the baton. It is a single byte
to enforce the modulo 256 arithmetic.
Frindell Expires 11 January 2024 [Page 5]
Internet-Draft devious-baton July 2023
4.4. Datagrams
When a client endpoint receives a Baton message with a baton value =
1 modulo 7, it sends a datagram with an identical Baton message.
When a server endpoint receives a Baton message with a baton value =
0 modulo 7, it sends a datagram with an identical Baton message.
Note that a Baton message in a datagram MUST use a padding value
small enough such that the entire Baton message fits in a single
datagram.
4.5. Session Closure
Each endpoint tracks the number of active batons. It is initally
equal to the client's count parameter. Each time a baton exchange
completes or is reset, the number of active batons is decreased by 1.
When the number of active batons reaches 0, the endpoint MUST close
the WebTransport session with no error.
To close a Devious Baton Session with an error, the endpoint
initiating the close sends a CLOSE_WEBTRANSPORT_SESSION capsule with
the specified session error code. To close the session without an
error, the endpoint initiating the close sends a FIN on the CONNECT
stream.
4.6. Error Handling
If an endpoint receives a gracefully closed stream or datagram with
an incomplete Baton message, it MUST close the WebTransport session
with the BRUH session error code.
Either endpoint can send a STOP_SENDING or RESET_STREAM on an open
stream. STOP_SENDING MUST use the IDC stream error code. Upon
receipt of a STOP_SENDING on a stream, or a RESET_STREAM on a
bidirectional stream, the endpoint MUST send a RESET_STREAM for that
stream with the WHATEVER stream error code unless it has already
closed the stream. A RESET_STREAM sent spontaneously MUST use the
I_LIED stream error code.
If an endpoint gets tired of waiting for the next Baton message, it
MAY close the WebTransport session with the BORED error code.
4.6.1. Stream Error Codes
The following error codes can be sent in RESET_STREAM and
STOP_SENDING frames.
Frindell Expires 11 January 2024 [Page 6]
Internet-Draft devious-baton July 2023
+==========+======+================================+
| Name | Code | Description |
+==========+======+================================+
| IDC | 0x01 | I don't care about this stream |
+----------+------+--------------------------------+
| WHATEVER | 0x02 | The peer asked for this |
+----------+------+--------------------------------+
| I_LIED | 0x03 | Spontaneous reset |
+----------+------+--------------------------------+
Table 1: Stream Error Codes
4.6.2. Session Error Codes
The following error codes can be sent in the
CLOSE_WEBTRANSPORT_SESSION capsule.
+=========+======+=================================+
| Name | Code | Description |
+=========+======+=================================+
| DA_YAMN | 0x01 | There is insufficient stream |
| | | credit to continue the protocol |
+---------+------+---------------------------------+
| BRUH | 0x02 | Received a malformed Baton |
| | | message |
+---------+------+---------------------------------+
| SUS | 0x03 | Received an unexpected Baton |
| | | message |
+---------+------+---------------------------------+
| BORED | 0x04 | Got tired of waiting for the |
| | | next message |
+---------+------+---------------------------------+
Table 2: Session Error Codes
5. Security Considerations
There are not believed to be any further security considerations
beyond those presented in QUIC Transport.
6. IANA Considerations
This document has no IANA actions.
7. Normative References
Frindell Expires 11 January 2024 [Page 7]
Internet-Draft devious-baton July 2023
[OVERVIEW] Vasiliev, V., "The WebTransport Protocol Framework", Work
in Progress, Internet-Draft, draft-ietf-webtrans-overview-
05, 24 January 2023,
<https://datatracker.ietf.org/doc/html/draft-ietf-
webtrans-overview-05>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/rfc/rfc2119>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
Acknowledgments
Martin Thomson, Christian Huitema and Lucas Pardue contributed ideas
to this protocol. David Schinazi suggested the name Devious Baton.
Error code naming inspiration by middle schoolers everywhere, but
specifically James Frindell.
Author's Address
Alan Frindell
Meta
Email: afrind@meta.com
Frindell Expires 11 January 2024 [Page 8]