diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-06-11 13:25:38 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-06-11 13:25:38 -0400 |
commit | faef0fa35ddab7557eb22cb1740f5c4aee4c018d (patch) | |
tree | 25ffa89ac957f0a32a655ef3047ff38badba8e09 | |
parent | 945633476ac203b5a0fc7901830df104524bfe56 (diff) | |
parent | 9e473bd1bec4671cd909a20d53bde5105f613500 (diff) | |
download | tor-faef0fa35ddab7557eb22cb1740f5c4aee4c018d.tar tor-faef0fa35ddab7557eb22cb1740f5c4aee4c018d.tar.gz |
Merge commit 'sjmurdoch/xxx-using-spdy'
-rw-r--r-- | doc/spec/proposals/ideas/xxx-using-spdy.txt | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/doc/spec/proposals/ideas/xxx-using-spdy.txt b/doc/spec/proposals/ideas/xxx-using-spdy.txt new file mode 100644 index 000000000..d733a84b6 --- /dev/null +++ b/doc/spec/proposals/ideas/xxx-using-spdy.txt @@ -0,0 +1,143 @@ +Filename: xxx-using-spdy.txt +Title: Using the SPDY protocol to improve Tor performance +Author: Steven J. Murdoch +Created: 03-Feb-2010 +Status: Draft +Target: + +1. Overview + + The SPDY protocol [1] is an alternative method for transferring + web content over TCP, designed to improve efficiency and + performance. A SPDY-aware browser can already communicate with + a SPDY-aware web server over Tor, because this only requires a TCP + stream to be set up. However, a SPDY-aware browser cannot + communicate with a non-SPDY-aware web server. This proposal + outlines how Tor could support this latter case, and why it + may be good for performance. + +2. Motivation + + About 90% of Tor traffic, by connection, is HTTP [2], but + users report subjective performance to be poor. It would + therefore be desirable to improve this situation. SPDY was + designed to offer better performance than HTTP, in + high-latency and/or low-bandwidth situations, and is therefore + an option worth examining. + + If a user wishes to access a SPDY-enabled web server over Tor, + all they need to do is to configure their SPDY-enabled browser + (e.g. Google Chrome) to use Tor. However, there are few + SPDY-enabled web servers, and even if there was high demand + from Tor users, there would be little motivation for server + operators to upgrade, for the benefit of only a small + proportion of their users. + + The motivation of this proposal is to allow only the user to + install a SPDY-enabled browser, and permit web servers to + remain unmodified. Essentially, Tor would incorporate a proxy + on the exit node, which communicates SPDY to the web browser + and normal HTTP to the web server. This proxy would translate + between the two transport protocols, and possibly perform + other optimizations. + + SPDY currently offers five optimizations: + + 1) Multiplexed streams: + An unlimited number of resources can be transferred + concurrently, over a single TCP connection. + + 2) Request prioritization: + The client can set a priority on each resource, to assist + the server in re-ordering responses. + + 3) Compression: + Both HTTP header and resource content can be compressed. + + 4) Server push: + The server can offer the client resources which have not + been requested, but which the server believes will be. + + 5) Server hint: + The server can suggest that the client request further + resources, before the main content is transferred. + + Tor currently effectively implements (1), by being able to put + multiple streams on one circuit. SPDY however requires fewer + round-trips to do the same. The other features are not + implemented by Tor. Therefore it is reasonable to expect that + a HTTP <-> SPDY proxy may improve Tor performance, by some + amount. + + The consequences on caching need to be considered carefully. + Most of the optimizations SPDY offers have no effect because + the existing HTTP cache control headers are transmitted without + modification. Server push is more problematic, because here + the server may push a resource that the client already has. + +3. Design outline + + One way to implement the SPDY proxy is for Tor exit nodes to + advertise this capability in their descriptor. The OP would + then preferentially select these nodes when routing streams + destined for port 80. + + Then, rather than sending the usual RELAY_BEGIN cell, the OP + would send a RELAY_BEGIN_TRANSFORMED cell, with a parameter to + indicate that the exit node should translate between SPDY and + HTTP. The rest of the connection process would operate as + usual. + + There would need to be some way of elegantly handling non-HTTP + traffic which goes over port 80. + +4. Implementation status + + SPDY is under active development and both the specification + and implementations are in a state of flux. Initial + experiments with Google Chrome in SPDY-mode and server + libraries indicate that more work is needed before they are + production-ready. There is no indication that browsers other + than Google Chrome will support SPDY (and no official + statement as to whether Google Chrome will eventually enable + SPDY by default). + + Implementing a full SPDY proxy would be non-trivial. Stream + multiplexing and compression are supported by existing + libraries and would be fairly simple to implement. Request + prioritization would require some form of caching on the + proxy-side. Server push and server hint would require content + parsing to identify resources which should be treated + specially. + +5. Security and policy implications + + A SPDY proxy would be a significant amount of code, and may + pull in external libraries. This code will process potentially + malicious data, both at the SPDY and HTTP sides. This proposal + therefore increases the risk that exit nodes will be + compromised by exploiting a bug in the proxy. + + This proposal would also be the first way in which Tor is + modifying TCP stream data. Arguably this is still meta-data + (HTTP headers), but there may be some concern that Tor should + not be doing this. + + Torbutton only works with Firefox, but SPDY only works with + Google Chrome. We should be careful not to recommend that + users adopt a browser which harms their privacy in other ways. + +6. Open questions: + + - How difficult would this be to implement? + + - How much performance improvement would it actually result in? + + - Is there some way to rapidly develop a prototype which would + answer the previous question? + +[1] SPDY: An experimental protocol for a faster web + http://dev.chromium.org/spdy/spdy-whitepaper +[2] Shining Light in Dark Places: Understanding the Tor Network Damon McCoy, + Kevin Bauer, Dirk Grunwald, Tadayoshi Kohno, Douglas Sicker + http://www.cs.washington.edu/homes/yoshi/papers/Tor/PETS2008_37.pdf |