What gets uploaded when I surf the web?
I am using a modem, and it shows a download speed of n kbps and an upload speed of m kbps. When I check its logs, it shows the amount of data downloaded and uploaded. I'm wondering why it shows that I've uploaded 3 MB of data in an hour, which seems excessive when I never upload anything or use torrents.
So what am I uploading when I'm surfing the web?
For more details on how TCP connections and acknowledgments work, see Diogo's answer
When you visit a site, something like this happens:
A connection is made with your DNS server (if not already done) of which your computer already knows the IP address of (or through some automatic mechanism that requests this information from your ISP), sending packets in order to connect and to acknowledge the connection has been made. After the connection has been made, your site asks the IP address of the site you visit such that it knows what computer to contact to get the site. This means it sends a packet containing the domain name to get that response. Later it also sends a packet to close the connection.
A connection is made to the web server which hosts the site you want to visit, this again sends a packet to connect and to acknowledge the connection. After that it makes a request for the page you want to visit, again sending a packet. Then it responds and you get served the HTML of the web page which indicates the structure of the page (not the layout).
Because you only have the structure, you still need to fetch the rest. So, additional requests (a SU question is like 40 requests) are made to get scripts, styles and media like images and the like. And because some of these might not be on the same web server as you visit, additional DNS resolving might take place bringing you back to step 1.
On top of that all, note that every packets you receive are acknowledged adding yet another source of data that gets uploaded, to spare out on packets usually multiple packets are acknowledged at once. Thus, when you receive something you will send to the server that you have received it so it knows that what it send didn't get lost somewhere. That way, the server doesn't have to try sending it again.
The bottom line is that you can't download something without first connecting and uploading some requests to the servers you are downloading from. And that's what makes up for a little upload...
And it's not like that you only click, you do more than that, let's take your question as an example: You have typed around 500 characters, a character counts as 1 byte (if ASCII character, all are in this case) and can be from 1 to 4 bytes (if an Unicode character). So, your question actually takes 0.5 KB or 0.00005 MB! But it's not just the question that gets send to us, it's also surrounded by a POST or AJAX request which asks the server to store your question and the packet headers itself.
If you add everything up it becomes reasonable to reach a few megabytes in a few hours or so.
Your upload is based primary by the requisitions that you do on typing an address(www.google.com for example) to a webserver to request a HTTP connection to that site. After these requestions, the next point of uploading are ACKs (Acknowledgements from TCP connections on HTTP protocol) on its handshake process:
In data networking, an acknowledgement (or acknowledgment) is a signal passed between communicating processes or computers to signify acknowledgement, or receipt of response, as part of a communications protocol. For instance, ACK packets are used in the Transmission Control Protocol to acknowledge the receipt of SYN packets when establishing a connection, data packets while a connection is being used, and FIN packets when terminating a connection.
To exemplify, take a look at the TCP diagram(you use TCP on surfing on Internet):