Основные алгоритмы TCP-протокола
Установление соединения (алгоритм трехстороннего рукопожатия)
Для установления надёжного соединения TCP использует алгоритм, известный как трехстороннее рукопожатие. Этот процесс включает три шага, чтобы обе стороны подтвердили готовность к обмену данными:
- SYN: Клиент посылает серверу сегмент SYN, который содержит начальный номер последовательности (Sequence Number), чтобы инициализировать соединение.
- SYN-ACK: Сервер отвечает сегментом SYN-ACK, указывая свой номер последовательности и подтверждая (ACK) номер, полученный от клиента.
- ACK: Клиент отправляет подтверждение ACK для завершения процесса установки соединения, после чего начинается передача данных.
Завершение соединения (алгоритм четырехстороннего завершения)
Процесс завершения соединения TCP включает четыре шага, так как обе стороны должны подтвердить завершение соединения:
- FIN от клиента: Клиент отправляет серверу сегмент FIN, чтобы сообщить о завершении передачи данных.
- ACK от сервера: Сервер подтверждает получение FIN сегментом ACK.
- FIN от сервера: После этого сервер отправляет свой сегмент FIN для завершения своей стороны соединения.
- ACK от клиента: Клиент отвечает сегментом ACK, завершив разрыв соединения.
Передача сегментов данных
TCP передаёт данные в виде сегментов, используя номер последовательности для упорядочивания данных. Основные этапы передачи данных:
- Сегментация: TCP разбивает данные на сегменты, каждый из которых нумеруется по порядку с помощью номера последовательности (Sequence Number).
- Передача сегментов: Сегменты передаются по сети, и получатель подтверждает получение каждого из них с помощью номера подтверждения (Acknowledgment Number).
- Проверка целостности: TCP использует контрольную сумму для проверки целостности каждого сегмента, предотвращая ошибки при передаче.
Действия при потере сегментов
При обнаружении потери сегмента TCP выполняет повторную передачу, чтобы гарантировать надёжную доставку данных. Основные алгоритмы для обработки потерь:
- Повторная передача с таймером: TCP запускает таймер ожидания после отправки сегмента. Если подтверждение (ACK) не получено в течение определённого времени, сегмент передаётся повторно.
- Fast Retransmit (быстрая повторная передача): Если получатель посылает несколько дублирующих ACK (например, три ACK с одинаковым номером подтверждения), отправитель предполагает потерю сегмента и выполняет его повторную передачу до истечения таймера.
Борьба с перегрузками в сети
TCP использует несколько алгоритмов для борьбы с перегрузками, чтобы предотвратить перегрузку сети и поддерживать оптимальную скорость передачи данных:
1. Slow Start (медленный старт)
При установлении нового соединения TCP начинает передачу с небольшого размера окна и удваивает его размер с каждым подтверждением. Это позволяет постепенно увеличивать объём передаваемых данных, пока не будет достигнута допустимая пропускная способность.
2. Congestion Avoidance (избежание перегрузки)
При достижении порога перегрузки (threshold) TCP перестаёт удваивать размер окна и начинает увеличивать его на фиксированное значение с каждым подтверждением. Это замедляет рост потока данных и предотвращает перегрузку сети.
3. Fast Recovery (быстрое восстановление)
После быстрой повторной передачи TCP использует алгоритм быстрого восстановления для восстановления потока данных. Вместо того чтобы уменьшать окно до минимального значения, как в медленном старте, TCP уменьшает окно на половину и продолжает передачу.
4. Congestion Control (управление перегрузкой)
TCP динамически регулирует размер окна перегрузки в зависимости от условий сети. При потере данных TCP уменьшает окно перегрузки, замедляя передачу данных, что позволяет снизить нагрузку на сеть.
Заключение
TCP использует сложные алгоритмы для установления, поддержания и завершения соединения, надёжной передачи данных и борьбы с перегрузками. Эти алгоритмы обеспечивают высокую надёжность передачи и предотвращают перегрузку сети, адаптируясь к её состоянию.