I propose the following congestion control algorithm:

Each node tracks all requests passing through it, and uses them to
establish a current request send rate by AIMD (for each type of request).
It sends a request every time it can, using a fair queueing algorithm -
one queue from each node, and one queue from each local client (or one
queue for all local clients). This may be biased by the utility of the
nodes, so nodes which hardly ever answer requests *could* be deprioritized
(this provides an incentive for them to get their act together). If a
request from a remote node spends more than 10 seconds on the queue, we
generate a RejectedOverload. This causes that node to back us off for a
while, and hopefully to reduce their send rate, and gives them enough
time to look elsewhere.

Advantages:
- Flooding sources will be automatically quenched.
- No leak of information on which requests are locally originated.
- Can provide an incentive for nodes to answer requests (apart from the
  obvious anonymity advantages of doing so).

Questions:
- Can it work? I think so. The AIMD will automatically adjust to
  minimize the number of timeouts and RejectedOverload's.
-- 
Matthew J Toseland - [EMAIL PROTECTED]
Freenet Project Official Codemonkey - http://freenetproject.org/
ICTHUS - Nothing is impossible. Our Boss says so.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to