| 59 | == Proposal == |
| 60 | This is a draft of the proposal. |
| 61 | |
| 62 | ==== 1: Implement Kademlia ==== |
| 63 | Kademlia is preferable to freenet due to its speed and extendibility and chord/pastry due to being at least as fast but safer. A full routing table will be needed to provide the O(log n) routing that is needed. |
| 64 | |
| 65 | * Investigate i2p.zzz.kademlia implementation |
| 66 | * Make sure that i2p.zzz.kademlia implements Kademlia fully |
| 67 | * Implement k-bucket merging |
| 68 | |
| 69 | ==== 2: Improve performance ==== |
| 70 | For Kademlia to be a viable alternative, lookup speed must be kept high. This means that lookup steps should be kept low and that as many round-trips as possibly should be avoided. |
| 71 | |
| 72 | * Implement recursive lookups |
| 73 | * Investigate performance |
| 74 | |
| 75 | ==== 3: Attack resistance ==== |
| 76 | The two main attack resistance methods will be recursive and random recursive lookups. |
| 77 | Recursive lookups are not only fast, but can be be used to provide a lookup success metric that is useful when doing the k-bucket evictions. |
| 78 | Random recursive lookups allows FIND_VALUE requesters to eventually find a path to the data if one exists. |
| 79 | |
| 80 | * Implement recursive lookup metric |
| 81 | * Change k-bucket eviction policy to also use recursive lookup success metric |
| 82 | * Implement random recursive lookups |
| 83 | |
| 84 | |
| 85 | |
| 86 | == Unresolved issues == |
| 87 | ==== K-bucket building for recursive lookups ==== |
| 88 | K-buckets need to be continually updated. |
| 89 | In the case of iterative searching, this is not a problem. But when doing recursive searches, the search originator will not get the usual information about nodes that are close to the queried key. [[BR]] |
| 90 | [6] suggests to solutions to this issue. |
| 91 | '''Source: Direct Mode''' [[BR]] |
| 92 | '''Source: Source-Routing Mode''' [[BR]] |
| 93 | |
| 94 | |
| 95 | == Further work == |
| 96 | ==== Use the locally known nodes as for routing ==== |
| 97 | If we have nodes in our local NetDB that have distance, d,,xor,, , that is lower than any distance found in the Kademlia routing tables they are good candidates for FIND_VALUE querying. However to find such candidates, the local NetDB has to be sorted, which is expensive. |