Назад к вопросам
Junior
77
questionbank

Как работает протокол TCP?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

TCP (Transmission Control Protocol) — это протокол транспортного уровня, обеспечивающий надежную, ориентированную на соединение доставку данных.

Ключевые аспекты работы:

  1. Трехстороннее рукопожатие (Three-way Handshake):

    • Клиент отправляет SYN (Synchronize) пакет с начальным номером последовательности (ISN).
    • Сервер получает SYN, отправляет SYN-ACK (Synchronize-Acknowledge), содержащий свой ISN и подтверждение (ACK) ISN клиента (acknowledgement number = client ISN + 1).
    • Клиент получает SYN-ACK, отправляет ACK, подтверждающий ISN сервера (acknowledgement number = server ISN + 1).
    • Соединение установлено, можно передавать данные.
  2. Потоковая передача данных: Данные передаются как непрерывный поток байтов, а не отдельные пакеты. TCP сегментирует поток данных в сегменты для передачи.

  3. Нумерация последовательности (Sequence Numbers): Каждый байт в потоке данных имеет уникальный номер. Сегменты содержат номер первого байта, который в них находится (sequence number), и номер подтверждения (acknowledgement number), указывающий на следующий байт, который отправитель ACK ожидает получить.

  4. Подтверждения (Acknowledgements - ACK): Получатель отправляет ACK, чтобы сообщить отправителю, какие данные были успешно получены. Если отправитель не получает ACK в течение определенного времени (тайм-аут), он повторно отправляет сегмент.

  5. Контроль ошибок (Error Control): Используются контрольные суммы (checksums) для проверки целостности данных. Если сегмент поврежден, он отбрасывается, и отправитель ожидает тайм-аута или дублированного ACK для повторной передачи.

  6. Контроль потока (Flow Control): Механизм, используемый для предотвращения переполнения буфера получателя. Получатель сообщает отправителю размер своего окна получения (receive window) в АСК-пакетах. Отправитель может отправить только столько данных, сколько указано в окне.

  7. Контроль перегрузки (Congestion Control): Механизм для определения доступной пропускной способности сети и динамического регулирования скорости передачи данных, чтобы избежать перегрузки сети. Включает алгоритмы, такие как медленный старт (slow start), предотвращение перегрузки (congestion avoidance), быстрое повторное восстановление (fast retransmit) и быстрое восстановление (fast recovery).

  8. Закрытие соединения: Обычно использует четырехстороннее рукопожатие:

    • Одна сторона отправляет FIN (Finish) пакет.
    • Другая сторона отправляет ACK для FIN.
    • Другая сторона отправляет свой FIN (после завершения передачи своих оставшихся данных).
    • Первая сторона отправляет ACK для этого FIN.
    • Соединение закрыто.

Структура TCP сегмента:

Поле Размер (байты) Описание
Source Port 2 Порт отправителя
Destination Port 2 Порт получателя
Sequence Number 4 Номер первого байта данных в сегменте
Acknowledgement Number 4 Номер следующего ожидаемого байта
Data Offset/Header Length 4 bits Длина заголовка TCP
Reserved 6 bits Зарезервировано
Flags (Control Bits) 6 bits URG, ACK, PSH, RST, SYN, FIN
Window Size 2 Размер окна получателя
Checksum 2 Контрольная сумма заголовка и данных
Urgent Pointer 2 Указывает на срочные данные (если URG установлен)
Options Переменная Дополнительные опции
Padding Переменная Для выравнивания заголовка
Data Переменная Передаваемые данные
// Флаги (Control Bits):
// URG: Urgent Pointer field significant
// ACK: Acknowledgement field significant
// PSH: Push function
// RST: Reset the connection
// SYN: Synchronize sequence numbers
// FIN: No more data from sender