Valid XHTML 1.1!

Q-MUTE Protocol Stack

Index

Foreword

MUTE is a word which means at least two things:

Q-MUTE is an alternative protocol, thought to be useable in the very same MUTE Network through double-stack nodes. This document describes the protocol.

The Double Stack Protocol feature

The MUTE Network, up to day, is quite small, for various reasons. Adding a new incompatible protocol would thus have split even more this network, so the double-protocol feature seem to be quite essential.

This aim is achieved quite simply: the first byte of the normal MUTE Protocol is a “P” (from the word “PublicKey” - remember that normal MUTE protocol is quite ASCII-based), or byte 0x50. This protocol, as a successor, starts with the next byte: “Q” (or byte 0x51). This is the reason why the protocol is named Q-MUTE.

This method has at least a pair of advantages: first of all, we need to read only one byte to decide about compatibility. Second, most programming environment provide an ungetc-like function or method, which allows you to put back at least one byte just read. This allows double-stack nodes to read a byte, know what stack to use, then put back the byte and pass the control to the right protocol stack.

The structure and prerequisites of Q-MUTE Protocol Stack

Q-MUTE is a protocol stack which needs an underlying communication environment, over which it makes some assumptions. That is, a node running the Q-MUTE Protocol Stack requires that he's able to communicate with at least another node through a channel which is full-duplex and that support an 8-bit-clean full-duplex stream abstraction (that is, it's possible to send a stream of data composed of arbitrary 8-bit bytes, on both directions without limitations). Such abstraction is usually satisfied by the common socket abstraction (but can also be implemented over HTTP or other such methods - for example to avoid firewalls).

Here it is a summary of the structure of the Q-MUTE Protocol Stack:

Note that the parallelism with current MUTE protocol makes able a double stack node to integrate even more the two stacks, making them communicate at each layer.

Conventions used along this document

This specifications are quite formal: everything is defined in terms of layering of protocols, data structures, and functions each layer exports to higher levels. Each layer declares some data structures and functions, whose semantic is defined through the description of the network operations which must be accomplished. Their format is kept quite similar to that of RFCs.

Formal description of the Q-MUTE Layers

The Stream Layer

Q-MUTE makes assumptions on the Stream Layer, but do not define it. A single Q-MUTE stack can use more Stream Layers at the same time. Currently, no Stream Layer for Q-MUTE is defined, even if such a definition for TCP/IP is trivial. Every Stream Layer has an associated code. The following data types must be defined for every given Stream Layer:

It must also implement those operations, with given semantics:

What about listen()-like method? The QNP layer needs it

Q-MUTE Link Protocol (QLP)

The QLP protocol works with an associated Stream Layer, which provides its connect, send, receive and disconnect functions.

We use here three more data types:

The QLP protocol defines the following operations:

Here the various operations are explained more in depths, telling what each function is exactly supposed to do.

Q-MUTE Network Protocol (QNP)

The QNP Protocol works with an associated QLP layer, which provides its qlp_init, qlp_connect, qlp_send, qlp_receive and qlp_disconnect.

We use here one more data types:

The QNP protocol defines the following operations:

Here the various operations are explained more in depths, telling what each function is exactly supposed to do.

Final notes