The greedy, the naive, and the optimal multicast routing: from theory to internet protocols