Yesterday I’ve described the difference between line rate and bit rate (actually physical layer gross bit rate and physical layer net bit rate). Going to the other extreme, we can measure goodput (application-level throughput), which obviously depends on multiple factors, including the TCP window sizes and end-to-end delays. There are numerous tools to test the goodput from/to various locations throughout the world (speedtest.net worked quite nicely for me) and you’ll soon discover that the goodput on your DSL line differs significantly from what the ISP is advertising.
Apart from obvious marketing ploys, the difference arises due to the baroque Russian dolls encapsulation stack used on ADSL (see the ADSL-based protocol stacks section in this document). A typical PPPoE connection runs IP over PPP (2 bytes) over PPPoE framing (6 bytes) over Ethernet framing (14 bytes) over RFC 1483 bridged connection (8 bytes) over ATM cells (5 byte overhead for every 48 bytes of payload). Every IP packet is thus burdened with bytes of DSL protocol stack overhead plus 10.4% ATM cell tax. Assuming the average IP packet size in the Internet is around 500 bytes, the DSL protocol stack overhead is 6%, resulting in a total of over 16% of lost bandwidth just to accommodate the committees that constructed this monster.