All applications described above are ``virtual'' applications, in the sense that they do not actually transfer their own data in the simulator; all that matter is the size and the time when data are transferred. Sometimes we may want applications to transfer their own data in simulations. One such example is web caching, where we want HTTP servers to send HTTP headers to caches and clients. These headers contain page modification time information and other caching directives, which are important for some cache consistency algorithms.
In the following, we first describe general issues regarding transmitting application-level data in , then we discuss special issues, as well as APIs, related to transmitting application data using TCP as transport. We will then proceed to discuss the internal design of HTTP client, server, and proxy cache.