Network congestion is unavoidable under the “best-effort” paradigm. There are several ways to deal with congestion. TCP chooses to dynamically adjust the sending rate. When there’s congestion, reduce the rate; otherwise increase the rate. We want the total load on any link (total data rate sent by all users using that link) to be oscillating around a knee point. When the load increases pass the knee, congestion becomes exponentially worse. “Users” are the TCP connections whose paths go through the link.

As a simple model, we can view the problem this way: the “network” is either congested or not, the “users” can detect congestion either by automatic inference or by explicit feedback from the “network”. The key questions are: (1) how fast should the rate increase be when the network is not congested, (2) how fast should the rate decrease be when the network is congested, and (3) what exactly is (are) the main optimization objective(s)?
We can answer these questions roughly with a simple control model. Say there are
users. At time
user
sends data with rate
. The network gives a feedback (implicit or explicit)
which is
if there’s no congestion and
if there’s congestion. The users are supposed to adjust their sending rate
accordingly.

Thus, we want to find a function
which helps the rate adjustment:

What properties should this rate adjustment function satisfy? There are four main criteria:
- Efficiency: let
be the target total rate, and
. Then network is congested at time
if
, in which case the feedback is
; otherwise,
. We want to increase the total load toward the goal when
and decrease the total load when
. Thus, it should hold that
, and
.
- Distributedness: the adjustment for one user cannot be dependent on the rates of other users or the total number of users. There’s no way, in a realistic scenario, for a user to know precisely the sending rates of other users and the total number of users in the network.
- Fairness: there are many ways to define this tricky notion. We will take the most obvious one: the rates should be roughly equal. The fairness level
at time
is defined to be:
.
This function has several nice properties: (a)
, (b)
if one user takes all the channel capacity, (c)
if the rate allocation is totally fair.
- Convergence: we want our adjustment protocol to “converge” nicely to good efficiency and fairness.
There are infinitely many functions
to choose from. The first thing to try is always a linear function of some kind. Let’s consider the family of functions
defined as follows:
(the subscript ‘I’ stands for ‘increase‘)
(the subscript ‘D’ stands for ‘decrease’)
As long as the coefficients
do not depend on
and the sending rates, the distributedness property is satisfied. Consider the efficiency property, which requires that
(1)
, for any
and
, and
(2)
, for any
and
. (The only way for the network to be congested is for
.)
Condition (1) requires that
and
.
Condition (2) requires that
and
, and that
(i.e. the equalities cannot hold at the same time).
What about the convergence to fairness requirement? To simplify notations, let
be either
or
and
be either
or
depending on whether
or
. Also, define
. Then, we want
and that
eventually increases as
increases.


For
, we will need
. Moreover,
is an increasing function in
. Thus, for good convergence to fairness we will need
to be as large as possible. Thus, we must either have
and
, or
and
.
Since
must be of the same sign, and
, and they cannot be both negative (or else we’ll have negative rates). It must hold that
and
. Thus, during congestion
(no improvement in fairness). When there’s no congestion, we should try to improve fairness as much as possible. In particular, for
to be large in the no congestion case, we want
to be as small as possible, which is
.
We have nailed down our function to be:
(the additive increase phase)
(the multiplicative decrease phase)
If we only care about fairness, then obviously
should be really large. However, setting
to be large will overshoot
, resulting in very large smoothness. Finding optimal values of
requires complete knowledge of the system, which is impossible. TCP does that experimentally. It is also easy to see that an increase in responsiveness will result in a decrease in smoothness.
Zach 2:52 pm on October 20, 2009 Permalink
I’m sure this is trivial but I thought I would bring it up. When I calculated 622Mpbs (and other transfer rates) I did not use 622 *10^6 but rather, 622 Mbps = 652 214 272 bits per second (used google calculator). I explained that in my solutions. Will this be worth full credit or should I just use 622 * 10^6 for convenience?
Hung Q. Ngo 3:23 pm on October 20, 2009 Permalink
Well, I guess it’s ok to think of 1M as
. You will get full credit for using that. However, remember (for later assignments) that we applied the convention stated in the beginning of the assignment description (1K = 1000, 1M = 1000000, etc.)
vallisha 4:08 pm on October 20, 2009 Permalink
This is what I have done for Problem 4:
4000 •8/ (622 •10^6) = 5.1446945337620578778135048231511e-5.
0.1 + 4000 •8/ (622 •10^6) = 0.10005144694533762057877813504823.
Hence,
(0.9 * 0.10005144694533762057877813504823)/ (5.1446945337620578778135048231511e-5)
= 1750.275
So the answer I have got is > 1750 rather than >= 1801 , as I have not rounded off the decimal places.
will this be worth full credit?
Pradeep 10:25 pm on October 20, 2009 Permalink
Respected Professor
I have a doubt in the way the calculation of extra parity bits needs to be done.since parity is to be added on all the three dimensions, assuming x, y and z were the dimensions of the initial matrix, then after adding parity we get (x+1)(y+1)(z+1) matrix. So I thought overhead must be (x+1)(y+1)(z+1) – xyz. This gives 331 bytes as overhead.
Can you please clarify how to calculate parity bits?
Hung Q. Ngo 10:54 pm on October 20, 2009 Permalink
Pradeep, thank you! It was my mistake. I have updated the solution.
Vallisha, as long as your computation method is correct, off-by-small-amount errors are OK.
sp 5:02 pm on October 21, 2009 Permalink
What is the point breakdown for the each assignment? My graded assignment 1 just has numbers next to each question.
pradeep 7:06 pm on October 21, 2009 Permalink
I have a doubt on problem 5, is it alright if we perform minima on overhead instead of the fraction overhead/ Total number of bits. I have done differentiation on just overhead (r + 1000/r +1) , this gives an r value equal to 31.6. will I get some credit?