
Передача данных
Данные, передаваемые модулю ТСР пользовательским приложением, записываются в передающий буфер. В зависимости от требований производительности протокол ТСР может осуществлять отправку данных 2-мя способами.
1 способ: Создавать отдельные пакеты для каждой группы данных, поступивших от приложений. Такой способ используется при частой передаче данных и малом их объеме.
2 способ: дожидаться накопления большого объема данных и только после этого формировать и отправлять пакеты. Доставка данных от модуля TCP/IP пользовательскому приложению может осуществляться 2 способами:
1 способ – при получении сегментов в их исходной последовательности.
2 способ – занесение данных из нескольких сегментов в буфер приема.
В реальных сетях некоторые пакеты поступают с нарушением исходного порядка следования. В этом случае возможны 2 варианта:
Протокол TCP на приемной стороне принимает только те пакеты, которые приходят в порядке отправления, а остальные отбрасывает. При этом упрощается реализация протокола, но создается дополнительная нагрузка на сеть, в следствии наличия повторной передачи.
Принимает все пакеты, зафиксированные в окне получения, вне зависимости от их порядка поступления. При этом требуются более сложные алгоритмы, а также схема буферизации данных и отслеживания порядка их поступления.
Протокол ТСР поддерживает очередь отправленных пакетов, подтверждение о приеме которых еще не поступили. Согласно спецификации протокола сегмент будет передан повторно, если подтверждение не поступит в течение некоторого времени. Разные реализации протокола могут поддерживать 3 возможные стратегии передачи:
Только первый – поддерживается один таймер передачи для всей очереди. При получении подтверждения первый сегмент удаляется из очереди и таймер сбрасывается.
Если время таймера истекает, повторно передается сегмент из начала очереди и таймер обнуляется. Преимущества – повышается эффективность передачи трафика, так как повторно передаются только потерянные сегменты. Недостаток – из-за того, что таймер для 2-го сегмента в очереди не устанавливается, пока не подтвержден прием 1 сегмента, могут возникать задержки в передаче.
Пакетная стратегия. Так же поддерживается 1 таймер повторной передачи для всей очереди и, когда приходит подтверждение из очереди повторной передачи, удаляются все сегменты и таймер сбрасывается. Если время таймера истекло, повторно передаются все сегменты из очереди и таймер обнуляется. Преимущества – снижается вероятность длительности задержек. Недостатки – способна привести к ненужной повторной передаче.
Индивидуальная стратегия – для каждого сегмента в очереди существует отдельный таймер. При получении подтверждения из очереди повторной передачи удаляется 1 сегмент, а соответствующий таймер обнуляется. По истечении времени какого-либо таймера повторно передается только соответствующий сегмент и его таймер сбрасывается. Этот способ устраняет недостаток 1 варианта ценой более сложной реализации.
При поступлении пакета протокола ТСР на приемной стороне имеется 2 варианта выбора времени отправки подтверждения:
Немедленно. Сразу после принятия данных с определенным номером последовательности передается пустой сегмент, содержащий соответствующий номер подтверждения. Преимущества – простота реализации, поддержка полной информированности протокола ТСР на передающей стороне. Недостатки – дополнительные пустые пакеты в сети, что приводит к ее перегрузкам.
С накоплением. Когда данные успешно приняты, отмечается необходимость в подтверждении, которая отправляется с очередным исходящим пакетом данных, с соответствующим установленным флагом. Во избежание длительных задержек устанавливается таймер окна. Если время таймера окна истекает до момента отсылки очередного сегмента данных, то отправителю отправляется пустой сегмент, содержащий соответствующий номер подтверждения.
Учитывая недостатки 1 варианта, на практике, как правило, используется 2 вариант, который усложняет работу принимающей стороны и усложняет задачу отправителю, связанную с анализом поступающих пакетов