lsd0004

LSD0004: R5N Distributed Hash Table
Log | Files | Refs

commit 9019e66771e402aa4d4e2dcf6ebaec31fdf46331
parent bfc35b90931460b506f797f4104d6b411311449c
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Mon, 15 Jul 2024 12:39:52 +0200

more wording and reorder

Diffstat:
Mdraft-schanzen-r5n.xml | 75+++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 41 insertions(+), 34 deletions(-)

diff --git a/draft-schanzen-r5n.xml b/draft-schanzen-r5n.xml @@ -264,8 +264,14 @@ <dt>Block Type</dt> <dd> A unique 32-bit value identifying the data format of a <em>block</em>. - <em>Block types</em> are either private or registered in the GANA block type registry (see - <xref target="gana_block_type"/>). + <em>Block types</em> may be public or private. + Applications that require application-specific + block payloads are expected to register a + block type in the GANA Block-Type registry + (<xref target="gana_block_type"/>) and provide a specification + of the associated block operations (<xref + target="block_functions"/>) to implementors of + R<sup>5</sup>N. </dd> <dt>Bootstrapping</dt> <dd> @@ -541,14 +547,8 @@ R<sup>5</sup>N implementation are divided into routing (<xref target="routing"/>), message processing (<xref target="p2p_messages"/>) and - block processing (<xref target="blockstorage"/>). - Applications that require application-specific - block payloads are expected to register a - block type in the GANA Block Type registry - (<xref target="gana_block_type"/>) and provide a specification - of the associated block operations (<xref - target="block_functions"/>) to implementors of - R<sup>5</sup>N. <xref target="figure_r5n_arch"/> illustrates + block storage (<xref target="blockstorage"/>). + <xref target="figure_r5n_arch"/> illustrates the architectural overview of R<sup>5</sup>N. </t> <figure anchor="figure_r5n_arch" title="The R5N architecture."> @@ -589,13 +589,15 @@ Connectivity | |Underlay| |Underlay| | Underlay | ... addressed in a specific underlay is out of scope of this document. For example, a peer may have a TCP/IP address, or expose a QUIC endpoint, or both. While the specific addressing options - and mechanisms are out of scope, it is necessary to define a + and mechanisms are out of scope for this document, + it is necessary to define a universal addressing format in order to facilitate the distribution of address information to other - peers in the DHT overlay. This standardized format + peers in the DHT overlay. + This standardized format is the HELLO block (described in <xref - target="hello_block"/>), which contains sets of addresses. If - the address is a URI, it may indicate which + target="hello_block"/>), which contains sets of addresses. + If the address is a URI, it may indicate which underlay understands the respective address. </t> <!-- @@ -633,7 +635,7 @@ Connectivity | |Underlay| |Underlay| | Underlay | ... It is expected that the underlay provides basic mechanisms to manage peer connectivity and addressing. The essence of the underlay interface is - captured by the following set of API calls: + captured by the following set of API calls: </t> <dl> <dt> @@ -700,10 +702,10 @@ Connectivity | |Underlay| |Underlay| | Underlay | ... This call must return an estimate of the network size. The resulting <tt>L2NSE</tt> value must be the base-2 logarithm of the <em>estimated</em> number of peers in the network. - It is used by the routing algorithm. If the underlay does + This estimate is used by the routing algorithm. If the underlay does not support a protocol for network size estimation (such as <xref target="NSE"/>) the value is assumed to be provided as - a configuration parameter to the implementation. + a configuration parameter to the underlay implementation. </dd> </dl> <t> @@ -865,28 +867,32 @@ Connectivity | |Underlay| |Underlay| | Underlay | ... <section anchor="find_peer"> <name>Peer Discovery</name> <t> - Initially, implementations depend upon either the underlay - providing at least one initial connection to a + Initially, implementations require at least one initial connection to a neighbor (signalled through - <tt>PEER_CONNECTED</tt>), or the application or - even end-user providing at least one working <tt>HELLO</tt> - which is then in turn used to call <tt>TRY_CONNECT()</tt> on - the underlay in order to trigger a subsequent - <tt>PEER_CONNECTED</tt> signal from the underlay - interface. This is commonly achieved through the - configuration of hardcoded bootstrap peers or bootstrap - servers either for the underlay or the R<sup>5</sup>N - implementation. The first connection <bcp14>SHOULD</bcp14> be established + <tt>PEER_CONNECTED</tt>). + The first connection <bcp14>SHOULD</bcp14> be established by an out-of-band exchange of the information from a <tt>HELLO</tt> block. + This is commonly achieved through the + configuration of hardcoded bootstrap peers or bootstrap + servers either for the underlay or the R<sup>5</sup>N + implementation. + </t> + <t> Implementations <bcp14>MAY</bcp14> have other means to achieve this initial connection. + For example, implementations could allow the application or + even end-user to provide a working <tt>HELLO</tt> + which is then in turn used to call <tt>TRY_CONNECT()</tt> on + the underlay in order to trigger a subsequent + <tt>PEER_CONNECTED</tt> signal from the underlay + interface. <xref target="hello_url"/> specifies a URL format for encoding HELLO blocks as text strings. The URL format thus provides a portable, human-readable, text-based serialization format that can, for example, be - encoded into a QR code for dissemination. HELLO URLs - <bcp14>SHOULD</bcp14> be supported by implementations for + encoded into a QR code for dissemination. + HELLO URLs <bcp14>SHOULD</bcp14> be supported by implementations for both import and export of <tt>HELLOs</tt>. </t> <t> @@ -1108,7 +1114,7 @@ BEGIN rounded probabilistically to the nearest discrete value, using the fraction as the probability for rounding up. - This probabillistic rounding is necessary to achieve + This probabilistic rounding is necessary to achieve the statistically expected value of the replication level and average number of peers a message is forwarded to. </t> @@ -1124,12 +1130,13 @@ BEGIN towards the key is done hop-by-hop using the routing table and the query hash. The pending table is used to route responses back to the originator. In the pending table each peer - primarily associates a query hash with the associated + primarily maps a query hash to the associated originator of the request. The pending table <bcp14>MUST</bcp14> store entries for the last <tt>MAX_RECENT</tt> requests - the peer has encountered. To ensure that the peer does + the peer has encountered. + To ensure that the peer does not run out of memory, information about older requests - is discarded. + <bcp14>MAY</bcp14> be discarded. The value of <tt>MAX_RECENT</tt> <bcp14>MAY</bcp14> be configurable at the host level to use available memory resources without conflicting with other system requirements and limitations.