I DON'T KNOW WHAT I'M DOING.
“In this checkpoint, you won’t necessarily need to do any coding (assuming your previous checkpoints are in good working shape). Instead, to cap off your accomplishment, you’re going to use all of your previous labs to create a real network that includes your network stack (host and router) talking to the network stack implemented by another student in the class.”
“In this week’s lab checkpoint, you’ll implement an IP router on top of your existing NetworkInterface
.”
“In this week’s checkpoint, you’ll go down the stack and implement a network interface: the bridge between Internet datagrams that travel the world, and link-layer Ethernet frames that travel one hop.”
“This checkpoint is about testing your TCP implementation in the real world and measuring the long-term statistics of a particular Internet path.”
“This week, you’ll implement the “sender” part of TCP, responsible for reading from a ByteStream
(created and written to by some sender-side application), and turning the stream into a sequence of outgoing TCP segments. On the remote side, a TCP receiver1 transforms those segments (those that arrive—they might not all make it) back into the original byte stream, and sends acknowledgments and window advertisements back to the sender.”
“In this lab you’ll implement the “receiver” part of TCP, responsible for receiving messages from the sender, reassembling the byte stream (including its ending, when that occurs), and determining messages that should be sent back to the sender for acknowledgment and flow control.”
“In this lab you’ll write the data structure that will be responsible for this reassembly: a Reassembler
. It will receive substrings, consisting of a string of bytes, and the index of the first byte of that string within the larger stream. Each byte of the stream has its own unique index, starting from zero and counting upwards. As soon as the Reassembler knows the next byte of the stream, it will write it to the Writer side of a ByteStream
— the same ByteStream
you implemented in checkpoint 0. The Reassembler
’s “customer” can read from the Reader side of the same ByteStream
.”
“In this warmup, you will set up an installation of Linux on your computer, learn how to perform some tasks over the Internet by hand, write a small program in C++ that fetches a Web page over the Internet, and implement (in memory) one of the key abstractions of networking: a reliable stream of bytes between a writer and a reader.”