From 65fd2450ae54338aa9b521fa37269b5e695c253a Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 16 Jan 2015 12:03:26 +0000 Subject: [PATCH] Added description of topology communication --- site/how-it-works.md | 112 ++++++++++++++++++++++++++++++++++++++ site/images/top-diag1.png | Bin 0 -> 9373 bytes site/top-diag1.dot | 9 +++ 3 files changed, 121 insertions(+) create mode 100644 site/images/top-diag1.png create mode 100644 site/top-diag1.dot diff --git a/site/how-it-works.md b/site/how-it-works.md index 0e195ea1..352878e8 100644 --- a/site/how-it-works.md +++ b/site/how-it-works.md @@ -39,6 +39,16 @@ peer. The topology information captures which peers are connected to which other peers; weave can route packets in partially connected networks with changing topology. +For example, in this network, peer 1 is connected directly to 2 and 3, +but if 1 needs to send a packet to 4 or 5 it must first send it to +peer 3: +![diagram showing five peers in a weave network][diagram1] +Weave peers [communicate their own topology](#topology) with neighbours, who then +pass on changes to their neighbours, and so on, until the entire +network knows about any change. + +[diagram1]: images/top-diag1.png "Diagram 1" + ### Encapsulation When the weave router forwards packets, the encapsulation looks @@ -95,6 +105,108 @@ the MAC. This way weave peers never need to exchange the MAC addresses of clients and need not take any special action for ARP traffic and MAC discovery. +### Topology Communication + +Topology is communicated over the TCP links between peers. +There are two message types: + +##### FetchAll +This carries no payload. The receiver responds with the entire +topology model as the receiver has it. FetchAll is sent: + + * when a new connection is established, by the peer that initiated the connection + * when an update is received that references a peer that the receiver does not know + * periodically, on a timer, in case any updates have been missed + +##### Update +This carries a topology payload. This is sent: + + * upon receipt of a FetchAll message, as above, + * when a connection is added - the update will contain the two peers +that have just connected + * when a connection is deleted - the update will contain just the peer +that lost the connection + +The +receiver merges it with its own topology model. If the payload is a +subset of the receiver's topology, no further action is +taken. Otherwise, the receiver sends out to all its connections an +"improved" update: + + - elements which the original payload added to the + receiver are included + - elements which the original payload updated in the + receiver are included + - elements which are equal between the receiver and + the payload are not included + - elements where the payload was older than the + receiver's version are updated + +If the update mentions a peer that the receiver does not know, +then the entire update is rejected and the receiver will send a +FetchAll message back to the sender. + +#### Message details +A topology update message is laid out like this: + + +-----------------------------------+ + | Peer 1: Name | + +-----------------------------------+ + | Peer 1: UID | + +-----------------------------------+ + | Peer 1: Version number | + +-----------------------------------+ + | Peer 1: List of connections | + +-----------------------------------+ + | ... | + +-----------------------------------+ + | Peer N: Name | + +-----------------------------------+ + | Peer N: UID | + +-----------------------------------+ + | Peer N: Version number | + +-----------------------------------+ + | Peer N: List of connections | + +-----------------------------------+ + +Each List of connections is encapsulated as a byte buffer, within +which the structure is: + + +-----------------------------------+ + | Connection 1: Remote Peer Name | + +-----------------------------------+ + | Connection 1: Remote IP address | + +-----------------------------------+ + | Connection 2: Remote Peer Name | + +-----------------------------------+ + | Connection 2: Remote IP address | + +-----------------------------------+ + | ... | + +-----------------------------------+ + | Connection N: Remote Peer Name | + +-----------------------------------+ + | Connection N: Remote IP address | + +-----------------------------------+ + +#### Removal of peers +If a peer, after receiving a topology update, sees that another peer +no longer has any connections within the network, it will drop all +knowledge of that second peer. + + +#### Out-of-date topology +The peer-to-peer passing of updates is not instantaneous, so it is +very posisble for a node elsewhere in the network to have an +out-of-date view. + +If the destination peer for a packet is still reachable, then +out-of-date topology can result in it taking a less efficient route. + +If the out-of-date topology makes it look as if the destination peer +is not reachable, then the packet will be dropped. For most protocols +(e.g. TCP), the transmission will be retried a short time later, by +which time the topology should have updated. + ### Crypto Weave can be configured to encrypt both the data passing over the TCP diff --git a/site/images/top-diag1.png b/site/images/top-diag1.png new file mode 100644 index 0000000000000000000000000000000000000000..52235b16cb7f03e3a9f1d0c8583892b771ebcf99 GIT binary patch literal 9373 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