The book offers a self-contained discussion about file-sharing systems from an engineer's point of view. Its main scope is to rationalize the engineering process at the basis of peer-to-peer (p2p) file-sharing systems. The work analyzes the architectural blueprints, the design choices, the internals, the core algorithms, their interaction with the underlying network infrastructure and some of the major findings of the scientific community. With such foundations, it will be straightforward to understand the main behaviors of these systems, their strengths and weaknesses and to correctly evaluate the resulting traffic patterns. As a consequence of the widespread diffusion of file-sharing applications, of their impact over the network in terms of traffic load, and of the kind of content conveyed, different parties are interested in the topic. Specifically: academics and researchers, students, network administrators and businessmen.
The major topics covered in the book are: a quick historical revision of file-sharing applications; an introduction to the p2p communication paradigm, focusing on aspects strictly related to their adoption to engineer file-sharing applications; the analysis of the basic components and the core functionalities needed to implement an effective file-sharing service; a discussion about problems arising due to the lack of transparency in the modern Internet and the main traversal techniques available; the investigation of the most popular heuristics employed to force file-sharing users to play an active role within the overall service; a detailed dissertation on eMule and BitTorrent applications, “specializing” the theory presented in the rest of the book; client interface modifications, tweaks and optimization applied to file-sharing architectures; traffic analysis of file sharing applications: results, methodologies and tools; a quick investigation of the source code of the most popular client interfaces (with hints at protocol implementation, possible modifications to enhance performances, and data gathering to conduct research and to exploit system optimization).