Wasn’t sure what site to post this on, but it seemed thematically closest to this one as it involves networking with “things” that may have changing IP addresses.
I’ve recently been researching IPFS, which is a protocol to serve distributed, static content by hash rather than host and file name (as the content is spread throughout the system, will no way to know which “node(s)” in the network have it at any point in time). I understand most of how it works, but one thing still does not make sense to me. When a node comes online, the entire network can see it and can start pulling content from it. Each node is assigned a peer hash code, which abstracts away the current IP of the node and allows other nodes to reference it without knowing the details of the network. I just don’t know how this works: the only way I can think of to implement this functionality is to have a central server with a static IP that all nodes ping when they come online; this server can then spread information about online nodes throughout the network (even still, I’m not sure how to get past routers that may try to block the connection, but that is a topic for another post and probably another site).
However, having a server to do this goes against the distributed paradigm, giving the whole network a single point of failure.
I guess my question is “how can individual things connect to a network of other things while knowing very little about the state of the other things on the network?” If this is not possible, and a central server(s) is required, how can two clients form a connection between each other? Most routers will allow outbound connections (such as to the server, which would theoretically give IP information about another client to connect to on the distributed network), but don’t allow inbound connections (such as a peer on the network trying to initiate a connection to the other node).