]> git.mxchange.org Git - hub-docs.git/commitdiff
Renamed 'hub' to 'node' to make it more clear that we mean 'node' and 'hub' is only...
authorRoland Häder <roland@mxchange.org>
Tue, 6 Jul 2010 21:03:35 +0000 (21:03 +0000)
committerRoland Häder <roland@mxchange.org>
Tue, 6 Jul 2010 21:03:35 +0000 (21:03 +0000)
mindmaps/Generic Object Sharing Protocol.html
mindmaps/Generic Object Sharing Protocol.mm

index 78b744b2809688e257dad822671e1ba74fee2f9a..5569a8809473beaf917080cdbe32bdb54445ee26 100644 (file)
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="iso-8859-1"?><?xml-stylesheet href="treestyles.css" type="text/css"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xml:lang="fi" xmlns="http://www.w3.org/1999/xhtml"><head><title>Generic Object-Sharing Protocol</title><link rel="stylesheet" href="Generic Object Sharing Protocol.html_files/treestyles.css" type="text/css"/><script type="text/javascript" src="Generic Object Sharing Protocol.html_files/marktree.js">  </script></head><body><div class="basetop"><a href="#" onclick="expandAll(document.getElementById('base'))">Expand</a> - <a href="#" onclick="collapseAll(document.getElementById('base'))">Collapse</a></div><div id="base" class="basetext"><ul><li class="col" style="" id="FMFreemind_Link_1069566441FM"><span style="font-size:167%;font-weight:bold;">Generic Object-Sharing Protocol</span><ul class="subexp"><li class="exp" style="" id="FMFreemind_Link_1660540085FM"><span style="font-size:133%;font-weight:bold;">Hub Identification</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_780558731FM"><span style="">Every hub generates an id string by random</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1498010716FM"><span style="">This is the Hub-Id (Hub Identifier)</span></li><li class="basic" style="" id="FMFreemind_Link_458280781FM"><span style="">Only on first use</span></li><li class="basic" style="" id="FMFreemind_Link_698958541FM"><span style="">This should be globally unique</span></li><li class="basic" style="" id="FMFreemind_Link_1564511533FM"><span style="">It will be stored in hub's database for later reuse</span></li><li class="col" style="" id="FMFreemind_Link_982080681FM"><span style="">A hash is being generated of it</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_177707740FM"><span style="">Hashed data:</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1317863864FM"><span style="">Hub's IP number and hostname</span></li><li class="basic" style="" id="FMFreemind_Link_1030355543FM"><span style="">Some random characters</span></li></ul></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1022876700FM"><span style="">This id does not change as long as the database is not purged</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1712131488FM"><span style="">Per session another id is generated</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_439993942FM"><span style="">This is the SID (Session IDentifier)</span></li><li class="basic" style="" id="FMFreemind_Link_1215594894FM"><span style="">It is being distributed to the hubs</span></li><li class="col" style="" id="FMFreemind_Link_1633651159FM"><span style="">It stored together with the Hub-Id</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_651452439FM"><span style="">So other can validate bother together</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_789902518FM"><img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <span style="">Logging should only enabled for debugging purposes</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_902328932FM"><span style="">Locking IPs or Hub-Ids on master-nodes is not planed</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1592412776FM"><span style="">Censorship would be to very easy</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_423578439FM"><span style="">Government agencies or enterprise parties</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_84092519FM"><span style="">Censhorship makes no sence here</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_514458550FM"><span style="">It can very easy be bypassed:</span></li><li class="col" style="" id="FMFreemind_Link_1221678941FM"><span style="">Delete Hub-Id in database</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_904836052FM"><span style="">A new one got generated</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1262635656FM"><span style="">Locked IP or port number can be bypassed by proxies</span></li><li class="col" style="" id="FMFreemind_Link_1619827292FM"><span style="">One or two master-hubs should listen on ports commonly unblocked by firewalls</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_709609072FM"><span style="">Like 80/443/110/25</span></li></ul></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_441713513FM"><span style="">Hubs can be optionally registered by master-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1200999421FM"><span style="">Increases karma because the hub admin is verified</span></li><li class="basic" style="" id="FMFreemind_Link_1617168424FM"><span style="">Unregistered hubs does not receive negative votings</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_1339348415FM"><span style="font-size:133%;font-weight:bold;">Bootstrapping</span><ul class="subexp"><li class="exp" style="" id="FMFreemind_Link_453620216FM"><span style="">At least one, better 3 to 4, master-nodes are required</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_265648584FM"><span style="">Aka. "Bootstrap-Nodes"</span></li><li class="basic" style="" id="FMFreemind_Link_1226811309FM"><span style="">They should be listed in the configuration for all applications</span></li><li class="basic" style="" id="FMFreemind_Link_979767017FM"><span style="">A comma-seperated list of hub IPs with port numbers seperated by double-dot (:)</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_854375254FM"><span style="">Bootstrap-Nodes are working stand-alone</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_882684293FM"><span style="">No central "Super-Node" is required</span></li><li class="basic" style="" id="FMFreemind_Link_1661888163FM"><span style="">Too much traffic would have to flow through it</span></li><li class="basic" style="" id="FMFreemind_Link_1121780060FM"><span style="">Attacks on the network by censorship are reduced</span></li><li class="basic" style="" id="FMFreemind_Link_924004535FM"><span style="">Traffic does not increase network-overall load</span></li><li class="col" style="" id="FMFreemind_Link_1573570415FM"><span style="">Small disadvantage:</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1018217993FM"><span style="">Hubs must register with ...</span></li><li class="basic" style="" id="FMFreemind_Link_665965725FM"><span style="">... more than one master-node ...</span></li><li class="basic" style="" id="FMFreemind_Link_1849172644FM"><span style="">.. or connect with each other</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1225609057FM"><span style="">1. Hub checks if there is a list of master nodes already stored</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_712469416FM"><span style="">If so, it skips fetching the list of nodes step</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_934377424FM"><span style="">2. Hub is announcing itself to the upper bootstrap hub(s)</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1716805408FM"><span style="">This should be done generic to keep things easy</span></li><li class="basic" style="" id="FMFreemind_Link_1472603257FM"><span style="">Recommended is maybe an XML with all neccessary data</span></li><li class="col" style="" id="FMFreemind_Link_207316718FM"><span style="">The session id will not be included here</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_772369973FM"><span style="">A bootstrap node will never try to connect clients with hubs</span></li><li class="basic" style="" id="FMFreemind_Link_1528083000FM"><img src="Generic Object Sharing Protocol.html_files/icons/desktop_new.png" alt="desktop_new"/> <img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <span style="">It should only "bootstrap" (tell the hub where it should start sharing its objects)</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_608191462FM"><span style="">3. Hub is fetching a list of other hubs</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_195277951FM"><span style="">They must have at least X matching object types</span></li><li class="basic" style="" id="FMFreemind_Link_823475561FM"><span style="">If a bootstrap node is full it forwards the hub to an other bootstrap hub</span></li><li class="basic" style="" id="FMFreemind_Link_1371102915FM"><span style="">If that hub is again full the hub will be forwarded to a list node</span></li><li class="basic" style="" id="FMFreemind_Link_897238975FM"><span style="">If wether no free bootstrap nor list node is available the hub waits some time and tries it again</span></li><li class="col" style="" id="FMFreemind_Link_453619955FM"><span style="">Hashes of hub-lists distributed over the bootstrap and list nodes should match</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1552507439FM"><span style="">This can be ensured by a DHT</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1112603271FM"><span style="">DHT = Distributed Hash Table</span></li><li class="basic" style="" id="FMFreemind_Link_123842120FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <span style="">Which format?</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_574241054FM"><span style="">If to much are inconsistent:</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1253336655FM"><span style="">No connect can happen</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1412643595FM"><span style="">Hub list is rejected</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1181650485FM"><span style="">Or the bootstrap-nodes are working as regular hubs</span></li><li class="basic" style="" id="FMFreemind_Link_1134140787FM"><span style="">Replication of the hub-list is required by all bootstrap-nodes</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_210978828FM"><span style="">4. Hub connects to gathered master nodes</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1492702329FM"><span style="">It again announces its object types to the master nodes</span></li><li class="basic" style="" id="FMFreemind_Link_447040624FM"><span style="">Again it provides the session id so the master node can map session id -&gt; hub id</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1052054603FM"><span style="">5. If all authorization steps are completed:</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_1721222063FM"><span style="">The hub starts to accept client connections</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_501632661FM"><span style="">(It already listens to them but rejects them)</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_663261299FM"><span style="">Objects will now be shared with other hubs which accepts the same object types</span></li></ul></li></ul></li><li class="exp" style="" id="FM_FM"><span style="font-size:133%;font-weight:bold;">Karma</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_1190748575FM"><span style="">Karma is given for validating entries in the DHT</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_29494292FM"><span style="">Last activity in near past</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_254202732FM"><span style="">Does not affect karma</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_210971136FM"><span style="">Returned pings</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1680521907FM"><span style="">Amount of sent pings</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_689172908FM"><span style="">If no reply it got dead-listed</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_612939095FM"><span style="">Failed pings reduce karma</span></li><li class="basic" style="" id="FMFreemind_Link_45314722FM"><span style="">Slow responses reduce karma</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_538248067FM"><span style="">Karma voting for other hubs is not to negative</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_511404921FM"><span style="">Reduces manipulation chances</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_801930369FM"><span style="">Prefer karma votes of trusted hubs</span></li><li class="basic" style="" id="FMFreemind_Link_45612508FM"><span style="">Negative karma votings for untrusted karma reduce own karma</span></li></ul></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1507410448FM"><span style="">To much "spam packages" reduce karma</span></li><li class="basic" style="" id="FMFreemind_Link_993155795FM"><span style="">Validated packages increase karma</span></li><li class="col" style="" id="FMFreemind_Link_1606666417FM"><span style="">Protocol version should not be to old</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1094995324FM"><span style="">This affects karma only negativly</span></li><li class="basic" style="" id="FMFreemind_Link_344926416FM"><span style="">An up-to-date protocol does not increase karma</span></li><li class="basic" style="" id="FMFreemind_Link_473648942FM"><span style="">Does also serve as a "spam protection"</span></li><li class="col" style="" id="FMFreemind_Link_594554525FM"><span style="">Received protocol version of hub is older than stored</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_174968672FM"><span style="">Karma is reduced</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1682037492FM"><span style="">Received protocol version is much than from master-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1255846244FM"><span style="">Karma is reduced</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_1260923814FM"><span style="">Provided object types by the peer hub</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1973981672FM"><span style="">This affectes karma only negativly</span></li><li class="basic" style="" id="FMFreemind_Link_936683200FM"><span style="">New types must first be known by masters</span></li><li class="col" style="" id="FMFreemind_Link_965874760FM"><span style="">This should be configurable:</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1804987507FM"><span style="">Karma should be reduced...</span></li><li class="basic" style="" id="FMFreemind_Link_1719378455FM"><span style="">... or peer hub should be black-listed</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1318639621FM"><span style="">Because of every node can be a master-mode censorship is really hard</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1158753702FM"><span style="">Correctly logging</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_571936771FM"><span style="">Does not affect karma</span></li><li class="col" style="" id="FMFreemind_Link_526838799FM"><span style="">Logout must be done by master hub and active hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_961650790FM"><img src="Generic Object Sharing Protocol.html_files/icons/idea.png" alt="idea"/> <span style="">"Bye" message</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_548852073FM"><span style="">Rotating of dynamic IPs should be considered</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1811539187FM"><span style="">Must be registered by master-node</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_589306378FM"><span style="">ID is registered as "Dynamic IP"</span></li><li class="basic" style="" id="FMFreemind_Link_1377338623FM"><span style="">So connects are still possible</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1985410220FM"><span style="">No negative votings by other hubs</span></li><li class="col" style="" id="FMFreemind_Link_289837552FM"><span style="">Current IP does spread good in network</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_962702337FM"><span style="">Query of the master-node only in doubt</span></li></ul></li></ul></li></ul></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_831929021FM"><span style="font-size:133%;font-weight:bold;">Update Messages</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_71881649FM"><span style="">Will only be broadcasted from bootstrap- to master- and list-nodes</span></li><li class="col" style="" id="FMFreemind_Link_774046685FM"><span style="">No hub will receive update messages due to heavy network load</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1204404067FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <img src="Generic Object Sharing Protocol.html_files/icons/help.png" alt="help"/> <span style="">Maybe only "good" hubs should receive this?</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1584525818FM"><span style="">Contains update notes and importance level</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_168475853FM"><span style="font-size:133%;font-weight:bold;">"Client" Connections</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1154203316FM"><img src="Generic Object Sharing Protocol.html_files/icons/bell.png" alt="bell"/> <span style="">Should be interpreted as "application software"</span></li><li class="col" style="" id="FMFreemind_Link_1741675827FM"><span style="">Clients should also generate a "client id"</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_518254369FM"><span style="">Both id and sid</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_815708604FM"><span style="">Will also connect first to bootstrap-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_934296740FM"><span style="">Ask for a hub-list as well</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_480673349FM"><span style="">Do also receive karma from hubs</span></li><li class="basic" style="" id="FMFreemind_Link_692612491FM"><span style="">Dynamic IPs are also accepted and therefore must be registered</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1445979240FM"><span style="font-size:133%;font-weight:bold;">Client&lt;-&gt;Hub Communication</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_374257888FM"><span style="">After a client has bootstrapped it announces all it's object types to the hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1014689893FM"><span style="">Including acceptance of broadcasts, poll-mode and Ping-POST</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_730901168FM"><span style="">By this the hubs know clients and their accepted object types</span></li><li class="col" style="" id="FMFreemind_Link_1981646811FM"><span style="">Clients may download a hub-list for a specific object type</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_376278255FM"><span style="">Distinct-List-Mode</span></li><li class="basic" style="" id="FMFreemind_Link_481362981FM"><span style="">After selecting a hub the client can request a list of clients from that hub</span></li><li class="col" style="" id="FMFreemind_Link_1444901526FM"><span style="">From these clients the client can accept objects from and send to</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_423939808FM"><span style="">E.g. news by broadcast</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_619530506FM"><span style="">Clients may send "broadcast" objects</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_104270656FM"><span style="">Broadcast-Mode</span></li><li class="col" style="" id="FMFreemind_Link_187831566FM"><span style="">Must be allowed by hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_929863047FM"><span style="">This consumes traffic</span></li><li class="basic" style="" id="FMFreemind_Link_421479503FM"><span style="">Acceptance of broadcasts is known to list-/master- and bootstrap-nodes</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_20289741FM"><span style="">A client sends its broadcast to the master-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_751901694FM"><span style="">They are distribute it to their fellow hubs</span></li><li class="basic" style="" id="FMFreemind_Link_908440118FM"><span style="">A hub knows which client accepts broadcasts and "deposits" it for the client</span></li><li class="col" style="" id="FMFreemind_Link_1381761729FM"><span style="">Clients are requesting such broadcasts by poll-mode or are "pinged"</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_816499858FM"><span style="">In poll-mode the client asks on a regular basis at the hub for new broadcasts</span></li><li class="col" style="" id="FMFreemind_Link_1452667491FM"><span style="">A Ping-POST is being sent by the hub as a regular HTTP-POST request to the client</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_873242294FM"><span style="">This also happens on a regular basis</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1845481591FM"><span style="">A hub-admin may allow both types independly</span></li><li class="col" style="" id="FMFreemind_Link_1607423256FM"><span style="">If none is allowed the hub acts as a "relay"</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_297001287FM"><span style="">And therefore it cannot accept clients with broadcast-functionality enabled</span></li></ul></li></ul></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_144167856FM"><span style="font-size:117%;font-weight:bold;">Client-Client Communication</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1642758810FM"><span style="">May be done "anonymously" over the hub or directly with an other client</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1507061819FM"><span style="">Communication of the hub is done in poll-mode or by Ping-POST</span></li><li class="basic" style="" id="FMFreemind_Link_1390010744FM"><span style="">Direct client-client communication client "A" sends a Ping-POST directly to client "B"</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1445364933FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <img src="Generic Object Sharing Protocol.html_files/icons/desktop_new.png" alt="desktop_new"/> <span style="">Wrongly sent Ping-POSTs (e.g. the admin doesn't allow them) may be answered with a regular HTTP status '4XX'</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_329480665FM"><span style="font-size:133%;font-weight:bold;">Usage of low-level protocols</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_679379315FM"><span style="">Already existing low-level protocols like TCP/IP and UDP should be used</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1616250831FM"><span style="">TCP should be used for "inter-communication"</span></li><li class="col" style="" id="FMFreemind_Link_898295556FM"><span style="">UDP should be used for "streaming" the objects to other hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_401089184FM"><span style="">Parties are generating hashes of chunks for validation</span></li><li class="col" style="" id="FMFreemind_Link_947570234FM"><span style="">Chunks should only be created for very big objects</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_912553641FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <span style="">Total object size is larger than X KByte</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1011335691FM"><span style="">The sender creates hashes and adds them to the chunk</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_64829706FM"><span style="">The receivers validates them</span></li><li class="basic" style="" id="FMFreemind_Link_1875786790FM"><span style="">No serial numbers a-la TCP are generated</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_99186455FM"><span style="">The last chunk package contains both hashes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_398290140FM"><span style="">Hash of itself and the final hash</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1741640397FM"><span style="">If a hash fails to validate it is being collected</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1930312770FM"><span style="">After the final chunk was sent, failed chunks a re-requested</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_681298548FM"><span style="">This is retried X times per hash</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1530992232FM"><span style="">But always at the end of the whole transaction and all together</span></li><li class="col" style="" id="FMFreemind_Link_766714583FM"><span style="">If still some hashes failed to transfer</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1262238289FM"><span style="">The object got dropped or fully requested</span></li><li class="basic" style="" id="FMFreemind_Link_1316903827FM"><span style="">This should be configurable by the admin</span></li><li class="col" style="" id="FMFreemind_Link_525157850FM"><span style="">To do so, the final hash and object type is submitted to the sender</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1316680608FM"><img src="Generic Object Sharing Protocol.html_files/icons/attach.png" alt="attach"/> <span style="">"Restransmit-Message"</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_9873596FM"><span style="">The sender is now trying smaller chunks</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_507679569FM"><span style="">If all was successfully received</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_566458700FM"><span style="">The receivers sends a "done-message" to the sender with final hash and object type</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_602435860FM"><span style="">There is also a "real" streaming mode</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1387836906FM"><span style="">This is e.g. used for chat</span></li><li class="basic" style="" id="FMFreemind_Link_1268993772FM"><span style="">For this TCP/IP is used and no hashes are generated</span></li><li class="basic" style="" id="FMFreemind_Link_602177505FM"><span style="">Also no chunks are generated</span></li><li class="basic" style="" id="FMFreemind_Link_191938147FM"><span style="">Only in this mode "multi-casting" is possible</span></li></ul></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1372827895FM"><span style="font-size:133%;font-weight:bold;">Fault Tolerance / Reliability</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_28699698FM"><span style="">After X failed connection attempts a hub got removed</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1795377892FM"><span style="">Other hubs report this to the master-node</span></li><li class="basic" style="" id="FMFreemind_Link_1595372369FM"><span style="">The master-node probes the failed hub and removes it</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_468909888FM"><span style="">Failed list-node</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_192209809FM"><span style="">Hubs are reporting it to the master-node</span></li><li class="basic" style="" id="FMFreemind_Link_933570791FM"><span style="">The master-node probes the failed list-node and removes it</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1309357086FM"><span style="">Failed master-node</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1228535079FM"><span style="">List-nodes takeover the role of a master-node if no bootstrap-nodes are available</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1324885722FM"><img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <img src="Generic Object Sharing Protocol.html_files/icons/desktop_new.png" alt="desktop_new"/> <span style="">This takeover should not be entirely and should be defined</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_489546245FM"><span style="">If there is no list-node, hubs look for an active master-node</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_496844314FM"><span style="">They report the failed master-node to it</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1831877789FM"><span style="">If additionally no master-node is up, a hub will be elected as new master-node</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1473765417FM"><span style="">Doing so, all hubs are identifying the hub with...</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1849074808FM"><span style="">... the best karma</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1303674032FM"><span style="">This is known to many hubs</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1087780155FM"><span style="">... most votings</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_585981486FM"><span style="">A "vote" is a positive karma</span></li><li class="basic" style="" id="FMFreemind_Link_616335445FM"><span style="">Also known to many hubs</span></li></ul></li></ul></li><li class="basic" style="" id="FMFreemind_Link_341438028FM"><span style="">The "election" should take place within a specific timeout</span></li><li class="basic" style="" id="FMFreemind_Link_515853064FM"><span style="">If no election is happening the hub with most connections got elected</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_694830716FM"><span style="">If one of the bootstrap-nodes is up</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1701914366FM"><span style="">The elected hubs notifies a some of it's fellow hubs that the bootstrap-node is back</span></li><li class="basic" style="" id="FMFreemind_Link_561336762FM"><span style="">The elected hub becomes a regular hub and notifies other hubs on connection attempts</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1745751398FM"><span style="">Disadvantages:</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1189063074FM"><span style="">A new hub with only knowlege about the bootstrap-nodes may not be able to connect to the hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1581407665FM"><span style="">Additional bootstrap-nodes on other server and/or continent may help here</span></li></ul></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1204819150FM"><span style="font-size:133%;font-weight:bold;">Object Types</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1961919735FM"><span style="">New object types are only addable by updating the software</span></li><li class="col" style="" id="FMFreemind_Link_188591190FM"><span style="">It also possible by 3rd-party</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_385578906FM"><span style="">Must be known by master/bootstrap-nodes</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1667260565FM"><span style="">Outdated object types are marked "deprecated" for a longer time</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1936301650FM"><span style="">Master-nodes may accept or reject them</span></li><li class="basic" style="" id="FMFreemind_Link_505959038FM"><span style="">A "deprecation message" is always being sent</span></li><li class="basic" style="" id="FMFreemind_Link_1001362763FM"><span style="">A note of a required update can optionally be added</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_259217829FM"><span style="">After deprecation time they are treated as "unknown"</span></li><li class="col" style="" id="FMFreemind_Link_1228871005FM"><span style="">Other hubs should ask bootstrap-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_887331476FM"><span style="">This compensate errors made by master-nodes</span></li><li class="basic" style="" id="FMFreemind_Link_1450229897FM"><span style="">Wrongly deprecated object types by the master-node result in bad karma by the bootstrap-node</span></li></ul></li></ul></li></ul></li></ul></div></body></html>
\ No newline at end of file
+<html xml:lang="fi" xmlns="http://www.w3.org/1999/xhtml"><head><title>Generic Object-Sharing Protocol</title><link rel="stylesheet" href="Generic Object Sharing Protocol.html_files/treestyles.css" type="text/css"/><script type="text/javascript" src="Generic Object Sharing Protocol.html_files/marktree.js">  </script></head><body><div class="basetop"><a href="#" onclick="expandAll(document.getElementById('base'))">Expand</a> - <a href="#" onclick="collapseAll(document.getElementById('base'))">Collapse</a></div><div id="base" class="basetext"><ul><li class="col" style="" id="FMFreemind_Link_1069566441FM"><span style="font-size:167%;font-weight:bold;">Generic Object-Sharing Protocol</span><ul class="subexp"><li class="exp" style="" id="FMFreemind_Link_1660540085FM"><span style="font-size:133%;font-weight:bold;">Node Identification</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_780558731FM"><span style="">Every node generates an id string by random</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1498010716FM"><span style="">This is the node id (node identifier)</span></li><li class="basic" style="" id="FMFreemind_Link_458280781FM"><span style="">Only on first use</span></li><li class="basic" style="" id="FMFreemind_Link_698958541FM"><span style="">This should be globally unique</span></li><li class="basic" style="" id="FMFreemind_Link_1564511533FM"><span style="">It will be stored in node's database for later reuse</span></li><li class="col" style="" id="FMFreemind_Link_982080681FM"><span style="">A hash is being generated of it</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_177707740FM"><span style="">Hashed data:</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1317863864FM"><span style="">Node's IP number and hostname</span></li><li class="basic" style="" id="FMFreemind_Link_1030355543FM"><span style="">Some random characters</span></li></ul></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1022876700FM"><span style="">This id does not change as long as the database is not purged</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1712131488FM"><span style="">Per session another id is generated</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_439993942FM"><span style="">This is the SID (Session IDentifier)</span></li><li class="basic" style="" id="FMFreemind_Link_1215594894FM"><span style="">It is being distributed to the hubs</span></li><li class="col" style="" id="FMFreemind_Link_1633651159FM"><span style="">It stored together with the Node-Id</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_651452439FM"><span style="">So other can validate bother together</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_789902518FM"><img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <span style="">Logging should only enabled for debugging purposes</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_902328932FM"><span style="">Locking IPs or Node-Ids on master-nodes is not planed</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1592412776FM"><span style="">Censorship would be to very easy</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_423578439FM"><span style="">Government agencies or enterprise parties</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_84092519FM"><span style="">Censhorship makes no sence here</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_514458550FM"><span style="">It can very easy be bypassed:</span></li><li class="col" style="" id="FMFreemind_Link_1221678941FM"><span style="">Delete Node-Id in database</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_904836052FM"><span style="">A new one got generated</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1262635656FM"><span style="">Locked IP or port number can be bypassed by proxies</span></li><li class="col" style="" id="FMFreemind_Link_1619827292FM"><span style="">One or two master-hubs should listen on ports commonly unblocked by firewalls</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_709609072FM"><span style="">Like 80/443/110/25</span></li></ul></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_441713513FM"><span style="">Hubs can be optionally registered by master-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1200999421FM"><span style="">Increases karma because the node admin is verified</span></li><li class="basic" style="" id="FMFreemind_Link_1617168424FM"><span style="">Unregistered hubs does not receive negative votings</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_1339348415FM"><span style="font-size:133%;font-weight:bold;">Bootstrapping</span><ul class="subexp"><li class="exp" style="" id="FMFreemind_Link_453620216FM"><span style="">At least one, better 3 to 4, master-nodes are required</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_265648584FM"><span style="">Aka. "Bootstrap-Nodes"</span></li><li class="basic" style="" id="FMFreemind_Link_1226811309FM"><span style="">They should be listed in the configuration for all applications</span></li><li class="basic" style="" id="FMFreemind_Link_979767017FM"><span style="">A comma-seperated list of node IPs with port numbers seperated by double-dot (:)</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_854375254FM"><span style="">Bootstrap-Nodes are working stand-alone</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_882684293FM"><span style="">No central "Super-Node" is required</span></li><li class="basic" style="" id="FMFreemind_Link_1661888163FM"><span style="">Too much traffic would have to flow through it</span></li><li class="basic" style="" id="FMFreemind_Link_1121780060FM"><span style="">Attacks on the network by censorship are reduced</span></li><li class="basic" style="" id="FMFreemind_Link_924004535FM"><span style="">Traffic does not increase network-overall load</span></li><li class="col" style="" id="FMFreemind_Link_1573570415FM"><span style="">Small disadvantage:</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1018217993FM"><span style="">Hubs must register with ...</span></li><li class="basic" style="" id="FMFreemind_Link_665965725FM"><span style="">... more than one master-node ...</span></li><li class="basic" style="" id="FMFreemind_Link_1849172644FM"><span style="">.. or connect with each other</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1225609057FM"><span style="">1. Node checks if there is a list of master nodes already stored</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_712469416FM"><span style="">If so, it skips fetching the list of nodes step</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_934377424FM"><span style="">2. Node is announcing itself to the upper bootstrap hub(s)</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1716805408FM"><span style="">This should be done generic to keep things easy</span></li><li class="basic" style="" id="FMFreemind_Link_1472603257FM"><span style="">Recommended is maybe an XML with all neccessary data</span></li><li class="col" style="" id="FMFreemind_Link_207316718FM"><span style="">The session id will not be included here</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_772369973FM"><span style="">A bootstrap node will never try to connect clients with hubs</span></li><li class="basic" style="" id="FMFreemind_Link_1528083000FM"><img src="Generic Object Sharing Protocol.html_files/icons/desktop_new.png" alt="desktop_new"/> <img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <span style="">It should only "bootstrap" (tell the node where it should start sharing its objects)</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_608191462FM"><span style="">3. Node is fetching a list of other hubs</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_195277951FM"><span style="">They must have at least X matching object types</span></li><li class="basic" style="" id="FMFreemind_Link_823475561FM"><span style="">If a bootstrap node is full it forwards the node to an other bootstrap hub</span></li><li class="basic" style="" id="FMFreemind_Link_1371102915FM"><span style="">If that node is again full the node will be forwarded to a list node</span></li><li class="basic" style="" id="FMFreemind_Link_897238975FM"><span style="">If wether no free bootstrap nor list node is available the node waits some time and tries it again</span></li><li class="col" style="" id="FMFreemind_Link_453619955FM"><span style="">Hashes of node-lists distributed over the bootstrap and list nodes should match</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1552507439FM"><span style="">This can be ensured by a DHT</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1112603271FM"><span style="">DHT = Distributed Hash Table</span></li><li class="basic" style="" id="FMFreemind_Link_123842120FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <span style="">Which format?</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_574241054FM"><span style="">If to much are inconsistent:</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1253336655FM"><span style="">No connect can happen</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1412643595FM"><span style="">Node list is rejected</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1181650485FM"><span style="">Or the bootstrap-nodes are working as regular hubs</span></li><li class="basic" style="" id="FMFreemind_Link_1134140787FM"><span style="">Replication of the node-list is required by all bootstrap-nodes</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_210978828FM"><span style="">4. Node connects to gathered master nodes</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1492702329FM"><span style="">It again announces its object types to the master nodes</span></li><li class="basic" style="" id="FMFreemind_Link_447040624FM"><span style="">Again it provides the session id so the master node can map session id -&gt; node id</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1052054603FM"><span style="">5. If all authorization steps are completed:</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_1721222063FM"><span style="">The node starts to accept client connections</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_501632661FM"><span style="">(It already listens to them but rejects them)</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_663261299FM"><span style="">Objects will now be shared with other hubs which accepts the same object types</span></li></ul></li></ul></li><li class="exp" style="" id="FM_FM"><span style="font-size:133%;font-weight:bold;">Karma</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_1190748575FM"><span style="">Karma is given for validating entries in the DHT</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_29494292FM"><span style="">Last activity in near past</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_254202732FM"><span style="">Does not affect karma</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_210971136FM"><span style="">Returned pings</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1680521907FM"><span style="">Amount of sent pings</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_689172908FM"><span style="">If no reply it got dead-listed</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_612939095FM"><span style="">Failed pings reduce karma</span></li><li class="basic" style="" id="FMFreemind_Link_45314722FM"><span style="">Slow responses reduce karma</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_538248067FM"><span style="">Karma voting for other hubs is not to negative</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_511404921FM"><span style="">Reduces manipulation chances</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_801930369FM"><span style="">Prefer karma votes of trusted hubs</span></li><li class="basic" style="" id="FMFreemind_Link_45612508FM"><span style="">Negative karma votings for untrusted karma reduce own karma</span></li></ul></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1507410448FM"><span style="">To much "spam packages" reduce karma</span></li><li class="basic" style="" id="FMFreemind_Link_993155795FM"><span style="">Validated packages increase karma</span></li><li class="col" style="" id="FMFreemind_Link_1606666417FM"><span style="">Protocol version should not be to old</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1094995324FM"><span style="">This affects karma only negativly</span></li><li class="basic" style="" id="FMFreemind_Link_344926416FM"><span style="">An up-to-date protocol does not increase karma</span></li><li class="basic" style="" id="FMFreemind_Link_473648942FM"><span style="">Does also serve as a "spam protection"</span></li><li class="col" style="" id="FMFreemind_Link_594554525FM"><span style="">Received protocol version of node is older than stored</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_174968672FM"><span style="">Karma is reduced</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1682037492FM"><span style="">Received protocol version is much than from master-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1255846244FM"><span style="">Karma is reduced</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_1260923814FM"><span style="">Provided object types by the peer hub</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1973981672FM"><span style="">This affectes karma only negativly</span></li><li class="basic" style="" id="FMFreemind_Link_936683200FM"><span style="">New types must first be known by masters</span></li><li class="col" style="" id="FMFreemind_Link_965874760FM"><span style="">This should be configurable:</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1804987507FM"><span style="">Karma should be reduced...</span></li><li class="basic" style="" id="FMFreemind_Link_1719378455FM"><span style="">... or peer node should be black-listed</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1318639621FM"><span style="">Because of every node can be a master-mode censorship is really hard</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1158753702FM"><span style="">Correctly logging</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_571936771FM"><span style="">Does not affect karma</span></li><li class="col" style="" id="FMFreemind_Link_526838799FM"><span style="">Logout must be done by master node and active hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_961650790FM"><img src="Generic Object Sharing Protocol.html_files/icons/idea.png" alt="idea"/> <span style="">"Bye" message</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_548852073FM"><span style="">Rotating of dynamic IPs should be considered</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1811539187FM"><span style="">Must be registered by master-node</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_589306378FM"><span style="">ID is registered as "Dynamic IP"</span></li><li class="basic" style="" id="FMFreemind_Link_1377338623FM"><span style="">So connects are still possible</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1985410220FM"><span style="">No negative votings by other hubs</span></li><li class="col" style="" id="FMFreemind_Link_289837552FM"><span style="">Current IP does spread good in network</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_962702337FM"><span style="">Query of the master-node only in doubt</span></li></ul></li></ul></li></ul></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_831929021FM"><span style="font-size:133%;font-weight:bold;">Update Messages</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_71881649FM"><span style="">Will only be broadcasted from bootstrap- to master- and list-nodes</span></li><li class="col" style="" id="FMFreemind_Link_774046685FM"><span style="">No node will receive update messages due to heavy network load</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1204404067FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <img src="Generic Object Sharing Protocol.html_files/icons/help.png" alt="help"/> <span style="">Maybe only "good" hubs should receive this?</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1584525818FM"><span style="">Contains update notes and importance level</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_168475853FM"><span style="font-size:133%;font-weight:bold;">"Client" Connections</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1154203316FM"><img src="Generic Object Sharing Protocol.html_files/icons/bell.png" alt="bell"/> <span style="">Should be interpreted as "application software"</span></li><li class="col" style="" id="FMFreemind_Link_1741675827FM"><span style="">Clients should also generate a "client id"</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_518254369FM"><span style="">Both id and sid</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_815708604FM"><span style="">Will also connect first to bootstrap-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_934296740FM"><span style="">Ask for a node-list as well</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_480673349FM"><span style="">Do also receive karma from hubs</span></li><li class="basic" style="" id="FMFreemind_Link_692612491FM"><span style="">Dynamic IPs are also accepted and therefore must be registered</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1445979240FM"><span style="font-size:133%;font-weight:bold;">Client&lt;-&gt;Node Communication</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_374257888FM"><span style="">After a client has bootstrapped it announces all it's object types to the hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1014689893FM"><span style="">Including acceptance of broadcasts, poll-mode and Ping-POST</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_730901168FM"><span style="">By this the hubs know clients and their accepted object types</span></li><li class="col" style="" id="FMFreemind_Link_1981646811FM"><span style="">Clients may download a node-list for a specific object type</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_376278255FM"><span style="">Distinct-List-Mode</span></li><li class="basic" style="" id="FMFreemind_Link_481362981FM"><span style="">After selecting a node the client can request a list of clients from that hub</span></li><li class="col" style="" id="FMFreemind_Link_1444901526FM"><span style="">From these clients the client can accept objects from and send to</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_423939808FM"><span style="">E.g. news by broadcast</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_619530506FM"><span style="">Clients may send "broadcast" objects</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_104270656FM"><span style="">Broadcast-Mode</span></li><li class="col" style="" id="FMFreemind_Link_187831566FM"><span style="">Must be allowed by hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_929863047FM"><span style="">This consumes traffic</span></li><li class="basic" style="" id="FMFreemind_Link_421479503FM"><span style="">Acceptance of broadcasts is known to list-/master- and bootstrap-nodes</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_20289741FM"><span style="">A client sends its broadcast to the master-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_751901694FM"><span style="">They are distribute it to their fellow hubs</span></li><li class="basic" style="" id="FMFreemind_Link_908440118FM"><span style="">A node knows which client accepts broadcasts and "deposits" it for the client</span></li><li class="col" style="" id="FMFreemind_Link_1381761729FM"><span style="">Clients are requesting such broadcasts by poll-mode or are "pinged"</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_816499858FM"><span style="">In poll-mode the client asks on a regular basis at the node for new broadcasts</span></li><li class="col" style="" id="FMFreemind_Link_1452667491FM"><span style="">A Ping-POST is being sent by the node as a regular HTTP-POST request to the client</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_873242294FM"><span style="">This also happens on a regular basis</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1845481591FM"><span style="">A node-admin may allow both types independly</span></li><li class="col" style="" id="FMFreemind_Link_1607423256FM"><span style="">If none is allowed the node acts as a "relay"</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_297001287FM"><span style="">And therefore it cannot accept clients with broadcast-functionality enabled</span></li></ul></li></ul></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_144167856FM"><span style="font-size:117%;font-weight:bold;">Client-Client Communication</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1642758810FM"><span style="">May be done "anonymously" over the node or directly with an other client</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1507061819FM"><span style="">Communication of the node is done in poll-mode or by Ping-POST</span></li><li class="basic" style="" id="FMFreemind_Link_1390010744FM"><span style="">Direct client-client communication client "A" sends a Ping-POST directly to client "B"</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_1445364933FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <img src="Generic Object Sharing Protocol.html_files/icons/desktop_new.png" alt="desktop_new"/> <span style="">Wrongly sent Ping-POSTs (e.g. the admin doesn't allow them) may be answered with a regular HTTP status '4XX'</span></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_329480665FM"><span style="font-size:133%;font-weight:bold;">Usage of low-level protocols</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_679379315FM"><span style="">Already existing low-level protocols like TCP/IP and UDP should be used</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1616250831FM"><span style="">TCP should be used for "inter-communication"</span></li><li class="col" style="" id="FMFreemind_Link_898295556FM"><span style="">UDP should be used for "streaming" the objects to other hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_401089184FM"><span style="">Parties are generating hashes of chunks for validation</span></li><li class="col" style="" id="FMFreemind_Link_947570234FM"><span style="">Chunks should only be created for very big objects</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_912553641FM"><img src="Generic Object Sharing Protocol.html_files/icons/xmag.png" alt="xmag"/> <img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <span style="">Total object size is larger than X KByte</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1011335691FM"><span style="">The sender creates hashes and adds them to the chunk</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_64829706FM"><span style="">The receivers validates them</span></li><li class="basic" style="" id="FMFreemind_Link_1875786790FM"><span style="">No serial numbers a-la TCP are generated</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_99186455FM"><span style="">The last chunk package contains both hashes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_398290140FM"><span style="">Hash of itself and the final hash</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1741640397FM"><span style="">If a hash fails to validate it is being collected</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1930312770FM"><span style="">After the final chunk was sent, failed chunks a re-requested</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_681298548FM"><span style="">This is retried X times per hash</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1530992232FM"><span style="">But always at the end of the whole transaction and all together</span></li><li class="col" style="" id="FMFreemind_Link_766714583FM"><span style="">If still some hashes failed to transfer</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1262238289FM"><span style="">The object got dropped or fully requested</span></li><li class="basic" style="" id="FMFreemind_Link_1316903827FM"><span style="">This should be configurable by the admin</span></li><li class="col" style="" id="FMFreemind_Link_525157850FM"><span style="">To do so, the final hash and object type is submitted to the sender</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1316680608FM"><img src="Generic Object Sharing Protocol.html_files/icons/attach.png" alt="attach"/> <span style="">"Restransmit-Message"</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_9873596FM"><span style="">The sender is now trying smaller chunks</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_507679569FM"><span style="">If all was successfully received</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_566458700FM"><span style="">The receivers sends a "done-message" to the sender with final hash and object type</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_602435860FM"><span style="">There is also a "real" streaming mode</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1387836906FM"><span style="">This is e.g. used for chat</span></li><li class="basic" style="" id="FMFreemind_Link_1268993772FM"><span style="">For this TCP/IP is used and no hashes are generated</span></li><li class="basic" style="" id="FMFreemind_Link_602177505FM"><span style="">Also no chunks are generated</span></li><li class="basic" style="" id="FMFreemind_Link_191938147FM"><span style="">Only in this mode "multi-casting" is possible</span></li></ul></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1372827895FM"><span style="font-size:133%;font-weight:bold;">Fault Tolerance / Reliability</span><ul class="sub"><li class="col" style="" id="FMFreemind_Link_28699698FM"><span style="">After X failed connection attempts a node got removed</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1795377892FM"><span style="">Other hubs report this to the master-node</span></li><li class="basic" style="" id="FMFreemind_Link_1595372369FM"><span style="">The master-node probes the failed node and removes it</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_468909888FM"><span style="">Failed list-node</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_192209809FM"><span style="">Hubs are reporting it to the master-node</span></li><li class="basic" style="" id="FMFreemind_Link_933570791FM"><span style="">The master-node probes the failed list-node and removes it</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1309357086FM"><span style="">Failed master-node</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1228535079FM"><span style="">List-nodes takeover the role of a master-node if no bootstrap-nodes are available</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1324885722FM"><img src="Generic Object Sharing Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning"/> <img src="Generic Object Sharing Protocol.html_files/icons/desktop_new.png" alt="desktop_new"/> <span style="">This takeover should not be entirely and should be defined</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_489546245FM"><span style="">If there is no list-node, hubs look for an active master-node</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_496844314FM"><span style="">They report the failed master-node to it</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1831877789FM"><span style="">If additionally no master-node is up, a node will be elected as new master-node</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1473765417FM"><span style="">Doing so, all hubs are identifying the node with...</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1849074808FM"><span style="">... the best karma</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1303674032FM"><span style="">This is known to many hubs</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1087780155FM"><span style="">... most votings</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_585981486FM"><span style="">A "vote" is a positive karma</span></li><li class="basic" style="" id="FMFreemind_Link_616335445FM"><span style="">Also known to many hubs</span></li></ul></li></ul></li><li class="basic" style="" id="FMFreemind_Link_341438028FM"><span style="">The "election" should take place within a specific timeout</span></li><li class="basic" style="" id="FMFreemind_Link_515853064FM"><span style="">If no election is happening the node with most connections got elected</span></li></ul></li></ul></li><li class="col" style="" id="FMFreemind_Link_694830716FM"><span style="">If one of the bootstrap-nodes is up</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1701914366FM"><span style="">The elected hubs notifies a some of it's fellow hubs that the bootstrap-node is back</span></li><li class="basic" style="" id="FMFreemind_Link_561336762FM"><span style="">The elected node becomes a regular node and notifies other hubs on connection attempts</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1745751398FM"><span style="">Disadvantages:</span><ul class="subexp"><li class="col" style="" id="FMFreemind_Link_1189063074FM"><span style="">A new node with only knowlege about the bootstrap-nodes may not be able to connect to the hubs</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1581407665FM"><span style="">Additional bootstrap-nodes on other server and/or continent may help here</span></li></ul></li></ul></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1204819150FM"><span style="font-size:133%;font-weight:bold;">Object Types</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1961919735FM"><span style="">New object types are only addable by updating the software</span></li><li class="col" style="" id="FMFreemind_Link_188591190FM"><span style="">It also possible by 3rd-party</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_385578906FM"><span style="">Must be known by master/bootstrap-nodes</span></li></ul></li><li class="col" style="" id="FMFreemind_Link_1667260565FM"><span style="">Outdated object types are marked "deprecated" for a longer time</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_1936301650FM"><span style="">Master-nodes may accept or reject them</span></li><li class="basic" style="" id="FMFreemind_Link_505959038FM"><span style="">A "deprecation message" is always being sent</span></li><li class="basic" style="" id="FMFreemind_Link_1001362763FM"><span style="">A note of a required update can optionally be added</span></li></ul></li><li class="basic" style="" id="FMFreemind_Link_259217829FM"><span style="">After deprecation time they are treated as "unknown"</span></li><li class="col" style="" id="FMFreemind_Link_1228871005FM"><span style="">Other hubs should ask bootstrap-nodes</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_887331476FM"><span style="">This compensate errors made by master-nodes</span></li><li class="basic" style="" id="FMFreemind_Link_1450229897FM"><span style="">Wrongly deprecated object types by the master-node result in bad karma by the bootstrap-node</span></li></ul></li></ul></li></ul></li></ul></div></body></html>
\ No newline at end of file
index 3a39fa04c311d1d7641cc9cf7366ebc668707c4b..197a4c3a9a291bc13042b6430e0fa4a39b51f469 100644 (file)
@@ -2,16 +2,16 @@
 <!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
 <node CREATED="1236122299751" ID="Freemind_Link_1069566441" MODIFIED="1236902424887" TEXT="Generic Object-Sharing Protocol">
 <font BOLD="true" NAME="Dialog" SIZE="20"/>
-<node CREATED="1236123417491" FOLDED="true" ID="Freemind_Link_1660540085" MODIFIED="1236899597347" POSITION="right" TEXT="Hub Identification">
+<node CREATED="1236123417491" FOLDED="true" ID="Freemind_Link_1660540085" MODIFIED="1236899597347" POSITION="right" TEXT="Node Identification">
 <font BOLD="true" NAME="Dialog" SIZE="16"/>
-<node CREATED="1236124236611" ID="Freemind_Link_780558731" MODIFIED="1236124257084" TEXT="Every hub generates an id string by random">
-<node CREATED="1236124483890" ID="Freemind_Link_1498010716" MODIFIED="1236124589043" TEXT="This is the Hub-Id (Hub Identifier)"/>
+<node CREATED="1236124236611" ID="Freemind_Link_780558731" MODIFIED="1236124257084" TEXT="Every node generates an id string by random">
+<node CREATED="1236124483890" ID="Freemind_Link_1498010716" MODIFIED="1236124589043" TEXT="This is the node id (node identifier)"/>
 <node CREATED="1236124257580" ID="Freemind_Link_458280781" MODIFIED="1236124263937" TEXT="Only on first use"/>
 <node CREATED="1236124265079" ID="Freemind_Link_698958541" MODIFIED="1236124280179" TEXT="This should be globally unique"/>
-<node CREATED="1236124280846" ID="Freemind_Link_1564511533" MODIFIED="1236124294759" TEXT="It will be stored in hub&apos;s database for later reuse"/>
+<node CREATED="1236124280846" ID="Freemind_Link_1564511533" MODIFIED="1236124294759" TEXT="It will be stored in node&apos;s database for later reuse"/>
 <node CREATED="1236124347351" ID="Freemind_Link_982080681" MODIFIED="1236124368097" TEXT="A hash is being generated of it">
 <node CREATED="1236124368566" ID="Freemind_Link_177707740" MODIFIED="1236124377872" TEXT="Hashed data:">
-<node CREATED="1236124379303" ID="Freemind_Link_1317863864" MODIFIED="1236124418199" TEXT="Hub&apos;s IP number and hostname"/>
+<node CREATED="1236124379303" ID="Freemind_Link_1317863864" MODIFIED="1236124418199" TEXT="Node&apos;s IP number and hostname"/>
 <node CREATED="1236124387791" ID="Freemind_Link_1030355543" MODIFIED="1236124397985" TEXT="Some random characters"/>
 </node>
 </node>
 <node CREATED="1236124463032" ID="Freemind_Link_1712131488" MODIFIED="1236124472608" TEXT="Per session another id is generated">
 <node CREATED="1236124474040" ID="Freemind_Link_439993942" MODIFIED="1236124511110" TEXT="This is the SID (Session IDentifier)"/>
 <node CREATED="1236124545181" ID="Freemind_Link_1215594894" MODIFIED="1236124553563" TEXT="It is being distributed to the hubs"/>
-<node CREATED="1236124613215" ID="Freemind_Link_1633651159" MODIFIED="1236124623514" TEXT="It stored together with the Hub-Id">
+<node CREATED="1236124613215" ID="Freemind_Link_1633651159" MODIFIED="1236124623514" TEXT="It stored together with the Node-Id">
 <node CREATED="1236124625776" ID="Freemind_Link_651452439" MODIFIED="1236124638851" TEXT="So other can validate bother together"/>
 </node>
 <node CREATED="1236124646273" ID="Freemind_Link_789902518" MODIFIED="1236124677328" TEXT="Logging should only enabled for debugging purposes">
 <icon BUILTIN="messagebox_warning"/>
 </node>
 </node>
-<node CREATED="1236124693242" ID="Freemind_Link_902328932" MODIFIED="1236124765100" TEXT="Locking IPs or Hub-Ids on master-nodes is not planed">
+<node CREATED="1236124693242" ID="Freemind_Link_902328932" MODIFIED="1236124765100" TEXT="Locking IPs or Node-Ids on master-nodes is not planed">
 <node CREATED="1236124770510" ID="Freemind_Link_1592412776" MODIFIED="1236124780694" TEXT="Censorship would be to very easy">
 <node CREATED="1236124781013" ID="Freemind_Link_423578439" MODIFIED="1236124872658" TEXT="Government agencies or enterprise parties"/>
 </node>
 <node CREATED="1236124882253" ID="Freemind_Link_84092519" MODIFIED="1236124903288" TEXT="Censhorship makes no sence here">
 <node CREATED="1236124904844" ID="Freemind_Link_514458550" MODIFIED="1236124918893" TEXT="It can very easy be bypassed:"/>
-<node CREATED="1236124919421" ID="Freemind_Link_1221678941" MODIFIED="1236124938847" TEXT="Delete Hub-Id in database">
+<node CREATED="1236124919421" ID="Freemind_Link_1221678941" MODIFIED="1236124938847" TEXT="Delete Node-Id in database">
 <node CREATED="1236124939605" ID="Freemind_Link_904836052" MODIFIED="1236124945027" TEXT="A new one got generated"/>
 </node>
 <node CREATED="1236124945999" ID="Freemind_Link_1262635656" MODIFIED="1236124992323" TEXT="Locked IP or port number can be bypassed by proxies"/>
@@ -43,7 +43,7 @@
 </node>
 </node>
 <node CREATED="1236125070021" ID="Freemind_Link_441713513" MODIFIED="1236125081500" TEXT="Hubs can be optionally registered by master-nodes">
-<node CREATED="1236125088538" ID="Freemind_Link_1200999421" MODIFIED="1236125107221" TEXT="Increases karma because the hub admin is verified"/>
+<node CREATED="1236125088538" ID="Freemind_Link_1200999421" MODIFIED="1236125107221" TEXT="Increases karma because the node admin is verified"/>
 <node CREATED="1236125114584" ID="Freemind_Link_1617168424" MODIFIED="1236125131976" TEXT="Unregistered hubs does not receive negative votings"/>
 </node>
 </node>
@@ -52,7 +52,7 @@
 <node CREATED="1236126838827" FOLDED="true" ID="Freemind_Link_453620216" MODIFIED="1236126858610" TEXT="At least one, better 3 to 4, master-nodes are required">
 <node CREATED="1236126861889" ID="Freemind_Link_265648584" MODIFIED="1236126877833" TEXT="Aka. &quot;Bootstrap-Nodes&quot;"/>
 <node CREATED="1253894510297" ID="Freemind_Link_1226811309" MODIFIED="1253894527932" TEXT="They should be listed in the configuration for all applications"/>
-<node CREATED="1253894528917" ID="Freemind_Link_979767017" MODIFIED="1253894547575" TEXT="A comma-seperated list of hub IPs with port numbers seperated by double-dot (:)"/>
+<node CREATED="1253894528917" ID="Freemind_Link_979767017" MODIFIED="1253894547575" TEXT="A comma-seperated list of node IPs with port numbers seperated by double-dot (:)"/>
 </node>
 <node CREATED="1236126921639" FOLDED="true" ID="Freemind_Link_854375254" MODIFIED="1236126946151" TEXT="Bootstrap-Nodes are working stand-alone">
 <node CREATED="1236126947723" ID="Freemind_Link_882684293" MODIFIED="1236126962499" TEXT="No central &quot;Super-Node&quot; is required"/>
 <node CREATED="1236127480391" ID="Freemind_Link_1849172644" MODIFIED="1236127490538" TEXT=".. or connect with each other"/>
 </node>
 </node>
-<node CREATED="1253894719381" FOLDED="true" ID="Freemind_Link_1225609057" MODIFIED="1253894741309" TEXT="1. Hub checks if there is a list of master nodes already stored">
+<node CREATED="1253894719381" FOLDED="true" ID="Freemind_Link_1225609057" MODIFIED="1253894741309" TEXT="1. Node checks if there is a list of master nodes already stored">
 <node CREATED="1253894741787" ID="Freemind_Link_712469416" MODIFIED="1253894767578" TEXT="If so, it skips fetching the list of nodes step"/>
 </node>
-<node CREATED="1253894428802" FOLDED="true" ID="Freemind_Link_934377424" MODIFIED="1253894784130" TEXT="2. Hub is announcing itself to the upper bootstrap hub(s)">
+<node CREATED="1253894428802" FOLDED="true" ID="Freemind_Link_934377424" MODIFIED="1253894784130" TEXT="2. Node is announcing itself to the upper bootstrap hub(s)">
 <node CREATED="1253894443360" ID="Freemind_Link_1716805408" MODIFIED="1253894453653" TEXT="This should be done generic to keep things easy"/>
 <node CREATED="1253894454388" ID="Freemind_Link_1472603257" MODIFIED="1253894468689" TEXT="Recommended is maybe an XML with all neccessary data"/>
 <node CREATED="1253895161895" ID="Freemind_Link_207316718" MODIFIED="1253895177811" TEXT="The session id will not be included here">
 <node CREATED="1253895178123" ID="Freemind_Link_772369973" MODIFIED="1253895194476" TEXT="A bootstrap node will never try to connect clients with hubs"/>
-<node CREATED="1253895196001" ID="Freemind_Link_1528083000" MODIFIED="1253895256138" TEXT="It should only &quot;bootstrap&quot; (tell the hub where it should start sharing its objects)">
+<node CREATED="1253895196001" ID="Freemind_Link_1528083000" MODIFIED="1253895256138" TEXT="It should only &quot;bootstrap&quot; (tell the node where it should start sharing its objects)">
 <icon BUILTIN="desktop_new"/>
 <icon BUILTIN="messagebox_warning"/>
 </node>
 </node>
 </node>
-<node CREATED="1236127732643" FOLDED="true" ID="Freemind_Link_608191462" MODIFIED="1253894770380" TEXT="3. Hub is fetching a list of other hubs">
+<node CREATED="1236127732643" FOLDED="true" ID="Freemind_Link_608191462" MODIFIED="1253894770380" TEXT="3. Node is fetching a list of other hubs">
 <node CREATED="1236127749005" ID="Freemind_Link_195277951" MODIFIED="1236127763644" TEXT="They must have at least X matching object types"/>
-<node CREATED="1253894968712" ID="Freemind_Link_823475561" MODIFIED="1253895023332" STYLE="fork" TEXT="If a bootstrap node is full it forwards the hub to an other bootstrap hub"/>
-<node CREATED="1253895005469" ID="Freemind_Link_1371102915" MODIFIED="1253895019605" STYLE="fork" TEXT="If that hub is again full the hub will be forwarded to a list node"/>
-<node CREATED="1253895024033" ID="Freemind_Link_897238975" MODIFIED="1253895056593" STYLE="fork" TEXT="If wether no free bootstrap nor list node is available the hub waits some time and tries it again"/>
-<node CREATED="1236127559361" ID="Freemind_Link_453619955" MODIFIED="1253894864468" TEXT="Hashes of hub-lists distributed over the bootstrap and list nodes should match">
+<node CREATED="1253894968712" ID="Freemind_Link_823475561" MODIFIED="1253895023332" STYLE="fork" TEXT="If a bootstrap node is full it forwards the node to an other bootstrap hub"/>
+<node CREATED="1253895005469" ID="Freemind_Link_1371102915" MODIFIED="1253895019605" STYLE="fork" TEXT="If that node is again full the node will be forwarded to a list node"/>
+<node CREATED="1253895024033" ID="Freemind_Link_897238975" MODIFIED="1253895056593" STYLE="fork" TEXT="If wether no free bootstrap nor list node is available the node waits some time and tries it again"/>
+<node CREATED="1236127559361" ID="Freemind_Link_453619955" MODIFIED="1253894864468" TEXT="Hashes of node-lists distributed over the bootstrap and list nodes should match">
 <node CREATED="1253894867514" ID="Freemind_Link_1552507439" MODIFIED="1253894879514" TEXT="This can be ensured by a DHT">
 <node CREATED="1253894880687" ID="Freemind_Link_1112603271" MODIFIED="1253894888420" TEXT="DHT = Distributed Hash Table"/>
 <node CREATED="1253894891016" ID="Freemind_Link_123842120" MODIFIED="1253894911641" TEXT="Which format?">
 </node>
 <node CREATED="1236127598383" ID="Freemind_Link_574241054" MODIFIED="1236127616425" TEXT="If to much are inconsistent:">
 <node CREATED="1236127617853" ID="Freemind_Link_1253336655" MODIFIED="1236127632709" TEXT="No connect can happen">
-<node CREATED="1236127634178" ID="Freemind_Link_1412643595" MODIFIED="1236127642167" TEXT="Hub list is rejected"/>
+<node CREATED="1236127634178" ID="Freemind_Link_1412643595" MODIFIED="1236127642167" TEXT="Node list is rejected"/>
 </node>
 <node CREATED="1236127643409" ID="Freemind_Link_1181650485" MODIFIED="1236127660181" TEXT="Or the bootstrap-nodes are working as regular hubs"/>
-<node CREATED="1236127660613" ID="Freemind_Link_1134140787" MODIFIED="1236127715377" TEXT="Replication of the hub-list is required by all bootstrap-nodes"/>
+<node CREATED="1236127660613" ID="Freemind_Link_1134140787" MODIFIED="1236127715377" TEXT="Replication of the node-list is required by all bootstrap-nodes"/>
 </node>
 </node>
-<node CREATED="1253894942579" FOLDED="true" ID="Freemind_Link_210978828" MODIFIED="1253894962729" TEXT="4. Hub connects to gathered master nodes">
+<node CREATED="1253894942579" FOLDED="true" ID="Freemind_Link_210978828" MODIFIED="1253894962729" TEXT="4. Node connects to gathered master nodes">
 <node CREATED="1253895103324" ID="Freemind_Link_1492702329" MODIFIED="1253895129180" TEXT="It again announces its object types to the master nodes"/>
-<node CREATED="1253895133862" ID="Freemind_Link_447040624" MODIFIED="1253895150262" TEXT="Again it provides the session id so the master node can map session id -&gt; hub id"/>
+<node CREATED="1253895133862" ID="Freemind_Link_447040624" MODIFIED="1253895150262" TEXT="Again it provides the session id so the master node can map session id -&gt; node id"/>
 </node>
 <node CREATED="1253895314125" FOLDED="true" ID="Freemind_Link_1052054603" MODIFIED="1253895326100" TEXT="5. If all authorization steps are completed:">
-<node CREATED="1253895330153" ID="Freemind_Link_1721222063" MODIFIED="1253895354745" TEXT="The hub starts to accept client connections">
+<node CREATED="1253895330153" ID="Freemind_Link_1721222063" MODIFIED="1253895354745" TEXT="The node starts to accept client connections">
 <node CREATED="1253895355292" ID="Freemind_Link_501632661" MODIFIED="1253895359347" TEXT="(It already listens to them but rejects them)"/>
 </node>
 <node CREATED="1253895363495" ID="Freemind_Link_663261299" MODIFIED="1253895380188" TEXT="Objects will now be shared with other hubs which accepts the same object types"/>
 <node CREATED="1236122853153" ID="Freemind_Link_1094995324" MODIFIED="1236122869980" TEXT="This affects karma only negativly"/>
 <node CREATED="1236122870509" ID="Freemind_Link_344926416" MODIFIED="1236122884569" TEXT="An up-to-date protocol does not increase karma"/>
 <node CREATED="1236122885070" ID="Freemind_Link_473648942" MODIFIED="1236122902587" TEXT="Does also serve as a &quot;spam protection&quot;"/>
-<node CREATED="1236122918035" ID="Freemind_Link_594554525" MODIFIED="1236122941184" TEXT="Received protocol version of hub is older than stored">
+<node CREATED="1236122918035" ID="Freemind_Link_594554525" MODIFIED="1236122941184" TEXT="Received protocol version of node is older than stored">
 <node CREATED="1236122941749" ID="Freemind_Link_174968672" MODIFIED="1236122946169" TEXT="Karma is reduced"/>
 </node>
 <node CREATED="1236122947985" ID="Freemind_Link_1682037492" MODIFIED="1236122969203" TEXT="Received protocol version is much than from master-nodes">
 <node CREATED="1236123026356" ID="Freemind_Link_936683200" MODIFIED="1236123040623" TEXT="New types must first be known by masters"/>
 <node CREATED="1236123075821" ID="Freemind_Link_965874760" MODIFIED="1236123087086" TEXT="This should be configurable:">
 <node CREATED="1236123088545" ID="Freemind_Link_1804987507" MODIFIED="1236123146558" TEXT="Karma should be reduced..."/>
-<node CREATED="1236123147266" ID="Freemind_Link_1719378455" MODIFIED="1236123161157" TEXT="... or peer hub should be black-listed"/>
+<node CREATED="1236123147266" ID="Freemind_Link_1719378455" MODIFIED="1236123161157" TEXT="... or peer node should be black-listed"/>
 </node>
 <node CREATED="1236123041207" ID="Freemind_Link_1318639621" MODIFIED="1236123073229" TEXT="Because of every node can be a master-mode censorship is really hard"/>
 </node>
 <node CREATED="1236123176016" ID="Freemind_Link_1158753702" MODIFIED="1236123192038" TEXT="Correctly logging">
 <node CREATED="1236123192506" ID="Freemind_Link_571936771" MODIFIED="1236123197543" TEXT="Does not affect karma"/>
-<node CREATED="1236123201477" ID="Freemind_Link_526838799" MODIFIED="1236123218064" TEXT="Logout must be done by master hub and active hubs">
+<node CREATED="1236123201477" ID="Freemind_Link_526838799" MODIFIED="1236123218064" TEXT="Logout must be done by master node and active hubs">
 <node CREATED="1236123218463" ID="Freemind_Link_961650790" MODIFIED="1236123236943" TEXT="&quot;Bye&quot; message">
 <icon BUILTIN="idea"/>
 </node>
 <node CREATED="1236819279117" FOLDED="true" ID="Freemind_Link_831929021" MODIFIED="1236899597332" POSITION="left" TEXT="Update Messages">
 <font BOLD="true" NAME="Dialog" SIZE="16"/>
 <node CREATED="1236819311945" ID="Freemind_Link_71881649" MODIFIED="1236819334898" TEXT="Will only be broadcasted from bootstrap- to master- and list-nodes"/>
-<node CREATED="1236819339152" ID="Freemind_Link_774046685" MODIFIED="1236819364243" TEXT="No hub will receive update messages due to heavy network load">
+<node CREATED="1236819339152" ID="Freemind_Link_774046685" MODIFIED="1236819364243" TEXT="No node will receive update messages due to heavy network load">
 <node CREATED="1236819365454" ID="Freemind_Link_1204404067" MODIFIED="1236819386873" TEXT="Maybe only &quot;good&quot; hubs should receive this?">
 <icon BUILTIN="xmag"/>
 <icon BUILTIN="help"/>
 <node CREATED="1236819572768" ID="Freemind_Link_518254369" MODIFIED="1236819577298" TEXT="Both id and sid"/>
 </node>
 <node CREATED="1236819583899" ID="Freemind_Link_815708604" MODIFIED="1236819600627" TEXT="Will also connect first to bootstrap-nodes">
-<node CREATED="1236819601271" ID="Freemind_Link_934296740" MODIFIED="1236819625910" TEXT="Ask for a hub-list as well"/>
+<node CREATED="1236819601271" ID="Freemind_Link_934296740" MODIFIED="1236819625910" TEXT="Ask for a node-list as well"/>
 </node>
 <node CREATED="1236819612157" ID="Freemind_Link_480673349" MODIFIED="1236819634577" TEXT="Do also receive karma from hubs"/>
 <node CREATED="1236819638653" ID="Freemind_Link_692612491" MODIFIED="1236819657034" TEXT="Dynamic IPs are also accepted and therefore must be registered"/>
 </node>
-<node CREATED="1236819677106" FOLDED="true" ID="Freemind_Link_1445979240" MODIFIED="1236899597329" POSITION="left" TEXT="Client&lt;-&gt;Hub Communication">
+<node CREATED="1236819677106" FOLDED="true" ID="Freemind_Link_1445979240" MODIFIED="1236899597329" POSITION="left" TEXT="Client&lt;-&gt;Node Communication">
 <font BOLD="true" NAME="Dialog" SIZE="16"/>
 <node CREATED="1236898541254" ID="Freemind_Link_374257888" MODIFIED="1236898566531" TEXT="After a client has bootstrapped it announces all it&apos;s object types to the hubs">
 <node CREATED="1236898577202" ID="Freemind_Link_1014689893" MODIFIED="1236898596094" TEXT="Including acceptance of broadcasts, poll-mode and Ping-POST"/>
 </node>
 <node CREATED="1236898600139" ID="Freemind_Link_730901168" MODIFIED="1236898624130" TEXT="By this the hubs know clients and their accepted object types"/>
-<node CREATED="1236898628920" ID="Freemind_Link_1981646811" MODIFIED="1236898649573" TEXT="Clients may download a hub-list for a specific object type">
+<node CREATED="1236898628920" ID="Freemind_Link_1981646811" MODIFIED="1236898649573" TEXT="Clients may download a node-list for a specific object type">
 <node CREATED="1236898649983" ID="Freemind_Link_376278255" MODIFIED="1236898658898" TEXT="Distinct-List-Mode"/>
-<node CREATED="1236898661907" ID="Freemind_Link_481362981" MODIFIED="1236898685390" TEXT="After selecting a hub the client can request a list of clients from that hub"/>
+<node CREATED="1236898661907" ID="Freemind_Link_481362981" MODIFIED="1236898685390" TEXT="After selecting a node the client can request a list of clients from that hub"/>
 <node CREATED="1236898693369" ID="Freemind_Link_1444901526" MODIFIED="1236898735306" TEXT="From these clients the client can accept objects from and send to">
 <node CREATED="1236898744031" ID="Freemind_Link_423939808" MODIFIED="1236898750207" TEXT="E.g. news by broadcast"/>
 </node>
 </node>
 <node CREATED="1236898869927" ID="Freemind_Link_20289741" MODIFIED="1236898894884" TEXT="A client sends its broadcast to the master-nodes">
 <node CREATED="1236898903419" ID="Freemind_Link_751901694" MODIFIED="1236898927433" TEXT="They are distribute it to their fellow hubs"/>
-<node CREATED="1236898931205" ID="Freemind_Link_908440118" MODIFIED="1236899031658" TEXT="A hub knows which client accepts broadcasts and &quot;deposits&quot; it for the client"/>
+<node CREATED="1236898931205" ID="Freemind_Link_908440118" MODIFIED="1236899031658" TEXT="A node knows which client accepts broadcasts and &quot;deposits&quot; it for the client"/>
 <node CREATED="1236899048881" ID="Freemind_Link_1381761729" MODIFIED="1236899073911" TEXT="Clients are requesting such broadcasts by poll-mode or are &quot;pinged&quot;">
-<node CREATED="1236899074418" ID="Freemind_Link_816499858" MODIFIED="1236899104143" TEXT="In poll-mode the client asks on a regular basis at the hub for new broadcasts"/>
-<node CREATED="1236899114179" ID="Freemind_Link_1452667491" MODIFIED="1236899160051" TEXT="A Ping-POST is being sent by the hub as a regular HTTP-POST request to the client">
+<node CREATED="1236899074418" ID="Freemind_Link_816499858" MODIFIED="1236899104143" TEXT="In poll-mode the client asks on a regular basis at the node for new broadcasts"/>
+<node CREATED="1236899114179" ID="Freemind_Link_1452667491" MODIFIED="1236899160051" TEXT="A Ping-POST is being sent by the node as a regular HTTP-POST request to the client">
 <node CREATED="1236899160614" ID="Freemind_Link_873242294" MODIFIED="1236899170480" TEXT="This also happens on a regular basis"/>
 </node>
-<node CREATED="1236899177795" ID="Freemind_Link_1845481591" MODIFIED="1236899200012" TEXT="A hub-admin may allow both types independly"/>
-<node CREATED="1236899205412" ID="Freemind_Link_1607423256" MODIFIED="1236899216542" TEXT="If none is allowed the hub acts as a &quot;relay&quot;">
+<node CREATED="1236899177795" ID="Freemind_Link_1845481591" MODIFIED="1236899200012" TEXT="A node-admin may allow both types independly"/>
+<node CREATED="1236899205412" ID="Freemind_Link_1607423256" MODIFIED="1236899216542" TEXT="If none is allowed the node acts as a &quot;relay&quot;">
 <node CREATED="1236899225741" ID="Freemind_Link_297001287" MODIFIED="1236899250404" TEXT="And therefore it cannot accept clients with broadcast-functionality enabled"/>
 </node>
 </node>
 </node>
 <node CREATED="1236899269918" ID="Freemind_Link_144167856" MODIFIED="1236899586006" TEXT="Client-Client Communication">
 <font BOLD="true" NAME="Dialog" SIZE="14"/>
-<node CREATED="1236899286016" ID="Freemind_Link_1642758810" MODIFIED="1236899322515" TEXT="May be done &quot;anonymously&quot; over the hub or directly with an other client">
-<node CREATED="1236899328390" ID="Freemind_Link_1507061819" MODIFIED="1236899349464" TEXT="Communication of the hub is done in poll-mode or by Ping-POST"/>
+<node CREATED="1236899286016" ID="Freemind_Link_1642758810" MODIFIED="1236899322515" TEXT="May be done &quot;anonymously&quot; over the node or directly with an other client">
+<node CREATED="1236899328390" ID="Freemind_Link_1507061819" MODIFIED="1236899349464" TEXT="Communication of the node is done in poll-mode or by Ping-POST"/>
 <node CREATED="1236899361363" ID="Freemind_Link_1390010744" MODIFIED="1236899393223" TEXT="Direct client-client communication client &quot;A&quot; sends a Ping-POST directly to client &quot;B&quot;"/>
 </node>
 <node CREATED="1236899405778" ID="Freemind_Link_1445364933" MODIFIED="1236899462999" TEXT="Wrongly sent Ping-POSTs (e.g. the admin doesn&apos;t allow them) may be answered with a regular HTTP status &apos;4XX&apos;">
 </node>
 <node CREATED="1236804847687" FOLDED="true" ID="Freemind_Link_1372827895" MODIFIED="1236899597302" POSITION="right" TEXT="Fault Tolerance / Reliability">
 <font BOLD="true" NAME="Dialog" SIZE="16"/>
-<node CREATED="1236805031745" ID="Freemind_Link_28699698" MODIFIED="1236805057203" TEXT="After X failed connection attempts a hub got removed">
+<node CREATED="1236805031745" ID="Freemind_Link_28699698" MODIFIED="1236805057203" TEXT="After X failed connection attempts a node got removed">
 <node CREATED="1236805060886" ID="Freemind_Link_1795377892" MODIFIED="1236805073614" TEXT="Other hubs report this to the master-node"/>
-<node CREATED="1236805074337" ID="Freemind_Link_1595372369" MODIFIED="1236805094304" TEXT="The master-node probes the failed hub and removes it"/>
+<node CREATED="1236805074337" ID="Freemind_Link_1595372369" MODIFIED="1236805094304" TEXT="The master-node probes the failed node and removes it"/>
 </node>
 <node CREATED="1236805095936" ID="Freemind_Link_468909888" MODIFIED="1236805105212" TEXT="Failed list-node">
 <node CREATED="1236805111066" ID="Freemind_Link_192209809" MODIFIED="1236805126866" TEXT="Hubs are reporting it to the master-node"/>
 <node CREATED="1236805256862" ID="Freemind_Link_489546245" MODIFIED="1236805284415" TEXT="If there is no list-node, hubs look for an active master-node">
 <node CREATED="1236805285629" ID="Freemind_Link_496844314" MODIFIED="1236805295805" TEXT="They report the failed master-node to it"/>
 </node>
-<node CREATED="1236805300701" ID="Freemind_Link_1831877789" MODIFIED="1236805333472" TEXT="If additionally no master-node is up, a hub will be elected as new master-node">
-<node CREATED="1236805370471" ID="Freemind_Link_1473765417" MODIFIED="1236805388795" TEXT="Doing so, all hubs are identifying the hub with...">
+<node CREATED="1236805300701" ID="Freemind_Link_1831877789" MODIFIED="1236805333472" TEXT="If additionally no master-node is up, a node will be elected as new master-node">
+<node CREATED="1236805370471" ID="Freemind_Link_1473765417" MODIFIED="1236805388795" TEXT="Doing so, all hubs are identifying the node with...">
 <node CREATED="1236805389203" ID="Freemind_Link_1849074808" MODIFIED="1236805408420" TEXT="... the best karma">
 <node CREATED="1236805408843" ID="Freemind_Link_1303674032" MODIFIED="1236805414368" TEXT="This is known to many hubs"/>
 </node>
 </node>
 </node>
 <node CREATED="1236805485261" ID="Freemind_Link_341438028" MODIFIED="1236805508476" TEXT="The &quot;election&quot; should take place within a specific timeout"/>
-<node CREATED="1236805519338" ID="Freemind_Link_515853064" MODIFIED="1236805539978" TEXT="If no election is happening the hub with most connections got elected"/>
+<node CREATED="1236805519338" ID="Freemind_Link_515853064" MODIFIED="1236805539978" TEXT="If no election is happening the node with most connections got elected"/>
 </node>
 </node>
 <node CREATED="1236805556971" ID="Freemind_Link_694830716" MODIFIED="1236805567605" TEXT="If one of the bootstrap-nodes is up">
 <node CREATED="1236805568757" ID="Freemind_Link_1701914366" MODIFIED="1236805604922" TEXT="The elected hubs notifies a some of it&apos;s fellow hubs that the bootstrap-node is back"/>
-<node CREATED="1236805612004" ID="Freemind_Link_561336762" MODIFIED="1236805631225" TEXT="The elected hub becomes a regular hub and notifies other hubs on connection attempts"/>
+<node CREATED="1236805612004" ID="Freemind_Link_561336762" MODIFIED="1236805631225" TEXT="The elected node becomes a regular node and notifies other hubs on connection attempts"/>
 </node>
 <node CREATED="1236805649317" ID="Freemind_Link_1745751398" MODIFIED="1236805654363" TEXT="Disadvantages:">
-<node CREATED="1236805655355" ID="Freemind_Link_1189063074" MODIFIED="1236805688061" TEXT="A new hub with only knowlege about the bootstrap-nodes may not be able to connect to the hubs">
+<node CREATED="1236805655355" ID="Freemind_Link_1189063074" MODIFIED="1236805688061" TEXT="A new node with only knowlege about the bootstrap-nodes may not be able to connect to the hubs">
 <node CREATED="1236805691077" ID="Freemind_Link_1581407665" MODIFIED="1236805728068" TEXT="Additional bootstrap-nodes on other server and/or continent may help here"/>
 </node>
 </node>