Skip to content
Tim Wood edited this page Jun 24, 2015 · 35 revisions

Welcome to CSCI 6907.11 Special Topics: Advanced Network Systems Programming!

This course will investigate two emerging network technologies, Software Defined Networking (SDN) and Network Function Virtualization (NFV), that are causing significant changes in how networks are built and managed. The course will be hands-on and project-intensive: a substantial portion of the class meetings will be dedicated to group work developing new applications to run within the network. Students will learn how to write software that inspects network traffic, controls how packets are routed, and manipulates packet data. Lectures will cover topics such as network protocols, traffic management algorithms, virtualization platforms, and achieving scalability on multi-core servers.

Timothy Wood
Computer Science Department
George Washington University


Week 1: Networking Overview (1/12/15)

In class we covered what networks are composed of and how we use abstraction layers to make networking more manageable. We reverse-engineered the HTTP protocol by studying packets in tcpdump, and we used telnet as a web browser.

Slides and Reference Material:

Homework:

  • Be sure that [email protected] has your github username and has added you as a member of the gwAdvNet2015 organization.
  • Read the GW CloudLab Style Guide, and plan to follow it for all code you write.
  • Read about how to Solve Issues! Then claim and solve at least two issue in the adv-net-samples Issue Tracker. You may do this individually or in a team of up to three people. If solving in a group, be sure to tag all students who helped with the @ sign in a comment on the issue.
    • Initial Pull Request must be submitted by Monday 1/19 at 11:59PM
    • PR must be resolved by Thursday 1/22 at 11:59PM

Week 2: No class because of MLK Day (1/19/15)

Check your github account for a new repository with a name like USERNAME-hw. This is where you will commit the files for your non-team based homework. The first assignment has been posted and is due Sunday 1/25!

Week 3: GENI Tutorial (1/26/15)

We learned the basics of the Global Environment for Network Innovations (GENI), a platform for experimenting with networks and servers. Guest lecture by Grace Liu.

Slides and Reference Material:

Week 4: Packets and the OS (2/2/15)

We discussed the IP, TCP, and UDP protocols to understand how abstraction layers can help support a diverse range of network applications. We learned to use ltrace and strace to observe what a program is doing, and dug deeper into how a packet traverses the operating system's network stack.

Slides and Reference Material:

Homework

  • Individually, or in groups of up to 3 students, solve issues in this repository's Issue Tracker.
  • Each group must finish at least one non-bug issue. If an issue is tagged as a bug and it refers to a piece of code you wrote previously, then you should fix it.
  • Teams with 2 or 3 people should try to solve at least two different issues. Each team must solve at least one non-bug issue.
  • Claim an issue by posting a comment listing all team members.
  • You must submit a preliminary Pull Request by Sunday 2/8 with your solution. It is OK if you haven't finished solving a hard issue by then, but you should at least create a PR that shows the code you have written thus far.

Week 5: Work Time (2/9/15)

Students discussed project ideas for the GENI competition and worked on writing code related to data structures, packet sniffers, and multi-threading.

Week 6: Work Time (2/16/15)

Students used this time to continue working on Issues in the sample code repository and to plan and develop their GENI project.

Homework:

  • GENI Project Description - a one page writeup describing your GENI-related project. Due Wednesday 2/18.
  • Solve Issues - Due Sunday 2/22. Create your Pull Request early in case you need to make modifications. Also, be sure to update your repo with the main master so you get everyone else's updates.

Week 7: Software Defined Networking (2/23/15)

We (finally!) learned about software defined networking. We discussed how networks such as the telephone network and the Internet send both control messages and data, and what the benefits and drawbacks are of centralized and distributed control. We then used GENI to learn about Open vSwitch and the POX SDN controller. Students saw how hosts use ARP to determine the mapping between a MAC and an IP address, and how a switch can learn which ports are connected to which MAC addresses. We wrote a simple POX SDN control module that could either direct individual packets or could establish flow rules to be installed on the switch.

Slides and Reference Material:

Homework:

  • Work on your GENI projects!
  • SDN related issues have been posted to github, but these will not be due until after the GENI deadline. However, you may want to look through them for some ideas of what SDNs can do.

Week 8: Work Time (3/2/15)

Students used this time to work on their GENI projects.

Week 9: Spring Break? (3/9/15)

Students spent their spring breaks working on GENI! Fun!

Week 10: Network Layers (3/16/15)

We discussed how Networks use layers and how those come together. First we considered two directly connected hosts that can communicate at the PHY layer and gradually built up to a complex WAN environment with applications speaking over TCP. Next we considered how those different protocol layers turn into the data that makes up a packet, and how the OS and application access and process this data.

Slides and Reference Material:

Week 11: Work Time (3/23/15)

Students used this time to work on our sample code repository, developing POX SDN controller applications, fixing bugs in our socket examples, etc.

GENI Competition

Several students from our class submitted projects to a competition at the 22nd GENI Engineering Conference, hosted at GWU March 23-26th. The competition was sponsored by Cisco and featured $10,000 worth of prizes. Our class swept the top three places!

First Place: Ph.D. students Grace Liu and Yuxin Ren (Real Time Software Defined Network Monitoring)

Second Place: Sophomores Neel Shah, Eric Armbrust, Phil Lopreiato and Ph.D. student Wei Zhang (Load Balancing and Dynamic Topology Modification)

Third Place: Seniors Katherine Stasaski and Lucas Chaufournier and M.S. student Joel Klein (PacketMapIt)

Week 12: Network Programming Paradigms (3/30/15)

We talked about several different programming paradigms commonly used in networking--multi-threaded servers, non-blocking I/O, and event driven programming. Students wrote socket programs that demonstrated how to use advanced programming techniques like pthreads and select.

Slides and Reference Material:

Week 13: In-Class Hackathon: GW-KV (4/6/15)

This class gave students a chance to demonstrate all that they had learned about sockets, communication protocols, multi-threading, and data structures. The class split into small teams that worked on different features for a Key-Value store similar to memcached. We followed a Scrum agile development cycle in class, dividing up the planned features and iterating on their development.

Slides and Reference Material:

Week 14: In-Class Hackathon 2: GW-KV (4/13/15)

This week we continued our work on a networked key-value store. Students finished building a simple client that could put and get requests following the memcached protocol, while others constructed the framework for a thread-pool based server. We began implementing the parsers that would turn messages from our ASCII-based protocol into easy to use data structures. Students also experienced the joy of keeping a repository in order when fifteen different people are trying to make commits at the same time!

Homework:

  • Each group should finish their current sub-tasks so that next class we can integrate and test the full system.

Week 15: In-Class Hackathon 3: GW-KV (4/20/15)

This week we continued our work on a networked key-value store. We began integrating different components of the system and setup a testing infrastructure with TravisCI to validate any new code added to the repository. The client development group was able to use the memcached protocol parsing group's library to successfully send requests to a real memcached server. The server team discovered that we'd forgotten to include a hash table to actually store the data. Oops!

Homework:

Week 16: In-Class Hackathon 4: GW-KV (4/27/15)

We finished our key value store and there was much rejoicing!