BTRNET
The Built-To-Run Network
BTRNET is an extensible, modern implementation of a simple network stack, specifically designed
for situations where computational power is extremely limited, often being measured in Hz, rather
than today's MHz and GHz. It aims to provide an interface for communication capable of supporting
multiply different physical media across many different domains.
BTRNET is defined in 2 layers, closely mapping to the 2 lowest layers of the OSI model.
Layer 1, the Physical Layer, defines the physical communication protocol between NICs.
Layer 2, the Data Link Layer, defines how connected nodes resolve addresses and send information
to other nodes.
The reference implementation of BTRNET is to be implemented in Minecraft, to allow communication
between CPUs on the Open Redstone Engineers server.
The specification for the Physical Layer is to be defined, and is intended to be different per
implementation, to account for the specific characteristics of that environment.
Following is a draft specification for the Data Link Layer:
A frame is composed of 4 bytes, 1 byte address and 3 bytes of data
The address byte is sent first on the PHY
The interior layout of the data bytes is not defined.
Addressing:
BTRNET is a strictly hierarchical network. All nontrivial communication is accomplished by
sending frames through a tree of switching nodes [the FABRIC]. Using the fabric, frame switching
performance is improved by simplifying the switching nodes. In a typical Ethernet environment,
each switch must maintain a table of MAC addresses associated with each of its ports. In contrast,
BTRNET aims to operate in environments where this is difficult or impossible, therefore BTRNET
devices' addresses are defined by their location in the fabric.
Specifically, each switching node needs only two configuration parameters, its address, and its
service prefix. A switching node, upon receiving a frame, will them compare the address of the
incoming frame to its address. If the prefix of the incoming frame matches the prefix of the node,
then the next bit determines which path will service that frame. A missed prefix indicates the node
needs to send that frame upstream until a node is found that can service the request.
In this way, up to 256 devices are supported on a BTRNET newtwork, with the complete network
requiring 255 switching nodes. This is not a problem, because intended applications will not be
able to service that much computation simultaneously, and the extra address space is mainly to
allow expansion in any direction.
Addressing example
'x' means any bit value - host 0000.xxxx services hosts 0000.0000 through 0000.1111
root node xxxx.xxxx
o
/ \
node 1xxx.xxxx o o node 0xxx.xxxx
/ \ \
node 11xx.xxxx o | H host 0000.0000
| o node 10xx.xxxx
|
host 1100.0000 H
For host 1100.0000 to send a frame to host 0000.0000, the following process would occur:
1. host 1100.0000 constructs a frame with destination address 0000.0000
2. frame arrives at node 11xx.xxxx
0000.0000 does not match the prefix 11xx.xxxx, frame is forwarded up to parent node
3. frame arrives at node 1xxx.xxxx
0000.0000 does not match the prefix 1xxx.xxxx, frame is forwarded up to parent node
4. frame arrives at root node xxxx.xxxx
0000.0000 does match prefix xxxx.xxxx, next bit is checked
next bit is 0, frame is forwarded to the '0' downstream node
5. frame arrives at node 0xxx.xxxx
0000.0000 does match prefix 0xxx.xxxx, next bit is checked
next bit is 0, frame is forwarded to the '0' downstream node
6. frame arrives at host 0000.0000
Comments