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

Ответ

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).

Ответ 18+ 🔞

А, ну вот, подъехали к самому сокровенному, к разнице между TCP и UDP! Это ж как два брата-антагониста, один — занудный перфекционист, а второй — похуист-спринтер. Сейчас разжуем.

TCP (Transmission Control Protocol) — это такой дотошный засранец, который хочет, чтобы всё было идеально. Он надёжный, с установкой соединения. Представь, ты звонишь другу: «Алло, ты меня слышишь?» — «Да, слышу!» — «Отлично, тогда слушай историю!». Это и есть handshake (рукопожатие, блядь). Он гарантирует, что все пакеты придут целыми, в правильном порядке и без потерь. Если что-то теряется — он будет ныть и переспрашивать, пока не получит. Надёжность, мать её.

UDP (User Datagram Protocol) — это его полная противоположность, ебушки-воробушки! Быстрый, без установки соединения (дейтаграммный, значит, кинул и забыл). Это как крикнуть в толпу: «Эй, кто видел мои ключи?». Может, кто-то ответит, а может, и нет. Никаких гарантий доставки, порядка или целостности. Зато — овердохуища быстро!

Сравнение TCP vs UDP (или «Зануда против Похуиста»):

Критерий TCP (Зануда) UDP (Похуист)
Надежность Гарантирует доставку, порядок и контроль. Будет орать, пока не получит всё. Не гарантирует нихуя. Отправил — и да похуй.
Установка соединения Требует трёхэтапного знакомства (SYN, SYN-ACK, ACK). Церемонии, блядь. Соединение? Не, не слышал. Кидай данные сразу в лицо.
Накладные расходы Высокие. Куча служебной информации, подтверждений, повторных передач. Низкие. Заголовок маленький, как совесть у пидараса.
Скорость Медленнее, потому что везде страхуется и проверяет. Быстрее, идеально для всего, где задержка — это пиздец (стримы, игры).
Использование Всё, где важна точность: веб (HTTP), почта (SMTP), файлы (FTP). Всё, где важна скорость: видео, звонки (VoIP), DNS, онлайн-игры.

Пример создания сокетов на Python (смотри, не перепутай):

import socket

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

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

Выбор протокола — это всегда вопрос приоритетов, ёпта. Нужно, чтобы каждое «люблю» дошло точно и в нужном порядке? Бери TCP, этого зануду. Или нужно, чтобы «огонь!» в игре долетело быстрее, даже если каждое десятое потеряется? Тогда твой выбор — UDP, наш лихой похуист. Волнение ебать, когда выбираешь.