{"id":6174,"date":"2026-09-05T09:59:47","date_gmt":"2026-09-05T00:59:47","guid":{"rendered":"https:\/\/eternalsphere.net\/echoes\/?p=6174"},"modified":"2026-09-12T14:03:14","modified_gmt":"2026-09-12T05:03:14","slug":"mcyplrhnxa43rp9","status":"publish","type":"post","link":"https:\/\/blog.eternalsphere.net\/index.php\/2026\/09\/05\/mcyplrhnxa43rp9\/","title":{"rendered":"How Tor Measures a Relay: Observed Bandwidth, Advertised Bandwidth, and Consensus Weight"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Bandwidth is one of the most misunderstood parts of Tor relay operation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A relay can have a fast Internet connection, advertise a generous bandwidth limit, and still receive almost no Tor traffic during its first hours.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reason is that Tor distinguishes between <strong>configured capacity, observed capacity, measured capacity, and consensus selection weight<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Configured Bandwidth<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A relay operator can configure how much bandwidth Tor is allowed to use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A fictional configuration might be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RelayBandwidthRate 32 MBits\nRelayBandwidthBurst 32 MBits<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This represents an operator-controlled limit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It does not tell Tor:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">This relay has already proven that it can sustain this bandwidth.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">It only says:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Tor is permitted to use up to approximately this amount.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">2. Bandwidth Rate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Bandwidth Rate<\/code> represents the sustained bandwidth limit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is a policy configured locally by the relay operator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A server on a 1 Gbit\/s connection may intentionally expose only:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>30 Mbit\/s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">to Tor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore, the value says little about the total physical capacity of the underlying Internet connection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Bandwidth Burst<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Bandwidth Burst<\/code> determines how much temporary traffic may exceed the normal rate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Rate  = 30 Mbit\/s\nBurst = 50 Mbit\/s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">allows temporary bursts beyond the long-term rate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When Rate and Burst are configured identically, the relay effectively has no extra burst allowance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Observed Bandwidth<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tor also records how much throughput the relay has actually observed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This produces the <code>Observed Bandwidth<\/code> value.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A newly deployed relay may show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bandwidth Rate       4 MB\/s\nObserved Bandwidth   0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">even though the physical connection is perfectly capable of much higher throughput.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This happens because the relay has not yet carried enough traffic to demonstrate its actual capability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Advertised Bandwidth<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tor derives an advertised bandwidth from several values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually, the advertised value is limited by the smallest relevant capacity figure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Rate       4 MB\/s\nBurst      4 MB\/s\nObserved   800 KB\/s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">may result in an advertised capability around:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>800 KB\/s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This prevents a relay from advertising a capacity that it has never demonstrated.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Why Self-Reported Bandwidth Cannot Be Trusted Alone<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If Tor trusted operator configuration directly, a malicious relay could claim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 Gbit\/s<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">without possessing anything close to that capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It could then attempt to attract an excessive share of Tor circuits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tor therefore uses independent bandwidth measurement infrastructure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Bandwidth Authorities and Scanners<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Specialized Tor measurement systems test relay performance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simplified process looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Discover Relay\n     \u2193\nGenerate measurement traffic\n     \u2193\nObserve performance\n     \u2193\nProduce measurement result\n     \u2193\nFeed result into directory voting<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These measurements help the Directory Authorities estimate relay capacity independently of the relay operator&#8217;s own claims.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. What <code>Measured: True<\/code> Means<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Public Tor data may contain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Measured: True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This indicates that the relay&#8217;s consensus bandwidth value is based on measurements from sufficient bandwidth-authority data rather than being entirely unmeasured.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is an important milestone for a new relay.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It means:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>relay discovered\n     \u2713\nrelay reachable\n     \u2713\nrelay measured\n     \u2713<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It does not mean the measurement is already mature.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A very new relay may still receive a tiny consensus value.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Consensus Weight<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Consensus Weight<\/code> is one of the most important numbers on a Relay Search page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It represents the relay&#8217;s weight in the shared Tor consensus and is used by client path-selection algorithms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Relay A: Consensus Weight 1500\nRelay B: Consensus Weight 50<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Under comparable roles and conditions, Relay A has considerably more influence on path selection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, the final probability is not a simple direct ratio because Tor also applies role-specific bandwidth weights.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10. Consensus Weight Is Not Real-Time Bandwidth<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These values answer different questions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Real-time RX\/TX\n\u2192 What is happening this second?\n\nObserved Bandwidth\n\u2192 What capacity has the relay itself observed?\n\nAdvertised Bandwidth\n\u2192 What capacity does its descriptor currently advertise?\n\nConsensus Weight\n\u2192 How much selection weight has the Tor network assigned?<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A relay can therefore show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Current traffic:       0.2 Mbit\/s\nConfigured limit:      30 Mbit\/s\nConsensus weight:      extremely low<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">without any contradiction.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Consensus Weight Fraction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Relay Search may also show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Consensus Weight Fraction<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This expresses the relay&#8217;s consensus weight as a fraction of the total network weight.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is easier to compare across relays than a raw weight number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A very small new relay may initially represent only a tiny fraction of the global total.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Selection Probabilities<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Public relay data may estimate:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Guard probability<\/li>\n\n\n\n<li>Middle probability<\/li>\n\n\n\n<li>Exit probability<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These are influenced by:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>relay flags\nconsensus weight\nbandwidth weights\nrole eligibility<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A non-exit relay naturally has an exit probability of zero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A relay without the Guard flag similarly has no Guard-selection probability.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its main early role is therefore usually Middle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">13. Why Weight Often Increases Slowly<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tor intentionally avoids immediately treating a brand-new relay as a mature high-capacity node.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A typical early progression is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Descriptor accepted\n     \u2193\nInitial consensus entry\n     \u2193\nVery low bandwidth value\n     \u2193\nBandwidth measurements accumulate\n     \u2193\nDescriptors update\n     \u2193\nConsensus weight changes\n     \u2193\nMore circuits select the relay\n     \u2193\nMore real traffic is observed<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a gradual ramp-up rather than an immediate jump.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Relay bandwidth should never be judged from a single number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The useful hierarchy is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>configured capacity\n      \u2193\nobserved performance\n      \u2193\nindependent measurement\n      \u2193\nadvertised capability\n      \u2193\nconsensus weight\n      \u2193\nactual path-selection probability<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For a new relay, the most meaningful long-term signs of growth are increasing observed bandwidth, increasing consensus weight, and eventually a larger share of real Tor traffic.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bandwidth is one of the most misunderstood parts of Tor relay operation. A relay can have a fast Internet connection, advertise a generous bandwidth limit, and still receive almost no Tor traffic during its first hours. The reason is that Tor distinguishes between configured capacity, observed capacity, measured capacity, and &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[120],"tags":[245],"class_list":["post-6174","post","type-post","status-publish","format-standard","hentry","category-1s3b6h7r2zay02x","tag-tor"],"_links":{"self":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/comments?post=6174"}],"version-history":[{"count":1,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6174\/revisions"}],"predecessor-version":[{"id":6175,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6174\/revisions\/6175"}],"wp:attachment":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/media?parent=6174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/categories?post=6174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/tags?post=6174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}