Advanced Network Programming, BSc, VU (2020-ongoing)

The goal of the course is to (i) make students aware of the internals of end-host and data center networking advancements; (ii) show practical tools to debug and analyze the Linux stack; (iii) teach low-level nitty and gritty details by implementing network protocols.


Course project

In the course project students implement ARP, ICMP and TCP protocols in userspace using a Linux TUN/TAP device. The framework given overloads client-side socket calls (with $LD_PRELOAD) and does basic Ethernet frame processing. Students implement socket(), connect(), send(), recv(), and close() calls (including TCP/IP packet headers, MTU payload packing, TCP state machine processing, ACK generation and processing) and show that their client-side code can successfully communicate with an unmodified Linux/server for a data exchange.

In 2020, the course lectures cover
  1. Introduction: Evolution of socket, DMA, Interrupt storms, SGE capabilities.
  2. Networking Concepts: MTU, Segmentation, stateful and stateless Offloading.
  3. Linux Internals: NAPI, SoftIRQs, SKB, rx/tx paths, zcopy stacks .
  4. Multicore Networking: Interrupt balancing, multi-queue NICs, RSS, RPS, XFS, MegaPipe.
  5. Userspace Stacks: Packet processing, Netmap, DPDK, mTCP.
  6. RDMA Networking: RDMA networking, low-latency networking, history.
  7. Network Forwarding and Routing: Switching, STP, VLAN, IP forwarding, Router architecture.
  8. Software Defined Networking: SDN, OpenFlow, Network virtualization, FlowVisor.
  9. Programmable Data Plane: Introduction to programmable switches (PISA) and P4 language.
  10. Cloud Networking: Datacenter topologies, Fat tree, PortLand, Google’s cloud networking.
  11. Beyond Networking: Video streaming internals, CBR, ABR, RTP, DASH, AWStream.

All slides are available at

Course Code


Course Coordinators