Playing with IPFS and libp2p
- Insight into who is using IPFS, geography, orgs, etc. ipv4 vs ipv6, tcp vs quic, different versions, etc
- Network performance, latency, etc. How much slower than say bittorrent DHT. Node churn, etc
- General health of the network. Look at node uptime, size of network, etc
- Nefarious use of the network - bot control channel eg 'Storm'.
- Implement and maintain libp2p in Java
- Insight into what content is being shared, search engine, popularity metrics, etc
For now, this will be limited to TCP transport. I'm going to be looking at the DHT.
- multistream_select (Working)
- Secio (Working) [RSA, ECDSA, Ed25519] TODO Secp256k1
- Yamux multiplexing (Working, needs formalizing)
- Crawling the DHT by random walk (Working)
- Parsing and logging BITSWAP messages (working)
- Incoming TCP connections (working)
- Listening for requests by operating in 'server' mode on the DHT (TODO)
- circuit relay etc
- Noise (TODO)
Comparison with BitTorrent DHT
BitTorrent DHT Query - 2 packets (1 out, 1 in)
| out | in | Description |
|---|---|---|
| 1 | FIND_NODE query | |
| 1 | FIND_NODE response |
IPFS DHT Query - 17 packets (9 out, 8 in)
| out | in | Description |
|---|---|---|
| 1 | TCP SYN | |
| 1 | TCP SYN/ACK | |
| 1 | TCP ACK | |
| 1 | Multistream_select (secio) | |
| 1 | Multistream_accept (secio) | |
| 1 | Secio PROPOSE | |
| 1 | Secio PROPOSE | |
| 1 | Secio EXCHANGE | |
| 1 | Secio EXCHANGE | |
| 1 | Secio encoded nonce | |
| 1 | Secio encoded nonce | |
| 1 | Multistream_select (yamux) | |
| 1 | Multistream_accept (yamux) | |
| 1 | Yamux Multistream_select (kad dht) | |
| 1 | Yamux Multistream_accept (kad dht) | |
| 1 | DHT FIND_NODE query | |
| 1 | DHT FIND_NODE response |
Protocol information can be found here
Incoming Yamux protocol negotiations (TODO)
| count | protocol |
|---|---|
| 5 | /floodsub/1.0.0 |
| 9 | /ipfs/bitswap/1.1.0 |
| 4 | /ipfs/bitswap/1.2.0 |
| 637 | /ipfs/id/1.0.0 |
| 103 | /ipfs/kad/1.0.0 |
| 101 | /libp2p/circuit/relay/0.1.0 |
| 2 | /meshsub/1.0.0 |