The general approach is to support multiple levels of overlay networks,
each of which extracts a subgraph from the overlay below it, until we
have selected the subgraph that the application expects. For end system
multicast, in particular, this happens in two stages: First we construct
a simple mesh overlay on top of the fully connected Internet, and then
we select a multicast tree within this mesh. The idea is illustrated in
Figure 9.22, again assuming the four end hosts A, B, C, and D. The first
step is the critical one: Once we have selected a suitable mesh overlay, we
simply run a standard multicast routing algorithm (e.g., DVMRP) on top
of it to build the multicast tree. We also have the luxury of ignoring the
scalability issue that Internet-wide multicast faces since the intermediate
mesh can be selected to include only those nodes that want to participate
in a particular multicast group.