Project [15 points]
Toward the end of the term you will work on a network-related project of your choosing with one other student. This project can be as extensive as you'd like, but remember you'll only have one term to work on it. I will meet with each team individually during week seven to discuss your project. In the end you will record a video presentation and demo of your project.
Projects should be reasonably substantial. Simple projects may not receive full credit. I will clarify after our initial team meeting on Oct 27 if the project seems too simple (or too complex).
Example projects
If you do not have a network-related project idea, consider one of these:
- Develop a protocol to reliably
transfer files between hosts using Wi-Fi at Layer 2. We will implement frame
injection as part of Lab 4. Implement:
- Participant discovery: Find other hosts that are willing to exchange files. Come up with a method to ensure that you are exchanging bytes with the intended target, even if other file transfers are underway nearby that use this technique
- Dropped/missing frames: Find a way to deal with dropped frames and resend them to ensure the file is transferred completely and without error. Do this efficiently — a protocol that waits for an acknowledgment after every frame leaves the radio idle most of the time
- Checksum/Error Detection: Include an error detection mechanism to find bit flips with high probability
- Participants leave: Find a way to deal with the case when the other participant you are exchanging a file with no longer participates
- Rate Adaptation (Optional Advanced Feature): Adjust frame size or bit rate in response to observed loss and signal strength
To demonstrate your protocol, transfer a file between two machines placed far enough apart that frames are measurably being lost — not side by side on a table. Confirm the transfer by computing a SHA-256 hash of the file on both machines and showing that they match. Report the fraction of frames lost and the number of retransmissions required.
Implement this zombie tag game. I have a small number of ESP32 devices (the video uses the older ESP8266 but the ESP32 is more capable) that you can borrow. While we won't have the LED strip like the game in the video, you can blink the built-in LED to achieve a similar effect. As with the example above, this project should handle discovery of nearby players, unreliable wireless links, and players who drop out mid-game.
- Implement your own TCP in userspace and use it to fetch real web pages.
A
tundevice is a network interface with no hardware behind it: the kernel hands your program raw IP packets on a file descriptor, and accepts raw IP packets back. Your program becomes the network interface, so there is no TCP underneath you — only packets going in and out. Implement:- IP and ICMP: Parse and build IPv4 headers, including the header checksum, and answer pings. Get this working first; it exercises the whole path before any TCP exists
- Connection setup and teardown: The three-way handshake,
and a close that leaves both sides in a correct state. Handle a
FINarriving while you still have unacknowledged data - Retransmission: Estimate the round-trip time from measurement, arm a timer from your estimate, and back off when it fires repeatedly. Retransmit on duplicate acknowledgments rather than waiting for the timer when you can
- Ordering and flow control: Reassemble segments that arrive out of order, and advertise a window that reflects how full your receive buffer actually is
- Congestion Control (Optional Advanced Feature): Slow start and congestion avoidance, limiting your send rate to the smaller of the congestion and receive windows
To demonstrate your implementation, fetch a page from a web server you do not control and show the response is byte-for-byte correct. Then repeat it with loss and delay imposed on the path using
tc netem, and report your throughput against the kernel's own TCP over the identical path. Being slower than Linux is expected; explaining why is the interesting part.
Team composition
You will work in teams of two students. You can request a specific partner for the final project, see Canvas->Pages to sign up. If you do not sign up for a partner by the end of class on Oct 20, I will assign you a random partner.
Evaluation
The final project is worth 15% of the final grade and consists of several phases:
- [2 points] Requirements specification.
- Write a roughly 3 page requirements spec that describes your project, what it does, who it serves, the major entities involved, the rules and constraints it must satisfy, and a plan for the network communications. We will discuss this plan in person as indicated on the Schedule page of the course web site. You should view this in-person meeting as if you were trying to convince a manager at a company to fund your idea.
- In the Canvas textbox for this assignment include a link to a GitHub repo
- Your repo which should initially contain just this requirements spec as a pdf file. The TAs will use the document in this repo to grade this portion of the final project
- Use this repo to develop the code for your solution (see Code implementation below).
- [9 points] Code implementation. The TAs will grade the code in the GitHub repo you used to submit your requirements spec. Implementation rubric:
- 1 point: Good coding practices (code organization, variable names, etc)
- 2 points: Evidence of testing
- 3 points: Functionality (code works as described in the requirements document)
- 3 points: Your contribution to the project as evidenced by GitHub contributions.
- [4 points] Final presentation. Each team will record a roughly 10 minute video presentation/demo of their project where you will give an overview of your project and highlight how you solved it. Discuss changes from your initial plan as you implemented your final solution. Submit this video on Canvas. Each partner should present a portion of the video.
Project presentation rubric for your portion of the presentation:- Presentation quality
- [2 points] Clear description of project
- [1 point] Presented in logical order
- [1 point] Easy to understand design and implementation choices.
- Presentation quality