node to node protocol redesign #2175
Pinned
majestrate
started this conversation in
Protocol Development
Replies: 2 comments
-
Exit node DGA spoofinguser ---> Exit node ---> DGA ---> Internet This reduces the risk of node address exposed. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
these are NOT a part of the node to node protocol, nor are they a proposal. these are brain dumps of my thoughts while reviewing feedback on #2168
preface
our current wire protocol "works" except when it doesn't, it's very NIH and we want to replace it yada yada tech debt tirade goes here. we have decided it will go and be replaced by quic tls/1.3 which is an improvement. that being said, now we have a chance to redo inter node messages. i'll have to start with a quick rundown on what the requirements, responsibility and limitations are.
this is a thread for discussing the upgraded node to node protocol, specifically WHAT is in the messages we send between nodes, not how. the design decisions on it that we talked in our internal voice chat i tend to forget a lot of it so i wanted to write this down so it's not forgotten and to have it accessible outside my head.
it also provides a place where we can iterate on it and provide a record of what we thought up and eliminated in our design phase.
high level requirements
the messages sent between nodes would provide the following generic functionality.
current thoughts and the previous attempts and their pitfalls
these few things that i did not originally notice:
path builds
we can make path build and path confirm messages "guaranteed" by using a sub stream. this makes it so that path build messages can be bigger if we wanted.
we can also use this sub stream to send control messages on this path.
use cases of control messages include but are not limited to:
we could build multiple sub streams in the path build too that would apply onion encryption that we can use to onion route a stream to the snode at the other end so we can request things ons namehash, introset, RCs, etc via those. this would de-duplicate responsibilities that are currently stuck up across multiple parts of the protocol right now.
fragmentation
i know right now we fragment node to node messages for onion routed data but we dont HAVE to. if we make the onion routed data messages drop tolerant we can do reassembly at each end of the path.
putting fragmentation out of the link layer has 2 dimensions of complexity:
we dont have a DHT anymore
we have a hash ring, thus we dont really recurse in any of our lookups, given that we can basically omit DHT messages and this makes it so that all the inter node messages for that are revisited as well. thank god, no more SLV (single letter variables)
Beta Was this translation helpful? Give feedback.
All reactions