123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- 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
|