← Назад к вопросам

Какие знаешь сетевые протоколы?

2.3 Middle🔥 171 комментариев
#API и сетевые протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какие знаю сетевые протоколы:

Как backend-разработчик работаю с протоколами на разных уровнях OSI модели:

Физический + Канальный уровень

Ethernet — стандарт для локальных сетей, работает с MAC адресами. На этом уровне обычно не пишу код, но знаю что именно он доставляет пакеты внутри ЦОДов и домашних сетей.

Сетевой уровень (Layer 3)

IP (IPv4 / IPv6)

Самый базовый протокол интернета. Маршрутизирует пакеты между хостами используя IP адреса.

IPv4: 4 байта адреса (192.168.1.1) — исчерпывается, поэтому создали IPv6. IPv6: 16 байт (2001:0db8:85a3::8a2e:0370:7334) — достаточно на будущее.

ICMP

Протокол для диагностики сети. ping использует ICMP:

ping google.com  # ICMP Echo Request/Reply

Транспортный уровень (Layer 4)

TCP (Transmission Control Protocol)

Надежная доставка, сохранение порядка пакетов, соединение.

Как работает:

1. Three-way handshake (SYN, SYN-ACK, ACK) — установка соединения
2. Передача данных с ACK'ами
3. FIN флаги — закрытие соединения

Используется в:

  • HTTP/HTTPS (веб)
  • SSH (удаленный доступ)
  • SMTP (почта)
  • PostgreSQL, MySQL (БД)

В Node.js:

const net = require('net');
const server = net.createServer((socket) => {
  socket.write('Hello!\n');
  socket.on('data', (data) => {
    console.log(data.toString());
  });
});
server.listen(5000);

UDP (User Datagram Protocol)

Быстрый, но без гарантии доставки. Используется когда скорость важнее надежности.

Используется в:

  • DNS (запросы доменов)
  • NTP (синхронизация времени)
  • Онлайн игры (real-time)
  • VoIP (видеозвонки)
  • Стриминг видео

В Node.js:

const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
  console.log(`Получено: ${msg} от ${rinfo.address}`);
});
server.bind(41234);

TCP vs UDP:

  • TCP: надежный, медленнее, используется в интернете
  • UDP: быстрый, может потеряться, используется в real-time

Прикладной уровень (Layer 7)

HTTP / HTTPS

Гиперtextový протокол. HTTP работает поверх TCP.

HTTP версии:

  • HTTP/1.1: GET, POST, HEAD, PUT, DELETE. Один запрос = одно соединение (медленно)
  • HTTP/2: Multiplexing — несколько запросов в одном соединении
  • HTTP/3: основан на UDP (QUIC), еще быстрее

В Node.js:

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify({status: 'ok'}));
});
server.listen(3000);

Для HTTPS нужен сертификат (Let's Encrypt).

WebSocket

Двусторонняя коммуникация через TCP соединение. Работает поверх HTTP, но потом switch'ится на свой протокол.

Используется в:

  • Real-time чаты
  • Live notifications
  • Multiplayer игры
  • Stock market dashboards

В Node.js с Socket.IO:

const io = require('socket.io')(3000);
io.on('connection', (socket) => {
  socket.on('message', (data) => {
    io.emit('message', data);
  });
});

GraphQL

Язык запросов поверх HTTP. Клиент запрашивает только нужные данные.

Отличие от REST:

REST: GET /users/123 → вся информация
GraphQL: query { user(id:123) { name email } } → только name и email

gRPC

Протокол на базе HTTP/2. Использует Protocol Buffers для сериализации.

Плюсы:

  • Очень быстро (бинарный, а не JSON)
  • Type-safe
  • Поддерживает streaming

Используется в:

  • Микросервисы (высоконагруженные)
  • Google, Uber, Netflix

Message Queue протоколы

AMQP (RabbitMQ)

Протокол для очередей сообщений. Гарантирует доставку.

const amqp = require('amqplib');
const conn = await amqp.connect('amqp://localhost');
const ch = await conn.createChannel();
await ch.assertQueue('tasks');
ch.sendToQueue('tasks', Buffer.from('do-something'));

MQTT

Легкий протокол для IoT. Pub/Sub модель.

Используется в:

  • IoT датчики
  • Домашняя автоматизация (умный дом)

DNS

Протокол для преобразования доменов в IP адреса.

const dns = require('dns');
dns.lookup('google.com', (err, address) => {
  console.log('IP:', address); // 142.251.32.46
});

Когда что использовать

ЗадачаПротокол
REST APIHTTP/HTTPS
Real-time notificationsWebSocket
Микросервисы (high-performance)gRPC
Очереди сообщенийAMQP, Kafka
Live streamUDP/RTMP
Синхронизация данныхGraphQL
IoTMQTT
Диагностика сетиICMP (ping)

Главное правило: Выбирай протокол по требованиям, не наоборот. TCP для надежности, UDP для скорости, WebSocket для реального времени.

Какие знаешь сетевые протоколы? | PrepBro