Routing in a mesh network

Yet another post not directly related to IPFS, sorry.

I saw this video introducing goTenna, a very promising technology allowing to decentralize the connectivity layer of the Internet.
Basically, instead of relying on the centralized infrastructure of current Internet (Tier 1 networks, backbones, …) you create a mesh network of goTenna pods. I think it is very interesting, firstly from a anti-censorship standpoint, but also for the resiliency of the Internet (in case of a global crisis where ISPs don’t work anymore). Imagine if these devices were directly implemented inside our smartphones!

So basically, every person having a goTenna pod can communicate with each other in a radius of 5 miles using radio waves, and if you want to communicate with someone beyond this range, data can bounce from node to node. For example, Alice and Bob are 10 miles apart and Charlie is in the mid-distance between the two. Alice wants to send a message to Bob so data goes like this Alice→Charlie→Bob.

But what I struggle to see with goTenna is not how to fix the issue of malevolent nodes (or rather “thousand-men-in-the-middle” attacks :smile:), but rather how does routing work if we want to send data to one single person on the network?
Let’s say we have a mesh network all across Europe. Alice who is in Paris, France wants to send a message to Bob who is in Rome, Italy. What possibility is there to do that apart from flooding the entire network with the message until Bob receives it? If Alice doesn’t know where Bob is, then she doesn’t know to which intermediary node to send the message.

If she had his GPS coordinates, it would be a little bit easier because then she could compare the 2 GPS coordinates, to know that she has to send the message to a node in the South-East, and this node has to send the message to another node in the South-East, and so on until the message arrives to Rome in Bob’s pod. To circumvent obstacles in the way, like mountains, seas or underserved areas, we could use a pathfinding algorithm like so:

For example, let’s consider a node called Dave located in the Alps who has to transmit the message of Alice. He compares his GPS coordinates with the ones of Bob that Alice would have conveniently put along with the message. So Dave has to send the message in the South-East, but he detects no node there because there is a mountain. So instead he sends it to a node in the North East in order to avoid the mountain, and the message continues its journey.

But as I said, Alice doesn’t know where Bob is, he might be in Spain as far as she knows, so the problem remains. Besides, this system would rely on a centralized service, the GPS, which is not good if we want to have a completely decentralized Internet.

maybe a route mesh look like into ipfs can be solve that no : https://github.com/libp2p/specs/tree/master/pubsub/gossipsub