COMS W6998-5: Network Systems Design and Implementation Prof. Erich Nahum Spring 2010 Today’s Agenda Class Overview Target Audience Prerequisites Course Materials Grading Who I am Who you are 50,000 foot flyover of Linux Networking Network Systems Design and Implementation What’s Design vs. Implementation? Design: How to think about systems Implementation: How it actually works A good system has done both well… The Linux Networking Stack + Mature (over 15 years old) + Open (we can look at it) + Relevant (large market share) + Feature-rich (millions of LOCs) Hundreds of protocols, devices, features - Evolving (changes every day) Network Systems Design and Implementation What are we going to look at? Actual protocols: TCP, IP, UDP, ARP, etc… Programming interfaces: system calls, sockets, device APIs Routing subsystem, including netfilter/iptables Support mechanisms: buffer management, device management, timers, lists, hash tables, interrrupts… Kernel tools: profiling, tracing, debugging Target Audience Who should take this class? Networking students who want to learn more about protocols and how they are implemented Operating systems students who want to learn a important large kernel subsystem in detail Security students who wish to learn more about firewalls and packet filtering MS students who want to improve systems building skills Prerequisites You should have good knowledge of OS and networking in general COMS 4118 Operating Systems COMS 4119 Networking If you haven’t taken those, it’s still possible but… You should be proficient with C programming You should not be afraid to dive in to the kernel Textbooks Unfortunately, everything is outdated. Some possible but not required texts: Herbert, Linux TCP/IP Networking for Embedded Systems, Charles River Media, 2007. Covers 2.6.16.20 (June 2006). Benvenuti, Understanding Linux Networking Internals, O’Reilly Media, Dec. 2005. Covers 2.4 and up to 2.6.12 (June 2005). Wehrle et al., Linux Networking Architecture, Prentice Hall, May 2004. Covers 2.4. Major networking cleanup in 2.6.23. Sometimes it is like pulling teeth to get a book to admit which kernel it uses… Which Kernel ? Which Distro? Kernel: Most likely 2.6.31. Most recent kernel in latest distributions Ubuntu 9.10, openSUSE 11.2, Fedora 12 Open to discussion 2.6.33 release is imminent, but… Don’t want to get too far away from the distribution Changes are probably small enough Found some good docs on 2.6.31. Distribution: ??? Columbia an Ubuntu shop IBM a RedHat/SLES shop Tentative Schedule Class Topic 1 Intro, Networking Overview 2 Support mechanisms: buffer management, network devices, timers, lists, hash tables 3 Device Layer: device drivers, packet reception and transmission, interrupts, softnet 4 Data link layer: net core, Eth, ARP, bridging 5 Network Layer: IP, routing, forwarding 6 Network Layer: netfilter/IPtables 7 Transport Layer: UDP, TCP 8 Socket layer: system calls, sockets, ip_proto 9 Student subsystem presentations 10 Student project presentations Grading This is a seminar, and the first time I’ve taught it. Thus, everything is subject to revision. What I’m thinking now is: 33% Class participation: discussion and interactivity in class 33% Class presentation: a presentation on a major subsystem in the network stack 33% Class project: a project involving modifying, extending, or improving an existing system Potential list on class Web page Still thinking about a paper reading list Papers would be on issues illustrated by the code Who I Am Research Staff Member at IBM T.J. Watson for 13 years Ph.D. in C.S. in 1996 from UMass-Amherst Working in Networking since 1988 OS/2, AIX, FreeBSD, Linux (2.2/2.4), x-Kernel Adjunct in CS Department Same as Professors Misra, Schulzrinne, and Rubenstein Taught OS in Spring of 2008, even got a CULPA review Why am I teaching this class? To learn current 2.6 networking stack Best way to learn is to teach Who You Are Who are you, anyway? What are you looking to get out of this class?