TCP vs HTTP
What is TCP?
TCP (Transmission Control Protocol) is a transport-layer protocol.
It provides a reliable, ordered byte-stream connection between two endpoints (client and server).
TCP is like a pipe that carries bytes.
What is HTTP?
HTTP (Hypertext Transfer Protocol) is an application-layer protocol.
It defines how to format requests and responses (methods like GET/POST, headers, body, status code).
HTTP runs on top of TCP (most commonly).
Key idea
TCP does NOT have “methods”.
HTTP has methods (GET/POST/PUT/DELETE), and those methods are just text/bytes sent through TCP.
So the correct mental model is:
Diagram (layering)
Application layer: HTTP (request/response format)
Transport layer: TCP (reliable connection)
Network layer: IP (routing packets)
Example: Using TCP for HTTP (manual)
You can open a TCP connection and send an HTTP request manually:
conn, _ := net.Dial("tcp", "example.com:80")
defer conn.Close()
fmt.Fprint(conn, "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n")
io.Copy(os.Stdout, conn)
Example: Using HTTP client (recommended)
Instead of crafting bytes yourself, use `http.Client`:
resp, err := http.Get("http://example.com/")
if err != nil { return }
defer resp.Body.Close()
When to use which
Use http.Client when the server speaks HTTP/HTTPS (REST APIs, web, webhooks).
Use net.Dial when you need raw TCP for a non-HTTP protocol (Redis/MySQL/custom protocols).
Hard words (English)
transport layer /ˈtrænspɔːrt ˈleɪər/: tầng vận chuyển
application layer /ˌæplɪˈkeɪʃən ˈleɪər/: tầng ứng dụng
protocol /ˈproʊtəkɔːl/: giao thức
byte stream /baɪt striːm/: luồng byte
reliable /rɪˈlaɪəbəl/: đáng tin cậy
ordered /ˈɔːrdərd/: đúng thứ tự
endpoint /ˈendpɔɪnt/: điểm kết nối (client/server)
craft /kræft/: tự “chế”/tự tạo