diff options
-rw-r--r-- | draft-summermatter-set-union.xml | 302 | ||||
-rw-r--r-- | statemaschine/full_diag.jpg | bin | 0 -> 160098 bytes | |||
-rw-r--r-- | statemaschine/full_state_maschine.xml | 1 |
3 files changed, 275 insertions, 28 deletions
diff --git a/draft-summermatter-set-union.xml b/draft-summermatter-set-union.xml index bbe1b2c..67aacf6 100644 --- a/draft-summermatter-set-union.xml +++ b/draft-summermatter-set-union.xml | |||
@@ -187,9 +187,30 @@ | |||
187 | 187 | ||
188 | <section anchor="modeofoperation" numbered="true" toc="default"> | 188 | <section anchor="modeofoperation" numbered="true" toc="default"> |
189 | <name>Mode of operation</name> | 189 | <name>Mode of operation</name> |
190 | <t> | ||
191 | The set union protocol uses the above discussed topics Invertible Bloom Filter and Strata Estimators. | ||
192 | Depending on the state of the two sets there are different strategies or operation modes how to efficiently | ||
193 | determinate missing elements in two sets of two peers. | ||
194 | </t> | ||
190 | <section anchor="modeofoperation_full-sync-client-with-bigger-set" numbered="true" toc="default"> | 195 | <section anchor="modeofoperation_full-sync-client-with-bigger-set" numbered="true" toc="default"> |
191 | <name>Full sync mode</name> | 196 | <name>Full sync mode</name> |
192 | <t>--- TEXT HERE ---</t> | 197 | <t> |
198 | The simples mode is the full sync mode. The idea is that if the difference between the sets of the two | ||
199 | peers exceeds a certain threshold the overhead of determinate which elements are different overweight's | ||
200 | the overhead of sending the complete set. In this case its more efficient to just exchange the full set. | ||
201 | </t> | ||
202 | <t> | ||
203 | After the initiating peer (Client) opened a connection to the other peer (Server) the Server answers | ||
204 | with a SE(C) of his set and changes to the "Expecting IBF" state. When the client receives the SE(C) | ||
205 | from the server and the client set size is smaller or equal to the set size of the server the client | ||
206 | changes from the Expect SE State to Full Sending State and starts sending Full element requests containing the set | ||
207 | of the client. | ||
208 | If the set size of the client is larger than the servers set size the client changes into Full Receiving | ||
209 | (HINT: EXPECT IBF in code) mode an sends a Request Full message to the server. | ||
210 | </t> | ||
211 | <t> | ||
212 | If the Server receives | ||
213 | </t> | ||
193 | </section> | 214 | </section> |
194 | <section anchor="modeofoperation_individual-elements" numbered="true" toc="default"> | 215 | <section anchor="modeofoperation_individual-elements" numbered="true" toc="default"> |
195 | <name>Individual element sync mode</name> | 216 | <name>Individual element sync mode</name> |
@@ -412,11 +433,43 @@ | |||
412 | <section anchor="messages_offer_description" numbered="true" toc="default"> | 433 | <section anchor="messages_offer_description" numbered="true" toc="default"> |
413 | <name>Description</name> | 434 | <name>Description</name> |
414 | <t> | 435 | <t> |
415 | Some description what this messages does | 436 | The offer message tells the other peer which hashes match a given IBF key. |
437 | This is needed to enable the peer to send a demand for a element that is missing | ||
438 | in the set. | ||
439 | |||
416 | </t> | 440 | </t> |
417 | </section> | 441 | </section> |
418 | <section anchor="messages_offer_structure" numbered="true" toc="default"> | 442 | <section anchor="messages_offer_structure" numbered="true" toc="default"> |
419 | <name>Structure</name> | 443 | <name>Structure</name> |
444 | <figure anchor="figure_offer"> | ||
445 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
446 | 0 8 16 24 32 40 48 56 | ||
447 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
448 | | MSG SIZE | MSG TYPE | GNUNET HASH | ||
449 | +-----+-----+-----+-----+ | ||
450 | / / | ||
451 | / / | ||
452 | ]]></artwork> | ||
453 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
454 | </figure> | ||
455 | <t>where:</t> | ||
456 | <dl> | ||
457 | <dt>MSG SIZE</dt> | ||
458 | <dd> | ||
459 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
460 | of the message. | ||
461 | </dd> | ||
462 | <dt>MSG TYPE</dt> | ||
463 | <dd> | ||
464 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
465 | in the GNUNET Protocol. For this message the number is 562. | ||
466 | |||
467 | </dd> | ||
468 | <dt>GNUNET HASH</dt> | ||
469 | <dd> | ||
470 | is a 512-bit GNUNET Hash of the element that is requested with a inquiry message. | ||
471 | </dd> | ||
472 | </dl> | ||
420 | </section> | 473 | </section> |
421 | </section> | 474 | </section> |
422 | 475 | ||
@@ -427,11 +480,41 @@ | |||
427 | <section anchor="messages_inquiry_description" numbered="true" toc="default"> | 480 | <section anchor="messages_inquiry_description" numbered="true" toc="default"> |
428 | <name>Description</name> | 481 | <name>Description</name> |
429 | <t> | 482 | <t> |
430 | Some description what this messages does | 483 | The Inquiry message tells the other peer to send an offer containing the element hash for the given Key of the IBF. |
484 | NOTE: HERE IS AN IMPLEMENTATION BUG UNNECESSARY 32-BIT PADDING! | ||
431 | </t> | 485 | </t> |
432 | </section> | 486 | </section> |
433 | <section anchor="messages_inquiry_structure" numbered="true" toc="default"> | 487 | <section anchor="messages_inquiry_structure" numbered="true" toc="default"> |
434 | <name>Structure</name> | 488 | <name>Structure</name> |
489 | <figure anchor="figure_inquiry"> | ||
490 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
491 | 0 8 16 24 32 40 48 56 | ||
492 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
493 | | MSG SIZE | MSG TYPE | SALT | | ||
494 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
495 | | IBF KEY | | ||
496 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
497 | ]]></artwork> | ||
498 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
499 | </figure> | ||
500 | <t>where:</t> | ||
501 | <dl> | ||
502 | <dt>MSG SIZE</dt> | ||
503 | <dd> | ||
504 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
505 | of the message. | ||
506 | </dd> | ||
507 | <dt>MSG TYPE</dt> | ||
508 | <dd> | ||
509 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
510 | in the GNUNET Protocol. For this message the number is 561. | ||
511 | |||
512 | </dd> | ||
513 | <dt>IBF KEY</dt> | ||
514 | <dd> | ||
515 | is a 64-bit unsigned integer that contains the key for which the inquiry is sent. | ||
516 | </dd> | ||
517 | </dl> | ||
435 | </section> | 518 | </section> |
436 | </section> | 519 | </section> |
437 | 520 | ||
@@ -441,11 +524,40 @@ | |||
441 | <section anchor="messages_demand_description" numbered="true" toc="default"> | 524 | <section anchor="messages_demand_description" numbered="true" toc="default"> |
442 | <name>Description</name> | 525 | <name>Description</name> |
443 | <t> | 526 | <t> |
444 | Some description what this messages does | 527 | The Demand message requests the whole element for a defined Hash from the other peer |
445 | </t> | 528 | </t> |
446 | </section> | 529 | </section> |
447 | <section anchor="messages_demand_structure" numbered="true" toc="default"> | 530 | <section anchor="messages_demand_structure" numbered="true" toc="default"> |
448 | <name>Structure</name> | 531 | <name>Structure</name> |
532 | <figure anchor="figure_demand"> | ||
533 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
534 | 0 8 16 24 32 40 48 56 | ||
535 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
536 | | MSG SIZE | MSG TYPE | GNUNET HASH | ||
537 | +-----+-----+-----+-----+ | ||
538 | / / | ||
539 | / / | ||
540 | ]]></artwork> | ||
541 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
542 | </figure> | ||
543 | <t>where:</t> | ||
544 | <dl> | ||
545 | <dt>MSG SIZE</dt> | ||
546 | <dd> | ||
547 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
548 | of the message. | ||
549 | </dd> | ||
550 | <dt>MSG TYPE</dt> | ||
551 | <dd> | ||
552 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
553 | in the GNUNET Protocol. For this message the number is 560. | ||
554 | |||
555 | </dd> | ||
556 | <dt>GNUNET HASH</dt> | ||
557 | <dd> | ||
558 | is a 512-bit GNUNET Hash of the element that is demanded. | ||
559 | </dd> | ||
560 | </dl> | ||
449 | </section> | 561 | </section> |
450 | </section> | 562 | </section> |
451 | 563 | ||
@@ -455,11 +567,34 @@ | |||
455 | <section anchor="messages_done_description" numbered="true" toc="default"> | 567 | <section anchor="messages_done_description" numbered="true" toc="default"> |
456 | <name>Description</name> | 568 | <name>Description</name> |
457 | <t> | 569 | <t> |
458 | Some description what this messages does | 570 | The done message signals to the other peer that set operation is done |
459 | </t> | 571 | </t> |
460 | </section> | 572 | </section> |
461 | <section anchor="messages_done_structure" numbered="true" toc="default"> | 573 | <section anchor="messages_done_structure" numbered="true" toc="default"> |
462 | <name>Structure</name> | 574 | <name>Structure</name> |
575 | <figure anchor="figure_done"> | ||
576 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
577 | 0 8 16 24 32 | ||
578 | +-----+-----+-----+-----+ | ||
579 | | MSG SIZE | MSG TYPE | | ||
580 | +-----+-----+-----+-----+ | ||
581 | ]]></artwork> | ||
582 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
583 | </figure> | ||
584 | <t>where:</t> | ||
585 | <dl> | ||
586 | <dt>MSG SIZE</dt> | ||
587 | <dd> | ||
588 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
589 | of the message. | ||
590 | </dd> | ||
591 | <dt>MSG TYPE</dt> | ||
592 | <dd> | ||
593 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
594 | in the GNUNET Protocol. For this message the number is 568. | ||
595 | |||
596 | </dd> | ||
597 | </dl> | ||
463 | </section> | 598 | </section> |
464 | </section> | 599 | </section> |
465 | 600 | ||
@@ -469,11 +604,34 @@ | |||
469 | <section anchor="messages_full_done_description" numbered="true" toc="default"> | 604 | <section anchor="messages_full_done_description" numbered="true" toc="default"> |
470 | <name>Description</name> | 605 | <name>Description</name> |
471 | <t> | 606 | <t> |
472 | Some description what this messages does | 607 | Signals to the other peer that all elements of the set have been sent. |
473 | </t> | 608 | </t> |
474 | </section> | 609 | </section> |
475 | <section anchor="messages_full_done_structure" numbered="true" toc="default"> | 610 | <section anchor="messages_full_done_structure" numbered="true" toc="default"> |
476 | <name>Structure</name> | 611 | <name>Structure</name> |
612 | <figure anchor="figure_full_done"> | ||
613 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
614 | 0 8 16 24 32 | ||
615 | +-----+-----+-----+-----+ | ||
616 | | MSG SIZE | MSG TYPE | | ||
617 | +-----+-----+-----+-----+ | ||
618 | ]]></artwork> | ||
619 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
620 | </figure> | ||
621 | <t>where:</t> | ||
622 | <dl> | ||
623 | <dt>MSG SIZE</dt> | ||
624 | <dd> | ||
625 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
626 | of the message. | ||
627 | </dd> | ||
628 | <dt>MSG TYPE</dt> | ||
629 | <dd> | ||
630 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
631 | in the GNUNET Protocol. For this message the number is 570. | ||
632 | |||
633 | </dd> | ||
634 | </dl> | ||
477 | </section> | 635 | </section> |
478 | </section> | 636 | </section> |
479 | 637 | ||
@@ -483,11 +641,34 @@ | |||
483 | <section anchor="messages_request_full_description" numbered="true" toc="default"> | 641 | <section anchor="messages_request_full_description" numbered="true" toc="default"> |
484 | <name>Description</name> | 642 | <name>Description</name> |
485 | <t> | 643 | <t> |
486 | Some description what this messages does | 644 | Initiates a full sync and tells the other peer to send all elements. |
487 | </t> | 645 | </t> |
488 | </section> | 646 | </section> |
489 | <section anchor="messages_request_full_structure" numbered="true" toc="default"> | 647 | <section anchor="messages_request_full_structure" numbered="true" toc="default"> |
490 | <name>Structure</name> | 648 | <name>Structure</name> |
649 | <figure anchor="figure_request_full"> | ||
650 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
651 | 0 8 16 24 32 | ||
652 | +-----+-----+-----+-----+ | ||
653 | | MSG SIZE | MSG TYPE | | ||
654 | +-----+-----+-----+-----+ | ||
655 | ]]></artwork> | ||
656 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
657 | </figure> | ||
658 | <t>where:</t> | ||
659 | <dl> | ||
660 | <dt>MSG SIZE</dt> | ||
661 | <dd> | ||
662 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
663 | of the message. | ||
664 | </dd> | ||
665 | <dt>MSG TYPE</dt> | ||
666 | <dd> | ||
667 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
668 | in the GNUNET Protocol. For this message the number is 559. | ||
669 | |||
670 | </dd> | ||
671 | </dl> | ||
491 | </section> | 672 | </section> |
492 | </section> | 673 | </section> |
493 | 674 | ||
@@ -497,11 +678,45 @@ | |||
497 | <section anchor="messages_se_description" numbered="true" toc="default"> | 678 | <section anchor="messages_se_description" numbered="true" toc="default"> |
498 | <name>Description</name> | 679 | <name>Description</name> |
499 | <t> | 680 | <t> |
500 | Some description what this messages does | 681 | The Strata Estimator message contains the strata estimator. |
501 | </t> | 682 | </t> |
502 | </section> | 683 | </section> |
503 | <section anchor="messages_se_structure" numbered="true" toc="default"> | 684 | <section anchor="messages_se_structure" numbered="true" toc="default"> |
504 | <name>Structure</name> | 685 | <name>Structure</name> |
686 | <figure anchor="figure_se"> | ||
687 | <artwork name="" type="" align="left" alt=""><![CDATA[ | ||
688 | 0 8 16 24 32 40 48 56 | ||
689 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
690 | | MSG SIZE | MSG TYPE | SETSIZE | ||
691 | +-----+-----+-----+-----+-----+-----+-----+-----+ | ||
692 | SETSIZE | SE-SLICES | ||
693 | +-----+-----+-----+-----+ | ||
694 | / / | ||
695 | / / | ||
696 | ]]></artwork> | ||
697 | <!-- <postamble>which is a very simple example.</postamble>--> | ||
698 | </figure> | ||
699 | <t>where:</t> | ||
700 | <dl> | ||
701 | <dt>MSG SIZE</dt> | ||
702 | <dd> | ||
703 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
704 | of the message. | ||
705 | </dd> | ||
706 | <dt>MSG TYPE</dt> | ||
707 | <dd> | ||
708 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
709 | in the GNUNET Protocol. For this message the number is 564. | ||
710 | </dd> | ||
711 | <dt>SETSIZE</dt> | ||
712 | <dd> | ||
713 | is a 64-bit unsigned integer that is defined by the size of the set the SE is | ||
714 | </dd> | ||
715 | <dt>SE-SLICES</dt> | ||
716 | <dd> | ||
717 | is variable in size and contains the same structure as the IBF-SLICES field in the IBF message. | ||
718 | </dd> | ||
719 | </dl> | ||
505 | </section> | 720 | </section> |
506 | </section> | 721 | </section> |
507 | 722 | ||
@@ -511,12 +726,10 @@ | |||
511 | <section anchor="messages_sec_description" numbered="true" toc="default"> | 726 | <section anchor="messages_sec_description" numbered="true" toc="default"> |
512 | <name>Description</name> | 727 | <name>Description</name> |
513 | <t> | 728 | <t> |
514 | Some description what this messages does | 729 | The Strata Estimator Compressed is the same message as the Strata Estimator message but the |
730 | field "SE-SLICES" is with gzip compressed and the MSG TYPE is 565. | ||
515 | </t> | 731 | </t> |
516 | </section> | 732 | </section> |
517 | <section anchor="messages_sec_structure" numbered="true" toc="default"> | ||
518 | <name>Structure</name> | ||
519 | </section> | ||
520 | </section> | 733 | </section> |
521 | 734 | ||
522 | 735 | ||
@@ -526,26 +739,59 @@ | |||
526 | <section anchor="messages_full_element_description" numbered="true" toc="default"> | 739 | <section anchor="messages_full_element_description" numbered="true" toc="default"> |
527 | <name>Description</name> | 740 | <name>Description</name> |
528 | <t> | 741 | <t> |
529 | Some description what this messages does | 742 | The Full Element message sends a set of elements because of a peer full sync operation mode. |
530 | </t> | 743 | </t> |
531 | </section> | 744 | </section> |
532 | <section anchor="messages_full_element_structure" numbered="true" toc="default"> | 745 | <section anchor="messages_full_element_structure" numbered="true" toc="default"> |
533 | <name>Structure</name> | 746 | <name>Structure</name> |
534 | </section> | 747 | <figure anchor="figure_full_element"> |
535 | </section> | 748 | <artwork name="" type="" align="left" alt=""><![CDATA[ |
536 | 749 | 0 8 16 24 32 40 48 56 | |
537 | 750 | +-----+-----+-----+-----+-----+-----+-----+-----+ | |
538 | <section anchor="messages_element_requests" numbered="true" toc="default"> | 751 | | MSG SIZE | MSG TYPE | E TYPE | PADDING | |
539 | <name>Element Requests</name> | 752 | +-----+-----+-----+-----+-----+-----+-----+-----+ |
540 | 753 | | SIZE | AE TYPE | DATA | |
541 | <section anchor="messages_element_requests_description" numbered="true" toc="default"> | 754 | +-----+-----+-----+-----+ |
542 | <name>Description</name> | 755 | / / |
543 | <t> | 756 | / / |
544 | Some description what this messages does | 757 | ]]></artwork> |
545 | </t> | 758 | <!-- <postamble>which is a very simple example.</postamble>--> |
546 | </section> | 759 | </figure> |
547 | <section anchor="messages_element_requests_structure" numbered="true" toc="default"> | 760 | <t>where:</t> |
548 | <name>Structure</name> | 761 | <dl> |
762 | <dt>MSG SIZE</dt> | ||
763 | <dd> | ||
764 | is a 16-bit unsigned integer of the GNUNET header which describes the size | ||
765 | of the message. | ||
766 | </dd> | ||
767 | <dt>MSG TYPE</dt> | ||
768 | <dd> | ||
769 | is a 16-bit unsigned integer of the GNUNET header which contains a message number | ||
770 | in the GNUNET Protocol. For this message the number is 571. | ||
771 | </dd> | ||
772 | <dt>E TYPE</dt> | ||
773 | <dd> | ||
774 | element type is a 16-bit unsigned integer witch defines the element type for | ||
775 | the application. | ||
776 | </dd> | ||
777 | <dt>PADDING</dt> | ||
778 | <dd> | ||
779 | is 16-bit always set to zero | ||
780 | </dd> | ||
781 | <dt>E SIZE</dt> | ||
782 | <dd> | ||
783 | element size is 16-bit unsigned integer that signals the size of the elements data part. | ||
784 | </dd> | ||
785 | <dt>AE TYPE</dt> | ||
786 | <dd> | ||
787 | application specific element type is a 16-bit unsigned integer that is needed to identify | ||
788 | the type of element that is in the data field | ||
789 | </dd> | ||
790 | <dt>DATA</dt> | ||
791 | <dd> | ||
792 | is a field with variable length that contains the data of the element. | ||
793 | </dd> | ||
794 | </dl> | ||
549 | </section> | 795 | </section> |
550 | </section> | 796 | </section> |
551 | 797 | ||
diff --git a/statemaschine/full_diag.jpg b/statemaschine/full_diag.jpg new file mode 100644 index 0000000..3c89533 --- /dev/null +++ b/statemaschine/full_diag.jpg | |||
Binary files differ | |||
diff --git a/statemaschine/full_state_maschine.xml b/statemaschine/full_state_maschine.xml new file mode 100644 index 0000000..e850445 --- /dev/null +++ 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 | |||