CS625 : Advanced Computer Networks

Concluding Lecture


Main Design Principles

Following are the main principles which should be considered while designing any system -:

  1. Layering : Layering provides a layer of abstraction for designing a system by breaking the functionalities down into layers. This abstraction is central to science. Layering is useful for interface design since it provides independence across interfaces and also for system design in general.
     

  2. End-to-End Principle : This principle states "Implement a function in a layer only if it can be fully and completely implemented at that layer". It thus acts as a guide for what functionality should go in what layer. This principle actually extends to other systems besides networks, for example operating systems.
     

  3. Caching : The concept of caching should be implemented for improving performance mainly w.r.t. time of a system.
     

  4. Hierarchy : This principle, if implemented, helps in improving scalability of a system.
     

  5. Level of Indirection : It is usually beneficial if one part of a system is separated from another in order to provide a level of indirection between the part accessed by the user and the one actually manipulated by the system. A ready example of this principle is the independence between virtual and physical addresses used by an operating system.
     

  6. CAP Principle for Distributed Systems : CAP stands for consistency, availability and partition resilience, all very important attributes for any distributed system. The principle states that for designing a system, only 2 of these 3 can be successfully achieved, at the cost of the third.
     

  7. Soft-state of a System : In general, the state of a system is expected to be persistent, i.e. it should persist beyond a session. A Soft-state, however, can be lost and regained without losing correctness. This improves the scalability and availability of a system.


Design Mechanisms

Presented earlier were the design principles which should be considered while designing a system. However, separate mechanisms should be used for actually implementing these systems. Following are some design mechanisms which arise out of the use of the above principles -:

  1. State in Packet : This techniques eliminates the need for the state of a system to be present everywhere. This is a useful technique, though it involves an overhead. Examples of this technique in practice are IP traceback, core stateless fair queueing etc.
     

  2. Core of N/W Kept Different from the Edges : The core of a network is where the traffic is maximum, and thus has to be routed the most. By separating the core from the edges, the edges can do more work because they have to do less per-state work.
     

  3. Cross-layer Optimization : It helps a layer in a system to know about the upper and lower layer, since it can manipulate its functioning in order to improve performance. For example, TCP discovers the MTU of the upper layer and thus avoids fragmentation.
     

  4. Add an Additional Layer : An additional layer may be added to a system if the additional functionality is beneficial and cannot be implemented easily in the existing framework. For example, overlay networks have an additional hierarchical routing layer above IP.


Design Techniques

Some important design techniques which are specific to computer networks are the following -:

  1. Various routing protocols, multicast and unicast, for instance

  2. TCP engine

  3. TCP over wireless

  4. Router Scheduling

  5. IP traceback

  6. Bloom filter, a data structure for the representation of a set

These techniques should be made use of when designing a networking system.


Sub-topics In Networking : A Recap of the Course

Following are some sub-topics in networking which were covered to various extents in this course -:

  1. Wireless and Mobile networks

  2. Intra and Inter-domain Routing

  3. Queuing and Scheduling

  4. Router Architecture

  5. TCP

  6. Quality of Service

  7. Traffic Engineering

  8. Multicast

  9. Overlay Networks

  10. Peer-to-Peer Networks

  11. Network Security

  12. Internet Measurement and Modeling

  13. Content Distribution Networks

  14. IPv6


Components of System Design

To aptly conclude the course, following are some important components of system design which must be specified in order to come up with a system with a good performance. The order of these can also be seen as the order in which these steps should be carried out -:

  1. Design Goals

  2. Design Challenges - and also why they are a challenge

  3. Design Principles

  4. Design Mechanisms/Techniques

  5. Evaluation Methodology

  6. Metrics and Parameters for Evaluation