diff options
author | Roger Dingledine <arma@torproject.org> | 2006-10-01 00:00:23 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2006-10-01 00:00:23 +0000 |
commit | 46e65094392e546ce04c793edbe7c9c41442eebf (patch) | |
tree | f8d84215e34f2bfb254feb819052525521a52f72 /doc | |
parent | e6f44317225a1e72a9257ba99f5b31dd0a3cac46 (diff) | |
download | tor-46e65094392e546ce04c793edbe7c9c41442eebf.tar.gz tor-46e65094392e546ce04c793edbe7c9c41442eebf.zip |
document predicted ports better.
svn:r8556
Diffstat (limited to 'doc')
-rw-r--r-- | doc/path-spec.txt | 108 |
1 files changed, 52 insertions, 56 deletions
diff --git a/doc/path-spec.txt b/doc/path-spec.txt index 597b736ca5..19d5f2936c 100644 --- a/doc/path-spec.txt +++ b/doc/path-spec.txt @@ -13,9 +13,7 @@ streams to circuits. Other implementations MAY take other approaches, but implementors should be aware of the anonymity and load-balancing implications of their choices. - THIS SPEC ISN'T DONE OR CORRECT. -I'm just copying in relevant info so far. The starred points are things we -should cover, but not an exhaustive list. -NM + THIS SPEC ISN'T DONE OR CORRECT YET. 1. General operation @@ -28,8 +26,8 @@ should cover, but not an exhaustive list. -NM When a client application creates a new stream (by opening a SOCKS connection or launching a resolve request), we attach it to an appropriate - open circuit if one exists, or wait if one is in-progress. We launch - a new circuit only + open circuit if one exists, or wait if an appropriate circuit is + in-progress. We launch a new circuit only if no current circuit can handle the request. We rotate circuits over time to avoid some profiling attacks. @@ -42,28 +40,26 @@ should cover, but not an exhaustive list. -NM This document describes Tor's automatic path selection logic only; path selection can be overridden by a controller (with the EXTENDCIRCUIT and - ATTACHSTREAM commands). Paths constructed through these means will + ATTACHSTREAM commands). Paths constructed through these means may violate some constraints given below. -1b. Types of circuits. - -* Stable / Ordinary -* Internal / Exit - - XXXX - -1c. Terminology +1b. Terminology A "path" is an ordered sequence of nodes, not yet built as a circuit. A "clean" circuit is one that has not yet been used for any traffic. - A "fast" or "stable" node is one that we believe to have the 'Fast' or - 'Stable' flag set on the basis of our current directory information. A - "fast" or "stable" circuit is one consisting only of "fast" or "stable" - nodes. + A "fast" or "stable" node is one that has the 'Fast' or 'Stable' flag + set respectively, based on our current directory information. A "fast" + or "stable" circuit is one consisting only of "fast" or "stable" nodes. + + In an "exit" circuit, the final node is chosen based on waiting stream + requests if any, and in any case it avoids nodes with exit policy of + "reject *:*". An "internal" circuit, on the other hand, is one where + the final node is chosen just like a middle node (ignoring its exit + policy). - A "request" is a client-side connection or DNS resolve that needs to be + A "request" is a client-side stream or DNS resolve that needs to be served by a circuit. A "pending" circuit is one that we have started to build, but which has @@ -79,32 +75,44 @@ should cover, but not an exhaustive list. -NM 2.1. When we build. -2.1.1. When clients build circuits - - When running as a client, Tor tries to maintain at least 3 clean circuits, - so that new streams can be handled quickly. To increase the likelihood of - success, Tor tries to predict what exit nodes will be useful by choosing - from among nodes that support the ports we have used in the recent past. - (see 2.4). [XXXX describe in detail how predicted ports work.] +2.1.1. Clients build circuits preemptively + + When running as a client, Tor tries to maintain at least a certain + number of clean circuits, so that new streams can be handled + quickly. To increase the likelihood of success, Tor tries to + predict what circuits will be useful by choosing from among nodes + that support the ports we have used in the recent past (by default + one hour). Specifically, on startup Tor tries to maintain one clean + fast exit circuit that allows connections to port 80, and at least + two internal circuits in case we get a resolve request or hidden + service request (at least three internal circuits if we _run_ a + hidden service). + + After that, Tor will adapt the circuits that it preemptively builds + based on the requests it sees from the user: it tries to have a clean + fast exit circuit available for every port seen recently (one circuit + is adequate for several ports or even all of them), and it tries to + have the above internal circuits available if we've seen resolves + or hidden service activity recently. Lastly, note that if there are + no requests from the user for an hour, Tor will predict no use and + build no preemptive circuits. + + The Tor client SHOULD NOT store its list of predicted requests to a + persistent medium. + +2.1.2. Clients build circuits on demand Additionally, when a client request exists that no circuit (built or - pending) might support, we cannibalize an existing circuit (2.1.4) or - create a new circuit to support the request. We do so by picking a - request arbitrarily, building or cannibalizing a circuit to support it, and - repeating until every unattached request might be supported by a pending - or built circuit. - - XXXX when long idle, we build nothing. + pending) might support, we cannibalize an existing circuit (2.1.4) + or create a new circuit to support the request. We do so by picking + a request arbitrarily, building or cannibalizing a circuit to support + it, and repeating until every unattached request might be supported + by a pending or built circuit. -2.1.2. When servers build circuits +2.1.3. Servers build circuits for testing reachability - At start and whenever the IP address changes, for testing reachability - of their ORPort. - XXXX - -2.1.3. When directory authorities build circuits - - There are no authority-specific circuits, I think. + Tor servers test reachability of their ORPort on start and whenever + their IP address changes. XXXX 2.1.4. Hidden-service circuits @@ -130,6 +138,9 @@ should cover, but not an exhaustive list. -NM have elapsed. XXX +2.1.7. When to tear down circuits + + 2.2. Path selection and constraints We choose the path for each new circuit before we build it. We choose the @@ -221,21 +232,6 @@ should cover, but not an exhaustive list. -NM XXXX -2.4. Tracking "predicted" ports - - A Tor client tracks how much time has passed since it last received a - request for a connection on each port. (For the purposes of this section, - requests for hostname resolves are considered requests to a separate - "special" port). Tor forgets about ports that haven't been used for - an hour [PREDICTED_CIRCS_RELEVANCE_TIME]. - - The ports that have been used in the last hour are considered "predicted", - and Tor will try to maintain a clean circuit to them as described in 2.1. - - For bootstrapping purposes, port 80 is treated as used at startup time. - - Tor clients SHOULD NOT store predicted ports to a persistent medium. - 3. Attaching streams to circuits When a circuit that might support a request is built, Tor tries to attach |