architectural proposal & technical problems
nickm at freehaven.net
Fri Apr 27 16:39:13 UTC 2007
[Also answering on or-dev.]
On Wed, Apr 18, 2007 at 03:12:44PM +0200, Johannes Renner wrote:
> I want to show you an architectural proposal for my project
> and ask you about some technical questions/problems I worry
> about. Besides that I would like to ask you for your general
> opinion about it. The following is only a rough description
> of an architecture, please have a look at the arch.pdf and feel
> free to discuss:
> The first part is an addon for ORs, that is using the Tor
> control protocol to listen for events (mainly ORCONN and/or
> STREAM_BW), records bandwidth-data about single TLS-connections
> the router maintains to other ORs, and simply provides this
> data for requesting clients. The recordings can be done in a
> configurable way and would provide e.g. max observed throughput
> of some period as well as current average of last n minutes
> (just a current value would be much better, but also much worse
> for anonymity). We believe that the difference between max and
> current avg correlates with the still available bandwidth of a link.
> The second part is a QoS-addon for OPs, that will contain the
> algorithms for route selection. It can post requests to receive
> the list of bw-information from an OR-addon. In addition to this
> it does active measurings of latencies/RTTs through Tor and records
> that data. Using these two orthogonal informations we can then
> build fast circuits from here and attach the streams to them
> using the control protocol.
> Now this all seems to be possible using Tor control protocol, but
> there are two things I worry about :
> 1. In OnionCoffee I can do measurings of RTTs in the following
> style: I take an established circuit and, as I already told
> you, send a relay connect cell to connect to localhost over
> it. I measure the time until I receive my relay end cell and
> thus get the RTT of the whole circuit. I can do this not only
> for three-hop circuits, but also for partial circuits:
> By simply using only one or two onion skins I can address the
> first or the second router in a circuit. By subtracting I can
> then compute values for the single links between the routers.
> Of course this is not the intended use for relay connect cells,
> but it is working quite well (until we introduce something like
> a ping-cell?). Unfortunately the original Tor software does not
> offer me any possibilities to do such partial measurings. The
> only possibility there is at the moment is to use Socks to try
> to connect to localhost, but this only works for whole circuits
> and is a bit of a detour. The most convenient way would be to
> extend TC so that it could be possibly used to receive this data,
> e.g. introduce a new command that lets Tor do the actual
> measurings like "measureRTT(circID, addressedRouter)".
> Tor-TODO (#8 under Research) already pinpoints that it would be
> nice to make use of the ability to let some streams exit from
> the second hop, some from the third, and so on.
> Having the possibility to choose arbitrary exits within one
> circuit would also enable us to do the measurements on
> partial circuits. What do you think about that?
This should be do-able by modifying the control protocol to adding an
extra flag to ATTACHSTREAM, right?
That is, you'd have a controller listen for circuit and stream events.
You'd tell the controller to build a circuit. Then you'd launch a
stream to localost and say something like,
ATTACHSTREAM (yourstream) (yourcircuit) HOP=2
to attach the stream to the second hop. Then you'd time the delay
between the ATTACHSTREAM and receiving the END cell.
> 2. The OR-addon needs to set a flag in the ORs router descriptor,
> to tell clients, that it is providing bw-data. So how can I set
> an "opt"-flag in my ORs descriptor just to tell the directory
> that I am using my addon? Is there any way to do this, preferably
> via the control protocol?
There's no way currently to tell _just_ the directory about
something. All information goes into your descriptor, or it does
not. The descriptor gets uploaded to the directory authorities, and
clients download it from the caches.
I guess we could have a controller feature that let you set extra
flags values in descriptor. For safety, we'd probably want them to
start with "X-", like extension headers in email or http.
There is an accepted proposal in progress of implementation that has a
separate "extra info" document containing data that most users don't
care about. Check out proposal 104 for more info on that.
Now for stuff from later emails. (I like to batch.)
WRT your idea for a separate "bandwidthinformer" port: I don't see
the need for that. How about this idea instead:
For a while, we've been meaning to have _all_ routers, even routers
that aren't directory caches, accept BEGIN_DIR commands to retrieve
a limited amount of directory information via Tor connections.
Caches would serve everything that they would serve normally;
non-caches would only serve their own descriptor.
Given this, I think you could just make any bandwidth information
that you decide it's important to serve a separate document served
Of course, if you want to have routers potentially send this much
info, there are bandwidth issues to consider. You'll probably want to
write up a unified design before you push too far ahead. Publishing
this much information is probably good for an research phase of your
project phase, but potentially not so good for long-term use.
As for the CONNECT idea: I'm not sure I see what CONNECT would get you
that an extended ATTACHSTREAM wouldn't. Yes, ATTACHSTREAM requires
you to launch a new SOCKS connection to Tor, but ATTACHSTREAM has an
advantage over your CONNECT proposal: if the connection _doesn't_
fail, your proposal leaves no good way to actually use the newly
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 652 bytes
Desc: not available
More information about the tor-dev