Self Organizing Net Library
Home Page
Contents
Goal is to provide a library for
-
developing applications like
-
file sharing apps with push technology like in the
konspire[2b] project
(but with better scaling properties);
-
building a spam resistent mail infrastructure in parallel to the
current one.
The library should be
-
easy to use;
-
flexible:
-
with or without encryption at different levels,
-
supporting different net topologies;
-
highly configurable by configuration files.
-
SONLib is a shortcut for Self Organizing Net Library. It should ease decentralized building of nets of hosts for anonymously sending content over them. Each net should be the channel for a certain kind of content.
-
Functionality:
- decentralized building of nets of hosts (multi net):
- it should be sufficient to know just one node in one of the nets to connect to arbitrary nets in the multi net
-
the nets are connected
- distribution of content:
- each net should be the channel for a certain kind of content
- content will be propagated from node to node
-
feedback mechanism for feedback to senders
- without knowing their location (IP address)
- with or without encryption of feedback (allowing others to read it or not)
- different kind of messages:
- broadcast: from some node reaching all other nodes in its net
- peer to peer: from some node to a specific other one
- special addressing scheme for fast routing of peer to peer messages
- usage of encrytion for ensuring
- authenticity (correct sender)
- integrity of content (not manipulated)
- anonymity of content
-
Inspiration: inspired by the konspire2b project.
-
Libs, tools and technologies which could be useful for the project:
- encryption: OpenSSL?
- communication: ?
- programming:
- control flow: SF projects libsigc, libsigcx
- misc: XML
Currently SONlib is just in the conceptual phase: there isn't any software so far.
Note: priorities are 'soft'; working on tasks may be done in parallel (even if they have different priorities).
Task |
Description |
Priority
(1: highest,
9: lowest)
|
thinking about concepts |
|
1 |
web pages |
- more writing about concepts
- writing about ideas for a possible mail infrastructure
- incorporating some of my thoughts and ideas from the konspire[2b] wiki; see
Be aware: the concepts here go beyond the concepts described there, and the definitions of terms in the glossary here don't necessarily fit to the terms there.
|
2 |
software engineering |
- organizing the API: choosing
- implementation language
- code documentation method
- choosing libs to be used
|
5 |
API implementation |
|
6 |
test suite implementation |
|
7 |
sample app implementation |
|
8 |
documentation |
|
9 |
setting milestones |
See Milestones.
|
9 |
Since currently I'm very busy, there aren't any timelines so far.
-
I don't understand a term, what can I do?
-
Send me a mail: then I know, what's missing in the glossary....
-
Why another lib instead of using the lib from the konspire[2b] project?
-
The konspire[2b] library has problems:
-
it doesn't scale well to a high number of channels: all channels are using the same net, so the admin traffic increases with the number of channels;
-
a mechanism for sending feedback to senders is missing.
SONlib should solve these problems by
-
splitting the admin traffic by having multiple nets (one for each channel);
-
providing a feedback to senders mechanism.
The following image visualizes some concepts and their relations.
name |
description |
related message types |
libVersion |
Version of SONlib binary. |
|
envVersion |
Version of SONlib environment. The environment contains configuration data which is not node specific and has to be compatible with libVersion. All nodes in a SON net must use compatible environments. |
enterNet? |
installationVersion |
Version of SONlib installation: libVersion, envVersion together. |
enterNet |
nodeId |
Identification of a node environment: it remains the same over different SONlib runs.
Note: it has to be cleared if it may be the same as nodeAddress. |
peerToPeer |
nodeAddress |
SON node address for fast routing of peer to peer messages.
Note: may change for each run of SONlib (unlike nodeID). |
peerToPeer |
sessionId |
Identification of the current session of a node: it identifies one SONlib run of a specific node (with some nodeID). |
all (possible param) |
Messages
Protocols
enterNetRequest 1
node outside net |
--> |
enterNetRequest(name, nodeID, envVersion, nodePolicy, IP) |
--> |
<-- |
accepted(msgId(enterNetRequest), netPolicy) |
<-- |
|
net node |
If the node outside net suits to the net, the net node accepts it. The returned netPolicy
has to be compatible with the given nodePolicy
. Thereafter:
- net node has a free neighbor slot: -> net node goes to acceptNodeAsNeighborFor;
- otherwise -> net node broadcasts the enterNet request with propagateEnterNetRequest.
enterNetRequest 2
node outside net |
--> |
enterNetRequest(name, nodeID, envVersion, policy, IP)
|
--> |
<-- |
denied(msgId(enterNetRequest), reason)
reason: envIncompatible, policyIncompatible, hidden
|
<-- |
|
net node |
The node outside net does not suit to the net, the net node rejects it with reason
.
propagateEnterNetRequest
net node |
--> |
broadcast(enterNetRequest) |
--> |
<-- |
|
<-- |
|
neighbor nodes |
Net node broadcasts enterNetRequest to its neighbors.
- One of the neighbors has a free neighbor slot: -> neighbor goes to acceptNodeAsNeighborFor with node originally sending
enterNetRequest
as receiver;
- otherwise -> neighbors broadcast further after this protocol.
acceptNodeAsNeighborFor 1
net node |
--> |
acceptAsNeighborFor(msgId(enterNetRequest)) |
--> |
<-- |
becomeNeighbor(msgId(acceptAsNeighborFor), neighborPort) |
<-- |
--> |
becomeNeighbor(msgId(becomeNeighbor), neighborPort) |
--> |
|
node sending enterNetRequest |
Net node accepts node outside net as new neighbor. Both nodes send a port number to the other one for establishing the neighbor connection.
acceptNodeAsNeighborFor 2
net node |
--> |
acceptAsNeighborFor(msgId(enterNetRequest)) |
--> |
<-- |
doNotWantBecomeNeighbor(msgId(acceptAsNeighborFor), reason)
reason: alreadyAccepted, hidden
|
<-- |
|
node sending enterNetRequest |
Net node accepts node outside net as new neighbor. Node entering net does not want to become neighbor with reason
(normally since it already has been accepted by another node).
EnterNetListener
Internal node listening for an external node trying to enter net.
EnterNetRequester
External node trying to enter net by requesting internal node.
This glossary contains definitions of important terms used here.
- admin net
-
An admin net is for
- channel net
-
A channel net is for
- content
-
Content is the transmitted data of interest, which hopefully deserves these efforts around it...
- leaf net
-
A leaf in the SON net tree without any subnets.
- long term connection
-
A long term connection is a connection between neighbor nodes building a net.
- net
-
-
A net consists of nodes, which also can be members of an arbitrary number of other nets.
- There are two classes of nets reflecting their functionality:
a net belongs to one or both of them.
- net path
-
A net path identifies a certain net: a node may become member of some net by recursively becoming member of all its super nets, starting from the root net and ending with the identified one.
- node
-
A node is a member of one or more nets. It is realized by a process running at a host, beeing addressed at transport level by an IP:port combo. A node usually has one or more neighbor nodes.
- root net
-
The (one and only) top level net without a super net.
- Self Organizing Net
-
The root net with all subnets. It has a tree structure.
- short term connection
-
A short term connection is established for a content transmission between two nodes (normally not immediate neighbors).
- SNI rule
-
Super net inclusion rule.
- SON
-
Self Organizing Net.
- SONlib
-
The library for building and using Self Organizing Nets.
- subnet
-
A net one level down related to another net (there are zero or more subnets).
- super net
-
The net one level up related to another net (there is exactly one super net for each net, except for the root net, which has none).
- super net inclusion rule
-
The super net inclusion rule (SNI rule) says, that a node being member of a particular net also has to be member of its super net.
Consequences:
- Each node member of a particular net is member of all super nets in a chain up to the root net.
- All SON nodes are members of the root net.
version |
date |
author |
comment |
1.4 |
.04.04 |
sr |
added
- state charts: "EnterNetListener", "EnterNetRequester"
|
1.3 |
16.04.04 |
sr |
added
- "Concepts"
- "Concepts - Concept map"
- "Concepts - Identifications": table of 6
- "Concepts - Messages"
- "Concepts - Protocols": first 5
- "Functionality": different kind of messages, addressing scheme for fast routing of peer to peer messages
changed
- general: all nets may be both admin and channel nets now (this also applies to root and leaf nets)
- "Functionality"
|
1.2.1 |
28.02.04 |
sr |
changed
|
1.2 |
28.02.04 |
sr |
changed
- "gloss:root net": added that it's only an admin net
- "gloss:leaf net"
- "History": better formatting
|
1.1 |
28.02.04 |
sr |
changed
- "Tasks - web pages": "Be aware:..." added
|
1.0 |
28.02.04 |
sr |
initial version |