Колебание (то есть стандартное отклонение) времени задержки или времени прибытия пакета называется флуктуацией (jitter). Первые три приложения (см. табл. 5.2) спокойно отнесутся к неравномерной задержке доставки пакетов, а при организации удаленного доступа этот фактор имеет более важное значение, поскольку при сильных флуктуациях обновления на экране будут появляться скачками. Видео- и особенно аудиоданные исключительно чувствительны к флуктуациям. Если пользователь просматривает видео, доставляемое на его компьютер по сети, и все кадры приходят с задержкой ровно 2,000 с, все нормально. Однако если время передачи колеблется от одной до двух секунд и приложению не удается скрыть флуктуации, то результат будет просто ужасен. При прослушивании звукозаписей будут заметны флуктуации даже в несколько миллисекунд.
Первые четыре приложения предъявляют высокие требования к потерям, так как для них, в отличие от аудио и видео, важен каждый бит информации. Обычно это достигается путем повторной передачи утерянных пакетов транспортным уровнем. Однако это неэффективно; было бы лучше, если бы сеть отвергала те пакеты, которые, скорее всего, будут утеряны. Для аудио- и видеоприложений утеря пакета не всегда требует повторной передачи: короткие паузы и пропущенные кадры могут остаться незамеченными пользователями.
Чтобы удовлетворить требования различных приложений, сеть может предлагать разное качество обслуживания. Важный пример — технология, использующаяся в сетях ATM, которая когда-то считалась перспективной, но впоследствии оказалась на заднем плане. Сети ATM поддерживают следующее:
1. Постоянная битовая скорость (например, телефония).
2. Переменная битовая скорость в реальном времени (например, сжатые видеоданные
при проведении видеоконференций).
3. Переменная битовая скорость не в реальном времени (например, просмотр фильмов по заказу).
4. Доступная битовая скорость (например, передача файлов).
Такое разбиение по категориям может оказаться полезным и для других целей, и для других сетей. Постоянная битовая скорость — это попытка моделирования проводной сети путем предоставления фиксированной пропускной способности и фиксированной задержки. Битовая скорость может быть переменной, например, при передаче сжатого видео, когда одни кадры удается сжать в большей степени, нежели другие. Кадр, содержащий множество разноцветных деталей, сожмется, скорее всего, плохо, и на его передачу придется потратить много битов, тогда как кадр, запечатлевший белую стену, сожмется очень хорошо. Фильмы по заказу на самом деле проигрываются не в реальном времени: часто несколько секунд видеозаписи доставляется перед проигрыванием и хранится в буфере, поэтому флуктуации попросту приводят к колебаниям объема видео, которое было получено, но не воспроизведено. Приложениям типа электронной почты нужно принципиальное наличие хоть какой-нибудь битовой скорости, они не чувствительны к задержкам и флуктуациям, поэтому говорят, что этим приложениям требуется «доступная битовая скорость».
5.4.2. Формирование трафика
Прежде чем гарантировать пользователю определенное качество обслуживания, сеть должна знать примерный объем трафика. В телефонных сетях его оценить легко: обычный звонок (в несжатом формате) требует скорости 64 Кбит/с и одного 8-битного отсчета каждые 125 мкс. Однако в данных сетях трафик является неравномерным (bursty). Трафик может прибывать неравномерно по трем причинам: непостоянная скорость трафика (например, при видеоконференциях со сжатием), взаимодействие пользователя и приложения (например, просмотр новой веб-страницы) и переключение компьютера между задачами. С неравномерным трафиком работать гораздо сложнее, чем с постоянным, так как при этом может произойти переполнение буферов и, как следствие, утеря пакетов.
Формирование трафика (traffic shaping) — способ регулировки средней скорости и равномерности потока входных данных. Приложения должны иметь возможность передавать такой трафик, который им нужен (включая неравномерный); при этом необходим простой и удобный способ описания возможных схем трафика. Когда устанавливается поток, пользователь и сеть (то есть клиент и оператор связи) договариваются об определенной схеме (то есть форме) трафика для данного потока. В результате клиент сообщает интернет-провайдеру: «Мой график передачи будет выглядеть следующим образом. Сможете ли вы это обеспечить?»
Иногда такое соглашение называется соглашением об уровне обслуживания (SLA, Service Level Agreement), особенно если в нем оговариваются комплексные потоки и длительные периоды времени (например, весь трафик для данного клиента). До тех пор пока клиент выполняет свою часть условий соглашения и посылает пакеты не чаще оговоренного в договоре графика, интернет-провайдер обязуется доставлять их в определенный срок.
Формирование трафика снижает перегрузку и, таким образом, помогает сети выполнять свои обязательства. Но чтобы это работало, необходимо ответить на вопрос: как интернет-провайдер будет узнавать о том, что клиент соблюдает соглашение, и что делать, если клиент нарушит договор. Пакеты, отправка которых выходит за рамки условий соглашения, могут удаляться или помечаться как низкоприоритетные. Наблюдение за потоком трафика называется политикой трафика (traffic policing).
Формирование трафика и политика трафика не так важны для равноранговой передачи и передачах других типов, при которых используется вся доступная пропускная способность. Однако они имеют важное значение для данных, передаваемых в реальном времени (например, при соединениях с передачей аудио- и видеосигнала), обладающих строгими требованиями к качеству обслуживания.
Алгоритмы дырявого и маркерного ведра
Нам уже знаком один способ ограничения передаваемого приложением объема данных — скользящее окно. Этот метод использует один параметр, который ограничивает данные, передаваемые в определенный момент времени, и косвенно ограничивает скорость. Теперь мы обратимся к более общим методам описания трафика и рассмотрим алгоритмы дырявого ведра и маркерного ведра. Хотя эти алгоритмы немного отличаются друг от друга, они приводят к одинаковому результату.
Представьте себе ведро с маленькой дырочкой в днище, как показано на рис. 5.25, б. Независимо от скорости, с которой вода наливается в ведро, выходной поток обладает постоянной скоростью R, когда в ведре есть вода, и нулевой скоростью, когда ведро пустое. Кроме того, когда ведро наполняется и вода занимает весь объем B, вся лишняя вода выливается через край и теряется.
Рис. 5.25. Алгоритмы дырявого и маркерного ведра: а — формирование пакетов; б — дырявое ведро; в — маркерное ведро
С помощью такого ведра можно формировать или приводить в порядок пакеты, поступающие в сеть (рис. 5.25, а). Принцип таков: каждый хост соединяется с сетью через интерфейс, содержащий дырявое ведро. Чтобы пакет можно было отправить в сеть, в ведре должно быть достаточно места для воды. Если в момент поступления пакета ведро заполнено, пакет либо помещается в очередь до тех пор, пока в ведре не освободится достаточно места, либо отвергается. Первый вариант встречается в таких случаях, когда формирование трафика производится операционной системой хоста. Второй вариант имеет место, когда проверка трафика, поступающего в сеть, осуществляется аппаратными средствами в сетевом интерфейсе интернет-провайдера. Этот метод был предложен Тернером (Turner, 1986) и называется алгоритмом дырявого ведра (leaky bucket algorithm).
То же самое можно представить себе по-другому: в виде ведра, которое в данный момент наполняется (рис. 5.25, в). Вода вытекает из крана со скоростью R, а объем ведра, как и в предыдущем случае, равен B. Чтобы отправить пакет, необходимо, чтобы из ведра можно было вылить воду, или маркеры (так обычно называют содержимое ведра), а не налить ее туда. В ведре может содержаться ограниченное число маркеров (не более B); если ведро пустое, для отправки пакета необходимо подождать, пока не появятся новые маркеры. Этот алгоритм называется алгоритмом маркерного ведра (token bucket algorithm).