В чем ключевые различия между TCP и UDP на транспортном уровне?

«В чем ключевые различия между TCP и UDP на транспортном уровне?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TCP (Transmission Control Protocol) — это надежный протокол с установлением соединения. UDP (User Datagram Protocol) — это быстрый протокол без установления соединения (дейтаграммный).

Сравнение TCP vs UDP: Критерий TCP UDP
Надежность Гарантирует доставку, порядок пакетов и контроль перегрузок. Не гарантирует доставку, порядок или целостность данных.
Установка соединения Требует handshake (SYN, SYN-ACK, ACK). Соединение не устанавливается.
Накладные расходы Высокие (заголовки, подтверждения, повторные передачи). Низкие (маленький заголовок).
Скорость Медленнее из-за обеспечения надежности. Быстрее, подходит для реального времени.
Использование Веб (HTTP/HTTPS), email (SMTP), передача файлов (FTP). Видеостриминг, VoIP, DNS-запросы, онлайн-игры.

Пример создания сокетов на Python:

import socket

# TCP-клиент (надежный потоковый сокет)
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # SOCK_STREAM
tcp_socket.connect(("example.com", 80))
tcp_socket.send(b"GET / HTTP/1.1rnHost: example.comrnrn")
response = tcp_socket.recv(4096)

# UDP-клиент (быстрый дейтаграммный сокет)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # SOCK_DGRAM
udp_socket.sendto(b"DNS Query", ("8.8.8.8", 53)) # Нет connect(), данные отправляются сразу
data, addr = udp_socket.recvfrom(1024)

Выбор протокола зависит от требований приложения: нужна ли гарантия доставки (TCP) или минимальная задержка (UDP).