6.829 Fall 2001 PS1 Clarifications, Errata, etc.


From: Hari Balakrishnan
To: 6.829-students@mit.edu
Subject: Clarifications for PS1
Date: Mon, 17 Sep 2001 14:14:36 -0400

A couple of clarifications about PS1.

Problem 6

Part 3 of this problem is not straightforward and will require a good understanding of the way in which the TCP window evolves during AIMD. Assume that the window evolution is linear at all times (i.e., don't worry about the possible increase in round-trip time as more and more packets are enqueued at the gateway---it turns out this doesn't change the solution by much anyway). If the window at any point is W, then some of it is "in the pipe" and some of it is simply queued up. Obviously the stuff that's queued up isn't really giving you any extra throughput at this point in time, BUT when the window drops at the sender, the queued packets are sent and help keep the link utilization high. ,p> The question asks you to figure out how much gain you get from a given amount (r, relative to the pipe size of bandwidth-delay product) of queueing.

Problem 10

The last part of this problem is also tricky problem. I didn't fully say what the sender does in response to ACKs. Here's a more complete version.
  1. The sender starts with {\tt cwnd} = 1.
  2. In slow start, each ACK increases {\tt cwnd} by 1.
  3. When three duplicate ACKs arrive, one or more packets have been lost. DO NOT WORRY ABOUT THE VALUE OF {\tt cwnd} UNTIL LOSS RECOVERY IS COMPLETE.
  4. When the loss is recovered and the ACK value increases to anything _larger_ than the value of the duplicate ACK, {\tt cwnd} is HALVED. (However, multiple fast retransmissions in the same window do not cause repeated halvings.)
  5. When a timeout occurs and the connection resumes, {\tt cwnd} is set to 1 and slow start ensues. A reasonable way to infer a timeout is simply to assume one if there's a missing ACK for more than 1 second.
  6. Slow start continues until {\tt cwnd} reaches {\tt ssthresh}; {\tt ssthresh} is initially set to 32 KBytes and for each subsequent slow start, {\tt ssthresh} is set to one-half the {\tt cwnd} value at the time of the previous loss.
  7. At the completion of each slow start phase, when {\tt cwnd} $\geq$ {\tt ssthresh}, {\tt cwnd} is increased by $1/${\tt cwnd} for each incoming ACK.

    MAINTAIN {\tt cwnd} in BYTES not packets.


Problem 10 (9/15/01)

> Hi, I generated wind.txt and breeze.txt on athena. I mored them
> to make sure they looked ok and then I ran tcp-deduce.awk on them. The
> script ran into a divison by 0?
>

The script runs as:
#awk -f tcp-deduce.awk src=mash dst=wind option=seqno wind.txt

The problem is that
# tcpdump -N -r 829.tr ...
"works" correctly on some of machines and not otherwise. The specific problem is that the hostnames aren't being correctly resolved on some athena machines.

IF you run into a divide error, the reason is that there isn't any connection in the trace that satisfies the filter being provided (the src and dst options).

For this particular instance, you can run the script as:
#awk -f tcp-deduce.awk src=128 dst=wind option=seqno wind.txt
and it'll work. (Note the src field.)

A glimpse of the decoded trace file (output of tcpdump -r 829.tr) will show you the problem; while wind resolves correctly, mash (the other host) remains unresolved.