The key to constructing the intermediate mesh overlay is to select a
topology that roughly corresponds to the physical topology of the underlying
Internet, but we have to do this without anyone telling us what the
underlying Internet actually looks like since we are running only on end
hosts and not routers. The general strategy is for the end hosts to measure
the roundtrip latency to other nodes and decide to add links to the mesh
only when they like what they see. This works as follows.
First, assuming a mesh already exists, each node exchanges the list of
all other nodes it believes is part of the mesh with its directly connected
neighbors. When a node receives such a membership list froma neighbor,
it incorporates that information into its membership list and forwards
the resulting list to its neighbors. This information eventually propagates
through the mesh, much as in a distance vector routing protocol.
When a host wants to join the multicast overlay, it must know the IP
address of at least one other node already in the overlay. It then sends
a “join mesh” message to this node. This connects the new node to the
mesh by an edge to the known node. In general, the new node might send
a join message to multiple current nodes, thereby joining the mesh by
multiple links. Once a node is connected to the mesh by a set of links,
it periodically sends “keep alive” messages to its neighbors, letting them
know that it still wants to be part of the group.