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

Что такое TCP?

1.0 Junior🔥 151 комментариев
#API и сетевые протоколы

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

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

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

TCP (Transmission Control Protocol) — это один из фундаментальных протоколов интернета, лежащий в основе большей части современной цифровой коммуникации. Это протокол транспортного уровня (Layer 4 в модели OSI), обеспечивающий надёжную доставку данных между приложениями.

Основные характеристики TCP

ТCP — это протокол, ориентированный на соединение (connection-oriented). Это значит:

  1. Надёжность — данные доставляются в правильном порядке и полностью
  2. Соединение — перед передачей данных нужно установить соединение (handshake)
  3. Поток данных — данные рассматриваются как непрерывный поток, а не отдельные пакеты
  4. Управление потоком — TCP контролирует скорость передачи, чтобы не перегрузить сеть
  5. Обнаружение ошибок — проверяет целостность данных с помощью контрольных сумм

Три этапа TCP соединения (Three-way handshake)

Перед обменом данными, TCP устанавливает соединение в три этапа:

Клиент (SYN)              Сервер
  |------- SYN -------->  |
  |  (SEQ=100)            |
  |                       |
  |  <----- SYN-ACK ------|
  |        (SEQ=300,      |
  |        ACK=101)       |
  |                       |
  |------- ACK -------->  |
  |      (SEQ=101,        |
  |      ACK=301)         |
  |
  Соединение установлено
  1. SYN — клиент инициирует соединение
  2. SYN-ACK — сервер подтверждает и отправляет свой порядковый номер
  3. ACK — клиент подтверждает соединение

TCP vs UDP

Для сравнения с другим популярным протоколом транспортного уровня:

ХарактеристикаTCPUDP
СоединениеТребуетсяНе требуется
НадёжностьГарантированаНет гарантий
СкоростьМедленнееБыстрее
ПорядокСохраняетсяНе гарантирован
ИспользованиеHTTP, HTTPS, FTP, SSHDNS, видео, онлайн игры

TCP в Node.js

В Node.js работа с TCP довольно простая благодаря модулю net:

const net = require('net');

// Создание TCP сервера
const server = net.createServer((socket) => {
  console.log('Клиент подключился');
  
  // Отправка данных клиенту
  socket.write('Привет от сервера!');
  
  // Приём данных
  socket.on('data', (data) => {
    console.log('Получено:', data.toString());
  });
  
  // Обработка отключения
  socket.on('end', () => {
    console.log('Клиент отключился');
  });
  
  // Обработка ошибок
  socket.on('error', (error) => {
    console.error('Ошибка socket:', error);
  });
});

server.listen(3000, '127.0.0.1', () => {
  console.log('TCP сервер слушает на порте 3000');
});

TCP клиент в Node.js

const net = require('net');

const socket = net.createConnection({ port: 3000, host: 'localhost' });

socket.on('connect', () => {
  console.log('Подключен к серверу');
  socket.write('Привет от клиента!');
});

socket.on('data', (data) => {
  console.log('Получено от сервера:', data.toString());
  socket.end(); // Закрыть соединение
});

socket.on('error', (error) => {
  console.error('Ошибка:', error);
});

Практические примеры использования TCP

1. HTTP/HTTPS — веб-протоколы работают поверх TCP. Когда вы открываете сайт, браузер создаёт TCP соединение на порте 80 (HTTP) или 443 (HTTPS).

2. Email (SMTP, POP3, IMAP) — все почтовые протоколы используют TCP для гарантированной доставки писем.

3. SSH — безопасное удаленное управление серверами также использует TCP.

4. Базы данных — PostgreSQL, MySQL, MongoDB, Redis используют TCP для коммуникации между клиентом и сервером:

// Пример: подключение к PostgreSQL (использует TCP)
const pg = require('pg');
const client = new pg.Client({
  host: 'localhost',
  port: 5432, // TCP порт PostgreSQL
  database: 'mydb',
  user: 'user',
  password: 'password',
});

await client.connect(); // Устанавливает TCP соединение

Жизненный цикл TCP соединения

  1. LISTEN — сервер ожидает входящих соединений
  2. ESTABLISHED — соединение установлено и активно
  3. TIME_WAIT — период ожидания после закрытия соединения
  4. CLOSED — соединение полностью закрыто

Важные понятия TCP

Порты — числовой идентификатор процесса на машине (0-65535):

  • 0-1023 — зарезервированные порты (HTTP 80, HTTPS 443, SSH 22)
  • 1024-49151 — зарегистрированные порты
  • 49152-65535 — эфемерные (временные) порты

SEQ и ACK номера — используются для отслеживания порядка пакетов и подтверждения получения.

MTU (Maximum Transmission Unit) — максимальный размер пакета (обычно 1500 байт в Ethernet). TCP автоматически разбивает данные на пакеты меньше MTU.

Вывод

ТCP — это мощный и надёжный протокол, обеспечивающий гарантированную доставку данных. Хотя он медленнее UDP из-за накладных расходов на установку соединения и проверку, эта надёжность критична для большинства приложений. Как backend разработчик, вы будете использовать TCP через HTTP/HTTPS, базы данных и другие протоколы ежедневно.