While people are now using P2P applications for processes, such as file sharing, many research and engineering issues still need to be tackled in order to further advance P2P technologies. This book discusses problems arising from the different aspects of P2P computing and offers potential solutions. It covers theoretical and practical aspects of key P2P components, such as architecture, peer selection, and topology control. The author emphasizes incentives as the most fundamental component in a P2P system and proposes important research and development directions for even more successful P2P applications.