In Sep-Oct 2020, together with Lin Wang, I designed and gave a new course called Advanced Network Programming for BSc. final year students at VU Amsterdam. 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 (we plan to revise and keep the content up-to-date every year):
1. Introduction: Evolution of socket, DMA, Interrupt storms, SGE capabilities. [PDF]
2. Networking Concepts: MTU, Segmentation, stateful and stateless Offloading. [PDF]
3. Linux Internals: NAPI, SoftIRQs, SKB, rx/tx paths, zcopy stacks . [PDF]
4. Multicore Networking: Interrupt balancing, multi-queue NICs, RSS, RPS, XFS, MegaPipe. [PDF]
5. Userspace Stacks: Packet processing, Netmap, DPDK, mTCP. [PDF]
6. RDMA Networking: RDMA networking, low-latency networking, history. [PDF]
7. Network Forwarding and Routing: Switching, STP, VLAN, IP forwarding, Router architecture. [PDF]
8. Software Defined Networking: SDN, OpenFlow, Network virtualization, FlowVisor. [PDF]
9. Programmable Data Plane: Introduction to programmable switches (PISA) and P4 language. [PDF]
10. Cloud Networking: Datacenter topologies, Fat tree, PortLand, Google’s cloud networking. [PDF]
11. Beyond Networking: Video streaming internals, CBR, ABR, RTP, DASH, AWStream. [PDF]
All slides are available here https://github.com/animeshtrivedi/animeshtrivedi.github.io/tree/master/files/2020/anp.