Ana içeriğe geç

Yan yana

TCPvsHTTP

TCP ile HTTP arasındaki fark nedir?

Güncellendi 2 dk okuma7 fark

Kısaca

TCP iki program arasında güvenilir bir bayt akışı taşır; HTTP ise onun üzerinde çalışır ve bu baytlara istek ve yanıt olarak anlam kazandırır.

TCP

İletim Kontrol Protokolü

TCP, bir bağlantı kurup kaybolan verileri yeniden göndererek iki program arasında veriyi güvenilir ve sıralı biçimde ileten temel bir internet protokolüdür.

TCP sayfasını oku

HTTP

Hiper Metin Aktarım Protokolü

HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.

HTTP sayfasını oku

TCP ve HTTP karşılaştırması

ÖzellikTCPHTTP
KatmanTaşıma katmanı (katman 4)Uygulama katmanı (katman 7)
GöreviBaytları güvenilir biçimde ve sırayla teslim etmekWeb kaynakları için istekleri ve yanıtları tanımlamak
Veri birimiSegmentler hâlinde gönderilen bir bayt akışıMesajlar: bir başlangıç satırı, başlıklar ve isteğe bağlı bir gövde
Bildiği kavramlarPortlar, sıra numaraları ve onaylarMetotlar, URL'ler, durum kodları ve başlıklar
Bağlantı kurulumuÜç adımlı el sıkışma: SYN, SYN-ACK, ACKKendine ait yok; taşıma katmanının bağlantısını kullanır
Üzerinde çalıştığıIPHTTP/1.1 ve HTTP/2 için TCP; HTTP/3 için UDP üzerinde QUIC
Taşıdığı diğer şeylerSSH, e-posta, veritabanı protokolleri ve HTTPWeb sayfaları, REST API'leri ve dosya indirmeleri

Fark, açıklamalı

TCP ve HTTP farklı katmanlarda çalışır; bu yüzden birbirinin alternatifi değil, ortağıdır. TCP (Transmission Control Protocol) bir taşıma protokolüdür: iki program arasında bir bağlantı açar ve kaybolanı yeniden göndererek baytların eksiksiz ve sırayla ulaşmasını garanti eder. HTTP (Hypertext Transfer Protocol) ise bir uygulama protokolüdür: bu baytların ne anlama geldiğini tanımlar; metot ve URL içeren istekler, durum kodu, başlıklar ve gövde içeren yanıtlar.

TCP web sayfaları hakkında hiçbir şey bilmez, HTTP de kaybolan paketlerle uğraşmaz. Bir tarayıcı HTTP/1.1 ya da HTTP/2 üzerinden bir sayfa yüklerken önce sunucuya, genellikle 443 numaralı portta ve üzerinde TLS ile, bir TCP bağlantısı açar, ardından HTTP isteklerini bu bağlantıdan gönderir. Tek bir TCP bağlantısı pek çok HTTP isteği taşıyabilir: art arda ya da HTTP/2 ile iç içe.

İyi bir benzetme, telefon hattı ve konuşmadır. TCP hattın kendisidir: iki tarafı bağlar ve her sözcüğün sırayla karşıya geçmesini sağlar. HTTP ise konuşmanın adabıdır: bir taraf üzerinde anlaşılmış bir biçimde sorar, diğeri bir durum ve içerikle cevap verir. SSH, e-posta için SMTP ve çoğu veritabanı bağlantısı dahil pek çok başka protokol de TCP'yi aynı şekilde kullanır.

Sık yapılan bir yanlış, HTTP'nin her zaman TCP üzerinde çalıştığını düşünmektir. HTTP/3; aynı metotları, başlıkları ve durum kodlarını korurken, UDP üzerine kurulu ve kendi güvenilirliğini ve şifrelemesini sağlayan QUIC protokolü üzerinde çalışır. Ayrıca TCP'yi doğrudan programlayan geliştirici azdır: çoğu, bağlantıları onlar yerine açan HTTP istemcileri, veritabanı sürücüleri ve diğer kütüphaneler aracılığıyla TCP ile karşılaşır.

Hangisini kullanmalısınız?

TCP şu durumlarda doğru seçim:

  • Bir oyun sunucusu ya da cihaz bağlantısı gibi bir iş için kendi protokolünüzü tasarlıyorsunuz.
  • HTTP'nin başlıkları ve istek yapısı olmadan güvenilir bir bayt akışına ihtiyacınız var.
  • Bir veritabanı ya da e-posta protokolü gibi zaten TCP üzerinde çalışan bir protokolü uyguluyor ya da hatalarını ayıklıyorsunuz.

HTTP şu durumlarda doğru seçim:

  • Bir web sitesi, bir web API'si ya da tarayıcının ulaşması gereken herhangi bir şey geliştiriyorsunuz.
  • Standart metotlar, durum kodları, önbellek ve kimlik doğrulama istiyorsunuz.
  • Proxy'ler, yük dengeleyiciler ve güvenlik duvarları trafiği anlayabilmeli.

Ham TCP ile konuşmak ve bir HTTP isteği yapmak (Python)

TCPpython
# TCP: a reliable byte stream; what the bytes mean is up to you
import socket

# Talk to a Redis server, which uses its own text protocol over TCP
with socket.create_connection(("localhost", 6379)) as sock:
    sock.sendall(b"PING\r\n")
    print(sock.recv(64))  # b'+PONG\r\n'
HTTPpython
# HTTP: requests and responses with methods, headers and status codes
import requests

response = requests.get(
    "https://api.example.com/users/42",
    headers={"Accept": "application/json"},
)
print(response.status_code)              # 200
print(response.headers["Content-Type"])  # application/json
print(response.json()["name"])           # Ada

Sık sorulan sorular

HTTP, TCP mi kullanır UDP mi?

HTTP/1.1 ve HTTP/2 TCP kullanır. HTTP/3 ise UDP üzerinde çalışan ve kendi güvenilir teslimatını ve şifrelemesini ekleyen QUIC'i kullanır.

HTTP, TCP'den daha mı hızlı?

Bu soru tam oturmaz: HTTP, TCP tarafından taşınır; yani üstüne başlıklar ve ayrıştırma ekler. Ham TCP üzerindeki özel bir protokol daha yalın olabilir, ama HTTP'nin getirdiği araçları, önbelleği ve uyumluluğu kaybeder.

HTTP hangi portu kullanır?

Varsayılan olarak düz HTTP için 80, HTTPS için 443 numaralı portu. Bunlar TCP portlarıdır; yalnızca HTTP/3 UDP'nin 443 numaralı portunu kullanır.

Daha fazla

Ayarlar