← Назад к вопросам
В чем разница между TCP и UDP?
2.0 Middle🔥 181 комментариев
#API и сетевые протоколы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между TCP и UDP
TCP и UDP — это два основных транспортных протокола, работающих на слое 4 (транспортный слой) модели OSI. Они определяют, как данные передаются между компьютерами в сети.
TCP (Transmission Control Protocol)
Назначение: надежная передача данных с гарантией доставки и порядка.
Характеристики:
- Соединение: требует установления соединения (three-way handshake: SYN, SYN-ACK, ACK)
- Надежность: гарантирует доставку всех пакетов в правильном порядке
- Проверка ошибок: использует механизмы контроля ошибок и повторной отправки
- Скорость: медленнее, чем UDP из-за гарантий
- Применение: веб-сайты (HTTP/HTTPS), email (SMTP, POP3), файловая передача (FTP), SSH
Процесс передачи:
- Установка соединения (handshake)
- Передача данных с подтверждением
- Закрытие соединения
Пример в Node.js:
const net = require('net');
const server = net.createServer((socket) => {
console.log('Client connected');
socket.write('Welcome to TCP server\n');
socket.on('data', (data) => {
console.log('Received:', data.toString());
socket.write('Data received: ' + data);
});
socket.on('end', () => {
console.log('Client disconnected');
});
});
server.listen(3000, 'localhost');
UDP (User Datagram Protocol)
Назначение: быстрая передача данных без гарантии доставки.
Характеристики:
- Соединение: без соединения (connectionless), отправляет данные сразу
- Надежность: не гарантирует доставку пакетов, возможна потеря данных
- Проверка ошибок: базовый контроль целостности, но без повторной отправки
- Скорость: быстрее TCP благодаря отсутствию гарантий
- Применение: видео-конференции, онлайн-игры, DNS, потоковая передача аудио
Пример в Node.js:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log('Message from', rinfo.address, ':', msg.toString());
server.send('Data received', 0, 13, rinfo.port, rinfo.address);
});
server.bind(3000, 'localhost');
const client = dgram.createSocket('udp4');
client.send('Hello', 0, 5, 3000, 'localhost', (err) => {
if (err) console.error(err);
client.close();
});
Сравнительная таблица
| Параметр | TCP | UDP |
|---|---|---|
| Соединение | С соединением | Без соединения |
| Надежность | Гарантирует доставку | Может потерять пакеты |
| Скорость | Медленнее | Быстрее |
| Порядок данных | Гарантирует порядок | Может быть разный порядок |
| Контроль ошибок | Полный контроль | Базовый контроль |
| Использование | HTTP, Email, FTP | DNS, видео, игры |
| Размер заголовка | 20 байт | 8 байт |
Когда использовать
Выбирайте TCP когда:
- Надежность доставки критична (банки, платежи)
- Порядок данных важен (файлы, документы)
- Скорость менее критична
- Требуется контроль потока данных
Выбирайте UDP когда:
- Скорость критична (видео, игры)
- Может быть потеря некоторых пакетов
- Синхронизированная передача в реальном времени
- Широковещательные или многоадресные передачи