In the consensus files there are bandwidth specifications for every router. This (consensus) data originates from the directory authorities votes, which contain a bandwidth as well as measured bandwidth specification for every router.

The calculation for these different bandwidth data is kind of complex. My question is, how the bandwidth for the votes is calculated.

The vote measured bandwidth is being

computed by multiplying the previous published consensus bandwidth by the ratio of the measured average node stream capacity to the network average.1

The consensus bandwidth is the median of the voted measured bandwidth data, if 3 or more directory authorities have measured bandwidth data for this relay.

For the voted bandwidth data, dirspec is unspecific:

The bandwidth in a "w" line should be taken as the best estimate of the router's actual capacity that the authority has. For now, this should be the lesser of the observed bandwidth and bandwidth rate limit from the router descriptor. It is given in kilobytes per second, and capped at some arbitrary value (currently 10 MB/s).1

I already looked at or/dirserv.c as well as or/dirvote.c to finde an answer, how this bandwidth data for the votes is being computed. I even parsed some archive data, and it looks like, as there is a dependency between the bandwidth data from the votes and the advocated Bandwidth form the router status files (sever-descriptors).

If someone can explain how and even why this bandwidth data is computed, I would be very happy.


The default directory authorities are located (as of version (git-d015c70a118e4357)) in file or/config.c:

/** List of default directory authorities */

static const char *default_authorities[] = {
  "moria1 orport=9101 "
    "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 "
  "tor26 orport=443 "
    "v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
  "dizum orport=443 "
    "v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
  "Tonga orport=443 bridge "
  "gabelmoo orport=443 "
    "v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
  "dannenberg orport=443 "
    "v3ident=585769C78764D58426B8B52B6651A5A71137189A "
  "urras orport=80 "
    "v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
  "maatuska orport=80 "
    "v3ident=49015F787433103580E3B66A1707A00E60F2D15B "
  "Faravahar orport=443 "
    "v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 "
  "longclaw orport=443 "
    "v3ident=23D15D965BC35114467363C165C4F724B64B4F66 "
    " 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145",

The bandwidths are computed by downloading files through a relay and sending them to the directory authorities. The data is computed so that information about how the relay can be used within the network becomes available to the remainder of the nodes.

I am still looking into the exact details of what files and from where are they being downloaded.


See this question for more details.

Your Answer

