Skip to main content

Command Palette

Search for a command to run...

TCP vs UDP: When to Use What, and How TCP Relates to HTTP

Updated
18 min read
TCP vs UDP: When to Use What, and How TCP Relates to HTTP

The Internet Needs Rules for Sending Data

Imagine you want to send a package to a friend. You could:

  1. Use a courier service - They guarantee delivery, get a signature, track the package, and redeliver if it gets lost. Safe but slower and more expensive.

  2. Toss it over their fence - Fast and cheap, but no guarantee they'll find it, and if it breaks into pieces along the way, those pieces might arrive out of order or not at all.

Both methods get packages from point A to point B, but they make very different trade-offs.

The internet faces a similar choice. When your computer sends data to another computer, it needs rules for how that data should be transmitted. Should we guarantee delivery? Should we verify data arrives correctly? Should we care about the order?

This is where TCP and UDP come in. They're two different sets of rules (called protocols) for sending data across the internet, and each makes different trade-offs between reliability and speed.

What Are TCP and UDP?

TCP (Transmission Control Protocol): A reliable, ordered, error-checked delivery mechanism. TCP guarantees that data arrives correctly and in the right order, or you'll know it failed.

UDP (User Datagram Protocol): A fast, connectionless delivery mechanism with no guarantees. UDP sends data and hopes for the best, but doesn't verify delivery or correctness.

Think of it this way:

  • TCP = Registered mail with tracking and signature confirmation

  • UDP = Shouting across a crowded room

Both get messages from sender to receiver, but with very different reliability guarantees.

A Simple Analogy

TCP is like a phone call:

  • You dial and establish a connection

  • You talk back and forth, taking turns

  • You can tell if the other person is still there

  • If you miss something, you ask them to repeat it

  • When you're done, you both hang up

UDP is like broadcasting an announcement:

  • You shout your message into a megaphone

  • You don't know who heard it or if anyone heard it correctly

  • People might hear parts out of order

  • You don't wait for acknowledgment

  • There's no "connection" - you just transmit

Key Differences Between TCP and UDP

Let's look at the concrete differences:

1. Connection

TCP: Connection-Oriented Before sending data, TCP establishes a connection with a three-way handshake:

Client                  Server
  |                       |
  |----SYN--------------->|  "I want to connect"
  |                       |
  |<---SYN-ACK-----------|  "OK, I'm ready"
  |                       |
  |----ACK--------------->|  "Great, let's start"
  |                       |
  |====DATA TRANSFER======|

Only after this handshake does data transmission begin.

UDP: Connectionless UDP just sends data immediately, no handshake required:

Client                  Server
  |                       |
  |----DATA-------------->|  "Here's data!" (hope you get it)
  |----DATA-------------->|  "More data!"
  |----DATA-------------->|  "Even more!"

What this means:

  • TCP has setup overhead (the handshake takes time)

  • UDP can start sending instantly

  • TCP knows if the other side is listening

  • UDP has no idea if anyone is receiving

2. Reliability

TCP: Guaranteed Delivery If a packet gets lost, TCP automatically retransmits it.

Client                  Server
  |----Packet 1--------->|  ✓ Received
  |----Packet 2-------X  |  ✗ Lost
  |<---ACK 1-------------|  "Got packet 1"
  |                       |
  (Timeout: no ACK for packet 2)
  |                       |
  |----Packet 2--------->|  ✓ Retransmitted and received
  |<---ACK 2-------------|  "Got packet 2"

UDP: No Guarantees If a packet gets lost, it's gone forever. UDP doesn't care.

Client                  Server
  |----Packet 1--------->|  ✓ Received
  |----Packet 2-------X  |  ✗ Lost (nobody knows or cares)
  |----Packet 3--------->|  ✓ Received

What this means:

  • TCP ensures all data arrives (or tells you it failed)

  • UDP might lose data and never know

  • TCP has overhead from acknowledgments

  • UDP is faster because it doesn't wait for confirmations

3. Ordering

TCP: Ordered Delivery Packets might arrive out of order, but TCP reassembles them correctly:

Sent in order: A, B, C, D

Network delivers: B, D, A, C (out of order)

TCP reassembles: A, B, C, D (back in order)

Application receives: A, B, C, D ✓

UDP: Unordered Packets arrive in whatever order the network delivers them:

Sent in order: A, B, C, D

Network delivers: B, D, A, C

Application receives: B, D, A, C (out of order!)

What this means:

  • TCP maintains the sequence of data

  • UDP delivers packets as they arrive

  • TCP has overhead from sequencing

  • UDP is simpler and faster

4. Error Checking

TCP: Checksums + Acknowledgment

  • Every packet has a checksum to detect corruption

  • If corruption is detected, the packet is discarded and retransmitted

  • The receiver acknowledges good packets

UDP: Basic Checksum Only

  • Packets have a checksum to detect corruption

  • If corruption is detected, the packet is silently discarded

  • No retransmission, no acknowledgment

What this means:

  • Both detect corrupt data

  • TCP fixes corrupted data by retransmitting

  • UDP just throws away bad packets

5. Speed and Overhead

TCP:

  • Slower due to connection setup, acknowledgments, retransmissions

  • Higher overhead (more header data in each packet)

  • Better for accuracy than speed

UDP:

  • Faster with no connection setup or acknowledgments

  • Lower overhead (smaller headers)

  • Better for speed than accuracy

Quick Comparison Table

FeatureTCPUDP
ConnectionRequires handshakeConnectionless
ReliabilityGuaranteed deliveryNo guarantee
OrderingPackets arrive in orderMay arrive out of order
Error handlingDetects and fixesDetects but doesn't fix
SpeedSlower (more overhead)Faster (less overhead)
OverheadHigherLower
Use caseWhen accuracy mattersWhen speed matters

When to Use TCP

Rule of thumb: Use TCP when you need reliability and can tolerate some latency.

Perfect Use Cases for TCP

1. Web Browsing (HTTP/HTTPS) When you load a webpage, every byte matters. Missing CSS would break the layout, missing JavaScript would break functionality, and missing HTML would leave gaps in the page.

Browser: "Give me index.html"
Server: [Sends HTML file over TCP]
Browser: Receives every byte correctly, renders the page perfectly

Why TCP? A webpage with missing data is broken. TCP ensures complete, correct delivery.

2. File Transfers (FTP, SFTP) Downloading a file that's missing 5% of its data means a corrupted file that won't open.

User downloads: photo.jpg (5 MB)
With TCP: All 5 MB arrives correctly → photo opens perfectly
With UDP: 4.8 MB arrives, 0.2 MB lost → photo is corrupted and won't open

Why TCP? Files must be complete and exact. One missing byte can corrupt the entire file.

3. Email (SMTP, IMAP, POP3) Email must be reliably delivered. You can't have parts of an email missing.

Sending email: "Important contract attached"
With TCP: Entire email + attachment arrives intact
With UDP: Half the message arrives, attachment is missing

Why TCP? Email is mission-critical communication. Reliability is non-negotiable.

4. Remote Access (SSH) When you remotely control a server, every keystroke must be registered accurately.

You type: sudo rm -rf /tmp/oldfiles
With TCP: Command executes exactly as typed
With UDP: Some characters lost → command might be "sudo rm -rf /" (disaster!)

Why TCP? Remote commands must be accurate. Missing or out-of-order keystrokes could be catastrophic.

5. Database Connections Querying a database and getting back incomplete results is unacceptable.

Query: SELECT * FROM users WHERE id = 12345
With TCP: Complete, accurate result set returned
With UDP: Some rows missing, data might be corrupted

Why TCP? Data integrity is critical. Incomplete query results lead to bugs and data loss.

The Common Thread for TCP

TCP is the right choice when:

  • Data integrity matters more than speed

  • Complete delivery is required

  • Order matters (like streaming text)

  • You can tolerate latency (a few extra milliseconds is fine)

When to Use UDP

Rule of thumb: Use UDP when speed and low latency matter more than perfect accuracy.

Perfect Use Cases for UDP

1. Live Video Streaming When watching a live sports game, you want to see it in real-time. A missing frame or two won't ruin the experience, but a 2-second delay would.

Live broadcast:
With TCP: Every frame arrives perfectly, but you're 5 seconds behind live
With UDP: 99% of frames arrive, 1% are lost, but you're watching in real-time

Why UDP? Better to see 99% of the action live than 100% of the action delayed. Your eye won't even notice a few missing frames.

2. Voice Calls (VoIP) When talking to someone, you'd rather have occasional crackling than long delays.

Phone conversation:
With TCP: Every word perfect, but 500ms delay (feels unnatural)
With UDP: Occasional static, but near-instant response (feels natural)

Why UDP? Human conversation relies on timing. Delays are more disruptive than occasional audio glitches.

3. Online Gaming In a fast-paced game, your position needs to update instantly. A player's position from 200ms ago is useless.

Multiplayer game:
With TCP: Position updates are accurate but delayed → feels laggy
With UDP: Instant position updates, occasional glitch is fine → feels responsive

Why UDP? Gamers would rather have a player glitch for one frame than experience input lag. Speed beats accuracy.

4. DNS Queries Looking up a domain name should be fast. If the query fails, just retry.

DNS lookup for google.com:
With TCP: Handshake → query → response (3 network round-trips)
With UDP: Query → response (1 network round-trip)

Why UDP? DNS queries are small and simple. UDP's speed makes DNS fast. If a query fails, the client just tries again.

5. IoT Sensor Data A temperature sensor sending readings every second doesn't need guaranteed delivery of every single reading.

Temperature sensor sends: 72°F, 72°F, 73°F, [lost], 73°F, 74°F
With UDP: Missing one reading doesn't matter - the next one arrives shortly
With TCP: Overhead of guaranteeing every reading isn't worth it

Why UDP? High-frequency sensor data is redundant. Missing one data point doesn't matter when another arrives milliseconds later.

6. Broadcasting/Multicasting Sending data to many recipients simultaneously (like live TV to thousands of viewers).

TV broadcast to 10,000 viewers:
With TCP: Need to establish 10,000 connections → impossible to scale
With UDP: Send once, everyone receives it → scales perfectly

Why UDP? TCP requires individual connections. UDP can broadcast to unlimited recipients.

The Common Thread for UDP

UDP is the right choice when:

  • Speed/low latency matters more than perfect delivery

  • Real-time communication is critical

  • Occasional data loss is acceptable

  • Redundancy exists (data is retransmitted naturally, like sensor readings)

  • Broadcasting to many recipients

Real-World Examples: TCP vs UDP

Let's see how specific applications make the choice:

ApplicationProtocolWhy?
Netflix streamingTCPPre-buffered video; can tolerate delay to ensure quality
Zoom video callUDPReal-time matters; occasional glitches better than lag
WhatsApp messagesTCPMessages must arrive intact and in order
Online multiplayer gameUDPLow latency critical; occasional lost packet is fine
EmailTCPComplete delivery mandatory
DNS lookupUDPFast, simple queries; retry if it fails
Downloading fileTCPEvery byte must arrive correctly
Live sports streamUDPReal-time viewing more important than perfect quality
Banking transactionTCPAbsolute reliability required
VoIP phone callUDPNatural conversation requires minimal delay
Loading webpageTCPComplete page required for proper rendering
IoT temperature sensorUDPHigh frequency, redundant data

Interesting hybrid cases:

QUIC (used by HTTP/3):

  • Built on UDP for speed

  • Implements reliability features in application layer

  • Gets UDP's speed with TCP-like reliability

Real-time gaming:

  • Critical state (player position, health): UDP

  • Chat messages: TCP

  • Game uses both simultaneously!

What is HTTP and Where Does It Fit?

Now that we understand TCP and UDP, let's talk about HTTP.

HTTP (HyperText Transfer Protocol) is the protocol that web browsers and servers use to communicate. When you visit a website, your browser uses HTTP to request pages and the server uses HTTP to send them back.

But here's the key question: What is the relationship between HTTP and TCP?

Many beginners think:

  • "HTTP is like TCP, but for web pages"

  • "HTTP is a faster version of TCP"

  • "HTTP and TCP are alternative ways to send data"

All of these are wrong.

HTTP and TCP are not alternatives—they work together. They exist at different layers of the network stack.

Understanding Network Layers

To understand how HTTP and TCP relate, you need to understand that the internet works in layers:

┌─────────────────────────────────────┐
│     Application Layer               │  ← HTTP, FTP, SMTP, DNS
│  (What data means)                  │
├─────────────────────────────────────┤
│     Transport Layer                 │  ← TCP, UDP
│  (How to send data reliably)        │
├─────────────────────────────────────┤
│     Internet Layer                  │  ← IP (Internet Protocol)
│  (How to route data)                │
├─────────────────────────────────────┤
│     Link Layer                      │  ← Ethernet, WiFi
│  (Physical transmission)            │
└─────────────────────────────────────┘

Each layer has a specific job:

  1. Link Layer (Ethernet, WiFi): Physically transmit bits over a wire or through the air

  2. Internet Layer (IP): Route packets from source to destination across networks

  3. Transport Layer (TCP, UDP): Manage reliable delivery and connections

  4. Application Layer (HTTP, FTP, SMTP): Define what the data means and how applications interact

HTTP Lives at the Application Layer

HTTP is an application-layer protocol. It defines:

  • How browsers request web pages (GET, POST, PUT, DELETE)

  • How servers respond (200 OK, 404 Not Found, 500 Error)

  • What headers to include (Content-Type, Authorization, Cookies)

  • The format of the data being exchanged

HTTP doesn't care HOW the data gets transmitted. It just says "this is what a web request looks like" and "this is what a web response looks like."

TCP Lives at the Transport Layer

TCP is a transport-layer protocol. It defines:

  • How to establish a connection

  • How to break data into packets

  • How to ensure packets arrive correctly

  • How to handle errors and retransmissions

TCP doesn't care WHAT the data means. It just says "here's data, I'll make sure it gets there reliably."

The Relationship Between TCP and HTTP

Here's the crucial point: HTTP runs ON TOP OF TCP.

HTTP uses TCP as its underlying transport mechanism. Think of it as layers of a cake:

┌──────────────────────────────────┐
│  HTTP Request/Response           │ ← Application Layer (HTTP)
│  "GET /index.html HTTP/1.1"      │
└──────────────────────────────────┘
            ↓
┌──────────────────────────────────┐
│  TCP Connection                  │ ← Transport Layer (TCP)
│  "Deliver this reliably"         │
└──────────────────────────────────┘
            ↓
┌──────────────────────────────────┐
│  IP Packets                      │ ← Internet Layer (IP)
│  "Route to 93.184.216.34"        │
└──────────────────────────────────┘
            ↓
┌──────────────────────────────────┐
│  Ethernet Frame                  │ ← Link Layer
│  "Transmit these bits"           │
└──────────────────────────────────┘

Analogy:

Think of sending a letter:

  • HTTP is the content of the letter (what you're saying)

  • TCP is the envelope and postal service (how it gets there reliably)

  • IP is the routing system (which roads the mail truck takes)

  • Ethernet/WiFi is the actual truck/plane (physical transport)

You can't have a letter without an envelope (you can't have HTTP without TCP), but the envelope doesn't care what's written in the letter (TCP doesn't care that it's HTTP data).

How HTTP Uses TCP: A Detailed Example

Let's walk through what happens when you visit http://example.com:

Step 1: TCP Connection Established

Before any HTTP communication happens, TCP establishes a connection:

Browser                           Server
  |                                 |
  |----SYN (Connect)--------------->|
  |<---SYN-ACK (OK)-----------------|
  |----ACK (Ready)----------------->|
  |                                 |
  [TCP connection established]

At this point, there's a reliable, ordered channel between browser and server. No HTTP has happened yet—this is pure TCP.

Step 2: HTTP Request Sent Over TCP

Now the browser sends an HTTP request using the TCP connection:

Browser creates HTTP request:
-----------------------------
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html

[This is just text. HTTP is a text-based protocol.]

This HTTP request is passed to TCP:

Browser: "Hey TCP, send this HTTP request reliably"
TCP: "OK, I'll break it into packets and ensure delivery"

TCP breaks the HTTP request into packets and sends them:

Browser                           Server
  |                                 |
  |----Packet 1 (GET /index)------->|
  |<---ACK (got it)-----------------|
  |----Packet 2 (Host: example)---->|
  |<---ACK (got it)-----------------|
  |                                 |

Step 3: Server Sends HTTP Response Over TCP

The server creates an HTTP response:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<!DOCTYPE html>
<html>
<head>
  <title>Example</title>
</head>
<body>
  <h1>Welcome!</h1>
</body>
</html>

Again, this is passed to TCP for reliable delivery:

Server                           Browser
  |                                 |
  |----Packet 1 (HTTP/1.1 200)----->|
  |<---ACK (got it)-----------------|
  |----Packet 2 (Content-Type)----->|
  |<---ACK (got it)-----------------|
  |----Packet 3 (HTML data)-------->|
  |<---ACK (got it)-----------------|
  |                                 |

Step 4: TCP Connection Closed

After the HTTP response is complete, the TCP connection can be closed:

Browser                           Server
  |                                 |
  |----FIN (done)------------------>|
  |<---ACK (ok)---------------------|
  |<---FIN (me too)-----------------|
  |----ACK (goodbye)--------------->|
  |                                 |
  [TCP connection closed]

The key insight: HTTP defines WHAT to send (the request and response format). TCP defines HOW to send it (reliably, in order, error-checked).

Why HTTP Does NOT Replace TCP

This is a common confusion, so let's address it directly:

"If HTTP is the web protocol, why do we need TCP?"

Because HTTP and TCP solve different problems:

HTTP's job:

  • Define the structure of web requests and responses

  • Specify methods (GET, POST, PUT, DELETE)

  • Define status codes (200, 404, 500)

  • Manage headers and cookies

TCP's job:

  • Establish connections

  • Ensure data arrives reliably

  • Maintain packet order

  • Handle errors and retransmissions

Think of it this way:

You're writing a formal letter to a company:

  • HTTP = The business letter format (Dear Sir/Madam, opening paragraph, closing, signature)

  • TCP = The postal service that ensures your letter arrives intact

The letter format doesn't replace the postal service. They work together.

Without TCP, HTTP couldn't:

  • Guarantee the entire request arrives

  • Ensure packets arrive in order

  • Detect and recover from network errors

  • Manage the connection lifecycle

Without HTTP, TCP wouldn't:

  • Know what a "web request" is

  • Understand status codes or headers

  • Define RESTful API conventions

  • Provide a standard way for browsers and servers to communicate

Common Beginner Confusions: Clarified

Confusion 1: "Is HTTP the same as TCP?"

No. HTTP is an application-layer protocol that runs on top of TCP (a transport-layer protocol). HTTP defines web communication format; TCP ensures reliable delivery.

Confusion 2: "Can I use HTTP without TCP?"

Traditionally, no. HTTP/1.1 and HTTP/2 require TCP.

However, HTTP/3 (the newest version) uses QUIC, which is built on UDP instead of TCP. QUIC implements reliability features on top of UDP to get better performance. But it's still providing TCP-like reliability—just in a different way.

Confusion 3: "Why do I see 'TCP port 80' for HTTP?"

Because HTTP uses TCP. When you connect to a web server:

  • HTTP is the application protocol (defining the request/response)

  • TCP is the transport protocol (providing the reliable connection)

  • Port 80 is the standard port where web servers listen for HTTP traffic

http://example.com:80
  ↑         ↑        ↑
protocol  domain   TCP port

Confusion 4: "Is HTTPS different from HTTP in terms of TCP?"

Content-wise: Yes. HTTPS encrypts the HTTP data using TLS/SSL.

Transport-wise: No. HTTPS still runs over TCP (traditionally on port 443).

┌─────────────────┐
│   HTTPS (HTTP + TLS)  │ ← Application Layer
├─────────────────┤
│   TCP           │ ← Transport Layer
├─────────────────┤
│   IP            │ ← Internet Layer
└─────────────────┘

The encryption happens at the application layer. TCP doesn't know or care that the data is encrypted.

Confusion 5: "Do WebSockets use TCP or HTTP?"

WebSockets are interesting because they use both:

  1. Initial handshake: Uses HTTP to establish the connection

  2. Ongoing communication: Upgrades to a persistent TCP connection

  3. Data transfer: Direct TCP communication (not HTTP anymore)

Client                         Server
  |                              |
  |--HTTP GET (Upgrade)---------| ← HTTP handshake
  |<-HTTP 101 (Switching)-------|
  |                              |
  [Now using plain TCP for WebSocket frames]
  |                              |
  |--WS Frame (binary data)----->| ← Direct over TCP
  |<-WS Frame (binary data)------|

So WebSockets start with HTTP but then use raw TCP.

Visualizing the Complete Stack

Let's put it all together with a real-world example: loading a webpage.

Step 1: DNS Lookup (UDP)
-----------------------
Browser ----UDP----> DNS Server
        <---UDP---- "example.com is 93.184.216.34"

Step 2: TCP Connection
-----------------------
Browser ----SYN----> Server (93.184.216.34:80)
        <--SYN-ACK-- Server
        ----ACK----> Server
[TCP connection established]

Step 3: HTTP Request
-----------------------
Browser creates:
  GET /index.html HTTP/1.1
  Host: example.com

Browser ----HTTP over TCP----> Server
[TCP ensures reliable delivery of HTTP request]

Step 4: HTTP Response
-----------------------
Server creates:
  HTTP/1.1 200 OK
  Content-Type: text/html
  [HTML content]

Server ----HTTP over TCP----> Browser
[TCP ensures reliable delivery of HTTP response]

Step 5: TCP Connection Close
-----------------------
Browser ----FIN----> Server
        <---ACK---- Server
        <---FIN---- Server
        ----ACK----> Server
[TCP connection closed]

Notice:

  • UDP for DNS (fast, simple lookup)

  • TCP for HTTP connection (reliable delivery needed)

  • HTTP defining what the request/response look like

  • TCP ensuring the HTTP data arrives correctly

Key Takeaways

TCP vs UDP:

  1. TCP = Reliable, ordered, connection-oriented (use when accuracy matters)

  2. UDP = Fast, connectionless, no guarantees (use when speed matters)

  3. Choose based on whether you need reliability or low latency

HTTP and TCP:

  1. HTTP is an application-layer protocol that defines web communication

  2. TCP is a transport-layer protocol that ensures reliable delivery

  3. HTTP runs on top of TCP - they work together, not as alternatives

  4. You can't have HTTP without some transport (traditionally TCP, now sometimes QUIC)

The mental model:

HTTP = What to say (request/response format)
TCP = How to say it reliably (connection, ordering, error handling)
UDP = How to say it quickly (no guarantees, just send)

Choosing the right protocol:

  • Need reliability? → TCP

  • Need speed? → UDP

  • Building a web app? → HTTP over TCP (or HTTP/3 over QUIC)

  • Building real-time game? → UDP (with custom reliability if needed)

  • Building live video? → UDP (accept some loss for low latency)

Final Thoughts

Understanding TCP, UDP, and HTTP isn't just theoretical knowledge—it's practical understanding that impacts every application you build.

When you're building a web application, you're implicitly using TCP (via HTTP). When you're building a real-time multiplayer game, you might choose UDP. When you're debugging why a connection is slow, understanding the TCP handshake helps you identify bottlenecks.

The internet isn't magic—it's a carefully designed stack of protocols, each solving a specific problem:

  • Ethernet/WiFi: Move bits physically

  • IP: Route packets across networks

  • TCP/UDP: Ensure reliable (or fast) delivery

  • HTTP/FTP/SMTP: Define application-specific communication

Each layer builds on the layer below it. HTTP couldn't exist without TCP. TCP couldn't exist without IP. IP couldn't exist without Ethernet/WiFi.

Understanding these layers—and especially the relationship between TCP and HTTP—makes you a better engineer. You'll write more efficient code, debug issues faster, and design better systems.

So the next time you type a URL and a webpage appears, you'll know: your browser sent an HTTP request over a TCP connection, and that TCP connection ensured every byte arrived correctly, in order, so the page could render perfectly. That's the beauty of layered protocols working together.

TCP vs UDP: When to Use What, and How TCP Relates to HTTP