NNSquad - Network Neutrality Squad
NNSquad Home Page
NNSquad Mailing List Information
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ NNSquad ] Re: Traffic shaping law proposed in US
- To: Barry Gold <bgold@matrix-consultants.com>
- Subject: [ NNSquad ] Re: Traffic shaping law proposed in US
- From: Phil Karn <karn@ka9q.net>
- Date: Mon, 17 Mar 2008 18:07:42 -0700
- Cc: nnsquad@nnsquad.org
Barry Gold wrote:
This sounds pretty good. I would hope it would also permit a network
operator to put limits on the _quantity_ of traffic to/from a given
user.
All this is fine, I think, as long as the operator doesn't discriminate
on the traffic it does handle. That is, the operator can throttle users,
charge them more for excess traffic, whatever, provided that whatever
traffic it *does* handle for a given user is handled in a
non-discriminatory way. It shouldn't look at the TCP header at all, to
say nothing of the data field. All routing decisions MUST be based on
the IP header and nothing else unless the user specifies otherwise.
(It's okay for port blocking, etc, to default on as long as the user can
ask to have it turned off.)
Even with respect to the IP header, the operator can't discriminate
among destination addresses except as they relate to available
bandwidth. I.e., he can't explicitly block certain destination IP
addresses or give them lower priority, but he need not buy lots and lots
of upstream capacity to guarantee equal throughput to every possible
destination.
If priority (non-FIFO) mechanisms are provided, they *must* be under
complete user control. That is, if the user wants his VoIP traffic to
get better treatment than his bit torrent traffic, he will have to say
so in the DSCP field of the IP header. (The meaning of the various DSCP
values will require standardization.)
This doesn't stop the provider from penalizing a user's traffic,
including his VoIP traffic, if the user exceeds some sort of total
quota. It simply provides a way for the user to indicate to the operator
that, among his packets, some are more important than others.
Again, I think a good analogy is to how the courts interpret the First
Amendment. It's okay for a town to require a permit for a parade or
public protest, but if they do they cannot discriminate on the nature of
that protest in any way (except, of course, that it has to be
peaceable). Any rules or fees must be exactly the same for everyone.
Appropriately includes (IMHO):
. Reducing the bit speed at the DOCSIS modem
. Dropping a portion(*) of the user's packets at any router under the
ISP's control.
. "firing" the user (terminating the contract at the next renewal point
or even immediately if allowed by ToS).
. Sending ICMP "Source Quench" packets.(+)
ICMP Source Quench has been strongly deprecated, and I don't think most
stacks even respond to it.
Dropping packets is a bad idea. It tends to decrease network efficiency
because of all the packets that consume resources only to be dropped,
and it could encourage gaming, e.g., tweaking TCP to be much more
aggressive with retransmissions.
A much better way to implement this, I think, is to reduce the priority
of ALL of that user's packets. The operator should still honor the
relative priorities placed on those packets by the user, but all of
those priorities would be biased downward.
A really useful way to throttle down traffic, of course, is to make the
"window" smaller (along with dropping some ACKs). Unfortunately, this
would involve modifying packets in a way that violates the end-to-end
nature of TCP. I really think SQuench would be best, except that a lot
of stacks currently ignore it.
Modifying TCP headers is totally out of the question.
Maybe we need a new RFC: an ICMP query that asks "do you respond to
source quench", with the response giving a level of handling (I'm not
sure what the levels would mean, but at the very least 0: I ignore them,
1: I send fewer and smaller packets, 2: I retransmit less often, 3: 1+2.)
If the host answers "0" or doesn't respond, the intermediary should be
allowed (explicitly, by RFC) to modify the window field in TCP headers,
in order to ensure that traffic does not exceed their ability to handle it.
I don't think this is necessary. All you have to do is to drop that
user's priority relative to the other users. If some operators want to
reduce the bit rate of the user's modem, that's their choice but I don't
think it's as good as changing the priorities.
I still think that priority queuing is the silver bullet here. Used
effectively, it could satisfy both the operators and the users.
--Phil