Network coding has emerged as a powerful technique based on a simple but far-reaching observation that, in communication networks, one can allow intermediate nodes to not only forward but also combine and process the incoming information flows. Today, the field is attracting significant interest from both academia and industry, and we are beginning to see the first practical applications. In this survey paper, we first review the main ideas, concepts, and applications of network coding. We then discuss some of the algorithmic aspects of performing network multicast efficiently with network coding. Lastly, we give an overview of a few quantitative results that compare the performance of network coding with that of traditional routing in certain types of communication networks.