Archive for May 2014
I was thinking about peer-to-peer networking (in the context of Pettycoin, of course) and I wondered if sending ~1420 bytes of data is really any slower than sending 1 byte on real networks. Similarly, is it worth going to extremes to avoid crossing over into two TCP packets?
So I wrote a simple Linux TCP ping pong client and server: the client connects to the server then loops: reads until it gets a ‘1’ byte, then it responds with a single byte ack. The server sends data ending in a 1 byte, then reads the response byte, printing out how long it took. First 1 byte of data, then 101 bytes, all the way to 9901 bytes. It does this 20 times, then closes the socket.
Here are the results on various networks (or download the source and result files for your own analysis):
On Our Gigabit Lan
Interestingly, we do win for tiny packets, but there’s no real penalty once we’re over a packet (until we get to three packets worth):
On Our Wireless Lan
Here we do see a significant decline as we enter the second packet, though extra bytes in the first packet aren’t completely free:
Via ADSL2 Over The Internet (Same Country)
Ignoring the occasional congestion from other uses of my home net connection, we see a big jump after the first packet, then another as we go from 3 to 4 packets:
Via ADSL2 Over The Internet (Australia <-> USA)
Here, packet size is completely lost in the noise; the carrier pidgins don’t even notice the extra weight:
Via 3G Cellular Network (HSPA)
I initially did this with Wifi tethering, but the results were weird enough that Joel wrote a little Java wrapper so I could run the test natively on the phone. It didn’t change the resulting pattern much, but I don’t know if this regularity of delay is a 3G or an Android thing. Here every packet costs, but you don’t win a prize for having a short packet:
Via 2G Network (EDGE)
This one actually gives you a penalty for short packets! 800 bytes to 2100 bytes is the sweet-spot:
So if you’re going to send one byte, what’s the penalty for sending more? Eyeballing the minimum times from the graphs above:
|Penalty for filling packet||30%||15%||5%||0%||0%*|
|Penalty for second packet||30%||40%||15%||20%||0%|
|Penalty for fourth packet||60%||80%||25%||40%||25%|
* Average for EDGE actually improves by about 35% if you fill packet
I tested out livingroomofsatoshi.com, which lets you pay any BPAY bill (see explanation from reddit). Since I’d never heard of the developer, I wasn’t going to send anything large through it, but it worked flawlessly. At least the exposure is limited to the time between sending the BTC and seeing the BPAY receipt. Exchange rate was fair, and it was a simple process.
Now I need to convince my wife we should buy some BTC for paying bills…