[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bandwidth throttling (was Re: Padding)
> I'll wait for word from George on an analysis of this. I'm fine sticking
> with n^2 for the foreseeable future.
If we find a good way of handling traffic shaping then this becomes less
of a problem - i.e. if the connections don't guzzle up constant bandwidth,
then the overhead cost of the connections is something we can handle?
>
> > Padding: Constant padding to, say, 500Kbit. Per OR -> OR link. Each way.
>
> Ow. I don't know what Internet you live on, but this is a lot. :) For 50
> nodes, that's 25 Megabits per second each way per node. I think we must
> take a lesson from Freedom here, and look for less expensive approaches.
>
An interesting solution that I read in some paper (and I need to find out
which!) is this: when a node receives a cell destined to go over one of
its longstanding connections - it transmits the cell and also sends a
single padding cell on all of the other longstanding connections it is
adjacent to. No other padding.
> Bandwidth throttling and flow control are closely tied to traffic shaping.
> There are several issues to solve here. We need to make sure a node:
>
> 1) doesn't send too many data cells per timeslice
> 2) doesn't send too many bytes per timeslice
> 3) doesn't receive too many bytes per timeslice
>
> My proposed solution has several components:
>
> A) To prevent too many data cells from coming in to a node, we introduce
> 'sendme' cells for flow control. Each circuit has a window parameter at
> each hop, which is the number of data cells it's allowed to send. If
> the circuit's window reaches 0, it stops sending data cells. When a
> sendme cell arrives, the window is incremented by a value specified in
> the payload of the sendme.
Yes that's the sort of idea I had with ACK/NACK cells - but there is no
provision for discarding cells. I think we need to be able to drop cells
(at each node, in whichever way we like) to protect against DoS. In this
idea, a node can't drop a cell once it has received it because it isn't
being buffered anywhere else. So should we not consider end-to-end (OP ->
COR_last) flow control?
>
> (We could have the flow control be connection-wide rather than for
> individual circuits, but then we end up with DoS vulnerabilities a
> la Pipenet.)
I agree. That's bad.
> Now, an aside before we get too much further: is there really anything
> we can do against the active (node-owning) adversary? Perhaps, if we
> introduce dummy traffic that looks legitimate to some nodes in the
> circuit. Paul, can you elaborate on this more? In any case, I'm scared
> to death of DoS, so this is it for now.
OK, I need some more help with this - are you worried about an active
adversary discovering the bandwidth of individual circuits?
A way of preventing this (just a quick idea, not thought about this) is to
introduce another
"command" field to the cell. A node will forward all non-padding cells
unless the new field matches some certain value (which we could put in the
onion). It will also replace the field with a new value for the next hop
(also contained in the onion). The OP could then introduce random dummy
traffic which only some nodes would recognize as dummy.
Matej
--
Matej Pfajfar
GPG Public Keys @ http://matejpfajfar.co.uk/keys