How much data it cost to set up a TCP connection?

Zhang Yifan picture Zhang Yifan · Jul 13, 2015 · Viewed 7.6k times · Source

I am building an app where my phone frequently send data to my server. Since I would be using my mobile data, I was wondering how much data it cost to set up (and tear down?) a TCP connection to my server.

Answer

SDekov picture SDekov · Jul 13, 2015

TCP Three-way handshake

Device 1 sends its TCP sequence number and maximum segment size to Device 2.

Device 2 responds by sending its sequence number and maximum segment size to Device 1.

Device 1 acknowledges receipt of the sequence number and segment size information.

Each packet is composed of an IP header and data (payload). In this case, the data section contains TCP. The TCP header contains various fields including the source and destination ports, sequence and acknowledgment numbers, window size, TCP flags, urgent pointer, and reserved bits.

Like the IP header, the TCP header may also contain options. (Note that TCP options and IP options are two different things.) Because the TCP options change the length of the TCP header, the length is set in the header.

IPv4 header is five 4-byte chunks, or 20 bytes total.

TCP typically usually uses 24 bytes of the header for handshake (first two packets) and about 20 for normal packet transmission.

Maximum Segment Size (MSS): 4 bytes

Window Scale (WSCALE): 3 bytes

Timestamp (TS): 10 bytes

No Operation (NOP): 1 byte

Selective Acknowledgment Permitted (SackOK): 2 bytes

Selective Acknowledgment Data: 10 bytes (plus 8 bytes for each additional pair of sequence numbers)

Terminating a Connection

Even though establishing a connection using 3-way handshake requires only 3 packets to be transmitted, tearing down one requires 4!

  • In the first frame the client sends a FIN that is accompanied by an ACK. The FIN parameter is set, it will inform the server that it has no more data to send.
  • The response (2nd frame) would be simply the server acknowledging the FIN sent from the client.
  • Even though TCP has established connections between the two computers, the connections are still independent of one another. Therefore, the server will also transmit a FIN to the client.
  • You guessed it right ... the client would ACK the FIN of the server in the last forth packet.

The offset of each of the frames is typically 20 bytes.

To sum it up.

Establishing a connection: ~ 128-136 bytes

Tearing down a connection: ~ 160 bytes

If you plan to use TLS / SSL handshake, this is estimated to be between 4.5k-6.5k.

Note: Please also take a look at TCP/IP Header Compression

Sources:

Inside the TCP Handshake

Explanation of the Three-Way Handshake via TCP/IP

Studying Normal Traffic, Part Three: TCP Headers | Symantec Connect