Before I get to the unpleasant material, I want to say something negative and positive about the gaming industry. I try to keep my mix of game play and Real Life in proper proportion, but I must admit that when something compelling comes out, I can lose myself in the experience for a time. Bioware is a company that has consistently made extremely engaging games, ones that are driven not so much by technology but by a terrific story, like "Star Wars: Knights of the Old Republic" 1 and 2, and the Baldur's Gate series. Black Isle Studios, now defunct, published the Baldur's Gate series and some of the finest other role-playing games, like "Planescape: Torment" and Fallout 1 and 2. I was very disappointed when Interplay, the parent of Black Isle Studios, went out of business. But I was almost equally disappointed when I heard the distressing news that Bioware had been bought by Electronic Arts. EA is a company I have come to severely dislike. Although I suppose EA deserves some praise for having brought some titles to the Mac, their method sounds like something of a hack. I can only hope that Bethesda Softworks makes a great Fallout 3 and can someday make a Fallout MMO.
On with the Nastiness
Of course we know what software is running on our computers--we see the little triangle under its icon or the rectangular button in the Windows or Linux taskbar, and the more technical computer users (for example, SD readers) know that a lot more is going on inside our boxes. We run anti-virus software (on Windows, at least) to stop bad stuff from getting installed, and we follow certain practices to avoid infection (being careful about what we download and install, aware of where we are surfing and what links we are clicking, and so on). But how often do we think about what happens to our data packets after we send them out into the Internet or what happens to the responses as they are traveling back to us? I know that I am very conscious of whether or not I am using a "secure" site via an SSL encrypted connection, and I'm sure you are too, but beyond that, I usually just think in terms of "secure" vs "not secure." I realize that my e-mail is often not secure, because even though I may be using an encrypted channel to my mail server, my outgoing mail probably doesn't leave there encrypted. But that's more about someone obtaining my specific data, the words I use or the logins or passwords I enter. I can be fairly confident that that material isn't at risk. But what about other kinds of data?
I have been following a controversy with Comcast, a US cable television/
- Build more bandwidth--a very expensive solution.
- Block p2p traffic--something that will annoy customers and drive them away.
- Set up a network cache--impractical if the material is coopyrighted, and lots of it is.
- Cap bandwidth--another irritation to customers.
- Traffic shape p2p packets--not always possible to identify p2p traffic, which can penalize non-p2p users as well.
Finally, Sandvine offers its own alternative, "Stateful Policy Management," meaning "On the downstream, a redirecting agent reroutes P2P traffic along the least-cost network path, while P2P session management manages the upstream bandwidth by controlling the number of P2P connections with external networks."
Comcast appears to be using Sandvine's system, which works like this:
Using a network device from Sandvine, it appears that from time to time Comcast interrupts the peer-to-peer protocol sequences that should initiate a new transfer from within Comcast's network to a peer outside of Comcast's network. Sandvine's system accomplishes this by sending a forged TCP packet (with correct peer, port, and sequence numbering) with the RST (reset) flag set to both machines (the sending machine within Comcast's network and the receiving machine outside of Comcast's network). Each machine's network stack then drops the connection.
This may be good for Comcast, reducing the amount of data that passes through its gateway into external networks. If p2p data can be exchanged within its own networks then it doesn't have to send a lot of data outside, and that will reduce their costs. It may be, however, that Comcast uses this technology even within its own networks, reducing data exchange between internal subnets.
There are some Bad Things about this whole thing, though. First, RFC 793 says, "As a general rule, reset (RST) must be sent whenever a segment arrives which apparently is not intended for the current connection. A reset must not be sent if it is not clear that this is the case. " The Sandvine application appears to be violating that case. RFC 792 (ICMP) says nothing that permits such activity and RFC 1812 (IP4 router requirements) says explicitly "All state information required for end-to-end flow control and reliability is implemented in the hosts, in the transport layer or in application programs. All connection control information is thus co-located with the end points of the communication, so will be lost only if an end point fails. Routers control message flow only indirectly, by dropping packets or increasing network delay."
Of course, does this mean that firewalls violate RFCs? I don't think so, as most firewalls evaluate whether a packet should be passed on or dropped, rather than faking a response to each end of an existing connection. Sandvine could use other alternatives to faking packets: they could send a source quench, thereby slowing down traffic, or send ICMP Administratively Prohibited or perhaps Cut-off in Effect notifications, or they could simply drop the packets on the floor. But instead they fake an RST and do so secretly.
If you do use p2p software and find yourself suffering from RSTs, there are some things you can do to get around possible "Stateful Policy Management." You could tunnel outside the affected network using a VPN or SSH. Your p2p client might allow you to transmit data encrypted. Or you could improve your upload to download ratio by setting a download rate slower than your upload rate. Accepting a high RST rate might be an alternative, but some networks (like eDonkey 2000) will cut off leeches quite quickly.
I don't use p2p networks much, but I find the technology very interesting and potentially highly useful. Blizzard Entertainment uses a p2p system to transfer patch data (often one or two hundred megabytes) and unfortunately Sandvine's system can interfere with that quite severely.
My main complaint about such systems is that they are invisible to the user. Things might be working fine for a while but then suddenly start to fail. How can regular people determine what the problem is? If you aren't both exceptionally curious and exceptionally clever, chances are you would never figure it out. Again, my problem with this situation isn't so much that Comcast is doing this, although it does appear to violate more than one RFC. Their Terms of Service ("ToS") which their customers must agree to follow describes what Comcast can do with their service, and they pretty much say that they can do anything they want. What bothers me is that this is all hidden, all invisible to their users. And so what if the ToS really does give Comcast the right to do all these things? They are interfering in an unexpected way, one hard enough for technically minded people to figure out.