Ответ
TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) — это транспортные протоколы, работающие поверх IP. В контексте Node.js выбор между ними влияет на архитектуру сетевых приложений.
TCP — надежный, с установкой соединения.
- Гарантии: Гарантирует доставку, целостность и порядок пакетов. Использует подтверждения (ACK), повторные передачи и контроль перегрузки.
- Соединение: Перед обменом данными устанавливается соединение (three-way handshake).
- Использование в Node.js: Модуль
netдля создания TCP-серверов и клиентов. Это основа для HTTP, WebSocket, баз данных (PostgreSQL, Redis протоколы). - Пример TCP-сервера:
const net = require('net'); const server = net.createServer((socket) => { socket.write('Echo serverrn'); socket.pipe(socket); // Эхо-ответ }); server.listen(1337, '127.0.0.1');
UDP — быстрый, без установки соединения.
- Гарантии: Не гарантирует доставку, порядок или целостность. Пакеты могут быть потеряны, продублированы или прийти в неправильном порядке.
- Соединение: Отправляет датаграммы без предварительного соединения.
- Использование в Node.js: Модуль
dgram. Идеален для сценариев, где скорость важнее надежности. - Пример UDP-сервера:
const dgram = require('dgram'); const server = dgram.createSocket('udp4'); server.on('message', (msg, rinfo) => { console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`); }); server.bind(41234);
Когда что использовать?
- TCP: Веб-серверы (HTTP/HTTPS), API, электронная почта (SMTP), передача файлов (FTP), когда важна полная и точная доставка данных.
- UDP: Стриминг видео/аудио (VoIP, онлайн-игры), DNS-запросы, широковещательные рассылки, системы мониторинга в реальном времени, где допустима некоторая потеря пакетов.
Ответ 18+ 🔞
Слушай, давай разберем эту хрень про TCP и UDP, а то народ путается, как мартышлюшка в апельсинах. Представь, что тебе нужно отправить посылку.
TCP — это как отправка документов с курьером, который охуенно педантичный. Он тебе позвонит, договорится о встрече (это их handshake, три рукопожатия, ёпта), возьмёт коробку, по пути десять раз переспросит, всё ли цело, и принесёт тебе прямо в руки, да ещё и в правильном порядке. Если что-то потеряется — он поедет обратно и заберёт заново. Надёжно, но не быстро. В Node.js за это отвечает модуль net. Весь интернет, по сути, на этом и держится — HTTP, браузеры, почта. Вот смотри, как сервак простейший делается:
const net = require('net');
const server = net.createServer((socket) => {
socket.write('Echo serverrn');
socket.pipe(socket); // Эхо-ответ
});
server.listen(1337, '127.0.0.1');
Видишь? Создаёшь сервер, он слушает порт, и на каждое новое соединение (socket) отвечает. Всё чинно, благородно, с гарантиями. Доверия — ебать, полный ноль, в хорошем смысле.
А теперь UDP — это, блядь, полная его противоположность. Это как крикнуть что-то в толпу на площади в надежде, что нужный человек услышит. Ты просто выпалил данные (датаграмму) в сеть и забыл. Летит быстро, овердохуища быстро, но могло и не долететь, прилететь два раза или вообще впереди того, что ты отправил позже. Порядка — ноль, гарантий — ноль. Зато скорость — пиздец! В Node.js за это безобразие отвечает модуль dgram. Смотри, как выглядит:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.bind(41234);
Никаких соединений! Прилетел пакет — обработали. Не прилетел — и хуй с ним. Терпения ноль, ебать, ждать подтверждений.
Так когда что использовать? Вопрос на миллион, чувак.
TCP — когда тебе критична точность. Веб-сайты, API (чтобы баланс на счету не съехал), отправка фото котика подруге — чтобы каждый пиксель на месте был. Любая хрень, где потеря одного байта — это уже пизда рулю.
UDP — когда скорость важнее идеальной картинки. Онлайн-игра, где лаг в 100 мс — это смерть; голосовой звонок в Discord (пакет потерялся — хрипнуло и ок); стриминг видео (лучше пропустить кадр, чем буферовать). DNS-запросы — тоже UDP, потому что ждать ответа по TCP — это, ядрёна вошь, вечность.
Короче, если тебе нужна надёжная труба — бери TCP и не парься. Если гонишься за скоростью и готов к потерям — твой выбор UDP, хуй с горы. Главное — понимать, зачем ты это делаешь, а не просто тыкать наугад. Э, бошка, думай!
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶