Opened 2 months ago

Last modified 3 days ago

#28511 new defect

Limit the number of open testing circuits, and the total number of testing circuits

Reported by: teor Owned by:
Priority: Medium Milestone: Tor: unspecified
Component: Core Tor/Tor Version:
Severity: Normal Keywords: fast-fix, tor-bwauth, tor-dos, 035-backport, 034-backport, 033-backport, 029-backport 041-proposed
Cc: Actual Points:
Parent ID: #22453 Points:
Reviewer: Sponsor:

Description (last modified by teor)

Tor relays can open many more testing circuits than they need:

When Tor is doing its first ORPort reachability test, it initiates one testing circuit after the first successful circuit, then one testing circuit per second until the ORPort is found reachable. Then it gives up after 20 minutes. (1200 circuits is definitely too many.)

When tor receives any descriptor or consensus, it does another ORPort reachability test, and initiates a testing circuit.

When a testing circuit opens, and there aren't enough testing circuits to test bandwidth, then tor initiates another testing circuit.

When a testing circuit expires, tor doesn't stop opening testing circuits to replace it.

We should place a timeout on bandwidth testing (the same as reachability tests?), a limit on the number of in-progress and open testing circuits (NUM_PARALLEL_TESTING_CIRCS*3/2 ?), and a limit on the total number of testing circuits that tor will build over a certain time (NUM_PARALLEL_TESTING_CIRCS*3 an hour?).

We should also reduce the frequency of the initial ORPort testing circuit callback, so those circuits are spread out over the 20 minute ORPort testing interval.

We should be careful to make these limits apply to relays, but not authorities. Authorities need to test a large number of relays every hour.

Edit: suggest some limits

Child Tickets

Change History (5)

comment:1 Changed 2 months ago by teor

Description: modified (diff)

comment:2 Changed 2 months ago by teor

Description: modified (diff)

comment:3 Changed 2 months ago by teor

Keywords: fast-fix 034-backport 033-backport 029-backport added; 034-backport-maybe 033-backport-maybe 029-backport-maybe-not removed

One fast fix is to test ORPorts and DirPorts every 20 seconds, rather than every 1 (ORPort) or 5 (DirPort) seconds.

If a relay tries 60 internal circuits and 60 exit circuits, and all of them fail, it is almost certainly unreachable.

A lower number of tests would probably lead to some small error rate. (But relays do retry the tests after every new consensus, so rare errors are acceptable.)

comment:4 Changed 2 months ago by teor

Bandwidth testing won't start until 4 circuits are open. But circuits only expire after 10 minutes, so we expect to have 30 circuits open in that time.

comment:5 Changed 3 days ago by nickm

Keywords: 041-proposed added
Milestone: Tor: 0.4.0.x-finalTor: unspecified
Note: See TracTickets for help on using tickets.