- strong authentication (challenge/response on connect with RSA keys & signatures)
- direct peer-to-peer messages
- broadcast messages
- unicast messages
- dht messages (delegated to the peer with the peer id closest to the dht key)
- delegated peer-to-peer messages (one peer sending to another peer through a topic)
Layer 3 is the service layer and has these components:
- Topic authorization and management (including peer "accounts")
- File sharing
- Port configuration testing
- Connect-back requests (for when only one peer can accept connections)
I was thinking back to the very start of my peer-to-peer experiments, so I searched my email archives to see when I started with this. It was April, 2001 when I first started talking p2p architectures over with my friend Fritz. A little while later, I made the p2pmud project on source forge; for project paleontologists, here's a link to the old p2pmud forums.
The project transitioned through several languages and architectures, eventually adopting FreePastry in Plexus so that we didn't have to write and maintain our own peer-to-peer networking layer. So now we have to do that and, ironically, the architecture's pretty close to the one I came up with in 2001, except that it's simpler. In 2001, I had envisioned a set of peers that routed requests to other, natted peers, but now we just have one peer doing the routing for a "topic space" with a bunch of topic spaces clustering to form the entire peer-to-peer grid.