The Life of a Packet
Let’s consider a relatively simple model of client/server interaction where TCP is being used. Let’s say we have data to send from the client to the server. (It works almost identically when the server sends data to the client.) The client application creates a block of data and sends it to the TCP software in the client’s computer. It’s placed in an output buffer and timers are started that are associated with that block of data. TCP finds out from the operating system how much data it can send in each outgoing TCP block called a segment or Maximum Segment Size (MSS). TCP MSSs can range from 1460 bytes for 100 Mb and 8960 bytes for 1 Gb (with Jumbo Frames).
This segment is delivered to the IP software and the IP addresses of the sender and receiver are added. Then the IP software contacts the operating system to say an outgoing message is ready to be sent. When the operating system gives the okay, the outgoing packet is moved to the network interface card (NIC) to be sent. In this entire process, the performance of the client processor is critical to how fast this all can take place.
After the packet is sent from the interface card, the network performance is the critical factor. Packets can follow a short, fast route, a slow, long route or any combination of links. It is common for a packet to traverse 10-20 individual network links when going over an Internet connection. Like the adage about the strength of a chain depending on the weakest link, the speed through the network depends on the slowest link. More often than not, the slowest link is the access link into the network and the egress link out of the network.
At the server, the TCP segment is received on the NIC, delivered to the IP software and the process described above is reversed. During this process, it is the speed of the processing in the server that affects how quickly the data is received and the acknowledgement is prepared to be sent back.
In conclusion, there are three critical phases necessary for the successful delivery of the application message to the server’s application:
1. Processing of the message in the client to prepare it to be sent.
2. Network delivery.
3. Processing in the server when the message arrives.