TCP - это протокол обеспечения надежности прямых соединений,
созданный для многоуровневой иерархии протоколов, поддерживающих межсетевые
приложения. Протокол TCP обеспечивает надежность коммуникаций между парами
процессов на хост-компьютерах, включенных в различные компьютерные
коммуникационные сети, которые объединены в единую систему. TCP предполагает,
что он может получить простой, потенциально ненадежный сервис для своих
датаграмм со стороны протоколов нижнего уровня. Протокол TCP взаимодействует с
одной стороны с пользователем или прикладной программой, а с другой - с
протоколом более низкого уровня, таким как протокол Internet.
Главной целью
протокола TCP является обеспечение надежного, безопасного сервиса для логических
цепей или соединений между парами процессов.
Если два процесса желают
обмениваться информацией, соответствующие программы протокола TCP должны сперва
установить соединение (на каждой стороне инициализировать информацию о статусе).
По завершении обмена информацией соединение должно быть закрыто, чтобы
освободить ресурсы для предоставления другим пользователям.
Поскольку
соединения должны устанавливаться между ненадежными хост-компьютерами и через
ненадежную коммуникационную систему Internet, то во избежание ошибочной
инициализации соединений используется механизм подтверждения связи с
хронометрированными номерами очереди.
Для установления или инициализации соединения как бы два протокола TCP используют не сам TCP, а процессы или конечные станции, и должны синхронизировать начальные порядковые номера (ISN) сегментов друг друга для данного соединения. Порядковые номера используются для того, чтобы отслеживать последовательность обмена и гарантировать отсутствие потерянных фрагментов данных, которые требуют для пересылки нескольких пакетов. Начальный порядковый номер представляет собой стартовый номер, используемый при установлении TCP-соединения. Обмен начальными порядковыми номерами в процессе выполнения последовательности установления соединения гарантирует возможность восстановления потерянных данных, если в будущем возникнут проблемы. Синхронизация выполняется путем обмена сегментами, несущими номера ISN и управляющий бит, называемый SYN (от английского synchronize — синхронизировать).
Рис. 6.2.1 Соединение с трехсторонним квитированием
Процесс синхронизации требует, чтобы каждая сторона послала свой номер ISN и получила подтверждение и ISN от другой стороны соединения. Каждая сторона должна принимать ISN от другой стороны и посылать положительное подтверждение (АСК) в определенном порядке, который описан в следующей последовательности шагов.
Размером окна называют количество сегментов, которое
может быть передано в процессе ожидания подтверждения. После того как
хост-машина передаст определяемое размером окна количество сегментов, она должна
будет получить подтверждение и только потом сможет послать какие-либо другие
сообщения.
Размер окна определяет объем данных, который может принять
принимающая станция за один раз. Если размер окна равен 1, подтверждаться должен
каждый сегмент, и только после этого передается следующий. Это приводит к
неэффективному использованию хост-машиной полосы пропускания. Целью введения
механизма окон является улучшение управления потоком и надежности. При размере
окна, равном 1, наблюдается неэффективное использование полосы пропускания.
Для регулирования потока данных между устройствами в протоколе
TCP используется механизм управления потоком. Принимающий протокол TCP сообщает
посылающему протоколу TCP размер окна. Этот размер задает количество байтов,
начиная с номера подтверждения, которое принимающий TCP готов принять на текущий
момент.
В протоколе TCP используются ожидательные подтверждения, означающие,
что номер подтверждения соответствует октету, ожидаемому следующим. Слово
"скользящее" в термине скользящее окно отражает тот факт, что размер окна
согласуется динамически во время TCP-сеанса. Использование скользящего окна
приводит к более эффективному использованию хост-машиной полосы пропускания,
поскольку больший размер окна позволяет передавать больший объем данных,
откладывая момент получения подтверждения.
Протокол TCP обеспечивает организацию последовательности
сегментов, которую предваряет подтверждение с номером, определяющим точку
отсчета. Перед передачей каждая дейтаграмма нумеруется. На принимающей станции
протокол TCP собирает сегменты в полное сообщение. Если какой-либо порядковый
номер в последовательности теряется, то сегмент с этим номером передается
повторно. Кроме того, если через заданный период времени сегмент не получает
свое подтверждение, то он тоже передается повторно.
Порядковые номера и
номера подтверждений являются направленными. Это означает, что связь
осуществляется в обоих направлениях. Кроме того, протокол TCP предоставляет
возможность полной дуплексной связи. Как следствие, подтверждения гарантируют
надежность.