views:

63

answers:

3

hi,

I would like to write a networked software without centralized directory, capable to automatically discover its fellow nodes and "self-organize" a resilient, "not too unbalanced" logical network (maybe i should define it as a graph with relatively short routes between each pair of nodes).

in witch hunting times like these, maybe it's better to clarify that even if it's basically a p2p network, i don't intend to build another file sharing mechanism, the data interchange would have diffent characteristics from existing file sharing protocols. therefore i'm interested "only" in the (for me) insanely hard part of building a self-organized network without explicit synchronization "meeting places".

does well known and dependable approaches exist? free libraries, algorithms, or "dead trees" to be read?

thank you in advance for every suggestion you can give

+2  A: 

Take a look at zeroconf and freenet for two different directions you can take with this.

Nikolai N Fetissov
A: 

Check out Bonjour (formerly Rendezvous). It is originally for LANs, but maybe there's some aspects you can adopt. DHT (Distributed Hash Table) which is employed by - among others - some BitTorrent clients.

Bandi-T
Bonjour == zeroconf
Pete Kirkham
A: 

If the nodes are all on the same internal network, you could send out broadcast packets with very short time to live (TTL) announcing your presence - other nodes would listen for this, and reply.

If the nodes are across sites or across the internet, you need to 'bootstrap' each node with the public addresses of at least some of the other nodes. This means that nodes need public IP addresses, or you need a central registration server for greeting and connecting nodes (possibly with redundancy).

In some way a new arrival node discovers some peers. The question is, does the new arrival want to discover all nodes in the network? This would mean the new arrival event has to propagate through the entire network, so all nodes know all others at all times.

Other systems instead want nodes to be able to find 'information', where each bit of information is tagged with a 'key'. These can be found using distributed hash tables (DHTs).

Will