DEV Community

Cover image for TCP Working: 3-Way Handshake & Reliable Communication
Mohd Asif Ansari
Mohd Asif Ansari

Posted on

TCP Working: 3-Way Handshake & Reliable Communication

Ever wondered how your computer makes sure data actually arrives when you browse the web? That's TCP doing its magic.

Let's understand how TCP works and why it's so important.

What Happens Without Rules?

Imagine sending messages with no rules:

  • Some messages arrive, some don't
  • Messages arrive in random order
  • No way to know if someone received your message
  • Duplicate messages arrive

Result: Chaos. Your webpage would be jumbled, downloads would fail, and nothing would work properly.

We need rules. That's where TCP comes in.

What is TCP?

TCP (Transmission Control Protocol) ensures data gets delivered reliably.

What it guarantees:

  • Data arrives (no loss)
  • Data arrives in order
  • No duplicate data
  • Connection is established before sending

Think of it like: A phone call. You dial, they pick up, you both confirm you can hear each other, then you talk.

Problems TCP Solves

Problem 1: How do we know the receiver is ready?

  • Solution: 3-way handshake before sending data

Problem 2: What if data gets lost on the internet?

  • Solution: Acknowledgments and retransmission

Problem 3: What if data arrives out of order?

  • Solution: Sequence numbers

Problem 4: How do we end the connection properly?

  • Solution: Connection termination process

The TCP 3-Way Handshake

Before sending any data, TCP establishes a connection. This is called the 3-way handshake.

Simple analogy:

You: "Hey, can you hear me?" (SYN)
Friend: "Yes, can you hear me?" (SYN-ACK)
You: "Yes, I can!" (ACK)
Now you both talk.
Enter fullscreen mode Exit fullscreen mode

Step-by-Step Handshake

Step 1: Client sends SYN

Client → Server: "I want to connect. My starting number is 100."
Enter fullscreen mode Exit fullscreen mode
  • SYN = Synchronize
  • Client picks a random starting sequence number (say 100)

Step 2: Server responds with SYN-ACK

Server → Client: "Got it! I'm ready. My starting number is 300. I acknowledge your 100."
Enter fullscreen mode Exit fullscreen mode
  • SYN = Server also wants to connect
  • ACK = Acknowledges client's SYN
  • Server picks its own sequence number (say 300)

Step 3: Client sends ACK

Client → Server: "Got it! I acknowledge your 300. Let's start."
Enter fullscreen mode Exit fullscreen mode
  • ACK = Acknowledges server's SYN
  • Connection is now established
  • Data transfer can begin

Visual flow:

Client                          Server
   |                               |
   |-------- SYN (seq=100) ------->|
   |                               |
   |<----- SYN-ACK (seq=300) ------|
   |      (ack=101)                |
   |                               |
   |-------- ACK (ack=301) ------->|
   |                               |
   [Connection Established]
Enter fullscreen mode Exit fullscreen mode

Why 3 Steps? Why Not 2?

Why not just:

Client: "I want to connect"
Server: "OK, connected"
Enter fullscreen mode Exit fullscreen mode

Problem: The server doesn't know if the client received the "OK"

With 3-way handshake:

  • Both sides confirm they can send AND receive
  • Both agree on starting sequence numbers
  • Both are ready for data transfer

How Data Transfer Works

Once connected, data flows with sequence numbers and acknowledgments.

Example: Sending "HELLO WORLD"

Client → Server: "Here's data bytes 100-104 (HELLO)"
Server → Client: "Got it! I received up to byte 104. Send more."
Client → Server: "Here's data bytes 105-109 (WORLD)"
Server → Client: "Got it! I received up to byte 109."
Enter fullscreen mode Exit fullscreen mode

Key points:

  • Each byte gets a sequence number
  • Receiver acknowledges what it received
  • If acknowledgment doesn't come, sender resends

How TCP Ensures Reliability

1. Acknowledgments (ACK)

Every piece of data is acknowledged.

Sender: "I sent bytes 100-110"
Receiver: "Got it! Send from 111 onwards"
Enter fullscreen mode Exit fullscreen mode

If no ACK comes back, sender knows something went wrong.

2. Retransmission

If data gets lost, TCP resends it.

Client: Sends packet with bytes 100-110
[Packet gets lost on internet]
Client waits for ACK...
No ACK received after timeout
Client: Resends bytes 100-110
Server: "Got it! ACK 111"
Enter fullscreen mode Exit fullscreen mode

3. Sequence Numbers Keep Order

Data might arrive out of order. Sequence numbers fix this.

Server receives: Packet 3, Packet 1, Packet 2
Server reorders: Packet 1, Packet 2, Packet 3
Server delivers data in correct order
Enter fullscreen mode Exit fullscreen mode

4. Checksums Detect Errors

Each packet has a checksum to detect corruption.

If checksum doesn't match:
- Packet is dropped
- No ACK is sent
- Sender retransmits
Enter fullscreen mode Exit fullscreen mode

Complete Data Transfer Example

Sending "HI":

1. Client → Server: 
   "Data: bytes 100-101 (HI), checksum: XYZ"

2. Server checks:
   - Checksum valid? ✓
   - In order? ✓

3. Server → Client:
   "ACK: Got up to byte 102"

4. If ACK doesn't arrive:
   Client waits (timeout)
   Client resends bytes 100-101
Enter fullscreen mode Exit fullscreen mode

How TCP Connections Close

Just like establishing a connection needs a handshake, closing it needs a proper goodbye.

Connection Termination (4 steps):

Step 1: Client wants to close

Client → Server: "FIN - I'm done sending data"
Enter fullscreen mode Exit fullscreen mode

Step 2: Server acknowledges

Server → Client: "ACK - I got your FIN"
Enter fullscreen mode Exit fullscreen mode

Step 3: Server is done too

Server → Client: "FIN - I'm also done"
Enter fullscreen mode Exit fullscreen mode

Step 4: Client acknowledges

Client → Server: "ACK - Got it, closing"
Enter fullscreen mode Exit fullscreen mode

Visual:

Client                          Server
   |                               |
   |-------- FIN ---------------->|
   |                               |
   |<------- ACK -----------------|
   |                               |
   |<------- FIN -----------------|
   |                               |
   |-------- ACK ---------------->|
   |                               |
   [Connection Closed]
Enter fullscreen mode Exit fullscreen mode

Why 4 steps?

  • Server might still have data to send
  • Both sides need to confirm they're done

TCP Connection Lifecycle

Complete flow:

1. Establish Connection
   3-Way Handshake (SYN → SYN-ACK → ACK)

2. Transfer Data
   Send data with sequence numbers
   Receive ACKs
   Retransmit if needed

3. Close Connection
   4-Way termination (FIN → ACK → FIN → ACK)
Enter fullscreen mode Exit fullscreen mode

Why This Matters

When you visit a website:

  1. TCP handshake establishes connection
  2. Your browser sends HTTP request over TCP
  3. Server sends webpage data reliably
  4. TCP ensures every byte arrives correctly
  5. Connection closes when done

Without TCP:

  • Webpages would be incomplete
  • Downloads would fail randomly
  • No way to know if data arrived

With TCP:

  • Guaranteed delivery
  • Correct order
  • Error detection
  • Reliable web browsing

Quick Summary

TCP 3-Way Handshake:

  1. SYN - "Let's connect"
  2. SYN-ACK - "Agreed, let's connect"
  3. ACK - "Connection established"

Reliable Communication:

  • Sequence numbers - Keep data in order
  • Acknowledgments - Confirm receipt
  • Retransmission - Resend lost data
  • Checksums - Detect errors

Connection Closing:

  1. FIN - "I'm done"
  2. ACK - "Got it"
  3. FIN - "Me too"
  4. ACK - "Bye"

Key Takeaway: TCP is like a careful delivery service. It makes sure everything arrives safely, in order, and without errors. That's why your web browsing just works.

Top comments (0)