Исходный порядковый номер (англ. initial sequence number, ISN) для потока начинается не с нуля. Он генерируется специальным алгоритмом, который инкрементирует ISN, назначенный новому соединению (чтобы старые сегменты из предыдущих соединений не могли быть перепутаны с новыми). Данный алгоритм генерирует сложноугадываемый номер ISN. Это 32-разрядное число, сбрасываемое к нулю при достижении максимального значения.

Управление потоком

Механизм управления потоком позволяет избежать ситуаций, когда быстрый отправитель «забрасывает» пакетами медленного получателя. Для его реализации в протоколе TCP предусмотрен буфер, который хранит входящие данные (каждая сторона TCP-соединения сообщает размер своего буфера в момент подключения). По мере передачи данные накапливаются в этом буфере и удаляются из него, когда приложение их считывает. Вместе с каждым подтверждением получатель шлет отправителю сведения о том, сколько свободного места осталось во входящем буфере (то есть сколько байтов отправитель может передать). Механизм управления потоком в протоколе TCP задействует так называемый алгоритм скользящего окна, который следит за тем, чтобы общий объем неподтвержденных сегментов между отправителем и получателем не превышал N байтов (предложенный размер окна). Если входящий буфер получателя полностью заполняется, то окно считается закрытым, а отправляющая сторона останавливает передачу.

Получатель может переопределить стандартный размер входящего буфера, используя параметр сокета SO_RCVBUF (см. страницу socket(7) руководства).

Контроль над перегрузкой: алгоритмы замедленного старта и предотвращения перегрузки

Алгоритмы такого контроля, применяющиеся в TCP, предназначены для того, чтобы не дать быстрому отправителю переполнить сеть. Если отправляющая сторона передает пакеты быстрее, чем промежуточный маршрутизатор может их перенаправить, то это приводит к потере пакетов. Такая ситуация, в свою очередь, может вызвать серьезное ухудшение производительности, если отправляющая сторона продолжит передавать данные с той же скоростью. Алгоритмы контроля над перегрузкой играют важную роль в двух случаях.

• После установки соединения. На данном этапе (или когда возобновляется передача информации в ранее неактивном соединении) отправитель мог бы сразу послать максимальное количество сегментов, которое влезет в окно, афишируемое получателем (на самом деле именно это и делали ранние реализации протокола TCP). Но если сеть не может справиться с таким потоком сегментов, то отправитель сразу же рискует переполнить сеть.

• При обнаружении перегрузки. При обнаружении отправителем перегрузки он должен снизить скорость передачи. Это обнаружение основывается на предположении о том, что процент потери пакетов в результате ошибок передачи является крайне низким; следовательно, если пакет утерян, то в качестве причины подразумевается перегрузка.

Стратегия контроля над перегрузкой в протоколе TCP состоит из двух алгоритмов: замедленного старта и предотвращения перегрузки.

Алгоритм замедленного старта заставляет TCP начинать передачу данных на низкой скорости, но позволяет экспоненциально увеличивать ее по мере получения подтверждений от принимающей стороны. За счет медленного начала протокол TCP пытается избежать переполнения сети слишком быстрым отправителем. Но если не контролировать экспоненциальный рост скорости передачи, то отправитель рано или поздно получит возможность перегрузить сеть. Чтобы этого избежать и ограничить потенциальный рост скорости, протокол TCP использует алгоритм предотвращения перегрузки.

Когда включено предотвращение перегрузки, отправитель сразу после установки соединения начинает с небольшого окна, ограничивающего объем подтвержденных данных, доступных для передачи. По мере получения подтверждений от удаленного узла это окно экспоненциально расширяется. Но, достигнув некоего потолка, который, как считается, находится недалеко от пропускной способности сети, рост переходит в линейную стадию. (Приблизительная пропускная способность сети выводится из вычислений, основанных на скорости передачи в момент фиксирования перегрузки, или же назначается явно во время установки соединения.) При этом объем данных, передаваемый отправляющей стороной, дополнительно ограничивается скользящим окном, которое афишируется получателем, а также локальным исходящим буфером протокола TCP.

Сочетание этих двух алгоритмов позволяет отправителю быстро увеличивать скорость передачи, используя всю доступную пропускную способность сети, но не превышая ее. В результате удается быстро достичь состояния равновесия, когда отправитель передает пакеты с той же скоростью, с которой он получает подтверждение от получателя.

54.7. Документы, выносимые на рассмотрение (RFC)
Перейти на страницу:

Похожие книги