commit ba17f27036edac9416753f41a3c26a09f12f1ada
parent 52ad87a6bd5fc5428b772dc9047e2660d84d8350
Author: Elias Summermatter <elias.summermatter@seccom.ch>
Date: Thu, 3 Dec 2020 16:07:48 +0100
Added statemaschine digs and some more text
Diffstat:
3 files changed, 276 insertions(+), 28 deletions(-)
diff --git a/draft-summermatter-set-union.xml b/draft-summermatter-set-union.xml
@@ -187,9 +187,30 @@
<section anchor="modeofoperation" numbered="true" toc="default">
<name>Mode of operation</name>
+ <t>
+ The set union protocol uses the above discussed topics Invertible Bloom Filter and Strata Estimators.
+ Depending on the state of the two sets there are different strategies or operation modes how to efficiently
+ determinate missing elements in two sets of two peers.
+ </t>
<section anchor="modeofoperation_full-sync-client-with-bigger-set" numbered="true" toc="default">
<name>Full sync mode</name>
- <t>--- TEXT HERE ---</t>
+ <t>
+ The simples mode is the full sync mode. The idea is that if the difference between the sets of the two
+ peers exceeds a certain threshold the overhead of determinate which elements are different overweight's
+ the overhead of sending the complete set. In this case its more efficient to just exchange the full set.
+ </t>
+ <t>
+ After the initiating peer (Client) opened a connection to the other peer (Server) the Server answers
+ with a SE(C) of his set and changes to the "Expecting IBF" state. When the client receives the SE(C)
+ from the server and the client set size is smaller or equal to the set size of the server the client
+ changes from the Expect SE State to Full Sending State and starts sending Full element requests containing the set
+ of the client.
+ If the set size of the client is larger than the servers set size the client changes into Full Receiving
+ (HINT: EXPECT IBF in code) mode an sends a Request Full message to the server.
+ </t>
+ <t>
+ If the Server receives
+ </t>
</section>
<section anchor="modeofoperation_individual-elements" numbered="true" toc="default">
<name>Individual element sync mode</name>
@@ -412,11 +433,43 @@
<section anchor="messages_offer_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The offer message tells the other peer which hashes match a given IBF key.
+ This is needed to enable the peer to send a demand for a element that is missing
+ in the set.
+
</t>
</section>
<section anchor="messages_offer_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_offer">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE | GNUNET HASH
+ +-----+-----+-----+-----+
+ / /
+ / /
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 562.
+
+ </dd>
+ <dt>GNUNET HASH</dt>
+ <dd>
+ is a 512-bit GNUNET Hash of the element that is requested with a inquiry message.
+ </dd>
+ </dl>
</section>
</section>
@@ -427,11 +480,41 @@
<section anchor="messages_inquiry_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The Inquiry message tells the other peer to send an offer containing the element hash for the given Key of the IBF.
+ NOTE: HERE IS AN IMPLEMENTATION BUG UNNECESSARY 32-BIT PADDING!
</t>
</section>
<section anchor="messages_inquiry_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_inquiry">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE | SALT |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | IBF KEY |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 561.
+
+ </dd>
+ <dt>IBF KEY</dt>
+ <dd>
+ is a 64-bit unsigned integer that contains the key for which the inquiry is sent.
+ </dd>
+ </dl>
</section>
</section>
@@ -441,11 +524,40 @@
<section anchor="messages_demand_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The Demand message requests the whole element for a defined Hash from the other peer
</t>
</section>
<section anchor="messages_demand_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_demand">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE | GNUNET HASH
+ +-----+-----+-----+-----+
+ / /
+ / /
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 560.
+
+ </dd>
+ <dt>GNUNET HASH</dt>
+ <dd>
+ is a 512-bit GNUNET Hash of the element that is demanded.
+ </dd>
+ </dl>
</section>
</section>
@@ -455,11 +567,34 @@
<section anchor="messages_done_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The done message signals to the other peer that set operation is done
</t>
</section>
<section anchor="messages_done_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_done">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32
+ +-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE |
+ +-----+-----+-----+-----+
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 568.
+
+ </dd>
+ </dl>
</section>
</section>
@@ -469,11 +604,34 @@
<section anchor="messages_full_done_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ Signals to the other peer that all elements of the set have been sent.
</t>
</section>
<section anchor="messages_full_done_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_full_done">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32
+ +-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE |
+ +-----+-----+-----+-----+
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 570.
+
+ </dd>
+ </dl>
</section>
</section>
@@ -483,11 +641,34 @@
<section anchor="messages_request_full_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ Initiates a full sync and tells the other peer to send all elements.
</t>
</section>
<section anchor="messages_request_full_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_request_full">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32
+ +-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE |
+ +-----+-----+-----+-----+
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 559.
+
+ </dd>
+ </dl>
</section>
</section>
@@ -497,11 +678,45 @@
<section anchor="messages_se_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The Strata Estimator message contains the strata estimator.
</t>
</section>
<section anchor="messages_se_structure" numbered="true" toc="default">
<name>Structure</name>
+ <figure anchor="figure_se">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE | SETSIZE
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ SETSIZE | SE-SLICES
+ +-----+-----+-----+-----+
+ / /
+ / /
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 564.
+ </dd>
+ <dt>SETSIZE</dt>
+ <dd>
+ is a 64-bit unsigned integer that is defined by the size of the set the SE is
+ </dd>
+ <dt>SE-SLICES</dt>
+ <dd>
+ is variable in size and contains the same structure as the IBF-SLICES field in the IBF message.
+ </dd>
+ </dl>
</section>
</section>
@@ -511,12 +726,10 @@
<section anchor="messages_sec_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The Strata Estimator Compressed is the same message as the Strata Estimator message but the
+ field "SE-SLICES" is with gzip compressed and the MSG TYPE is 565.
</t>
</section>
- <section anchor="messages_sec_structure" numbered="true" toc="default">
- <name>Structure</name>
- </section>
</section>
@@ -526,26 +739,59 @@
<section anchor="messages_full_element_description" numbered="true" toc="default">
<name>Description</name>
<t>
- Some description what this messages does
+ The Full Element message sends a set of elements because of a peer full sync operation mode.
</t>
</section>
<section anchor="messages_full_element_structure" numbered="true" toc="default">
<name>Structure</name>
- </section>
- </section>
-
-
- <section anchor="messages_element_requests" numbered="true" toc="default">
- <name>Element Requests</name>
-
- <section anchor="messages_element_requests_description" numbered="true" toc="default">
- <name>Description</name>
- <t>
- Some description what this messages does
- </t>
- </section>
- <section anchor="messages_element_requests_structure" numbered="true" toc="default">
- <name>Structure</name>
+ <figure anchor="figure_full_element">
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+ 0 8 16 24 32 40 48 56
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | MSG SIZE | MSG TYPE | E TYPE | PADDING |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | SIZE | AE TYPE | DATA
+ +-----+-----+-----+-----+
+ / /
+ / /
+ ]]></artwork>
+ <!-- <postamble>which is a very simple example.</postamble>-->
+ </figure>
+ <t>where:</t>
+ <dl>
+ <dt>MSG SIZE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which describes the size
+ of the message.
+ </dd>
+ <dt>MSG TYPE</dt>
+ <dd>
+ is a 16-bit unsigned integer of the GNUNET header which contains a message number
+ in the GNUNET Protocol. For this message the number is 571.
+ </dd>
+ <dt>E TYPE</dt>
+ <dd>
+ element type is a 16-bit unsigned integer witch defines the element type for
+ the application.
+ </dd>
+ <dt>PADDING</dt>
+ <dd>
+ is 16-bit always set to zero
+ </dd>
+ <dt>E SIZE</dt>
+ <dd>
+ element size is 16-bit unsigned integer that signals the size of the elements data part.
+ </dd>
+ <dt>AE TYPE</dt>
+ <dd>
+ application specific element type is a 16-bit unsigned integer that is needed to identify
+ the type of element that is in the data field
+ </dd>
+ <dt>DATA</dt>
+ <dd>
+ is a field with variable length that contains the data of the element.
+ </dd>
+ </dl>
</section>
</section>
diff --git a/statemaschine/full_diag.jpg b/statemaschine/full_diag.jpg
Binary files differ.
diff --git a/statemaschine/full_state_maschine.xml b/statemaschine/full_state_maschine.xml
@@ -0,0 +1 @@
+<mxfile host="embed.diagrams.net" modified="2020-12-03T15:05:28.830Z" agent="5.0 (X11)" etag="UdxWVrhVWdTqgWMnNU7v" version="13.9.9" type="embed"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
+\ No newline at end of file