Как работает протокол TCP?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
TCP (Transmission Control Protocol) — это протокол транспортного уровня, обеспечивающий надежную, ориентированную на соединение доставку данных.
Ключевые аспекты работы:
-
Трехстороннее рукопожатие (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). - Соединение установлено, можно передавать данные.
-
Потоковая передача данных: Данные передаются как непрерывный поток байтов, а не отдельные пакеты. TCP сегментирует поток данных в сегменты для передачи.
-
Нумерация последовательности (Sequence Numbers): Каждый байт в потоке данных имеет уникальный номер. Сегменты содержат номер первого байта, который в них находится (sequence number), и номер подтверждения (acknowledgement number), указывающий на следующий байт, который отправитель ACK ожидает получить.
-
Подтверждения (Acknowledgements - ACK): Получатель отправляет ACK, чтобы сообщить отправителю, какие данные были успешно получены. Если отправитель не получает ACK в течение определенного времени (тайм-аут), он повторно отправляет сегмент.
-
Контроль ошибок (Error Control): Используются контрольные суммы (checksums) для проверки целостности данных. Если сегмент поврежден, он отбрасывается, и отправитель ожидает тайм-аута или дублированного ACK для повторной передачи.
-
Контроль потока (Flow Control): Механизм, используемый для предотвращения переполнения буфера получателя. Получатель сообщает отправителю размер своего окна получения (receive window) в АСК-пакетах. Отправитель может отправить только столько данных, сколько указано в окне.
-
Контроль перегрузки (Congestion Control): Механизм для определения доступной пропускной способности сети и динамического регулирования скорости передачи данных, чтобы избежать перегрузки сети. Включает алгоритмы, такие как медленный старт (slow start), предотвращение перегрузки (congestion avoidance), быстрое повторное восстановление (fast retransmit) и быстрое восстановление (fast recovery).
-
Закрытие соединения: Обычно использует четырехстороннее рукопожатие:
- Одна сторона отправляет 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