Some thoughts in 2012. Most of the grubby network data format rules must be agreed upon between pairs nodes which are connected by a data link. Here are some conventions that require a broader agreement but this is good background for the issues. An earlier spike with some merit.

One of the aims of DSR is to minimize the amount of global agreement necessary for smooth network function. This helps avoid travails such as the current IPv6 turmoil.

We assume a net of nodes and data links connecting nodes pairwise. A node knows a connected link by an interface number from 1 to 15.

Implicit here is that nodes are simple conventional software platforms which sometimes crash but have non-volatile storage into which they can afford to write occasionally, like a disk. Reputation of nodes will emerge at higher levels and reputations last for timescales longer than mean-time between crashes.

As I review the material below I realize that I have made some implicit suppositions which I should perhaps warn the reader of

Global Conventions

A global notion is that nodes are known by the hash of their public keys. This is in support of higher level functionality not proposed here. Node operators maintain opinions about neighboring nodes and may need to identify those more securely than by interface number. Guides will need this information to serve their notion of node identity upon which to base reputations and recommendations. More why

The Steady State Network

Packets flow thru the net from sender to receiver. Packets either travel along circuits temporarily constructed in the network, or are datagrams. The datagram is composed of: The circuit packet includes a channel number in place of SS as it traverses a link. That number varies for a packet from link to link. The payload is a sequence of octets and is unmodified and unexamined in transit thru the net.
Option 1
SS is a composed of a destination path and an optional return path. A path is a sequence of (4 bit) turn ops. A new packet arriving at a switching node with an empty destination path is intended for that node; the payload and money belong to the node. Otherwise the node examines and removes the first turn op, k, of the destination path. If the SS has a return path then j is added to the beginning of the return path.
Option 2
SS is composed of a sequence of 4 bit turn ops and an 8 bit cursor. As the packet arrives on interface j, the cursor designates turn op i. The cursor in incremented. k = i ⊕ j. See this.
The toll is deducted from the money field and the packet is launched on interface k. If the money field is insufficient it is OK to discard the packet, or it is legitimate to use the return path, if any, to send an error message, at the node’s expense.

In this terminology the leaves of the net are themselves nodes and SS within packets arriving there serves only to convey the return path, if any. In fact SS interpretation is at the discretion of the leaf and its meaning is left up to the sender and receiver. Nodes might charge more for a large SS and thus create an incentive to put data for the receiver in the payload. If the packet includes a return path then upon arrival, the return path serve as a destination path that leads back to the sender.

If a packet arrives at a node with a return path denoting a path thru a local neighborhood of conventional nodes (that obey these conventions) then the node knows where the packet entered the neighborhood.

There are link messages on a link that are addressed only to the node at the other end of the link. They are conceptually distinct from packets and evil packets from afar must not be mistaken for link messages. Packets could be carried between nodes in link messages but that is a local decision. The integrity of link message may be more critical than packet blocks but again that is not a global matter. More here.

Global upper limits on the size of each of SS and payload might be strategic. Alternatively scouts might gather limits imposed by particular links.

Possible extra turn op semantics

traceroute as possible global protocol.

Circuits, Backpressure, Hardware

Waxing and Waning of the Net

Another area where global protocols may be necessary is in the coming and going of nodes and protocols for nodes to make themselves known to net scouts.

When a node comes up it senses some interfaces. It recalls its own private and public keys. It sends out on each of its interfaces a ‘running’ link message which includes its own public key. Whenever a ‘running’ or ‘welcome’ link message arrives on an interface it associates the public key in the payload with the interface and for ‘running’ responds with a ‘welcome’ message over that interface, including its own public key. For the ‘running’ message all scouts that are registered with the recipient node, are notified of the public key and interface number.

When the destination path of a newly arrived packet is empty, the node is the end receiver of a packet. Such a packet may be from a network scout whereupon it replies with its array of interfaces along with available public keys. It also remembers the scout and the path by which to reach it. The packet from the scout must include funds for the reply, and perhaps a bit extra. Possibly a financial arrangement with the scout may be made at this time for the node to inform the scout of new neighbors. There is a pattern here: Higher level functions pay lower level functions.

Messages from the Switching Fabric

A node will sometime be unable to forward a packet. I think it is good to establish the convention of a global probabilistic coded message to the sender: “I was unable to forward this packet because: … . This message is emitted with probability … .”. Perhaps a globally allocated bit in a packet evokes such messages upon all failures.

See some possible link formats.

Kinds of Signals on a Link

I will try to collect here the various sorts of Signals that traverse a link between two nodes, as implied in other pages. First I will ignore how they are packaged into blocks for error control.I think that service by scouts is entirely by datagram.

Managing the Link