message-size-increase #3
@ -129,8 +129,9 @@ on the same machine. Both protocols are supported through METADAPT.
|
|||||||
## Message and Transaction Demarcation Protocol (METADAPT)
|
## Message and Transaction Demarcation Protocol (METADAPT)
|
||||||
The Message and Transaction Demarcation Protocol is used to break one or more
|
The Message and Transaction Demarcation Protocol is used to break one or more
|
||||||
reliable data streams into transactions, which are broken down further into
|
reliable data streams into transactions, which are broken down further into
|
||||||
messages. A message, as well as its associated metadata (length, transaction,
|
messages. The representation of a message (or a part thereof) on the protocol,
|
||||||
method, etc.) together is referred to as METADAPT Message Block (MMB).
|
including its associated metadata (length, transaction, method, etc.) is
|
||||||
|
referred to as METADAPT Message Block (MMB).
|
||||||
|
|
||||||
For transports that offer multiple multiplexed data streams that can be created
|
For transports that offer multiple multiplexed data streams that can be created
|
||||||
and destroyed on-demand (such as QUIC) each stream is used as a transaction. If
|
and destroyed on-demand (such as QUIC) each stream is used as a transaction. If
|
||||||
@ -145,8 +146,12 @@ METADAPT-A requires a transport which offers a single full-duplex data stream
|
|||||||
that persists for the duration of the connection. All transactions are
|
that persists for the duration of the connection. All transactions are
|
||||||
multiplexed onto this single stream. Each MMB contains a 12-octet long header,
|
multiplexed onto this single stream. Each MMB contains a 12-octet long header,
|
||||||
with the transaction ID, then the method, and then the payload size (in octets).
|
with the transaction ID, then the method, and then the payload size (in octets).
|
||||||
The transaction ID is encoded as an I64, and the method and payload size are
|
The transaction ID is encoded as an I64, the method is encoded as a U16 and the
|
||||||
both encoded as U16s. The remainder of the message is the payload. Since each
|
and payload size is encoded as a U64. Only the 63 least significant bits of the
|
||||||
|
payload size describe the actual size, the most significant bit controlling
|
||||||
|
chunking. See the section on chunking for more information.
|
||||||
|
|
||||||
|
The remainder of the message is the payload. Since each
|
||||||
MMB is self-describing, they are sent sequentially with no gaps in-between them.
|
MMB is self-describing, they are sent sequentially with no gaps in-between them.
|
||||||
|
|
||||||
Transactions "open" when the first message with a given transaction ID is sent.
|
Transactions "open" when the first message with a given transaction ID is sent.
|
||||||
@ -162,13 +167,25 @@ used up, the connection must fail. Don't worry about this though, because the
|
|||||||
sun will have expanded to swallow earth by then. Your connection will not last
|
sun will have expanded to swallow earth by then. Your connection will not last
|
||||||
that long.
|
that long.
|
||||||
|
|
||||||
|
#### Message Chunking
|
||||||
|
|
||||||
|
The most significant bit of the payload size field of an MMB is called the Chunk
|
||||||
|
Control Bit (CCB). If the CCB of a given MMB is zero, the represented message is
|
||||||
|
interpreted as being self-contained and the data is processed immediately. If
|
||||||
|
the CCB is one, the message is interpreted as being chunked, with the data of
|
||||||
|
the current MMB being the first chunk. The data of further MMBs sent along the
|
||||||
|
transaction will be appended to the message until an MMB is read with a zero
|
||||||
|
CCB, in which case the MMB will be the last chunk and any more MMBs will be
|
||||||
|
interpreted as normal.
|
||||||
|
|
||||||
### METADAPT-B
|
### METADAPT-B
|
||||||
METADAPT-B requires a transport which offers multiple multiplexed full-duplex
|
METADAPT-B requires a transport which offers multiple multiplexed full-duplex
|
||||||
data streams per connection that can be created and destroyed on-demand. Each
|
data streams per connection that can be created and destroyed on-demand. Each
|
||||||
data stream is used as an individual transaction. Each MMB contains a 4-octet
|
data stream is used as an individual transaction. Each MMB contains a 4-octet
|
||||||
long header with the method and then the payload size (in octets) both encoded
|
long header with the method and then the payload size (in octets) encoded as a
|
||||||
as U16s. The remainder of the message is the payload. Since each MMB is
|
U16 and U64 respectively. The remainder of the message is the payload. Since
|
||||||
self-describing, they are sent sequentially with no gaps in-between them.
|
each MMB is self-describing, they are sent sequentially with no gaps in-between
|
||||||
|
them.
|
||||||
|
|
||||||
The ID of any transaction will reflect the ID of its corresponding stream. The
|
The ID of any transaction will reflect the ID of its corresponding stream. The
|
||||||
lifetime of the transaction is tied to the lifetime of the stream, that is to
|
lifetime of the transaction is tied to the lifetime of the stream, that is to
|
||||||
|
Loading…
Reference in New Issue
Block a user