[Babel-users] Fwd: Why we switched to Babel
Jenny Ryan
tunabananas at gmail.com
Fri Aug 7 21:41:57 UTC 2015
---------- Forwarded message ----------
From: "Marc Juul" <juul at labitat.dk>
Date: Aug 6, 2015 9:58 AM
Subject: Why we switched to Babel
To: "Jenny Ryan" <tunabananas at gmail.com>
Cc:
When people share their internet we use a tunnel to hide their IP (and to
connect them to the mesh through the Internet). This tunnel takes a few
bytes of overhead. All physical connections, whether they're ethernet, wifi
or even an abstraction like a tunnel, have an MTU (Maximum Transfer Unit)
which is the size of the largest packet that can be sent over the
connection. Normally the MTU is 1500 but since the tunnel needs a few bytes
for overhead the MTU of the tunnel will be less than 1500.
When people connect to the wifi network called peoplesopen.net they will
connect with an MTU of 1500 since this is the default for wifi. We need a
way to tell them that the MTU is actually less than 1500. In an IP network
(which is at layer 3) there is a built-in system for dealing with this. If
any router receives a packet larger than what it can pass on through the
next connection (in this case through the tunnel) it can report back to the
client using the ICMP protocol (a companion protocol to IP, and the
protocol used for ping) that the packet was too big and the client can then
adjust its MTU accordingly.
For batman-adv, because it is a layer 2 protocol, we don't have this system
available. We tried different tactics such as using DHCP to tell the
clients the MTU they should use, but it turns out that many operating
systems completely ignore this. We tried something called TCP MSS clamping,
which is a bit of a dirty hack, but that only works for TCP, which is a
problem since UDP is widely used for e.g. VOIP, video streaming, gaming,
torrenting, etc.
Even combining the different tricks we still had a problem where some
operating systems would get in trouble if they tried to send large UDP
packets. We had a moment where we realized that the only types of common
communication that wouldn't work on this mesh would be torrenting and video
streaming from windows computers, and joked about that being a feature
instead of a bug :) but in the end we switched to Babel.
There was another reason: In batman-adv the MAC address is the identifier
used for each device. It is possible to configure many devices to randomize
their MAC address but it needs the user to do something, so most people
will never know to do it. Having the MAC address as the identifier makes it
pretty easy for anyone to track anyone else as they move about the city, as
long as they know the MAC address of e.g. their phone, which it is easy to
discover if you are ever in the same room with them, just by listening to
network traffic. We had some ideas for how this could be fixed, but the
potential solutions we came up with were never satisfactory.
For mesh, each time a user connects to a new node they get a new IP
address. In the future we may implement roaming support which will let
people keep their IP as they move around the city, but it will still switch
after e.g. 10 minutes, so tracking people becomes much harder.
That's a lot of text, but eh it's a complicated issue. It sounds like
you're having many late night conversations. Hope it is enjoyable!
--
marc/juul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/babel-users/attachments/20150807/45134034/attachment.html>
More information about the Babel-users
mailing list