Details of Tmix

Tmix generates realistic TCP traffic by "replaying" a TCP/IP header trace collected from a real link. This page will give more details on Tmix, and how it generates traffic. For more general information on using Tmix with ProtoGENI click here.

The a-b-t Model

A TCP/IP header trace is obtained from a real-world link, and is then "reverse compiled" into a higher-level representation. For every TCP/IP connection in the trace a connection vector is generated. The connection vector represents an entire single connection between "a", the connection initiator, and "b", the connection acceptor. The connection vector also stores the start time "T" of the connection.

Rather than modeling the individual packets or TCP segments, Tmix instead uses inferences to characterize connections as a sequence of request-response exchanges between "a" and "b". Each request or response transfers one application-data unit (ADU), which is a generic term for the object or protocol element being transferred. Further, each exchange (request then response) is called an epoch, and includes the sizes of the ADUs transferred, and the requester side "think" or processing time, "t".

More formally, a simulation would consist of a set of n connection vectors C1...n, starting at times T1...n. Each connection vector includes a set of k epochs, Ci=<E1,E2,..., Ek>, where each epoch is defined by Ei = (ai,bi,ti). Each epoch includes ai, the size of the i th ADU sent from the connection initiator to the connection acceptor, bi, the size of the i th ADU sent from the connection acceptor to the connection initiator, and ti, the "think" or processing time between the receipt of the i th "response" ADU and the transmission of the (i+1)st "request". The figure on this page shows a connection that includes three epochs, with the important features of the a-b-t model labeled. Note that Tmix does not require the any information from application layer headers.

Workload Generation

At run-time Tmix "replays" the exchanges encoded in the set of connection vectors. Tmix is simultaneously run on two machines, each at the edge of a test network. One machine plays the role of initiator, while the other is the acceptor. For each connection vector a TCP connection is established from the initiator to the acceptor at time Ti. The initiator then performs socket writes to send a1 bytes (the size of the "request" ADU of epoch 1) of fake data. At the same time, Tmix on the acceptor reads the same number of bytes from it's associated socket. The roles then reverse with the acceptor sending a "response" of b1 bytes back to the initiator, while it reads them. The initiator then sleeps for ti seconds before looping and sending the next "request". This process continues until the last epoch of a connection, which doesn't include a "think" time, is reached. The connection is then terminated. For real network traffic Tmix simultaneously performs the steps above for thousands of connections with varying start and termination times. Multiple machines can be used to simulate higher capacity links.


Hernandez-Campos, Felix; Jeffay, Kevin; Smith, F. Donelson; , "Modeling and generating TCP application workloads," Broadband Communications, Networks and Systems, 2007. BROADNETS 2007. Fourth International Conference on , vol., no., pp.280-289, 10-14 Sept. 2007 doi: 10.1109/BROADNETS.2007.4550436 URL:

Last modified 10 years ago Last modified on 10/19/12 13:27:56