diff options
Diffstat (limited to 'draft-schanzen-r5n.xml')
-rw-r--r-- | draft-schanzen-r5n.xml | 110 |
1 files changed, 59 insertions, 51 deletions
diff --git a/draft-schanzen-r5n.xml b/draft-schanzen-r5n.xml index d1039c3..6bd13ed 100644 --- a/draft-schanzen-r5n.xml +++ b/draft-schanzen-r5n.xml | |||
@@ -5,8 +5,8 @@ | |||
5 | <!ENTITY RFC3629 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml"> | 5 | <!ENTITY RFC3629 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml"> |
6 | <!ENTITY RFC3686 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3686.xml"> | 6 | <!ENTITY RFC3686 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3686.xml"> |
7 | <!ENTITY RFC3826 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3826.xml"> | 7 | <!ENTITY RFC3826 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3826.xml"> |
8 | <!-- <!ENTITY RFC3912 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3912.xml"> --> | ||
9 | <!ENTITY RFC3986 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml"> | 8 | <!ENTITY RFC3986 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml"> |
9 | <!ENTITY RFC4634 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4634.xml"> | ||
10 | <!ENTITY RFC4648 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4648.xml"> | 10 | <!ENTITY RFC4648 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4648.xml"> |
11 | <!ENTITY RFC5869 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5869.xml"> | 11 | <!ENTITY RFC5869 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5869.xml"> |
12 | <!ENTITY RFC5890 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5890.xml"> | 12 | <!ENTITY RFC5890 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5890.xml"> |
@@ -240,7 +240,8 @@ Connectivity | |Underlay| |Underlay| | |||
240 | <t> | 240 | <t> |
241 | In the DHT overlay, a node is addressable by its | 241 | In the DHT overlay, a node is addressable by its |
242 | <tt>Node Address</tt>. | 242 | <tt>Node Address</tt>. |
243 | The <tt>Node Address</tt> is a 512-bit hash of the <tt>Node ID</tt>. | 243 | The <tt>Node Address</tt> is a SHA-512 hash <xref target="RFC4634"/> |
244 | of the <tt>Node ID</tt>. | ||
244 | <!-- FIXME should the node ID be agile? Should the signature then | 245 | <!-- FIXME should the node ID be agile? Should the signature then |
245 | also be agile?--> | 246 | also be agile?--> |
246 | <!--The node public key is the public key of the corresponding | 247 | <!--The node public key is the public key of the corresponding |
@@ -393,66 +394,72 @@ see how we can offer even the most minimal protections against node | |||
393 | procedures and events: | 394 | procedures and events: |
394 | </t> | 395 | </t> |
395 | <dl> | 396 | <dl> |
396 | <dt>NODE_CONNECTED(NodeID, Address)</dt> | 397 | <dt><tt>PEER_CONNECTED(P)</tt></dt> |
397 | <dd> | 398 | <dd> |
398 | is a signal that allows the DHT to react to nodes which connect. | 399 | is a signal that allows the DHT to react to a newly connected peer |
400 | <tt>N</tt>. | ||
399 | Such an event triggers, for example, updates in the | 401 | Such an event triggers, for example, updates in the |
400 | routing table. | 402 | routing table. |
401 | </dd> | 403 | </dd> |
402 | <dt>NODE_DISCONNECTED(NodeID, Address)</dt> | 404 | <dt><tt>PEER_DISCONNECTED(P)</tt></dt> |
403 | <dd> | 405 | <dd> |
404 | is a signal that allows the DHT to react to nodes which disconnect. | 406 | is a signal that allows the DHT to react to a recently disconnected |
407 | peer. | ||
405 | Such an event triggers, for example, updates in the | 408 | Such an event triggers, for example, updates in the |
406 | routing table. | 409 | routing table. |
407 | </dd> | 410 | </dd> |
408 | <dt>TRY_CONNECT(NodeID, Address)</dt> | 411 | <dt><tt>TRY_CONNECT(N, A)</tt></dt> |
409 | <dd> | 412 | <dd> |
410 | A function which allows a node to attempt the establishment of | 413 | A function which allows the local node to attempt the establishment of |
411 | a connection to another node using an address. | 414 | a connection to another node <tt>N</tt> using an address <tt>A</tt>. |
412 | When the connection attempt is successful, information on the new | 415 | When the connection attempt is successful, information on the new |
413 | peer is offered through the <tt>NODE_CONNECTED</tt> signal. | 416 | peer is offered through the <tt>PEER_CONNECTED</tt> signal. |
414 | </dd> | 417 | </dd> |
415 | <dt>HOLD(NodeID)</dt> | 418 | <dt><tt>HOLD(P)</tt></dt> |
416 | <dd> | 419 | <dd> |
417 | A function which tells the underlay to keep a hold on the connection | 420 | A function which tells the underlay to keep a hold on the connection |
418 | to another node. | 421 | to a peer <tt>P</tt>. FIXME what is this needed for? |
419 | </dd> | 422 | </dd> |
420 | <dt>DROP(NodeID)</dt> | 423 | <dt><tt>DROP(P)</tt></dt> |
421 | <dd> | 424 | <dd> |
422 | A function which tells the underlay to drop the connection to another | 425 | A function which tells the underlay to drop the connection to a |
423 | node. | 426 | peer <tt>P</tt>. FIXME what is this needed for? |
424 | </dd> | 427 | </dd> |
425 | <dt>RECEIVE(NodeID, Message)</dt> | 428 | <dt><tt>RECEIVE(P, M)</tt></dt> |
426 | <dd> | 429 | <dd> |
427 | A function or event that allows the node to receive protocol | 430 | A function or event that allows the local node to receive a protocol |
428 | messages as defined in this document from a connected node. | 431 | message <tt>M</tt> as defined in this document from a peer <tt>P</tt>. |
429 | </dd> | 432 | </dd> |
430 | <dt>SEND(NodeID, Message)</dt> | 433 | <dt><tt>SEND(P, M)</tt></dt> |
431 | <dd> | 434 | <dd> |
432 | A function that allows a node to send protocol messages as defined | 435 | A function that allows the local node to send a protocol message |
433 | in this document to a connected node. If call to SEND fails, | 436 | <tt>M</tt> as defined in this document to a peer <tt>P</tt>. |
434 | the message has not been sent. | 437 | If call to SEND fails, the message has not been sent. |
435 | </dd> | 438 | </dd> |
436 | <dt>NETWORK_SIZE_ESTIMATE(N)</dt> | 439 | <dt><tt>NETWORK_SIZE_ESTIMATE(S)</tt></dt> |
437 | <dd> | 440 | <dd> |
438 | A function or event that provides estimates on the network size | 441 | A function or event that provides estimates on the network size |
439 | for use in the DHT routing algorithms. | 442 | <tt>S</tt> for use in the DHT routing algorithms. |
443 | FIXME: What is S and give an example. | ||
440 | </dd> | 444 | </dd> |
441 | <dt>ADDRESS_ADD(NodeID, address)</dt> | 445 | <dt><tt>ADDRESS_ADDED(A)</tt></dt> |
442 | <dd> | 446 | <dd> |
443 | The underlay signals us that an address was added. | 447 | The underlay signals us that an address <tt>A</tt> was added for our |
444 | This information is used, for example, to publish | 448 | local node. |
445 | connectivity as part of the bootstrapping and overlay creation. | 449 | This information is used to advertise |
450 | connectivity information to the local node. | ||
451 | <tt>A</tt> is a string suitable for inclusion in a HELLO payload | ||
452 | <xref target="hello_block"/>. | ||
446 | </dd> | 453 | </dd> |
447 | <dt>ADDRESS_DELETE(NodeID, address)</dt> | 454 | <dt><tt>ADDRESS_DELETED(A)</tt></dt> |
448 | <dd> | 455 | <dd> |
449 | The underlay signals us that an address was removed. | 456 | The underlay signals us that an address <tt>A</tt> was removed. |
450 | This information is used, for example, to publish | 457 | This information is used, for example, to no longer advertise |
451 | connectivity as part of the bootstrapping and overlay creation. | 458 | this address. |
452 | </dd> | 459 | </dd> |
453 | <dt>VERIFY(blob)</dt> | 460 | <dt><tt>VERIFY(blob)</tt></dt> |
454 | <dd> | 461 | <dd> |
455 | Signature verification by underlay. | 462 | Signature verification by underlay. FIXME unclear. Required? |
456 | </dd> | 463 | </dd> |
457 | </dl> | 464 | </dl> |
458 | </section> | 465 | </section> |
@@ -543,14 +550,14 @@ see how we can offer even the most minimal protections against node | |||
543 | the peer <tt>P</tt>. | 550 | the peer <tt>P</tt>. |
544 | In the following, the wire formats of the messages and the required | 551 | In the following, the wire formats of the messages and the required |
545 | processing are detailed. | 552 | processing are detailed. |
546 | The local node ID is referred to as <tt>N</tt>. | 553 | The local node address is referred to as <tt>N</tt>. |
547 | </t> | 554 | </t> |
548 | <section anchor="p2p_bf" numbered="true" toc="default"> | 555 | <section anchor="p2p_bf" numbered="true" toc="default"> |
549 | <name>Bloomfilter</name> | 556 | <name>Bloomfilter</name> |
550 | <t> | 557 | <t> |
551 | In order to prevent circular routes, GET and PUT messages contain | 558 | In order to prevent circular routes, GET and PUT messages contain |
552 | a 128-bit Bloom filter (m=128). The Bloom filter is used to detect duplicate | 559 | a 128-bit Bloom filter (m=128). The Bloom filter is used to detect duplicate |
553 | node IDs along the route. | 560 | node addresses along the route. |
554 | A Bloom filter "bf" is initially empty, consisting only of zeroes. | 561 | A Bloom filter "bf" is initially empty, consisting only of zeroes. |
555 | There are two functions which can be invoked on the Bloom filter: | 562 | There are two functions which can be invoked on the Bloom filter: |
556 | BF-SET(bf, e) and BF-TEST(bf, e) where "e" is an element which is to | 563 | BF-SET(bf, e) and BF-TEST(bf, e) where "e" is an element which is to |
@@ -659,7 +666,7 @@ END | |||
659 | </dd> | 666 | </dd> |
660 | <dt>BLOOMFILTER</dt> | 667 | <dt>BLOOMFILTER</dt> |
661 | <dd> | 668 | <dd> |
662 | A bloomfilter (for node IDs) to stop circular routes. | 669 | A bloomfilter (for node addresses) to stop circular routes. |
663 | </dd> | 670 | </dd> |
664 | <dt>KEY</dt> | 671 | <dt>KEY</dt> |
665 | <dd> | 672 | <dd> |
@@ -669,7 +676,7 @@ END | |||
669 | <dt>PUTPATH</dt> | 676 | <dt>PUTPATH</dt> |
670 | <dd> | 677 | <dd> |
671 | the variable-length PUT path. | 678 | the variable-length PUT path. |
672 | The path consists of a list of PATH_LEN node IDs. | 679 | The path consists of a list of PATH_LEN node addresses. |
673 | </dd> | 680 | </dd> |
674 | <dt>BLOCK</dt> | 681 | <dt>BLOCK</dt> |
675 | <dd> | 682 | <dd> |
@@ -703,12 +710,12 @@ END | |||
703 | it MUST be discarded. | 710 | it MUST be discarded. |
704 | </li> | 711 | </li> |
705 | <li> | 712 | <li> |
706 | The node ID of the sender peer <tt>P</tt> SHOULD be in <tt>BLOOMFILTER</tt>. | 713 | The node address of the sender peer <tt>P</tt> SHOULD be in <tt>BLOOMFILTER</tt>. |
707 | If not, the implementation MAY log an error, but MUST continue. | 714 | If not, the implementation MAY log an error, but MUST continue. |
708 | </li> | 715 | </li> |
709 | <li> | 716 | <li> |
710 | If the <tt>RecordRoute</tt> flag is set in OPTIONS, | 717 | If the <tt>RecordRoute</tt> flag is set in OPTIONS, |
711 | the local node ID MUST be appended to the <tt>PUTPATH</tt> | 718 | the local node address MUST be appended to the <tt>PUTPATH</tt> |
712 | of the message. | 719 | of the message. |
713 | </li> | 720 | </li> |
714 | <li> | 721 | <li> |
@@ -724,9 +731,9 @@ END | |||
724 | number of peers to forward the message to. The implementation MAY | 731 | number of peers to forward the message to. The implementation MAY |
725 | forward to fewer or no peers in order to handle resource constraints | 732 | forward to fewer or no peers in order to handle resource constraints |
726 | such as bandwidth. | 733 | such as bandwidth. |
727 | Finally, the local node ID MUST be added to the | 734 | Finally, the local node address MUST be added to the |
728 | <tt>BLOOMFILTER</tt> of the forwarded message. | 735 | <tt>BLOOMFILTER</tt> of the forwarded message. |
729 | For all peers with node ID <tt>P</tt> chosen to forward the message | 736 | For all peers with node address <tt>P</tt> chosen to forward the message |
730 | to, <tt>SEND(P, PutMessage)</tt> is called. | 737 | to, <tt>SEND(P, PutMessage)</tt> is called. |
731 | </li> | 738 | </li> |
732 | </ol> | 739 | </ol> |
@@ -832,7 +839,7 @@ END | |||
832 | the message MUST be discarded. | 839 | the message MUST be discarded. |
833 | </li> | 840 | </li> |
834 | <li> | 841 | <li> |
835 | The node ID of the sender peer <tt>P</tt> SHOULD be in the | 842 | The node address of the sender peer <tt>P</tt> SHOULD be in the |
836 | BLOOMFILTER. If not, the | 843 | BLOOMFILTER. If not, the |
837 | implementation MAY log an error, but MUST continue. | 844 | implementation MAY log an error, but MUST continue. |
838 | </li> | 845 | </li> |
@@ -871,8 +878,9 @@ END | |||
871 | number of nodes to forward the message to. The implementation MAY | 878 | number of nodes to forward the message to. The implementation MAY |
872 | forward to fewer or no nodes in order to handle resource constraints | 879 | forward to fewer or no nodes in order to handle resource constraints |
873 | such as bandwidth. | 880 | such as bandwidth. |
874 | The message BLOOMFILTER MUST be updated with the local node ID <tt>N</tt>. | 881 | The message BLOOMFILTER MUST be updated with the local node |
875 | For all peers with node ID <tt>P'</tt> chosen to forward the message | 882 | address <tt>N</tt>. |
883 | For all peers with node address <tt>P'</tt> chosen to forward the message | ||
876 | to, <tt>SEND(P', PutMessage)</tt> is called. | 884 | to, <tt>SEND(P', PutMessage)</tt> is called. |
877 | </li> | 885 | </li> |
878 | </ol> | 886 | </ol> |
@@ -953,12 +961,12 @@ END | |||
953 | <dt>PUTPATH</dt> | 961 | <dt>PUTPATH</dt> |
954 | <dd> | 962 | <dd> |
955 | the variable-length PUT path. | 963 | the variable-length PUT path. |
956 | The path consists of a list of PATH_LEN node IDs. | 964 | The path consists of a list of PATH_LEN node addresses. |
957 | </dd> | 965 | </dd> |
958 | <dt>GETPATH</dt> | 966 | <dt>GETPATH</dt> |
959 | <dd> | 967 | <dd> |
960 | the variable-length PUT path. | 968 | the variable-length PUT path. |
961 | The path consists of a list of PATH_LEN node IDs. | 969 | The path consists of a list of PATH_LEN node addresses. |
962 | </dd> | 970 | </dd> |
963 | <dt>BLOCK</dt> | 971 | <dt>BLOCK</dt> |
964 | <dd> | 972 | <dd> |
@@ -1210,16 +1218,16 @@ tor+onionv3://rasdflkjasdfliasduf.onion/ | |||
1210 | <t> | 1218 | <t> |
1211 | In order to find the closest nodes in the network to itself, an | 1219 | In order to find the closest nodes in the network to itself, an |
1212 | implementation MUST now periodically send HELLO GET queries for its own | 1220 | implementation MUST now periodically send HELLO GET queries for its own |
1213 | node ID. | 1221 | node address. |
1214 | Both the "record route" and "find node" message options are set in the | 1222 | Both the "record route" and "find node" message options are set in the |
1215 | GET queries in order to learn nodes and network topology from the | 1223 | GET queries in order to learn nodes and network topology from the |
1216 | message route and in order to receive approximate replies to the | 1224 | message route and in order to receive approximate replies to the |
1217 | query key (the node ID). | 1225 | query key (the node address). |
1218 | </t> | 1226 | </t> |
1219 | <t>FIXME: Periodically -> more specific? No. Frequency may be adapted depending on network conditions, known nodes, busy/idle etc.</t> | 1227 | <t>FIXME: Periodically -> more specific? No. Frequency may be adapted depending on network conditions, known nodes, busy/idle etc.</t> |
1220 | <t> | 1228 | <t> |
1221 | Any implementation encountering a HELLO GET request initially | 1229 | Any implementation encountering a HELLO GET request initially |
1222 | sends its own node ID if it. | 1230 | sends its own node address if it. |
1223 | </t> | 1231 | </t> |
1224 | </section> | 1232 | </section> |
1225 | <section anchor="security" numbered="true" toc="default"> | 1233 | <section anchor="security" numbered="true" toc="default"> |
@@ -1285,7 +1293,7 @@ Purpose | Name | References | Description | |||
1285 | 1293 | ||
1286 | &RFC2119; | 1294 | &RFC2119; |
1287 | &RFC3629; | 1295 | &RFC3629; |
1288 | <!--&RFC3986; URI--> | 1296 | &RFC4634; |
1289 | &RFC4648; | 1297 | &RFC4648; |
1290 | &RFC6940; | 1298 | &RFC6940; |
1291 | &RFC8126; | 1299 | &RFC8126; |