Protocol Design (IN 2333)
All communication systems use protocols that define how to exchange information, from bit representations on the wire or in the air to addressing and routing in a global network to application layer conventions for representing complex data types. Protocols appear in many different domains and application areas, which define the goals and constraints; they may be proprietary or open, jointly developed by standards organizations or set by strong market players.
In this course, we will focus on protocol for the Internet, primarily looking at the network, transport, and application layer. We will review architectural and protocol design principles from theory as well as from practical experience over the past decades. We will study different functional building blocks and design patterns for protocols suitable to implement certain protocol features and assess their applicability and their limitations. We will look at how the various design principles fit with and how they impact recent and foreseeable future developments in communications and (inter)networking at large and how such principles may need to be restated or adapted for new environments. While a clear focus is on architectures and principles from the Internet and for internetworking, lessons from other networking technologies are also considered. We will use numerous case studies to exemplify the main points. We will discuss various implementation aspects for scalable and robust systems and also consider the non-functional aspects of protocol design, including issues concerning acceptance in the market or groups. In our exercises, we the students will explore selected topics with a focus on recent developments. In our assignments, we will develop a protocol specification to achieve certain functionality in several steps and implement this specification in small groups.
The following list offers a rough outline of the topics we expect to cover:
- State sharing and reliability
- Scalability concerning many dimensions
- Resource consumption and fairness
- Naming and Addressing
- Protocol syntax and encoding
- Multiplexing
- Security: Protocol Design tools and techniques
- Security: Design and implementation robustness
- Middleboxes: NATs/firewalls, proxies, gateways, and protocol accelerators
- Transport layer abstractions and APIs
- Interoperability, Evolveability
- Internet design principles (and their evolution)
- Meta-aspects of design: financial, political, human
- Intellectual property rights (IPR)
- Implications of new communication paradigms
- Thinking different: Protocol design for specific environments
To address these topics, we will combine presentations of general concepts with numerous case studies to exemplify them. The class will feature multiple assignments to deepen theoretical foundations and connect them with practical implementation.
Recommended requirements is solid foundational knowledge in computer networks, security, and distributed systems (IN0010 or equivalent knowledge) as well as very good command of the C/C++ or Java programming language.