]> git.mxchange.org Git - hub-docs.git/blobdiff - mindmaps/Generic Object Sharing Protocol.html
Updated mindmap for 'hub' project
[hub-docs.git] / mindmaps / Generic Object Sharing Protocol.html
index af9e8f876f17ff5e7cef33aa3fe7a94827f44a01..2b9c3fb5abdaf6072036140cf4bfa91f25715392 100644 (file)
@@ -1,3 +1,345 @@
-<?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;">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 nodes</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-nodes 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 nodes 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 nodes</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 nodes</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 nodes</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 nodes which accepts the same object types</span></li></ul></li></ul></li><li class="col" style="" id="FM_FM"><span style="font-size:133%;font-weight:bold;">Karma</span><ul class="subexp"><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="exp" style="" id="FMFreemind_Link_29494292FM"><span style="">Last activity in near past</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_254202732FM"><span style="">Does not affect karma</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_210971136FM"><span style="">Returned pings</span><ul class="sub"><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="exp" style="" id="FMFreemind_Link_538248067FM"><span style="">Karma voting for other nodes is not to negative</span><ul class="sub"><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 nodes</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="exp" style="" id="FMFreemind_Link_1606666417FM"><span style="">Protocol version should not be to old</span><ul class="sub"><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="exp" style="" id="FMFreemind_Link_1260923814FM"><span style="">Provided object types by the peer hub</span><ul class="sub"><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="exp" style="" id="FMFreemind_Link_1158753702FM"><span style="">Correctly logging</span><ul class="sub"><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 nodes</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 nodes</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><li class="col" style="" id="FMFreemind_Link_1439794757FM"><span style="">Karma influences peer state scoring and vise versa</span><ul class="subexp"><li class="basic" style="" id="FMFreemind_Link_667972974FM"><span style=""><a href="Peer-State Scoring.mm">What is peer state scoring?</a> <a href="Peer-State Scoring.mm"><img src="Generic Object Sharing Protocol.html_files/icons/Link.png" alt="" style="border-width:0"/></a></span></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" nodes 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 nodes</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 nodes</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 nodes 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 nodes</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 nodes</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 nodes</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="col" style="" id="FMFreemind_Link_1372827895FM"><span style="font-size:133%;font-weight:bold;">Fault Tolerance / Reliability</span><ul class="subexp"><li class="exp" style="" id="FMFreemind_Link_28699698FM"><span style="">After X failed connection attempts a node got removed</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1795377892FM"><span style="">Other nodes 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="exp" style="" id="FMFreemind_Link_468909888FM"><span style="">Failed list-node</span><ul class="sub"><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="exp" style="" id="FMFreemind_Link_1309357086FM"><span style="">Failed master-node</span><ul class="sub"><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, nodes 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 nodes 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 nodes</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 nodes</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="exp" style="" id="FMFreemind_Link_694830716FM"><span style="">If one of the bootstrap-nodes is up</span><ul class="sub"><li class="basic" style="" id="FMFreemind_Link_1701914366FM"><span style="">The elected nodes notifies a some of it's fellow nodes 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 nodes on connection attempts</span></li></ul></li><li class="exp" style="" id="FMFreemind_Link_1745751398FM"><span style="">Disadvantages:</span><ul class="sub"><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 nodes</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 nodes 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
+<?xml version="1.0" encoding="UTF-8"?><?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 xmlns="http://www.w3.org/1999/xhtml"><!--This file has been created with toxhtml.xsl--><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /><title>Generic Object-Sharing Protocol</title><link rel="stylesheet" href="Generic%20Object%20Sharing%20Protocol.html_files/treestyles.css" type="text/css" /><script type="text/javascript" src="Generic%20Object%20Sharing%20Protocol.html_files/marktree.js"> 
+       </script></head><body><div class="basetop"><a onclick="expandAll(document.getElementById('base'))" href="#">Expand</a> -
+<a onclick="collapseAll(document.getElementById('base'))" href="#">Collapse</a></div><div class="basetext" id="base"><ul>
+       <li class="col" id="FMFreemind_Link_1069566441FM"><div class="nodecontent" style="font-size:167%;font-weight:bold;">Generic Object-Sharing Protocol</div>
+               <ul class="subexp">
+       <li class="exp" id="FMFreemind_Link_1660540085FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Node Identification</div>
+               <ul class="sub">
+       <li class="col" id="FMID_1477365404FM"><div class="nodecontent">Every node generates an id string by random</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1127544543FM"><div class="nodecontent">This is the node id (node identifier)</div></li>
+       <li class="basic" id="FMID_697104790FM"><div class="nodecontent">Only on first use</div></li>
+       <li class="basic" id="FMID_128861556FM"><div class="nodecontent">This should be globally unique</div></li>
+       <li class="basic" id="FMID_1439756693FM"><div class="nodecontent">It will be stored in node's database for later reuse</div></li>
+       <li class="col" id="FMID_1503568440FM"><div class="nodecontent">A hash is being generated of it</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_1815442429FM"><div class="nodecontent">Hashed data:</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1724036552FM"><div class="nodecontent">Node's IP number and hostname</div></li>
+       <li class="basic" id="FMID_1636874238FM"><div class="nodecontent">Some random characters</div></li></ul></li></ul></li>
+       <li class="basic" id="FMID_1520648841FM"><div class="nodecontent">This id does not change as long as the database is not purged</div></li></ul></li>
+       <li class="col" id="FMID_898313647FM"><div class="nodecontent">Per session another id is generated</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_655958172FM"><div class="nodecontent">This is the SID (Session IDentifier)</div></li>
+       <li class="basic" id="FMID_554796464FM"><div class="nodecontent">It is being distributed to the nodes</div></li>
+       <li class="col" id="FMID_1894972611FM"><div class="nodecontent">It stored together with the Node-Id</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_996671794FM"><div class="nodecontent">So other can validate bother together</div></li></ul></li>
+       <li class="basic" id="FMID_1579813135FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning" /> <div class="nodecontent">Logging should be enabled for debugging purposes only</div></li></ul></li>
+       <li class="col" id="FMID_598230637FM"><div class="nodecontent">Private key and its corresponding hash</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1802867259FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/help.png" alt="help" /> <img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/idea.png" alt="idea" /> <div class="nodecontent">For signed and later encrypted traffic?</div></li></ul></li>
+       <li class="col" id="FMID_1999616583FM"><div class="nodecontent">Locking IPs or Node-Ids on master-nodes is not planed</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_515276316FM"><div class="nodecontent">Censorship would be to very easy</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1582468782FM"><div class="nodecontent">Government agencies or enterprise parties</div></li></ul></li>
+       <li class="col" id="FMID_206577967FM"><div class="nodecontent">Censhorship makes no sence here</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_142027532FM"><div class="nodecontent">It can very easy be bypassed:</div></li>
+       <li class="col" id="FMID_482299521FM"><div class="nodecontent">Delete Node-Id in database</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1867340714FM"><div class="nodecontent">A new one got generated</div></li></ul></li>
+       <li class="basic" id="FMID_391061380FM"><div class="nodecontent">Locked IP or port number can be bypassed by proxies</div></li>
+       <li class="col" id="FMID_1806532479FM"><div class="nodecontent">One or two master-nodes should listen on ports commonly unblocked by firewalls</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_168189651FM"><div class="nodecontent">Like 80/443/110/25</div></li></ul></li></ul></li></ul></li>
+       <li class="col" id="FMID_523493738FM"><div class="nodecontent">Hubs can be optionally registered by master-nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1831087894FM"><div class="nodecontent">Increases karma because the node admin is verified</div></li>
+       <li class="basic" id="FMID_1334181154FM"><div class="nodecontent">Unregistered nodes does not receive negative votings</div></li></ul></li></ul></li>
+       <li class="col" id="FMFreemind_Link_1339348415FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Bootstrapping</div>
+               <ul class="subexp">
+       <li class="exp" id="FMID_910314668FM"><div class="nodecontent">At least one, better 3 to 4, master-nodes are required</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_1435365989FM"><div class="nodecontent">Aka. "Bootstrap-Nodes"</div></li>
+       <li class="basic" id="FMID_1487578920FM"><div class="nodecontent">They should be listed in the configuration for all applications</div></li>
+       <li class="basic" id="FMID_213582832FM"><div class="nodecontent">A comma-seperated list of node IPs with port numbers seperated by double-dot (:)</div></li></ul></li>
+       <li class="exp" id="FMID_27169311FM"><div class="nodecontent">Bootstrap-Nodes are working stand-alone</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_1879966796FM"><div class="nodecontent">No central "Super-Node" is required</div></li>
+       <li class="basic" id="FMID_741244364FM"><div class="nodecontent">Too much traffic would have to flow through it</div></li>
+       <li class="basic" id="FMID_1096022992FM"><div class="nodecontent">Attacks on the network by censorship are reduced</div></li>
+       <li class="basic" id="FMID_1182056532FM"><div class="nodecontent">Traffic does not increase network-overall load</div></li>
+       <li class="col" id="FMID_1052031194FM"><div class="nodecontent">Small disadvantage:</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1150854056FM"><div class="nodecontent">Hubs must register with ...</div></li>
+       <li class="basic" id="FMID_1537201605FM"><div class="nodecontent">... more than one master-node ...</div></li>
+       <li class="basic" id="FMID_246674177FM"><div class="nodecontent">.. or connect with each other</div></li></ul></li></ul></li>
+       <li class="exp" id="FMID_1568438489FM"><div class="nodecontent">1. Node checks if there is a list of master nodes already stored</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_426676819FM"><div class="nodecontent">If so, it skips fetching the list of nodes step</div></li></ul></li>
+       <li class="exp" id="FMID_764597347FM"><div class="nodecontent">2. Node is announcing itself to the upper bootstrap hub(s)</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_1596045826FM"><div class="nodecontent">This should be done generic to keep things easy</div></li>
+       <li class="exp" id="FMID_1283494642FM"><div class="nodecontent">Recommended is maybe an XML with all neccessary data</div>
+               <ul class="sub">
+       <li class="col" id="FMID_1967390832FM"><div class="nodecontent">Node status</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_109028891FM"><div class="nodecontent">Mostly 'active' or 'reachable'</div></li></ul></li>
+       <li class="basic" id="FMID_577483198FM"><div class="nodecontent">Session id (see below)</div></li>
+       <li class="col" id="FMID_614578398FM"><div class="nodecontent">External and internal IP</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_974332986FM"><div class="nodecontent">To allow LAN connections over connections on WAN IP</div></li>
+       <li class="basic" id="FMID_717476080FM"><div class="nodecontent">Allowing this aids networks where DHCP and IP masquerade is used</div></li>
+       <li class="basic" id="FMID_352410425FM"><div class="nodecontent">Most customer asynchronous DSL does not allow to connect from inside over the WAN IP back inside</div></li></ul></li>
+       <li class="basic" id="FMID_1876026630FM"><div class="nodecontent">TCP and UDP listening ports</div></li></ul></li>
+       <li class="col" id="FMID_238301949FM"><div class="nodecontent">The session id will be included here</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1100719104FM"><div class="nodecontent">Other nodes shall always attempt to find a node by its current session id, not node it</div></li>
+       <li class="col" id="FMID_1636243419FM"><div class="nodecontent">The node id identifies the node globally</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1976097041FM"><div class="nodecontent">Requires a well-randomized id to be created to avoid collisions with other nodes</div></li>
+       <li class="basic" id="FMID_1275543965FM"><div class="nodecontent">First announcement dominates on all "upper" nodes</div></li>
+       <li class="basic" id="FMID_1845256702FM"><div class="nodecontent">A maximum limit of node ids per IP address shall prevent id flooding</div></li></ul></li>
+       <li class="col" id="FMID_977856197FM"><div class="nodecontent">The session id identifies the node currently</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_107303523FM"><div class="nodecontent">On every start a new one will be generated</div></li>
+       <li class="basic" id="FMID_1363422738FM"><div class="nodecontent">This requires a mechanism to purge old session ids</div></li></ul></li></ul></li></ul></li>
+       <li class="exp" id="FMID_1953640644FM"><div class="nodecontent">3. Node is fetching a list of other nodes</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_508674192FM"><div class="nodecontent">They must have at least X matching object types</div></li>
+       <li class="basic" id="FMID_1809816861FM"><div class="nodecontent">If a bootstrap node is full it forwards the node to an other bootstrap hub</div></li>
+       <li class="basic" id="FMID_1324283426FM"><div class="nodecontent">If that node is again full the node will be forwarded to a list node</div></li>
+       <li class="basic" id="FMID_1076323011FM"><div class="nodecontent">If wether no free bootstrap nor list node is available the node waits some time and tries it again</div></li>
+       <li class="col" id="FMID_823284955FM"><div class="nodecontent">Hashes of node-lists distributed over the bootstrap and list nodes should match</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_1102025965FM"><div class="nodecontent">This can be ensured by a DHT</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1747728135FM"><div class="nodecontent">DHT = Distributed Hash Table</div></li>
+       <li class="basic" id="FMID_442289999FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/xmag.png" alt="xmag" /> <div class="nodecontent">Which format?</div></li></ul></li></ul></li>
+       <li class="col" id="FMID_1959787511FM"><div class="nodecontent">If to much are inconsistent:</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_1007097645FM"><div class="nodecontent">No connect can happen</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1137015561FM"><div class="nodecontent">Node list is rejected</div></li></ul></li>
+       <li class="basic" id="FMID_99205407FM"><div class="nodecontent">Or the bootstrap-nodes are working as regular nodes</div></li>
+       <li class="basic" id="FMID_1082334730FM"><div class="nodecontent">Replication of the node-list is required by all bootstrap-nodes</div></li></ul></li></ul></li>
+       <li class="exp" id="FMID_780025605FM"><div class="nodecontent">4. Node connects to gathered master nodes</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_807839905FM"><div class="nodecontent">It again announces its object types to the master nodes</div></li>
+       <li class="basic" id="FMID_1575419923FM"><div class="nodecontent">Again it provides the session id so the master node can map session id -&gt; node id</div></li></ul></li>
+       <li class="exp" id="FMID_1753288477FM"><div class="nodecontent">5. If all authorization steps are completed:</div>
+               <ul class="sub">
+       <li class="col" id="FMID_957597032FM"><div class="nodecontent">The node starts to accept client connections</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1531381091FM"><div class="nodecontent">(It already listens to them but rejects them)</div></li></ul></li>
+       <li class="basic" id="FMID_1959816375FM"><div class="nodecontent">Objects will now be shared with other nodes which accepts the same object types</div></li></ul></li></ul></li>
+       <li class="exp" id="FM_FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Karma</div>
+               <ul class="sub">
+       <li class="col" id="FMID_500911435FM"><div class="nodecontent">Karma is given for validating entries in the DHT</div>
+               <ul class="subexp">
+       <li class="exp" id="FMID_1111662870FM"><div class="nodecontent">Last activity in near past</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_183345962FM"><div class="nodecontent">Does not affect karma</div></li></ul></li>
+       <li class="exp" id="FMID_1990729495FM"><div class="nodecontent">Returned pings</div>
+               <ul class="sub">
+       <li class="col" id="FMID_1774017992FM"><div class="nodecontent">Amount of sent pings</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1872142288FM"><div class="nodecontent">If no reply it got dead-listed</div></li></ul></li>
+       <li class="basic" id="FMID_4860616FM"><div class="nodecontent">Failed pings reduce karma</div></li>
+       <li class="basic" id="FMID_550660986FM"><div class="nodecontent">Slow responses reduce karma</div></li></ul></li>
+       <li class="exp" id="FMID_1391273089FM"><div class="nodecontent">Karma voting for other nodes is not to negative</div>
+               <ul class="sub">
+       <li class="col" id="FMID_231770771FM"><div class="nodecontent">Reduces manipulation chances</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1089345314FM"><div class="nodecontent">Prefer karma votes of trusted nodes</div></li>
+       <li class="basic" id="FMID_1191307246FM"><div class="nodecontent">Negative karma votings for untrusted karma reduce own karma</div></li></ul></li></ul></li>
+       <li class="basic" id="FMID_60031662FM"><div class="nodecontent">To much "spam packages" reduce karma</div></li>
+       <li class="basic" id="FMID_1008982816FM"><div class="nodecontent">Validated packages increase karma</div></li>
+       <li class="exp" id="FMID_347040992FM"><div class="nodecontent">Protocol version should not be to old</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_728947067FM"><div class="nodecontent">This affects karma only negativly</div></li>
+       <li class="basic" id="FMID_1679596533FM"><div class="nodecontent">An up-to-date protocol does not increase karma</div></li>
+       <li class="basic" id="FMID_1372440450FM"><div class="nodecontent">Does also serve as a "spam protection"</div></li>
+       <li class="col" id="FMID_1083459898FM"><div class="nodecontent">Received protocol version of node is older than stored</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1678291605FM"><div class="nodecontent">Karma is reduced</div></li></ul></li>
+       <li class="col" id="FMID_541642714FM"><div class="nodecontent">Received protocol version is much than from master-nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_490617049FM"><div class="nodecontent">Karma is reduced</div></li></ul></li></ul></li>
+       <li class="exp" id="FMID_497450092FM"><div class="nodecontent">Provided object types by the peer hub</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_938306595FM"><div class="nodecontent">This affectes karma only negativly</div></li>
+       <li class="basic" id="FMID_825381485FM"><div class="nodecontent">New types must first be known by masters</div></li>
+       <li class="col" id="FMID_1293114895FM"><div class="nodecontent">This should be configurable:</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1877950218FM"><div class="nodecontent">Karma should be reduced...</div></li>
+       <li class="basic" id="FMID_495666559FM"><div class="nodecontent">... or peer node should be black-listed</div></li></ul></li>
+       <li class="basic" id="FMID_553181617FM"><div class="nodecontent">Because of every node can be a master-mode censorship is really hard</div></li></ul></li>
+       <li class="exp" id="FMID_1494399358FM"><div class="nodecontent">Correctly logging</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_1155831513FM"><div class="nodecontent">Does not affect karma</div></li>
+       <li class="col" id="FMID_1719547115FM"><div class="nodecontent">Logout must be done by master node and active nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_538121027FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/idea.png" alt="idea" /> <div class="nodecontent">"Bye" message</div></li></ul></li>
+       <li class="col" id="FMID_584354743FM"><div class="nodecontent">Rotating of dynamic IPs should be considered</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_1448843742FM"><div class="nodecontent">Must be registered by master-node</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_215961236FM"><div class="nodecontent">ID is registered as "Dynamic IP"</div></li>
+       <li class="basic" id="FMID_1967228374FM"><div class="nodecontent">So connects are still possible</div></li></ul></li>
+       <li class="basic" id="FMID_643459265FM"><div class="nodecontent">No negative votings by other nodes</div></li>
+       <li class="col" id="FMID_1506077854FM"><div class="nodecontent">Current IP does spread good in network</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1841142933FM"><div class="nodecontent">Query of the master-node only in doubt</div></li></ul></li></ul></li></ul></li></ul></li>
+       <li class="col" id="FMID_1208606831FM"><div class="nodecontent">Karma influences peer state rating and vise versa</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_938444175FM"><div class="nodecontent"><a href="Peer-State%20Rating.mm">What is peer state rating?</a> <a href="Peer-State%20Rating.mm"><img src="Generic%20Object%20Sharing%20Protocol.html_files/ilink.png" alt="User Link" style="border-width:0" /></a></div></li></ul></li></ul></li>
+       <li class="exp" id="FMFreemind_Link_1372827895FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Fault Tolerance / Reliability</div>
+               <ul class="sub">
+       <li class="exp" id="FMID_797851882FM"><div class="nodecontent">After X failed connection attempts a node got removed</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_1354060812FM"><div class="nodecontent">Other nodes report this to the master-node</div></li>
+       <li class="basic" id="FMID_1408027065FM"><div class="nodecontent">The master-node probes the failed node and removes it</div></li></ul></li>
+       <li class="exp" id="FMID_1731494290FM"><div class="nodecontent">Failed list-node</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_856486923FM"><div class="nodecontent">Hubs are reporting it to the master-node</div></li>
+       <li class="basic" id="FMID_351192162FM"><div class="nodecontent">The master-node probes the failed list-node and removes it</div></li></ul></li>
+       <li class="exp" id="FMID_17777023FM"><div class="nodecontent">Failed master-node</div>
+               <ul class="sub">
+       <li class="col" id="FMID_1174618015FM"><div class="nodecontent">List-nodes takeover the role of a master-node if no bootstrap-nodes are available</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1260650566FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning" /> <img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/desktop_new.png" alt="desktop_new" /> <div class="nodecontent">This takeover should not be entirely and should be defined</div></li></ul></li>
+       <li class="col" id="FMID_963822392FM"><div class="nodecontent">If there is no list-node, nodes look for an active master-node</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_454301053FM"><div class="nodecontent">They report the failed master-node to it</div></li></ul></li>
+       <li class="col" id="FMID_728427686FM"><div class="nodecontent">If additionally no master-node is up, a node will be elected as new master-node</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_295035279FM"><div class="nodecontent">Doing so, all nodes are identifying the node with...</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_1596264326FM"><div class="nodecontent">... the best karma</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1912814834FM"><div class="nodecontent">This is known to many nodes</div></li></ul></li>
+       <li class="col" id="FMID_849494777FM"><div class="nodecontent">... most votings</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_806892556FM"><div class="nodecontent">A "vote" is a positive karma</div></li>
+       <li class="basic" id="FMID_83856880FM"><div class="nodecontent">Also known to many nodes</div></li></ul></li></ul></li>
+       <li class="basic" id="FMID_1505645119FM"><div class="nodecontent">The "election" should take place within a specific timeout</div></li>
+       <li class="basic" id="FMID_378195399FM"><div class="nodecontent">If no election is happening the node with most connections got elected</div></li></ul></li></ul></li>
+       <li class="exp" id="FMID_1034853055FM"><div class="nodecontent">If one of the bootstrap-nodes is up</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_700296041FM"><div class="nodecontent">The elected nodes notifies a some of it's fellow nodes that the bootstrap-node is back</div></li>
+       <li class="basic" id="FMID_809583260FM"><div class="nodecontent">The elected node becomes a regular node and notifies other nodes on connection attempts</div></li></ul></li>
+       <li class="exp" id="FMID_20853367FM"><div class="nodecontent">Disadvantages:</div>
+               <ul class="sub">
+       <li class="col" id="FMID_1267155557FM"><div class="nodecontent">A new node with only knowlege about the bootstrap-nodes may not be able to connect to the nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_783948092FM"><div class="nodecontent">Additional bootstrap-nodes on other server and/or continent may help here</div></li></ul></li></ul></li></ul></li>
+       <li class="exp" id="FMFreemind_Link_1204819150FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Object Types</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_901281826FM"><div class="nodecontent">New object types are only addable by updating the software</div></li>
+       <li class="col" id="FMID_1235221426FM"><div class="nodecontent">It also possible by 3rd-party</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1307763574FM"><div class="nodecontent">Must be known by master/bootstrap-nodes</div></li></ul></li>
+       <li class="col" id="FMID_1829407119FM"><div class="nodecontent">Outdated object types are marked "deprecated" for a longer time</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_958660560FM"><div class="nodecontent">Master-nodes may accept or reject them</div></li>
+       <li class="basic" id="FMID_1810554626FM"><div class="nodecontent">A "deprecation message" is always being sent</div></li>
+       <li class="basic" id="FMID_1476404622FM"><div class="nodecontent">A note of a required update can optionally be added</div></li></ul></li>
+       <li class="basic" id="FMID_1066601969FM"><div class="nodecontent">After deprecation time they are treated as "unknown"</div></li>
+       <li class="col" id="FMID_1079099687FM"><div class="nodecontent">Other nodes should ask bootstrap-nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_312192753FM"><div class="nodecontent">This compensate errors made by master-nodes</div></li>
+       <li class="basic" id="FMID_1378184528FM"><div class="nodecontent">Wrongly deprecated object types by the master-node result in bad karma by the bootstrap-node</div></li></ul></li></ul></li>
+       <li class="exp" id="FMFreemind_Link_831929021FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Update Messages</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_609093084FM"><div class="nodecontent">Will only be broadcasted from bootstrap- to master- and list-nodes</div></li>
+       <li class="col" id="FMID_78459346FM"><div class="nodecontent">No node will receive update messages due to heavy network load</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_187276621FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/xmag.png" alt="xmag" /> <img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/help.png" alt="help" /> <div class="nodecontent">Maybe only "good" nodes should receive this?</div></li></ul></li>
+       <li class="basic" id="FMID_1800878584FM"><div class="nodecontent">Contains update notes and importance level</div></li></ul></li>
+       <li class="exp" id="FMFreemind_Link_168475853FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">"Client" Connections</div>
+               <ul class="sub">
+       <li class="basic" id="FMID_887207372FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/bell.png" alt="bell" /> <div class="nodecontent">Should be interpreted as "application software"</div></li>
+       <li class="col" id="FMID_1404415085FM"><div class="nodecontent">Clients should also generate a "client id"</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_890448171FM"><div class="nodecontent">Both id and sid</div></li></ul></li>
+       <li class="col" id="FMID_905265839FM"><div class="nodecontent">Will also connect first to bootstrap-nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_267897982FM"><div class="nodecontent">Ask for a node-list as well</div></li></ul></li>
+       <li class="basic" id="FMID_1618908435FM"><div class="nodecontent">Do also receive karma from nodes</div></li>
+       <li class="basic" id="FMID_1963451868FM"><div class="nodecontent">Dynamic IPs are also accepted and therefore must be registered</div></li></ul></li>
+       <li class="exp" id="FMFreemind_Link_1445979240FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Client&lt;-&gt;Node Communication</div>
+               <ul class="sub">
+       <li class="col" id="FMID_943175241FM"><div class="nodecontent">After a client has bootstrapped it announces all it's object types to the nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1767214665FM"><div class="nodecontent">Including acceptance of broadcasts, poll-mode and Ping-POST</div></li></ul></li>
+       <li class="basic" id="FMID_863331362FM"><div class="nodecontent">By this the nodes know clients and their accepted object types</div></li>
+       <li class="col" id="FMID_1164918209FM"><div class="nodecontent">Clients may download a node-list for a specific object type</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_316412521FM"><div class="nodecontent">Distinct-List-Mode</div></li>
+       <li class="basic" id="FMID_1133743039FM"><div class="nodecontent">After selecting a node the client can request a list of clients from that hub</div></li>
+       <li class="col" id="FMID_1354848303FM"><div class="nodecontent">From these clients the client can accept objects from and send to</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_916621577FM"><div class="nodecontent">E.g. news by broadcast</div></li></ul></li></ul></li>
+       <li class="col" id="FMID_1437737506FM"><div class="nodecontent">Clients may send "broadcast" objects</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_502650341FM"><div class="nodecontent">Broadcast-Mode</div></li>
+       <li class="col" id="FMID_1181498655FM"><div class="nodecontent">Must be allowed by nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_21709646FM"><div class="nodecontent">This consumes traffic</div></li>
+       <li class="basic" id="FMID_1933322168FM"><div class="nodecontent">Acceptance of broadcasts is known to list-/master- and bootstrap-nodes</div></li></ul></li>
+       <li class="col" id="FMID_406948313FM"><div class="nodecontent">A client sends its broadcast to the master-nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_787211186FM"><div class="nodecontent">They are distribute it to their fellow nodes</div></li>
+       <li class="basic" id="FMID_137555539FM"><div class="nodecontent">A node knows which client accepts broadcasts and "deposits" it for the client</div></li>
+       <li class="col" id="FMID_1517266448FM"><div class="nodecontent">Clients are requesting such broadcasts by poll-mode or are "pinged"</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_226822278FM"><div class="nodecontent">In poll-mode the client asks on a regular basis at the node for new broadcasts</div></li>
+       <li class="col" id="FMID_690207050FM"><div class="nodecontent">A Ping-POST is being sent by the node as a regular HTTP-POST request to the client</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_651208220FM"><div class="nodecontent">This also happens on a regular basis</div></li></ul></li>
+       <li class="basic" id="FMID_1777926717FM"><div class="nodecontent">A node-admin may allow both types independly</div></li>
+       <li class="col" id="FMID_1034616429FM"><div class="nodecontent">If none is allowed the node acts as a "relay"</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_328449565FM"><div class="nodecontent">And therefore it cannot accept clients with broadcast-functionality enabled</div></li></ul></li></ul></li></ul></li></ul></li>
+       <li class="col" id="FMID_123440634FM"><div class="nodecontent" style="font-size:117%;font-weight:bold;">Client-Client Communication</div>
+               <ul class="subexp">
+       <li class="col" id="FMID_1297434555FM"><div class="nodecontent">May be done "anonymously" over the node or directly with an other client</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1164113868FM"><div class="nodecontent">Communication of the node is done in poll-mode or by Ping-POST</div></li>
+       <li class="basic" id="FMID_1562747100FM"><div class="nodecontent">Direct client-client communication client "A" sends a Ping-POST directly to client "B"</div></li></ul></li>
+       <li class="basic" id="FMID_1565480551FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/xmag.png" alt="xmag" /> <img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/desktop_new.png" alt="desktop_new" /> <div class="nodecontent">Wrongly sent Ping-POSTs (e.g. the admin doesn't allow them) may be answered with a regular HTTP status '4XX'</div></li></ul></li></ul></li>
+       <li class="exp" id="FMFreemind_Link_329480665FM"><div class="nodecontent" style="font-size:133%;font-weight:bold;">Usage of low-level protocols</div>
+               <ul class="sub">
+       <li class="col" id="FMID_1153839529FM"><div class="nodecontent">Already existing low-level protocols like TCP/IP and UDP should be used</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1598189785FM"><div class="nodecontent">TCP should be used for "inter-communication"</div></li>
+       <li class="col" id="FMID_645100554FM"><div class="nodecontent">UDP should be used for "streaming" the objects to other nodes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1495758083FM"><div class="nodecontent">Parties are generating hashes of chunks for validation</div></li>
+       <li class="col" id="FMID_1858876702FM"><div class="nodecontent">Chunks should only be created for very big objects</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_48304701FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/xmag.png" alt="xmag" /> <img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/messagebox_warning.png" alt="messagebox_warning" /> <div class="nodecontent">Total object size is larger than X KByte</div></li></ul></li>
+       <li class="col" id="FMID_787015036FM"><div class="nodecontent">The sender creates hashes and adds them to the chunk</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1735939949FM"><div class="nodecontent">The receivers validates them</div></li>
+       <li class="basic" id="FMID_1263867983FM"><div class="nodecontent">No serial numbers a-la TCP are generated</div></li></ul></li>
+       <li class="col" id="FMID_140457451FM"><div class="nodecontent">The last chunk package contains both hashes</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1247676236FM"><div class="nodecontent">Hash of itself and the final hash</div></li></ul></li>
+       <li class="col" id="FMID_699064211FM"><div class="nodecontent">If a hash fails to validate it is being collected</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_833760624FM"><div class="nodecontent">After the final chunk was sent, failed chunks a re-requested</div></li></ul></li>
+       <li class="col" id="FMID_45598378FM"><div class="nodecontent">This is retried X times per hash</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1953539364FM"><div class="nodecontent">But always at the end of the whole transaction and all together</div></li>
+       <li class="col" id="FMID_1087617216FM"><div class="nodecontent">If still some hashes failed to transfer</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1392619755FM"><div class="nodecontent">The object got dropped or fully requested</div></li>
+       <li class="basic" id="FMID_84288828FM"><div class="nodecontent">This should be configurable by the admin</div></li>
+       <li class="col" id="FMID_618078349FM"><div class="nodecontent">To do so, the final hash and object type is submitted to the sender</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_821681010FM"><img src="Generic%20Object%20Sharing%20Protocol.html_files/icons/attach.png" alt="attach" /> <div class="nodecontent">"Restransmit-Message"</div></li></ul></li>
+       <li class="basic" id="FMID_1340892559FM"><div class="nodecontent">The sender is now trying smaller chunks</div></li></ul></li></ul></li>
+       <li class="col" id="FMID_628938328FM"><div class="nodecontent">If all was successfully received</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1988047416FM"><div class="nodecontent">The receivers sends a "done-message" to the sender with final hash and object type</div></li></ul></li></ul></li>
+       <li class="col" id="FMID_1473966368FM"><div class="nodecontent">There is also a "real" streaming mode</div>
+               <ul class="subexp">
+       <li class="basic" id="FMID_1654508253FM"><div class="nodecontent">This is e.g. used for chat</div></li>
+       <li class="basic" id="FMID_429118222FM"><div class="nodecontent">For this TCP/IP is used and no hashes are generated</div></li>
+       <li class="basic" id="FMID_480009945FM"><div class="nodecontent">Also no chunks are generated</div></li>
+       <li class="basic" id="FMID_29563235FM"><div class="nodecontent">Only in this mode "multi-casting" is possible</div></li></ul></li></ul></li></ul></li></ul></li></ul></div></body></html>
\ No newline at end of file