Какие знаешь сетевые протоколы?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие знаю сетевые протоколы:
Как 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 API | HTTP/HTTPS |
| Real-time notifications | WebSocket |
| Микросервисы (high-performance) | gRPC |
| Очереди сообщений | AMQP, Kafka |
| Live stream | UDP/RTMP |
| Синхронизация данных | GraphQL |
| IoT | MQTT |
| Диагностика сети | ICMP (ping) |
Главное правило: Выбирай протокол по требованиям, не наоборот. TCP для надежности, UDP для скорости, WebSocket для реального времени.