В начале 90-х годов были сделаны первые попытки использовать Интернет для передачи голоса в реальном масштабе времени (VocalTek). В настоящее время IP-телефония стала обычным видом услуг. Более того, она сыграла определяющую роль в снижении телефонных тарифов. Появились регулярные музыкальные программы. На подходе подключение к этому виду сервиса всех мобильных коммуникаций и
С решением проблемы транспортировки мультимедиа связан бум в разработке протоколов, обеспечивающих данный процесс. Главной целью разработчиков была организация процедуры формирования групп слушателей/зрителей и передача им запрошенных мультимедийных потоков.
Для формирования групп слушателей в 1982 (RFC-1112) был создан протокол IGMP (Internet Group Management Protocol), позднее он несколько раз дополнялся и совершенствовался (RFC-2236 и -3376). В рамках технологии IPv6 функцию IGMP взял на себя протокол ICMP (см. http://book.itep.ru/4/44/igmp_449.htm и там же ~/ip6_4411.htm).
Для доставки мультимедиа-потоков обычно используется мультикастинг-адресация, но в последнее время определенную популярность приобрела технология P2P (Peer-to-Peer). Маршрутизация таких потоков также имеет свою специфику. Если обычно маршрут прокладывается от отправителя к получателю, то для мультикаст-потоков это делается в обратном направлении (см. описание протоколов
Специфическим для мультимедиа является использование для транспортировки протокола UDP (без установления соединения и без гарантии доставки). В случае передачи голоса или изображения повторная передача дейтограммы становится бессмысленной.
При передаче мультимедийных данных крайне важно иметь необходимую полосу пропускания, малую задержку, низкий разброс времени доставки (исключает повтор) и малую вероятность потери пакетов. По существу, речь идет о гарантированном уровне качества обслуживания (QoS).
Разработано два алгоритма гарантии QoS – это
При формировании привилегированных потоков данных нужно иметь механизм, с помощью которого пакеты, принадлежащие этим потокам, могли распознаваться маршрутизаторами или другими аналогичными сетевыми устройствами. В качестве признаков распознавания дейтограмм могут применяться адреса отправителя и получателя, номера их портов, а также значения поля протокола и DSCP (ToS). Анализ такого числа параметров для каждого пакета достаточно трудоемок.
Очевидно, что широкое внедрение IPv6 привлекательно, кроме всего прочего, благодаря возможности использования меток потоков и поля приоритет, существенно удешевляющих процедуру сортировки пакетов.
Передача мультимедийных данных по сетям Интернет является одним из наиболее важных направлений. Этот вид информации передается обычно в режиме без установления соединения (протокол UDP-RTP). Наиболее типичной схемой в этом случае является наличие одного передатчика и большого числа приемников. Эта схема реализуется с использованием мультикастинг-адресации. Мультикастинг-адресация может осуществляться на IP- и MAC-уровнях. В Ethernet для этих целей зарезервирован блок адресов в диапазоне от 01:00:5E:00:00:00 до 01:00:5E:7F:FF:FF. Первый байт адреса, равный 01, указывает на то, что адрес является мультикастным. Данная схема резервирования адресного пространства позволяет использовать 23 бита Ethernet-адреса для идентификации группы рассылки при IP-мультикастинге (см. рис. 10.1.).
(рис 10.1) 1 Соотношение мультикастинговых MAC- и IP-адресовОбласть из 5 бит в IP-адресе, отмеченная *****, не используется при формировании Ethernet-адреса. Так как соотношение IP и MAC-адресов не является однозначным, драйверы должны обеспечивать обработку адресов, чтобы интерфейсы получали только те кадры, которые действительно им предназначены. Для того, чтобы информировать маршрутизатор о наличии участников мультикастинг-обмена в субсети, связанной с тем или иным интерфейсом, применяется протокол IGMP.
Групповая форма адресации нужна тогда, когда какое-то сообщение или последовательность сообщений необходимо послать нескольким (но не всем) адресатам субсети одновременно. При этой форме адресации ЭВМ имеет возможность выбрать, будет ли она участвовать в этой процедуре. Когда группа ЭВМ хочет взаимодействовать друг с другом, используется один групповой (мультикастинг) адрес. Групповая адресация может рассматриваться как обобщение обычной системы адресов, а традиционный IP-адрес — частный случай группового обращения при числе ЭВМ в группе, равном 1.
При групповой адресации один и тот же пакет может быть доставлен заданной группе ЭВМ. Членство в этой группе может динамично меняться со временем. Любая ЭВМ может войти в группу и выйти из группы в любое время по своей инициативе. В то же время ЭВМ может быть членом большого числа таких групп. ЭВМ может посылать пакеты членам группы, не являясь им сама. Каждая группа имеет свой IP-адрес класса D (рис. 10.2, см. также рис. 10.1).
(рис 10.2) Формат группового адресаАдрес 224.0.0.1 предназначен для обращения ко всем группам (все узлы и серверы, вовлеченные в данный момент в мультикастинг-обмен, например, участвующие в видеоконференции). ЭВМ может участвовать в мультикастинг-процессе на одном из следующих уровней (таблица 10.1).
| Уровень мультикастинг-процесса | описание |
|---|---|
| 0 | ЭВМ не может ни посылать, ни принимать данные |
| 1 | ЭВМ может только посылать пакеты в процессе IP-мультикастинга |
| 2 | ЭВМ в режиме мультикастинга может передавать и принимать пакеты |
Ряд мультикастинг-адресов зарезервирован строго для определенных целей (таблица 10.2).
| мультикастинг адрес | описание |
|---|---|
| 224.0.0.0 | Зарезервировано |
| 224.0.0.1 | Все системы данной субсети |
| 224.0.0.2 | Все маршрутизаторы данной субсети |
| 224.0.0.4 | Все DVMRP-маршрутизаторы |
| 224.0.0.5-224.0.0.6 | OSPFIGP (MOSPF) |
| 224.0.0.9 | Маршрутизаторы RIP2 |
| 224.0.0.10 | |
| 224.0.1.0 | VMTP-группа менеджеров |
| 224.0.1.1 | NTP-network time protocol — сетевая службы времени |
| 224.0.1.6 | |
| 224.0.1.7 | Audionews — audio news multicast (аудиослужба новостей) |
| 224.0.1.9 | |
| 224.0.1.10 | IETF-1-low-audio |
| 224.0.1.11 | IETF-1-audio |
| 224.0.1.12 | IETF-1-video |
| 224.1.0.0-224.1.255.255 | ST мультикастинг-группы |
| 224.2.0.0-224.2.255.255 | Вызовы при мультимедиа-конференциях |
| 232.0.0.0-232.255.255.255 | VMTP переходные группы |
Чтобы участвовать в коллективных обменах в локальной сети, ЭВМ должна быть снабжена программой, которая поддерживает этот режим. При этом сервер локальной сети (gateway) информируется о намерении использовать мультикастинг. Сервер передает эту информацию другим внешним серверам IP-сети. IGMP для передачи своих сообщений использует IP-дейтограммы (IGMP-пакеты инкапсулируются в них). Для подключения к группе сначала посылается IGMP-сообщение всем ЭВМ о включении в группу, а локальный мультикаст-сервер подготавливает маршрут. Локальный мультикаст-сервер время от времени проверяет ЭВМ и определяет, не покинули ли они группу (ЭВМ не подтверждает свое членство в группе). Все обмены между ЭВМ и мультикаст-сервером производятся в режиме IP-мультикастинга, те есть, любое сообщение адресуется всем ЭВМ группы. ЭВМ, не принадлежащая группе, IGMP-сообщений не получает, что сокращает загрузку сети. Формат сообщений в протоколе IGMP имеет вид, показанный ниже на рис.10.3.
(рис 10.3) Формат IGMP-сообщенийПоле версия определяет используемую версию протокола, поле тип=1 говорит о том, что это запрос, отправленный мультикастинг-маршрутизатором, тип=2 указывает, что этот отклик послан ЭВМ. ЭВМ использует групповой адрес, чтобы сообщить о своем подключении к группе. Контрольная сумма вычисляется по тому же алгоритму, что и для ICMP. IGMP-сообщения используются мультикастингмаршрутизатором, чтобы отслеживать членство в группе каждой из сетей, подключенных к нему. В группе может участвовать несколько активных процессов одной и той же ЭВМ, но при этом посылается только один запрос для регистрации. Когда какой-то процесс покидает группу, ЭВМ не шлет сообщения об этом, даже в случае, когда это последний из процессов-членов группы на данной ЭВМ. Просто при очередном запросе ЭВМ не подтвердит членство в группе. Мультикастинг-маршрутизатор регулярно посылает запросы с требованием подтвердить участие в группе. ЭВМ посылает отклик-подтверждение для каждой из групп, если у нее есть хотя бы один процесс-член группы. На основе этих запросов-откликов мультикастинг-маршрутизатор составляет и поддерживает таблицу интерфейсов, которые имеют одну или более ЭВМ, входящих в мультикастинг-группы.
Протокол IGMP применяется при организации мультикастинг-туннелей для передачи звуковой и видеоинформации. Для решения проблем мультимедиа в сетях Интернет используется идея
По умолчанию мультикаст-дейтограммы имеют значение поля TTL=1 (time-to-live), что ограничивает их распространение одной субсетью. Приложения могут увеличивать значение TTL. Первая дейтограмма, тем не менее, всегда имеет TTL=1. Если получение этой дейтограммы не подтверждается сервером, посылается вторая — с TTL=2 и т.д. Таким образом, попутно измеряется и число шагов между клиентом и сервером. Для случая, когда число шагов не более 1, зарезервирован блок адресов 224.0.0.0 - 224.0.0.255. Маршрутизатор не обрабатывает пакеты с такими адресами, вне зависимости от кода поля TTL.
При использовании мультикастинга MAC-переключатели переадресуют пакеты через все имеющиеся интерфейсы, что заметно ухудшает эффективность сети. Чтобы решить эту проблему, компания CISCO разработала протокол CGMP (Cisco Group Management Protocol), который позволяет взаимодействовать маршрутизаторам и переключателям, и это способствует передаче мультикаст-пакетов только на те интерфейсы, где имеются активные члены группы.
IP-мультикастинг-пакеты инкапсулируются при передаче через туннели так, что они выглядят как обычные IP-уникаст-пакеты.
Мультикастинг-маршрутизатор при посылке пакета через туннель подготавливает IP-пакет с заголовком, который содержит адрес маршрутизатора-партнера на другом конце туннеля, при этом в поле IP-протокола включен код 4 (IP поверх IP). Маршрутизатор-приемник извлекает вложенный мультикастинг-пакет и направляет далее, если это требуется.
Каждый туннель имеет определенный порог для переменной времени жизни пакета (timetolive — TTL). Согласно договоренности (IETF) широкополосная видеоинформация передается с малыми начальными значениями TTL. Малые значения TTL не позволяет видеопакетам загружать слишком большие участки сети. Мультикастинг-дейтограмма с TTL=0 может быть доступна только процессу, который существует в ЭВМ, породившей эту дейтограмму. По умолчанию мультикастинг-дейтограммы имеют TTL=1, такая дейтограмма не может покинуть пределов субсети, и только дейтограммы с TTL>1 могут переадресовываться маршрутизаторами.
Следует помнить, что маршрутизатор не откликнется ICMP-сообщением "время истекло", когда TTL достигнет нуля, так как дейтограммы с мультикастинг-адресами не вызывают ICMP-откликов.
Увеличивая TTL, прикладной процесс может расширять зону взаимодействия. Сначала дейтограмма может посылаться с TTL=1, затем, если отклика не получено — c TTL=2, и так далее. Эта схема позволяет найти ближайший сервер (с точки зрения числа шагов до него). Для приложений, которые ограничивают свою активность в пределах одного шага, предусмотрен специальный интервал адресов 224.0.0.0 - 224.0.0.255. Мультикастинг-маршрутизатор не должен переадресовывать дейтограммы с такими адресами, вне зависимости от значения TTL. Адрес 224.0.0.1 является адресом группы "все ЭВМ" и относится ко всем ЭВМ и маршрутизаторам, способным работать в режиме мультикастинга. Каждая ЭВМ автоматически включается в эту группу при инициализации интерфейса. О членстве в этой группе ЭВМ не сообщает.
Конфигурация системы в режиме мультикастинга производится автоматически. Чтобы изменить конфигурацию системы, или добавить еще один туннель используются специальные конфигурационные команды, которые записываются в /etc/mrouted.conf. Существует два типа таких команд:
phyint <localaddr> [disable] [metric <m>] [threshold <t>] tunnel <localaddr> <remoteaddr> [metric <m>] [threshold <t>]
Первая команда может отменить мультикастинг-маршрутизацию для конкретного физического интерфейса, идентифицируемого по его IP-адресу (<localaddr>), или заменить значение метрики или порога. Эта команда должна выдаваться до команды tunnel. Вторая команда может служить для установления туннеля между местным IP-адресом (<local-addr>) и удаленным IP-адресом (<remote-addr>). Значения метрики и порога по умолчанию равны 1.
В Интернет, так же, как и в некоторых других сетях, возможна потеря пакетов, изменение их порядка в процессе транспортировки, а также вариация времени доставки в достаточно широких пределах. Мультимедийные приложения накладывают достаточно жесткие требования на транспортную среду. Для согласования таких требований с возможностями LAN и Интернет был разработан протокол RTP.
Следует иметь в виду, что сам по себе RTP не обеспечивает своевременной доставки и не предоставляет каких-либо гарантий уровня сервиса (QoS). Этот протокол не может гарантировать также корректного порядка доставки данных.
Правильный порядок выкладки информации может быть обеспечен принимающей стороной с помощью порядковых номеров пакетов. Такая возможность крайне важна практически всегда, но особое внимание этому уделяется при восстановлении передаваемого изображения.
RTP — гибкий протокол, который может доставить приложению нужную информацию; его функциональные модули не образуют отдельный слой, а чаще встраиваются в прикладную программу. Протокол RTP не является жестко регламентирующим.
При организации аудиоконференции каждый участник должен иметь адрес и два порта, один для мультмедиа-данных, другой — для управляющих
Заголовок пакета RTP указывает, какой вид кодирования звука применен (PCM,
При передаче звука весьма важным становится взаимное положение закодированных фрагментов во времени. Для решения задачи корректного воспроизведения заголовки пакетов RTP содержат временную информацию и порядковые номера. Порядковые номера позволяют не только восстановить правильный порядок фрагментов, но и определить число потерянных пакетов-фрагментов.
Так как участники конференции могут появляться и исчезать по своему усмотрению, полезно знать, кто из них присутствует в сети в данный момент и как до них доходят передаваемые данные. Для этой цели периодически каждый из участников транслирует через порт
Если в ходе конференции передается не только звук, но и изображение, они пересылаются как два независимых потока с использованием двух пар UDP-портов.
На уровне RTP не существует какой-либо взаимосвязи между аудио- и видеосессиями. Только
В некоторых случаях можно столкнуться с ситуацией, когда один из участников конференции подключен к сети через узкополосный канал. Было бы не слишком хорошо требовать от всех участников перехода на кодировку, соответствующую этой малой полосе. Чтобы этого избежать, можно установить преобразователь, называемый смесителем, в непосредственной близости от узкополосной области.
Смеситель преобразует поток аудиопакетов в последовательность дейтограмм, которая соответствует возможностям узкополосного канала. Эти пакеты могут быть уникастными (адресованными одному получателю) или мультикастными. Заголовок RTP включает в себя средства, которые позволяют мультиплексорам идентифицировать источники, внесшие вклад, — так что получатель может правильно идентифицировать источник звукового сигнала.
Некоторые участники конференции, использующие широкополосные каналы, не доступны для IP-мультикастинга (например, находятся за Firewall). Для таких узлов смесители не нужны, здесь используется другой RTP-уровень передачи, называемый трансляцией. Устанавливается два транслятора по одному с каждой из сторон Firewall. Внешний транслятор передает мультикастинг-пакеты по безопасному каналу внутреннему транслятору. Внутренний же транслятор рассылает их подписчикам локальной сети обычным образом.
Смесители и трансляторы могут выполнять и другие функции, например, преобразование IP/UDP пакетов в ST-II при видеоконференциях.
Поле данных RTP. Информация, пересылаемая в пакете RTP, например, фрагменты звука или сжатые видеоданные.
Пакет RTP. Информационный пакет, содержащий фиксированный заголовок. Один пакет транспортного нижнего уровня, например, UDP, обычно содержит один RTP-пакет, но это требование не является обязательным. Поле источников информации может быть пустым.
Пакет
Транспортный адрес. Комбинация сетевого адреса и порта, которая идентифицирует конечную точку канала (например, IP-адрес и UDP-порт). Пакеты следуют от транспортного адреса отправителя к транспортному адресу получателя.
Сессия RTP. Период с момента формирования группы участников RTP-обмена до ее исчезновения. Для каждого из участников сессия определяется конкретной парой транспортных адресов (сетевой адрес и номера портов для RTP и
Источник синхронизации (SSRC). Источник потока RTP-пакетов, определяется 32-битным числовым SSRC-идентификатором, который записывается в заголовок RTP-пакета и не зависит от сетевого адреса. Все пакеты от источника синхронизации образуют часть с идентичной временной привязкой и нумерацией. Эти данные используются принимающей стороной при воспроизведении. Источниками синхронизации могут служить источники первичного сигнала (микрофоны или видеокамеры), а также RTP-смесители. SSRC-идентификатор представляет собой случайное число, которое является уникальным для данной RTP-сессии. Участник сессии не должен применять один и тот же SSRC-идентификатор для всех RTP-сессий мультимедийного набора. Если участник формирует несколько потоков в рамках одной RTP-сессии (например, от нескольких видеокамер), каждый участник должен быть снабжен уникальным SSRC-идентификатором.
Информационный источник CSRC (
Оконечная система. Приложение, которое генерирует или воспринимает данные, посылаемые в виде RTP-пакетов. Оконечная система может выступать в качестве одного или нескольких источников синхронизации для конкретной сессии.
Смеситель. Промежуточная система, которая получает RTP-пакеты от одного или нескольких источников, при необходимости меняет их формат, объединяет и пересылает их адресатам. Так как временная привязка входных пакетов может отличаться, смеситель осуществляет их синхронизацию и генерирует свой собственный поток RTP-пакетов. Таким образом, все посылаемые пакеты имеют в качестве источника синхронизации смеситель.
Транслятор. Промежуточная система, которая переадресует RTP-пакеты, не изменяя их идентификаторы источника синхронизации. Такие устройства используются для преобразования системы кодирования, перехода от мультикастинг- к традиционной уникаст-адресации или при работе с Firewall.
Монитор. Приложение, которое получает
Все целочисленные поля передаются в соответствии c сетевым порядком, т.е. старший байт следует первым (big-
Абсолютное время представляется с помощью временных меток в соответствии с форматом NTP (network time protocol), который характеризует время в секундах от начала суток (UTC) 1 января 1900 года [10.4]. Полное разрешение временной метки NTP определяется 64-битовым числом с
Первые 12 октетов присутствуют во всех RTP-пакетах, в то время как список CSRC-идентификаторов присутствует только, когда пакет формируется смесителем. Поля имеют следующие назначения:
(рис 10.4) Заголовок пакета RTPV (Версия): 2 бита
Это поле идентифицирует версию протокола RTP. В настоящее время в это поле записывается код 2. Значение 1 использовалось в опытной версии RTP, а код 0 — в аудиоприложении
p (Заполнитель): 1 бит
Если Р=1, пакет содержит один или более дополнительных октетов-заполнителей в конце поля данных (заполнители не являются частью поля данных). Последний октет заполнителя содержит число октетов, которые должны игнорироваться. Заполнитель нужен при использовании некоторых алгоритмов шифрования при фиксированном размере блоков или при укладке нескольких RTP-пакетов в одну UDP-дейтограмму.
x (Расширение): 1 бит
Если бит Х=1, далее следует фиксированный заголовок, за которым размещается одно расширение заголовка.
CC (CSRC count — число CSRC): 4 бита
Число CSRC содержит код количества CSRC-идентификаторов, которые записаны в пакете.
M (маркер): 1 бит
Интерпретация маркера определяется профайлом. Предполагается разрешить выделять в потоке пакетов существенные события, такие, как границы кадра. Профайл может определить дополнительные маркерные биты или специфицировать отсутствие маркерных битов путем изменения числа битов в поле PT.
PT (Тип данных): 7 бит
Это поле идентифицирует формат поля данных RTP-пакета и определяет его интерпретацию приложением. Могут быть определены дополнительные коды типа данных. Исходный набор кодов по умолчанию для аудио и видео задан в профайле Internet-draft и может быть расширен в следующих редакциях стандарта (RFC-1700) [10.5].
Номер по порядку: 16 бит
Номер по порядку инкрементируется на 1 при посылке очередного RTP-пакета данных, этот код может использоваться получателем для регистрации потерь пакетов и для восстановления истинного порядка присланных фрагментов. Начальное значение кода является случайным. Алгоритм генерации таких кодов рассмотрен в [10.6].
Временная метка: 32 бита
Временная метка соответствует времени стробирования для первого октета в информационном RTP-пакете. Время стробирования должно быть получено от часов, показания которых увеличиваются монотонно и линейно, чтобы обеспечить синхронизацию и вычисление временного разброса. Разрешающая способность часов должна быть достаточной для обеспечения приемлемой точности синхронизации (одного тика на видеокадр обычно не достаточно). Частота часов зависит от формата данных и задается статически в профайле, в спецификации поля данных или динамически средствами, выходящими за пределы спецификации протокола RTP. Если RTP-пакеты генерируются периодически, используется временная привязка, определенная задающим генератором стробирования, а не показаниями системных часов.
Начальное значение временной метки является случайным. Несколько последовательных RTP-пакетов могут иметь идентичные временные метки, если логически они генерируются одновременно (например, относятся к одному и тому же видео кадру).
SSRC: 32 бита
Поле SSRC идентифицирует источник синхронизации. Этот идентификатор выбирается случайным образом, так, чтобы в пределах одной RTP-сессии не было двух равных SSRC-кодов. Все приложения должны быть способны выявлять случаи равенства SSRC-кодов. Если отправитель изменяет свой транспортный адрес, он должен также сменить и SSRC-идентификатор.
CSRC-список: от 0 до 15 элементов, по 32 бита каждый
CSRC-список идентифицирует источники информации, которые внесли свой вклад в поле данных пакета. Число идентификаторов задается полем CC. Если число источников больше 15, только 15 из них могут быть идентифицированы.
Для эффективной реализации протокола число точек мультиплексирования должно быть минимизировано. В RTP мультиплексирование осуществляется по транспортным адресам мест назначения, которые определены RTP-сессией. Использование пакетов с различным типом поля данных, но с идентичным SSRC создает определенные проблемы:
Первые три из этих проблем вполне устранимы, если использовать различные SSRC для каждого вида среды при посылке их в пределах одной RTP-сессии.
Хотя существующие RTP-заголовки позволяют решать широкий круг проблем, предусмотрена также возможность их модификации с помощью профайлов. При этом сохраняется контроль и мониторирование с использованием стандартных средств.
В протоколе RTP предусмотрен механизм расширений заголовка, который позволяет модифицировать заголовок и экспериментировать с новыми форматами поля данных. Этот механизм устроен так, что расширения заголовка могут игнорироваться приложениями, которые не нуждаются в расширениях.
Расширения заголовка предназначены для ограниченного использования — и многие приложения лучше реализовать, используя профайл. Формат реализации расширений показан на рис. 10.5.
(рис 10.5) Формат расширения заголовкаЕсли бит x в RTP-заголовке равен 1, то к заголовку добавлено расширение переменной длины, за которым может следовать список CSRC. Расширение заголовка содержит 16-битовое поле длины, определяющее число 32-битных слов в расширении, исключая 4-октета заголовка расширения (т.о. значения поля длина, равное нулю, вполне допустимо). Информационный заголовок RTP может иметь только одно расширение. Чтобы обеспечить работу различных приложений с различными расширениями заголовка или чтобы обеспечить работу с более чем одним типом расширений, первые 16 бит расширения заголовка остаются свободными для выбора идентификаторов или параметров. Формат этих 16 бит определяется спецификацией профайла, с которым работает приложение.
Кроме оконечных систем, RTP поддерживает трансляторы и смесители, которые рассматриваются как промежуточные системы на уровне RTP.
RTP транслятор/смеситель соединяет две или более области на транспортном уровне. Обычно каждая область определяется сетью и транспортным протоколом (например, IP/UDP), мультикаст-адресом или парой уникаст-адресов, а также портом назначения транспортного уровня. Одна система может служить транслятором или смесителем для нескольких RTP сессий.
Для того, чтобы исключить зацикливание при использовании транслятора или смесителя, следует придерживаться следующих правил.
Аналогично все оконечные системы RTP, которые взаимодействуют через один или более транслятор или смеситель, принадлежат одной и той же SSRC-области, т.е., SSRC-идентификаторы должны быть уникальными для задействованных оконечных систем. Существует большое разнообразие трансляторов и смесителей, спроектированных для решения различных задач и приложений. Некоторые служат для шифрования/дешифрования несущих дейтограмм.
Различие между смесителями и трансляторами заключается в том, что последние пропускают через себя потоки данных, при необходимости их преобразуя, а смесители просто объединяют несколько потоков в один.
Транслятор. Переадресует RTP-пакеты, не изменяя их SSRC-идентификаторы. Это позволяет получателям идентифицировать отдельные источники, даже если пакеты от всех источников проходят через один общий транслятор и имеют сетевой адрес транслятора. Некоторые типы трансляторов передают данные без изменений, другие кодируют данные и соответственно изменяют коды типа данных и временные метки. Приемник не может заметить присутствия транслятора.
Смеситель. Принимает потоки RTP-данных от одного или нескольких источников, может изменять формат данных, определенным образом объединяет потоки и затем формирует из них один общий поток. Так как объединяемые потоки не синхронизованы, смеситель производит синхронизацию потоков и формирует свою собственную временную шкалу для исходящего потока. Смеситель является источником синхронизации. Таким образом, все пакеты данных, переадресованные смесителем, будут помечены SSRC-идентификатором смесителя. Чтобы сохранить информацию об источниках исходных данных, смеситель должен внести свои SSRC-идентификаторы в список CSRC-идентификаторов, который следует за RTP-заголовком пакета. Смеситель, который, кроме того, вносит в общий поток свою составляющую, должен включить свой собственный SSRC-идентификатор в CSRC-список данного пакета.
Для некоторых приложений смеситель может не идентифицировать источники в CSRC-списке. Так возникает опасность, что петли, включающие эти источники, не смогут быть выявлены.
Преимуществом смесителя перед транслятором для аудиоприложений является то, что выходная полоса не превосходит полосы одного источника, даже когда в сессии на входе смесителя присутствуют несколько участников. Недостаток смесителя: получатели с выходной стороны не имеют никаких средств для контроля того, какой из источников передает данные, даже в случае наличия дистанционного управления смесителем.
(рис 10.6) Пример RTP сети с оконечными системами, смесителями и трансляторамиНекоторый набор смесителей и трансляторов представлен на рис. 10.6. Здесь показано их влияние на SSRC и CSRC-идентификаторы. Оконечные системы обозначены символами ES и выделены цветом. Трансляторы обозначены буквами TRS (на рисунке — овалы), и смесители обозначены как M1:13(1,17 ) обозначает пакет, отправленный смесителем MUX1, который идентифицируется случайным значением SSRC 13 и двумя CSRC-идентификаторами 1 и 17, скопированными с SSRC-идентификаторов пакетов оконечных систем ES1 и ES2.
В RTP-сессии могут быть задействовано несколько смесителей и трансляторов, как это показано на рис. 10.6. Если два смесителя включены последовательно, так, как MUX2 и MUX3, то пакеты, полученные смесителем, могут быть уже объединены и включать CSRC-список со многими идентификаторами. Смеситель (MUX3) должен формировать CSRC-список для исходящих пакетов, используя CSRC-идентификаторы уже смешанных входных пакетов (выход MUX2) и SSRC-идентификаторы несмешанных входных пакетов, поступивших от ES9 ( E:36 ). Это отмечено на рисунке для выходных пакетов смесителя MUX3 как M3:99(9,11,36). Если число идентификаторов в списке CSRC превышает 15, остальные не могут быть туда включены.
SSRC-идентификаторы в RTP-заголовках и в различных полях
Недостаточно применять в качестве идентификатора локальный сетевой адрес (такой как IPv4), так как он может быть не уникальным. Так как RTP трансляторы и смесители разрешают работу с сетями, использующими различные адресные пространства, это допускает их случайное совпадение с большей вероятностью, чем в случае использования случайных чисел.
Неприемлемо также получать идентификаторы SSRC путем простого обращения к функции random() без тщательной инициализации.
Так как идентификаторы выбраны случайным образом, существует малая, но конечная вероятность того, что два или более источников выберут одно и то же число. Столкновение более вероятно, если все источники стартуют одновременно. Если N — число источников, а L — длина идентификатора (в нашем случае 32 бита), вероятность того, что два источника независимо выберут одно и то же значение (для больших N [10.8]), составляет 1-exp(-N2 /2(L+1)). Для N=1000 вероятность примерно равна 10-4.
Типовое значение вероятности столкновения много меньше худшего случая, рассмотренного выше. Возьмем случай, когда новый источник подключается к RTP-сессии, в которой все остальные источники уже имеют уникальные идентификаторы. Если N равно числу источников, а L — длина идентификатора, вероятность столкновения равна N/2L. Для N=1000 вероятность составит около 2*10-7.
Вероятность столкновения уменьшается еще больше в случае, когда новый источник получает пакеты других участников до того, как передаст свой первый пакет. Если новый источник отслеживает идентификаторы других участников, он легко может устранить вероятность конфликта.
Хотя вероятность столкновения идентификаторов SSRC довольно мала, все RTP-реализации должны быть готовы обнаруживать столкновения и предпринимать адекватные меры для их преодоления. Если источник обнаруживает в какой-либо момент, что другой источник использует тот же идентификатор SSRC, он посылает пакет
Так как идентификаторы уникальны, они могут использоваться для детектирования петель, которые могут создаваться смесителем или транслятором. Петля приводит к дублированию данных и управляющей информации.
Источник может обнаружить, что его собственный пакет движется по кругу, или что пакеты других источников осуществляют циклическое движение.
Оба вида петель и столкновения приводят к тому, что пакеты приходят с тем же самым SSRC-идентификатором, но с разными транспортными адресами, которые могут принадлежать оконечной или какой-то промежуточной системе. Следовательно, если источник меняет свой транспортный адрес, он должен также выбрать новый SSRC-идентификатор, чтобы ситуация не была интерпретирована как зацикливание. Петли или столкновения, происходящие на дальней стороне транслятора или смесителя, не могут быть детектированы с использованием транспортного адреса источника, если все копии пакетов идут через транслятор или смеситель. Однако столкновения могут быть детектированы, когда фрагменты двух
Чтобы детектировать и устранять конфликты, реализации RTP должны содержать алгоритм, аналогичный описанному ниже. Он игнорирует пакеты от нового источника, которые входят в противоречие с работающим источником. Алгоритм разрешает конфликты с SSRC-идентификаторами участников путем выбора нового идентификатора и посылки
Этот алгоритм зависит от равенства транспортных адресов для RTP и
Данный алгоритм требует наличия таблицы транспортных адресов источников, упорядоченных по их идентификаторам. В таблицу заносятся адреса, откуда данный идентификатор был впервые получен. Каждый SSRC- или CSRC-идентификатор, полученный с информационным или управляющим пакетом, отыскивается в этой таблице, чтобы корректно обработать полученные данные. Для управляющих пакетов каждый элемент с его собственным SSRC, например, фрагмент SDES, требует отдельного просмотра. SSRC в сообщениях-отчетах составляют исключение. Если SSRC или CSRC не найдены, создается новая запись в таблице. Эти записи в таблице удаляются, когда приходит пакет
Чтобы отслеживать зацикливание собственных пакетов участников, необходимо также завести отдельный список транспортных адресов источников, которые считаются конфликтными. Заметим, что это должен быть короткий список, обычно пустой. Каждый элемент этого списка хранит адрес источника и время, когда был получен последний конфликтный пакет. Элемент может быть удален из списка, если за время 10 периодов посылки
Предполагается, что собственные идентификаторы и состояния участников записаны в таблицу идентификаторов источников.
Алгоритм:
IF SSRC или CSRC-идентификатор не найден в таблице идентификаторов источников: THEN создать новую запись и внести туда транспортный адрес источника и SSRC или CSRC вместе с кодом состояния. CONTINUE (продолжить) обычную процедуру обработки. Идентификатор найден в таблице IF транспортный адрес источника из пакета совпадает с одним из записанных в таблице: THEN CONTINUE Продолжить обычную процедуру обработки. Обнаружено столкновение идентификаторов или зацикливание IF идентификатор источника не совпадает с собственным идентификатором участника: THEN IF идентификатор источника совпадает с тем, что содержится в фрагменте RTCP SDES, содержащем элемент CNAME, который отличается от CNAME из рекорда таблицы: THEN (опционно) Случилось столкновение посторонних идентификаторов. ELSE (опционно) Случилось зацикливание. ABORT Прервать обработку информационного или управляющего пакета. Столкновение для идентификатора участника или зацикливание его пакетов IF транспортный адрес найден в списке конфликтных адресов: THEN IF идентификатор источника не найден во фрагменте RTCP SDES, содержащем CNAME, или если CNAME принадлежит участнику: THEN (опционно) случилось зацикливание собственного трафика. Записать текущее время в соответствующую запись таблицы конфликтных адресов. ABORT (прервать) обработку информационного или управляющего пакета. Зафиксировать факт столкновения. Внести новую запись в таблицу конфликтных адресов и зафиксировать время записи. Послать пакет RTCP BYE с идентификатором SSRC. Выбрать новый идентификатор. Внести новую запись в таблицу идентификаторов источников со старым SSRC, транспортным адресом источника обработанного пакета. CONTINUE Продолжить обычную процедуру обработки.
В этом алгоритме все пакеты от вновь конфликтующих источников будут игнорироваться, а пакеты от исходного источника будут приниматься. Если в течение достаточно протяженного периода времени пакеты от исходного источника не приходят, соответствующая запись в таблице будет аннулирована.
Когда из-за столкновения выбран новый SSRC-идентификатор, кандидат-идентификатор должен быть сверен с содержимым таблицы идентификаторов. Если такой код там уже имеется, должен быть выбран другой кандидат и процедура сверки повторена.
Зацикливание информационных мультикастинг-пакетов может вызвать сильную перегрузку сети. Все смесители и трансляторы должны реализовывать алгоритм детектирования зацикливания с тем, чтобы немедленно прервать этот опасный процесс. Это должно уменьшить лишний трафик. Однако, в крайних случаях, где смеситель или транслятор не прерывают зацикливание, может быть необходимо для оконечных систем прервать передачу.
Когда необходимо шифрование RTP или
Алгоритмом шифрования по умолчанию является DES (Data Encryption Standard), работающий в режиме CBC (Cipher Block Chaining), как это описано в RFC-1423 [10.9], за исключением того, что используется заполнение, кратное 8 октетам. Инициализационный вектор равен нулю, так как для RTP-заголовка используются случайные числа. Более подробно о векторах инициализации можно прочесть в [10.10]. Приложения, которые применяют шифрование, должны поддерживать алгоритм DES в режиме CBC. Этот метод выбран потому, что он показал на практике свою эффективность при работе с аудио- и видеоприложениями в Интернет. Возможно применение и других криптографических средств.
В качестве альтернативы шифрованию на уровне RTP можно определить дополнительные типы поля данных для шифрованных полей данных в профайлах. Этот метод позволяет шифровать только данные, в то время как заголовки остаются незашифрованными. Это может оказаться полезным для реализации шифрования и дешифрования.
Для обеспечения демультиплексирования RTP полагается на нижележащий протокольный уровень. Для UDP и сходных с ним протоколов RTP использует четные номера портов, а соответствующие
Информационные RTP-пакеты не имеют поля длины или каких-либо других средств ограничения размеров пакета, по этой причине RTP полагается на нижележащий протокол при задании размера поля данных. Максимальная длина RTP-пакетов ограничена размером используемых транспортных пакетов (например, UDP).
Если RTP-пакеты переносятся посредством протокола, который поддерживает поточный метод передачи, должен быть определен механизм вложения. Механизм вложения должен быть детализован и в случае, когда транспортный протокол использует в поле данных заполнители.
Механизм вложения может быть определен в профайле даже в случае, когда для транспортировки RTP применяется не поточный протокол, — это позволяет укладывать несколько RTP-пакетов в одну дейтограмму транспортного протокола (например, UDP). Передача нескольких RTP-пакетов в одном транспортном уменьшает издержки, связанные с заголовком, и может упростить синхронизацию различных потоков.
Константы, определяющие тип данных (PT) RTP-пакета, задаются профайлом, а не самим протоколом. Однако значение октета RTP-заголовка, который содержит бит(ы) маркера, не должно ни при каких обстоятельствах равняться 200 и 201 (десятичные), чтобы отличить RTP-пакеты от
Использование протокола RTP в различных приложениях может предъявлять различные требования. Адаптация протокола к этим требованиям осуществляется путем выбора определенных параметров, применения различных расширений (см. рис. 10.5) или путем вариации формата на основе профайлов. Типовое приложение использует только один профайл.
В рамках RTP-стандарта определены следующие элементы поля данных (этот список не следует рассматривать, как окончательный).
Заголовок поля данных RTP. Октет RTP заголовка, содержащий маркер типа поля данных, может быть переопределен с помощью профайла (например, можно изменить число маркерных битов).
Типы поля данных. Профайл обычно определяет набор форматов поля данных (например, типов кодирования исходных данных) и соответствие между этими форматами и кодами типа поля данных. Для каждого описанного типа поля данных должна быть определена частота временных меток.
Дополнения к заголовку RTP. К стандартному RTP-заголовку могут быть добавлены новые поля, расширяющие функциональность приложения.
Расширения заголовка RTP. Структура содержимого первых 16 бит расширения RTP-заголовка должна быть определена профайлом (см. рис. 10.5).
Безопасность. Профайл может специфицировать, какие услуги и алгоритмы безопасности должно обеспечить приложение.
Установка соответствия между строкой и ключом. Профайл может специфицировать, какому ключу шифрования соответствует введенный пользователем пароль.
Нижележащий протокол. Определяется нижележащий транспортный протокол, который служит для пересылки RTP-пакетов.
Транспортное соответствие. Соответствие RTP и
Инкапсуляция. Инкапсуляция RTP-пакетов может быть определена для того, чтобы позволить транспортировку нескольких RTP-пакетов в одной дейтограмме нижележащего протокола.
Не предполагается, что для каждого приложения требуется свой профайл. В пределах одного класса приложений целесообразно использовать расширения одного и того же профайла. Простое расширение, такое, как введение дополнительного типа поля данных или нового типа
Алгоритмы работы отправителя и получателя RTP-пакетов определены в RFC-3550 на примере кодов, написанных на языке СИ.
Чтобы посчитать частоту потерь пакетов, нужно знать ожидаемое и реально полученное число пакетов для каждого из источников. Число полученных пакетов определяется простым их подсчетом с учетом возможного дублирования и запаздывания. Ожидаемое число пакетов может быть подсчитано получателем как разность между наибольшим порядковым номером пакета ( s->max_seq ) и номером первого пакета в последовательности ( S->base_seq ). При этом нужно учитывать, что номера имеют 16 бит и по этой причине могут переполниться (число переполнений хранится в переменной s->cycles ).
extended_max = s>cycles + s>max_seq; expected = extended_max s>base_seq + 1;
Число потерянных пакетов определяется как разность между ожидаемым и реально полученным числом пакетов:
lost = expected s>received;
Доля потерянных пакетов за отчетный период (с момента посылки предыдущего SR или RR пакета) вычисляется из разности ожидаемого и реально полученного числа пакетов за отчетный период, где expected_prior и received_prior представляют собой значения, записанные в момент подготовки предыдущего отчета:
expected_interval = expected s>expected_prior; s>expected_prior = expected; received_interval = s>received s>received_prior; s>received_prior = s>received; lost_interval = expected_interval received_interval; if (expected_interval == 0 || lost_interval <= 0) fraction = 0; else fraction = (lost_interval << 8) / expected_interval;
Результирующее значение доли потерянных пакетов равно 8-битовому числу с
Управляющий протокол
Функции 1-3 являются обязательными, когда RTP работает в среде с IP мультикастингом, и рекомендательными для всех остальных сред. Разработчикам приложений RTP рекомендуется избегать механизмов, которые могут работать только в уникастном режиме.
Формат пакетов
Стандарт определяет несколько типов
SR: Отчет отправителя. Для статистики приема и передачи участников, которые являются активными отправителями
RR: Отчет получателя. Для получения статистики от участников, которые не являются активными отправителями
SDES: Элементы описания источника, включая CNAME
BYE: Отмечает прекращение участия в группе
APP: Специфические функции приложения
Каждый
Каждый индивидуальный
SDES CNAME.Таким образом, все
Префикс шифрования. Если составной пакет должен быть зашифрован, он снабжается 32-битным случайным числом-префиксом, которое копируется для каждого передаваемого составного пакета.
SR или RR. Первый
Дополнительные RR. Если число источников, для которых приводится статистика приема, превышает 31, в первый пакет помещается информация по части источников, остальная часть размещается в следующих RR-пакетах.
SDES. SDES-пакет, содержащий CNAME, должен быть включен в каждый составной
Bye или APP. Другие типы
Для трансляторов и смесителей рекомендуется объединять
Приложение может игнорировать
(рис 10.7) Пример составного пакета RTCPПротокол RTP построен так, чтобы позволять приложению изменять число участников от единиц до тысяч. Например, при аудиоконференциях информационный поток всегда ограничен (сколько бы ни было участников, все они одновременно говорить не могут, так как не смогут ничего понять). Однако трафик управления таким свойством не обладает. Если доклады о приеме от каждого участника поступают с постоянной частотой, трафик управления будет расти пропорционально числу участников. Следовательно, нужно принимать меры по ограничению трафика.
Для каждой сессии предполагается, что предельно допустимый информационный трафик сессии делится между участниками. Эта полоса пропускания может быть зарезервирована. Полоса не зависит от метода кодирования, но на выбор этого метода может оказать влияние имеющаяся в распоряжении полоса пропускания используемого канала. Определенные ограничения на полосу сессии может накладывать конкретное приложение. Вычисление полосы пропускания, необходимой для управления, требует учета издержек транспортных протоколов (например, UDP и IP).
Трафик управления должен быть ограничен малой долей полной полосы пропускания сессии: настолько малой, чтобы не нанести ущерба основной функции транспортного протокола — переносу информации. Предлагается, чтобы доля трафика сессии, выделенная на
Алгоритм вычисления периода рассылки составных
Этот алгоритм может использоваться для сессий, в которых всем участникам позволено посылать данные. В этом случае полоса пропускания сессии зависит от произведения трафика индивидуального отправителя на число участников сессии, а полоса пропускания
Вычисление периода рассылки
Участник может пометить другой узел как пассивный или удалить его из списка, если от него не получено RTP или
Если зарегистрированный узел помечен как пассивный, он будет оставаться в списках достаточно долго и учитываться при вычислении распределения полосы пропускания для
Данная спецификация определяет несколько элементов описания источника (SDES). Сюда входит CNAME (каноническое имя), Name (персональное имя) и Email (электронный адрес). Спецификация предлагает также средства для определения типа
Когда несколько приложений работают одновременно, например, в случае мультимедиа-конференции, допускается, чтобы дополнительная информация пересылалась только в рамках одной RTP-сессии. Остальные сессии будут использовать только элемент CNAME.
RTP-получатели обеспечивают обратную связь контроля качества, используя
Как SR, так и RR-формы включают в себя нуль или более блоков отчетов о приеме, по одному для каждого источника синхронизации, от которого получатель принял информационные RTP-пакеты с момента последнего отчета. Отчеты не направляются для источников, перечисленных в списке CSRC. Каждый блок отчета о приеме содержит статистику данных, полученных от конкретного источника. Так как в SR или RR-пакет можно поместить максимум 31 блок отчетов, дополнительные RR-пакеты укладываются после исходного SR или RR-пакета.
Пакет отчета отправителя состоит из трех секций (см. рис. 10.8), за которыми может следовать четвертая, определяемая, если необходимо, профайлом. Первая секция — заголовок, имеет 8 октетов. Эта секция содержит следующие поля.
Версия (v): 2 бита
Идентифицирует версию протокола RTP, которая совпадает с версией v=2.
Заполнитель (P): 1 бит
Если бит заполнителя P=1, то этот пакет
Число отчетов о приеме (RC): 5 бит
Число блоков отчетов о приеме, содержащихся в этом пакете. Допустимо значение нуль.
Тип пакета(PT): 8 бит
Содержит константу 200 для пакетов
Длина: 16 бит
(рис 10.8) Формат RTCP пакета сообщения отправителяДлина
SSRC: 32 бит
Идентификатор источника синхронизации для отправителя SR-пакета.
Вторая секция информации из 20 октетов присутствует в каждом пакете отправителя. Поля этой секции имеют следующие значения.
Временная метка NTP: 64 бита
Указывает абсолютное время, когда данный доклад был послан; оно может быть использовано в комбинации с временными метками, присланными в докладах о приеме другими получателями, для измерения RTT до этих получателей.
Временная метка RTP: 32 бита
Соответствует тому же времени, что и временная метка NTP, но измеряется в тех же единицах и с тем же произвольным смещением, что и временные метки информационных пакетов RTP. Это соответствие может использоваться для внутри- и межсредовой синхронизации для источников, чьи временные метки NTP синхронизованы, и может применяться получателями, не зависящими от среды для оценки номинальной задающей частоты RTP. Заметьте, что в большинстве случаев эти временные метки не будут равны временным меткам RTP в любых последовательных информационных пакетах.
Число пакетов отправителя: 32 бита
Полное число информационных RTP-пакетов, переданных отправителем от начала передачи до момента генерации SR-пакета. Число сбрасывается в нуль, если отправитель изменяет свой SSRC-идентификатор.
Число октетов отправителя: 32 бита
Полное число октетов поля данных (исключая заголовки и заполнители), переданных в информационных RTP-пакетах отправителем, начиная с начала передачи до момента генерации SR-пакета. Это число сбрасывается в нуль, когда отправитель меняет свой SSRC-идентификатор. Оно может быть использовано для оценки среднего потока данных.
Третья секция состоит из нуля или более блоков отчета о приеме в зависимости от числа источников, откуда приняты пакеты с момента последнего отчета. Каждый блок отчета о приеме несет в себе статистику получения RTP-пакетов, поступающих от одного из источников синхронизации. Получатель не сохраняет статистику, когда источник изменяет свой SSRC-идентификатор.
SSRC_n (идентификатор источника): 32 бита
SSRC -идентификатор источника, к которому относится информация, содержащаяся в блоке отчета о получении.
Доля потерянных (пакетов): 8 бит
Часть информационных RTP-пакетов от источника SSRC_n, потерянная с момента посылки предыдущего SR или RR-пакетов, представленная в виде числа с
Суммарное число потерянных пакетов: 24 бита
Полное число информационных RTP-пакетов от источника SSRC_n, которые были потеряны с момента начала передачи. Это число определяется как разность между ожидаемым и полученным числами пакетов, где число полученных включает в себя и дубликаты. Таким образом, пакеты, пришедшие с опозданием, не считаются потерянными, а число потерянных пакетов может оказаться отрицательным, если получены дубликаты пакетов. Число ожидаемых пакетов определяется как разность между номером последнего полученного пакета и номером первого пакета.
Наибольший номер из числа полученных пакетов: 32 бита
Младшие 16 бит содержит наибольший порядковый номер полученного от источника SSRC_n информационного RTP-пакета. Старшие 16 бит несут в себе число циклов нумерации (переполнения счетчика номеров пакетов). Заметим, что различные получатели в рамках одной и той же сессии генерируют разные коды циклов нумерации (расширений), если они начали свою работу в разное время.
Разброс времени доставки: 32 бита
Оценка статистической вариации периода прихода RTP-пакетов, измеряемого с помощью временных меток и характеризуемого целым числом. Разброс периода прихода пакетов j определяется как усредненное отклонение разности D расстояния между пакетами со стороны получателя по отношению к той же величине для стороны отправителя. Эта величина характеризует относительный разброс времени транспортировки пакетов.
Если si равно временной метке i -го пакета RTP, а ri — время прибытия в единицах временной метки пакета i, тогда для двух пакетов i и j D может быть выражено как
Di,j =(rjri)(sjsi)=(rjsj)(risi)
Разброс времени доставки вычисляется непрерывно для каждого пребывающего от SSRC_n пакета i, используя разность D для данного пакета и предыдущего пакета i-1 согласно формуле
j=j+(|Di-1,i|j)/16
Вычисление разброса времени доставки позволяет мониторам, не зависимым от профайла, осуществлять интерпретацию докладов, приходящих от различных приложений. Этот алгоритм является оптимальным первым приближением, а масштабный параметр 1/16 обеспечивает приемлемое уменьшение влияние шума и разумную скорость сходимости [4].
Последняя временная метка (LSR = last SR): 32 бита
Средние 32 бита из 64 во временной метке NTP, полученной как часть последнего отчета SSRC_n. Если SR пока не получено, в поле заносится нуль.
Задержка с момента последнего SR (DLSR = delay of last SR): 32 бита
Задержка, выраженная в единицах 1/65536 секунды, между моментом получения последнего SR-пакета от источника SSRC_n и временем посылки блока отчета о приеме. Если ни одного пакета SR от SSRC_n пока не получено, в поле DLSR заносится нуль.
Пусть SSRC_r обозначает получателя, отправляющего отчет о приеме. Источник SSRC_n может вычислить RTT для SSRC_r путем записи времени a, когда этот блок доклада о приеме был получен. Он вычисляет полное время RTT A-
Это может быть использовано в качестве меры расстояния до кластера получателей, хотя некоторые связи имеют весьма асимметричный характер задержек.
rr: RTCO-пакет отчета о приеме (RFC-1889)

(рис 10.10) Пример вычисления RTT(рис 10.9) Формат пакета отчета о приеме (RR)Формат пакета отчета о приеме (RR) аналогичен формату SR пакета, за исключением того, что поле типа содержит код 201 и опущены первые пять слов информации об отправителе (это NTP/RTP временные метки, а также число пакетов и октетов отправителя). Остальные поля имеют то же самое значение, как и для пакета SR.
Когда нет информации об отправке или приеме, в начало составного RC = 0 ).
Профайл должен определять специфические для приложения расширения в докладах получателей и отправителей, если имеется дополнительная информация о получателе или отправителе, которая должна регулярно сообщаться. Этот метод предпочтительнее, чем описание нового типа
Если необходима дополнительная информация, она должна быть включена в первую очередь в расширение для отчета отправителя, но не будет присутствовать в отчетах о приеме. Если должна быть подключена информация о получателях, эти данные могут структуризоваться в виде массива блоков дополнительно к существующему массиву блоков-отчетов, т.е. число блоков будет задано полем RC.
Ожидается, что качество обратной связи важно не только для отправителя и получателей, но и для независимых мониторов. Отправитель может модифицировать свою передачу на основе обратной связи, получатели могут определить, являются ли проблемы локальными, региональными или глобальными. Менеджер сети может использовать независимые мониторы, которые получают только
На основе информации отправителя независимый монитор может вычислить усредненное значение потока данных, не получая этих данных. Если можно предположить независимость вероятности потери пакета от его размера, тогда число полученных пакетов, умноженное на средний размер поля данных, может дать оценку пропускной способности получателя.
Для
(рис 10.11) Зашифрованный и незашифрованный RTCP-пакеты (#ssrc)SDES:
(рис 10.12) Формат пакета SDESПакет SDES состоит из заголовка и нескольких фрагментов, каждый из которых содержит элементы описания источника, соответствующего данному фрагменту (число фрагментов может быть равно нулю).
Поля версия (V), заполнитель (P) и длина имеют то же назначение, что и в случае SR-пакетов.
Тип пакета (PT): 8 бит
Содержит константу 202, которая идентифицирует данный пакет как
Число источников (SC): 5 бит
Число фрагментов SSRC/CSRC, содержащихся в данном SDES-пакете. Значение нуль допустимо, но бесполезно.
Каждый фрагмент состоит из идентификатора SSRC/CSRC, за которым следует список элементов описания источника SSRC/CSRC (число элементов может равняться нулю). Каждый фрагмент начинается на 32-битовой границе. Каждый элемент состоит из 8-битового поля типа, 8-битового поля числа октетов, характеризующего длину текста, исключая эти 2 октета заголовка, и собственно текста. Заметьте, что текст не может содержать более 255 октетов, но это вполне согласуется с требованиями ограничений на полосу, выделяемую для
Текст кодируется согласно требованиям UTF-2, определенным в стандарте 10646 [10.5],[10.6], annex F ISO. Эта кодировка известна также под названием UTF-8 или UTF-FSS. Она описана в документе "File System Safe
Описания элементов плотно прилегают друг к другу, т.е., их описания не выравниваются на 32-битовые границы путем индивидуального заполнения. Текст не завершается нулем, так как мультиоктетное кодирование может включать в себя нули. Список элементов в каждом фрагменте завершается одним или несколькими нулевыми октетами, первый из которых интерпретируется как тип элемента нуль, завершающий список, а последующие служат для заполнения до 32-битовой границы. Фрагменты, содержащие только нулевые элементы (4 нулевых октета), допускаются, но бесполезны.
Оконечные системы посылают один пакет SDES, содержащий их собственный идентификатор источника (то же, что и SSRC в фиксированных RTP-заголовках). Смеситель посылает один пакет SDES, содержащий фрагмент для каждого источника, от которого поступает SDES-информация, или несколько SDES-пакетов описанного выше формата в случае, когда число таких источников больше 31.
Из числа SDES-элементов только СNAME является обязательным. Некоторые элементы, описанные ниже, могут оказаться полезными только для определенных профайлов, но типы элементов выделяются из общего кодового пространства, чтобы обеспечить совместную работу различных приложений. Дополнительные элементы могут быть определены в профайле путем регистрации их кодов IANA.
CNAME: Канонический идентификатор конечной системы (рис. 10.13).
(рис 10.13) Формат CNAMEИдентификатор CNAME имеет следующие свойства.
CNAME должен обеспечить связь между идентификатором SSRC и источником, которая должна оставаться неизменной.CNAME должно быть удобным средством идентификации источника как для программы, так и для человека.Следовательно, CNAME должно по возможности получаться алгоритмически, а не вводиться вручную. Чтобы удовлетворить этому требованию, следует использовать описанный ниже формат, если другой синтаксис или семантика не заданы. Элемент CNAME должен иметь формат user@host, или host, если имя пользователя не доступно, как это бывает в однопользовательских системах. Для обоих форматов host является либо полным именем домена ЭВМ, откуда поступают данные в реальном масштабе времени, форматированные согласно требованиям документов RFC-1034 [7], RFC-1035 [8] и раздела 2.1 RFC-1123 [10.9]; либо стандартным ASCII-представлением цифрового, сетевого адреса интерфейса ЭВМ, используемого для RTP-обмена: например, стандартное ASCII-представление IP-адреса (версия 4) в точечно-цифровом виде. Стандартное полное имя домена более удобно для человека и исключает необходимость посылать в дополнение элемент Name, но в некоторых обстоятельствах его может быть трудно или невозможно пол
учить. Примерами могут служить dwarf@sleepy.
Имя пользователя должно иметь форму, которая может быть использована в запросах Finger или Talk, — т.е., это скорее имя, вводимое при аутентификации, чем истинное имя пользователя. Имя ЭВМ не обязательно идентично электронному почтовому адресу участника.
Этот синтаксис не обеспечит уникальности имени в тех случаях, когда приложение позволяет пользователю сформировать несколько источников на своей ЭВМ. Такое приложение должно полагаться на SSRC для дополнительной идентификации источника или на профайл, для которого приложение должно специфицировать синтаксис идентификаторов CNAME.
Если каждое приложение создает свои CNAME независимо, в результате можно получить дублированные имена. Если необходимо осуществить связь между сессиями, работающими в разных средах, должны использоваться специальные средства, которые, с одной стороны, обеспечат уникальность имен, а с другой — припишут идентичные имена источникам, размещенным в одной ЭВМ, но работающим с разными средами.
Разработчики приложений должны учитывать возможность того, что использование сетевого адреса, например, для Net-10 (описано в документе RFC-1597 [10.10]) может привести к появлению имен-дубликатов. Дубликаты имен могут возникать, когда ЭВМ с частными адресами, не имеющие выхода в Интернет, переадресуют свои RTP-пакеты в Интернет через транслятор RTP-уровня. (См. также RFC-1627 [10.11].) Чтобы разрешать такие конфликты, приложение должно иметь средства для выработки и присвоения уникальных имен CNAME.
Name: Имя пользователя (рис. 10.14).
(рис 10.14) Формат элемента NameЭто настоящее имя, используемое для описания источника, например, "Иван Дурак, russia.com". Оно может быть сформировано пользователем в произвольной форме. Для приложений типа конференций эта форма имени может быть наиболее желательной при отображении в списках участников и, следовательно, может посылаться более часто, чем любые другие элементы помимо CNAME. Такой приоритет может быть установлен профайлом. Значение NAME предполагается неизменным, по крайней мере, в пределах сессии. В то же время не требуется, чтобы оно было уникальным для группы участников сессии.
Email: Адрес электронной почты (рис. 10.15).
(рис 10.15) Формат элемента EmailАдрес электронной почты должен иметь формат, согласующийся с требованиями документа RFC-822, например, ivan.durak@itep.ru. Значение элемента Email предполагается неизменным в пределах сессии.
phone: Телефонный номер
(рис 10.16) Формат элемента phoneТелефонный номер должен иметь формат с символом плюс, замещающим международный код. Например, +7 095 129 9442 для номера в России.
LOC: Географический адрес пользователя
(рис 10.17) Формат элемента LOCРазличная детализация этого элемента сильно зависит от приложения. Для использования во время конференций строки типа "Zuzino, Moscow" может быть достаточно, в то время как для активной системы поиска сотрудников приемлемой может стать строка "room 205, itep bl 143". Значение LOC предполагается неизменным на время сессии. Исключение могут составлять мобильные ЭВМ.
TOOL: Имя приложения или программного средства
(рис 10.18) Формат элемента TOOLСтрока, сообщающая имя и, возможно, версию приложения, формирующего поток, например, "VC 2.1". Эта информация может быть полезной для отладочных целей и сходна с SMTP-заголовками. Предполагается, что значение TOOL остается постоянным в течение сессии.
Note: Уведомление/статус
(рис 10.19) Формат элемента NoteДля этого элемента предлагается следующая семантика (она может быть определена профайлом). Элемент NOTE предназначен для сообщений, характеризующих текущее состояние источника, например, "on the phone, can't talk". Или, во время семинара этот элемент может быть использован для передачи темы обсуждения. Он может служить только для передачи необычной информации и не должен включаться в систематическую рассылку, так как замедлит скорость передачи отчетов. В частности, он не должен включаться в конфигурационный файл пользователя.
Так как может быть важно отобразить элемент Note (в случае, когда он активен), скорость, с которой передаются другие элементы (кроме CNAME), может быть уменьшена ради того, чтобы передать элемент Note. Когда сообщение становится не актуальным, элемент NOTE передается еще несколько раз с той же частотой, но с длиной строки, равной нулю. Однако получатели должны рассматривать элемент Note как потерявший актуальность, если они не получают его, например, на протяжении 20-30
PRIV: Элемент частного расширения SDES
(рис 10.20) Формат элемента расширения PRIVЭтот элемент используется, чтобы описать экспериментальные или специфические для приложения расширения SDES. Элемент содержит префикс, включающий в себя субполя длины и строки префикса, за которыми следует строка значения, занимающая остальное пространство элемента и несущая необходимую информацию. Поле длины префикса занимает 8 бит. Строка префикса представляет собой имя, определенное человеком, который сформировал элемент PRIV. Это имя должно быть уникальным, и никакой другой элемент PRIV не может иметь такое же. Разработчик приложения может выбрать имя приложения и, если необходимо, субтип дополнения.
Заметьте, что префикс занимает некоторое количество из 255 октетов элемента, поэтому желательно, чтобы он был короче.
Префиксы SDES PRIV не нужно регистрировать в IANA. Если некоторая форма элемента PRIV окажется достаточно универсальной, она должна быть приписана некоторому регулярному типу элемента SDES, зарегистрированному IANA, так что необходимость в префиксе отпадет. Это упростит использование и увеличит эффективность передачи.
Bye: Пакет завершения сессии RTCP
(рис 10.21) Формат пакета ByeПакет Bye указывает на то, что один или более источников покинули сессию.
Поля версия (V), заполнитель (P) и длина имеют те же назначения, что и в случае SR-пакетов
Тип пакета (PT): 8 бит
Содержит код 203, который указывает на то, что это
Число источников (SC): 5 бит
Число фрагментов SSRC/CSRC, содержащихся в данном пакете. Значение нуль допустимо, но бесполезно.
Если пакет bye получен смесителем, он переадресует этот пакет с идентификаторами SSRC/CSRC без изменений. Если сам смеситель отключается, он должен послать пакет Bye, перечислив все источники, вносившие вклад в поток, с которым он работал, а также свой идентификатор SSRC. Опционно пакет Bye может содержать 8-битовое число октетов, за которым следует текст соответствующей длины, объясняющий причину отключения, например, "camera
APP: RTCPпакет, определенный приложением
(рис 10.22) Формат пакета, задаваемого приложениемПакет APP предназначен для экспериментального использования при разработке новых приложений или новых функций. Здесь не требуется регистрации типа пакета. APP-пакеты с неузнанными именами должны игнорироваться. После тестирования, когда предполагается широкое использование, рекомендуется новый APP-пакет переопределить без субтипа и поля имени, затем его следует зарегистрировать в IANA (Internet Assigned Numbers Authority) как новый тип
Поля версия (V), заполнитель (P) и длина имеют те же назначения, что и в случае SR-пакетов.
Субтип: 5 бит
Может использоваться в качестве субтипа, допуская описание набора APP-пакетов с уникальным именем, или для любых данных, специфических для конкретного приложения.
Тип пакета (PT): 8 бит
Содержит код 204, который указывает на то, что это
Имя: 4 октета
Имя, выбираемое разработчиком, который определил набор APP-пакетов. Это имя должно быть уникальным и не совпадать ни с одним другим именем другого APP-пакета данного приложения. Разработчик приложения может использовать для этой цели имя приложения, при этом новые типы пакетов приложения будут отличаться друг от друга кодом субтипа. Имя интерпретируется как последовательность четырех ASCII-символов, где строчные и прописные буквы не являются тождественными.
Поле информация, зависящая от приложения, имеет переменную длину.
Информация, зависящая от приложения, используется в APP-пакетах опционно. Она интерпретируется приложением, а не самим RTP. Размер поля должен быть кратным 32 бит.
Кроме переадресации информационных пакетов (иногда с некоторой модификацией) трансляторы и мультиплексоры должны также обрабатывать
Транслятор, который не модифицирует информационные пакеты, например, такой, который осуществляет связь между мультикастными и уникастными адресами, может просто переадресовывать
Информация отправителя SR. Транслятор не генерирует своей собственной информации отправителя, а переадресует SR-пакеты, полученные из одной области и адресованные в другие области. SSRC остается неизменным, но, если необходима трансляция, информация отправителя должна быть модифицирована. Если транслятор изменяет кодировку данных, он должен изменить поле число октетов отправителя. Если он объединяет несколько информационных пакетов в один, то нужно изменить поле число пакетов отправителя. Если он изменяет частоту временных меток, нужно модифицировать поле временная метка RTP в SR-пакете.
Блоки отчетов о приеме SR/RR. Транслятор переадресует доклады о приеме, полученные из одной области сети, в другие. Заметим, что эти сообщения движутся в направлении, противоположном данным. SSRC при этом остается неизменным. Если транслятор объединяет несколько информационных пакетов в один выходной пакет и, следовательно, изменяет номер по порядку, он должен позаботиться о модификации полей потерянных пакетов и наибольший номер из числа полученных пакетов.
Транслятор не нуждается в своем собственном SSRC-идентификаторе, но может и завести такой идентификатор, чтобы посылать отчеты о том, что получено. Такие отчеты будут посылаться во все области сети, подключенные к транслятору.
SDES. Трансляторы осуществляют переадресацию без изменения SDES-информации, которая получена из сетевых областей, участвующих в сессии. Но они могут, например, решить отфильтровывать некоторую информацию, если этого требуют ограничения пропускной способности. Транслятор, который генерирует свои собственные RR-пакеты, должен посылать SDES CNAME-информацию о самом себе в область сети, куда он шлет эти RR-пакеты.
BYE. Трансляторы переадресуют пакеты BYE без изменений. Трансляторы, имеющие свой собственный SSRC, должны генерировать пакеты BYE с этим SSRC-идентификатором, если они намереваются прекратить свою работу по переадресации.
APP. Трансляторы переадресовывают APP-пакеты без каких-либо изменений.
Обработка
Так как смеситель генерирует свой собственный информационный поток, он не пропускает через себя SR или RR-пакеты и вынужден формировать новые пакеты для отправки в обоих направлениях.
Информация отправителя SR. Смеситель не пропускает через себя данные об отправителе от источников, которые он объединяет, так как характеристики потока при смешении кардинально меняются. Как источник синхронизации смеситель генерирует свои собственные SR-пакеты с информацией отправителя и посылает их в том же направлении, что и смешанный поток.
Блоки отчетов о приеме SR/RR. Смеситель генерирует свои собственные отчеты о приеме для каждой из сетевых областей и посылает их туда. Он не посылает эти отчеты о приеме другим областям и не переадресует отчеты из одной области в другую.
SDES. Смесители обычно переадресуют без изменений SDES-информацию, которую они получают из сетевых областей зоны обслуживания, но могут в случае ограничения полосы пропускания отфильтровывать любую SDES-информацию помимо CNAME. CNAME должны доставляться, чтобы обеспечить работу по обслуживанию столкновений идентификаторов SSRC. Идентификатор в списке CSRC, сгенерированный смесителем, может вызвать столкновение с SSRC-идентификатором, сформированным оконечной системой. Смеситель должен послать SDES CNAME информацию о самом себе той сетевой области, куда он посылает SR или RR пакеты.
Так как смесители не переадресуют SR- или RR-пакеты, они обычно извлекают SDES-пакеты из составных
Смеситель, который не вводит идентификаторы CSRC, может также воздерживаться от пересылки SDES CNAME. В этом случае пространства идентификаторов SSRC для обеих сетевых областей оказываются независимыми.
BYE. Смесители должны переадресовывать пакеты BYE. Они должны генерировать пакеты BYE со своим собственным идентификатором SSRC, если они намериваются прервать пересылку пакетов.
APP. Обработка APP-пакетов смесителями зависит от вида приложения.
| Сокращенное название | Имя | значение |
|---|---|---|
| SR | sender report — сообщение отправителя | 200 |
| RR | receiver report — сообщение получателя | 201 |
| SDES | source description — описание источника | 202 |
| BYE | goodbye — завершение | 203 |
| APP | application-defined — определен приложением | 204 |
Эти значения типов были выбраны в диапазоне 200-204 для улучшенного контроля корректности заголовков
Другие константы определены IANA. Экспериментаторам предлагается зарегистрировать числа, которые им нужны, а затем аннулировать регистрацию, если необходимость в них отпадет.
Типы пакетов
Период отчетов
Расширения SR/RR. Секция расширения может быть определена для
Пакеты
| Сокращенное название | Имя | значение |
|---|---|---|
| END | Конец списка SDES | 0 |
| CNAME | Каноническое имя | 1 |
| NAME | Имя пользователя | 2 |
| Электронный адрес пользователя | 3 | |
| PHONE | Телефонный номер пользователя | 4 |
| LOC | Географическое положение пользователя | 5 |
| TOOL | Имя приложения или программного средства | 6 |
| NOTE | Информация об отправителе | 7 |
| PRIV | Частные расширения | 8 |
Протокол RSVP (L. Zhang, R. Braden, Ed., S. Berson, S. Herzog, S. Jamin "Resource ReSerVation Protocol", RFC-2205, 2210, 274547, 3182, смотри также http://book.itep.ru/ 4\44\rsv_4496.htm) используется ЭВМ для того, чтобы запросить для приложения определенный уровень качества сетевых услуг QoS (Quality of Service, например, определенный уровень полосы пропускания). RSVP применяется также маршрутизаторами для доставки QoS-запросов всем узлам вдоль пути информационного потока, а также для установки и поддержания необходимого уровня услуг (например, для приложений IP-телефонии). Функция этого протокола крайне важна и многообразна, и именно поэтому он — один из самых сложных протоколов.
В 1994 году группа IETF сформировала рабочую группу по интегрированным услугам (
RSVP запрашивает ресурсы только для одного из направлений трафика и только по указанию получателя. RSVP работает поверх IPv4 или IPv6. Протокол относится к числу управляющих, а не транспортных.
Протокол RSVP предназначен для работы с существующими и будущими маршрутными протоколами, управляющими как обычными, так и мультикастными потоками. В последнем случае ЭВМ сначала посылает IGMP-запрос, чтобы подключиться к мультикастинг-группе, а затем уже RSVP-сообщение для резервирования ресурсов по маршруту доставки.
Механизм обеспечения QoS включает в себя классификацию пакетов, административный контроль и диспетчеризацию. Классификатор пакетов определяет QoS класс (а иногда и маршрут движения) для каждого пакета. В процессе реализации резервирования RSVP-запрос проходит два местных
Структура и содержимое параметров QoS документировано в спецификации RFC-2210. Так как число участников группы, а также топология связей меняется со временем, структура RSVP предполагает адаптацию ЭВМ и маршрутизаторов к этим изменениям. Для этой цели RSVP периодически посылает сообщения для поддержания необходимого состояния вдоль всего маршрута обмена. При отсутствии этих сообщений происходит тайм-аут, и резервирование аннулируется. Обобщая, можно сказать, что RSVP имеет следующие атрибуты:
Подобно приложениям маршрутизации и протоколам управления, программы RSVP исполняется в фоновом режиме. Схема работы процесса RSVP показана на рис. 10.23.
(рис 10.23) RSVP в ЭВМ и маршрутизатореRSVP определяет сессию как поток данных с определенным местом назначения и заданным транспортным протоколом. Каждая сессия является совершенно независимой.
Сессия RSVP описывается тремя параметрами: DestAddress, ProtocolId DstPort. DestAddress — IP-адрес места назначения информационных пакетов (уникаст или мультикаст). ProtocolId — идентификатор IP протокола. Опционный параметр DstPort — обобщенный порт места назначения, т.е. еще одна точка демультиплексирования на транспортном или прикладном уровне. DstPort может быть определено полем порта места назначения UDP/TCP.
Заметим, что, строго говоря, не обязательно включать в описание сессии DstPort, когда DestAddress является мультикастным, так как различные сессии могут иметь различные мультикаст-адреса. Однако, DstPort необходим, чтобы разрешить более одной уникаст-сессии для одной и той же ЭВМ-получателя.
Для уникастной передачи может быть один получатель, но много отправителей; RSVP может выполнить резервирование для передачи много_точек -> одна_точка.
Простой запрос резервирования RSVP состоит из flowspec (спецификация потока) и filter spec (спецификация фильтра); эта комбинация называется описателем потока. Спецификация flowspec определяет желательное значение QoS. Спецификация фильтра в сочетании со спецификацией сессии определяют тип набора пакетов.
Спецификация flowspec используется для задания параметров диспетчеров в узлах, через которые транспортируется поток, а спецификация фильтра — для определения параметров классификатора пакетов. Информационные пакеты, адресованные конкретной сессии, но не удовлетворяющие какой-либо спецификации фильтра, обрабатываются без гарантий обеспечения оговоренного QoS.
Спецификация flowspec в запросе резервирования включает в себя значение класса услуг и два набора параметров:
Rspec, который определяет желательное значение QoS, иTspec, который описывает информационный поток. По существу этот набор параметров дает возможность определить, распространяется ли данное резервирование на данный конкретный пакет.В Tspec могут входить: IP-адрес отправителя, адрес получателя, номера портов получателя и отправителя, поле TOS и код транспортного протокола. Чем больше параметров входит в Tspec, тем сложнее задача транзитного маршрутизатора, тем больше и задержка. В случае IPv6 задача существенно упрощается (если ограничиться классификацией по меткам и не анализировать номера портов).
Форматы и содержимое Tspec и Rspec определяются общими моделями обслуживания [RFC-2210] и обычно недоступны для RSVP. Конкретный формат спецификации фильтра зависит от того, используется IPv4 или IPv6. Например, спецификация фильтра может применяться для выделения некоторых составных частей информационного потока, осуществляя отбор с учетом
Так как номера портов UDP/TCP задействуются для классификации пакетов, каждый маршрутизатор должен уметь анализировать эти поля. Поэтому возможны три проблемы.
Сообщения RSVP, несущие запросы резервирования, исходят со стороны получателя и направляются отправителю информации. В каждом промежуточном узле запрос резервирования запускает две процедуры:
A. Резервирование канала
Процесс RSVP проходит стадии проверки допуска и политики. Если какой-либо тест не прошел, резервирование отвергается и посылается сообщение об ошибке. Если все тесты прошли успешно, узел устанавливает классификатор пакетов, чтобы отбирать пакеты, указанные в спецификации фильтра. Далее устанавливается контакт с соответствующим канальным уровнем для получения желательного QoS, заданного в flowspec.
Для простой выделенной линии желаемый QoS будет получен с помощью диспетчера пакетов в драйвере канального уровня. Если технология канального уровня поддерживает свои средства управления QoS, тогда RSVP должен согласовать с канальным уровнем получение требуемого QoS.
Б. Переадресация запроса назад
Запрос резервирования посылается от получателя отправителю (или отправителям) данных. Запрос резервирования, который переадресуется узлом дальше, может отличаться от того, который он получил по двум причинам. Механизм управления трафиком модифицирует flowspec от узла к узлу. Что более важно, запросы резервирования, поступающие от получателей мультикастинг-дерева, должны объединяться по мере продвижения процесса резервирования в направлении отправителя данных.
Когда получатель данных отправляет запрос резервирования, он может запросить также присылку сообщения, подтверждающего резервирование. Процесс резервирования распространяется от получателей к отправителям, от узла к узлу. В каждом узле требования резервирования объединяются и сопоставляются с имеющимися возможностями. Это продолжается до тех пор, пока запрос не достигнет отправителя или пока не возникнет конфликт перегрузки. В результате получатель данных, направивший запрос резервирования, получит сообщение об успехе или ошибке.
Базовая модель резервирования RSVP является однопроходной: получатель посылает запрос резервирования вдоль мультикастинг-дерева отправителю данных и каждый узел по пути воспринимает или отвергает этот запрос. RSVP поддерживает улучшенную версию однопроходного варианта алгоритма, известного под названием OPWA (One Pass With Advertising) [OPWA95]. С помощью OPWA управляющие пакеты RSVP посылаются вдоль маршрута для сбора данных, которые могут быть использованы для предсказания значения QoS маршрута в целом. Результаты доставляются протоколом RSVP в ЭВМ получателя. Эти данные могут позднее служить для динамической адаптации соответствующих запросов резервирования.
Запрос резервирования включает в себя набор опций, которые в совокупности называются стилем. Одна опция резервирования определяет способ резервирования различными отправителями в пределах одной сессии.
Другая опция резервирования контролирует выбор отправителей. В одних случаях каждому отправителю ставится в соответствие определенная спецификация фильтра, в других — таких спецификаций не требуется вовсе. В настоящее время определены следующие стили.
Стиль WF использует опции разделенного резервирования и произвольного выбора отправителя (wildcard). Таким образом, резервирование со стилем WF создает резервирование, которое делится между потоками всех отправителей.
Резервирование WF может рассматриваться как общая труба, чей размер равен наибольшему из ресурсных запросов от получателей и не зависит от числа отправителей.
Стиль резервирования WF передается в направлении отправителей и автоматически распространяется на новых отправителей при их появлении. Символически можно представить запрос резервирования стиля WF как:
WF( * {Q}),
где звездочка представляет произвольную подстановку при выборе отправителя, а Q — спецификация flowspec.
Стиль FF использует опции четкое (distinct) резервирование и явный выбор отправителя. Таким образом, простой запрос со стилем FF создает точно заданное резервирование для информационных пакетов от определенного отправителя, без совместного использования ресурса с другими отправителями в пределах одной и той же сессии. Символически простой запрос резервирования FF можно представить как:
FF(S{Q}),
где S — выбранный отправитель, а Q — соответствующая спецификация flowspec; эта пара параметров образует дескриптор потока. RSVP позволяет применение нескольких простых стилей резервирования FF одновременно, при этом формируется список дескрипторов потоков:
FF(S1{Q1}, S2{Q2}, ...)
Полное резервирование в канале для данной сессии FF характеризуется суммой Q1, Q2, ... для всех отправителей, куда посланы запросы.
Стиль SE использует опции долевое (shared) резервирование и явный (explicit) выбор отправителя. Таким образом, стиль резервирования SE формирует одно резервирование, которое совместно эксплуатруется несколькими отправителями. В отличие от стиля WF, SE позволяет получателю непосредственно специфицировать набор отправителей. Запрос резервирования SE, содержащий flowspec Q и список отправителей S1, S2, ... можно представить в символьной форме как:
SE((S1,S2,...){Q} )
Долевое резервирование, выполненное с применением стилей WF и SE, пригодно для мультикастных приложений, где несколько источников данных редко осуществляют передачу одновременно. Пакетная передача голоса может служить примером долевого резервирования, так как лишь ограниченное число людей говорят одновременно. Каждый получатель может направить запрос резервирования WF или SE на удвоенную полосу пропускания, необходимую одному отправителю, позволяя тем самым говорить обоим партнерам одновременно. С другой стороны, стиль FF, который осуществляет четкое резервирование для потоков отдельных отправителей, подходит для передачи видеосигналов.
Правила RSVP не позволяют объединять долевое и четкое резервирование, так как эти модели абсолютно несовместимы. Не допускается также объединение явного и произвольного (wildcard) выбора отправителей, так как это может вызвать предоставление незаказанных услуг получателю, который указал тип услуг явно. Таким образом, стили WF, SE и FF не совместимы.
Можно моделировать эффект WF резервирования, используя стиль SE. Когда приложение запрашивает WF, процесс RSVP получателя может использовать местный статус для выполнения эквивалентного резервирования SE, которое в явном виде перечисляет всех отправителей. Однако резервирование SE вынуждает классификатор пакетов в каждом узле в явном виде выбрать каждого отправителя из списка, в то время как WF позволяет классификатору пакетов осуществить произвольный выбор отправителя и порта с помощью wildcard. Когда список отправителей велик, стиль резервирования WF обеспечивает значительно меньшие издержки, чем SE.
На рис. 10.24. показан пример маршрутизатора с двумя входными интерфейсами IА и IБ, через которые проходят входные потоки, и двумя выходными интерфейсами IВ и IГ, через которые осуществляется переадресация входных потоков. Пусть существует три отправителя S1, S2 и S3, подключенные к интерфейсам IА и IБ, соответственно. Имеется три получателя R1, R2 и R3, которые маршрутизированы через выходные интерфейсы IВ и IГ, соответственно. Будем также предполагать, что интерфейс IГ подключен к широковещательной сети, а R2 и R3 достижимы через разные маршрутизаторы, не показанные на рисунке.
Здесь нужно специфицировать мультикастные маршруты в пределах узла, отображенного на рис. 10.24. Предположим сначала, что информационные пакеты от каждого из отправителей Si, показанных на рисунке, маршрутизованы на оба выходных интерфейса. При этих предположениях на рисунках 10.25, 10.26 и 10.27 проиллюстрированы стили резервирования WF, FF и SE соответственно.
(рис 10.24) Конфигурация маршрутизатораДля простоты эти примеры показывают flowspec как одномерное кратное повторение некоторого базового качества ресурса B. Колонка "Резервирует" отображает запросы резервирования RSVP, полученные через выходные интерфейсы IВ и IГ, а колонка "Получает" — результирующее состояние резервирования для каждого интерфейса. Колонка "Посылает" показывает запросы резервирования, посланные предшествующим узлам (IА и IБ). В колонке "Резервирует" каждая рамка представляет один зарезервированный виртуальный канал с соответствующим дескриптором потока.
Рис. 10.25, демонстрируя стиль WF, приводит две ситуации, в которых требуется объединение.
(рис 10.25) Пример резервирования WF (Wildcard-Filter)На рис. 10.26 проиллюстрирован стиль резервирования FF (Fixed-Filter). У каждого выходного интерфейса имеется отдельное резервирование для каждого запрошенного источника, но это резервирование будет общим для всех получателей, которые послали запрос. Дескрипторы для получателей S2 и S3, полученные через выходные интерфейсы IВ и IГ, вкладываются в пакеты запросов, направляемых предыдущему узлу (IБ). С другой стороны, три различные дескриптора потоков, специфицирующих отправителя S1, объединяются в один запрос FF(S1{4B}), который посылается предыдущему узлу (IА).
На рис. 10.27 показан пример стиля резервирования SE. Когда резервирования стиля SE объединяются, результирующая спецификация фильтра является объединением исходных спецификаций, а результирующая спецификация flowspec равна наибольшей из flowspec.

(рис 10.27) Пример резервирования FF (Fixed-Filter)(рис 10.26) Пример резервирования SE (Shared-Explicit)Приведенные примеры предполагают, что информационные пакеты от S1, S2 и S3 маршрутизируются через оба выходных интерфейса. Нижняя часть рис. 10.24 показывает еще одно предположение о маршрутизации: информационные пакеты от S2 и S3 не переадресуются интерфейсу IВ, например, из-за того, что сеть обеспечивает более короткий путь для пакетов отправителя к R1. Рис. 10.25 показывает пример резервирования WF именно при этом предположении (стрелками отмечены допустимые маршруты). Так как нет пути от IБ к IВ, резервирование, переадресуемое интерфейсом IБ, рассматривает резервирование только для интерфейса IГ.
На рис. 10.28 проиллюстрирована модель RSVP узла маршрутизатора. Каждый поток данных приходит со стороны предшествующего узла через соответствующий входной интерфейс и выходит из маршрутизатора через один или несколько выходных интерфейсов. Один и тот же интерфейс для разных потоков в пределах одной сессии может выполнять как входную, так и выходную роль. Несколько предшествующих узлов и/или последующих узлов могут для коммуникаций использовать один и тот же физический интерфейс; например, на рисунке два узла Г и Г' подключены к широковещательной сети через интерфейс IГ.
(рис 10.28) Маршрутизатор, использующий RSVPСуществует два фундаментальных типа сообщений RSVP: Resv и Path. Каждый получатель посылает свой RSVP запрос резервирования в виде сообщений ( Resv ) отправителям данных. Эти сообщения должны двигаться в точности тем же маршрутом с учетом выбора отправителей, что и данные, только в противоположном направлении. Они создают и поддерживают состояние резервирования в каждом узле вдоль маршрута. Сообщения Resv должны быть в конце концов доставлены ЭВМ-отправителям, таким образом, ЭВМ устанавливают параметры управления трафиком.
Каждая ЭВМ-отправитель передает RSVP сообщения Path вдоль уникаст/мультикаст маршрутов, сформированных с помощью маршрутных протоколов. Эти сообщения Path запоминают состояние пути в каждом узле вдоль маршрута. Состояние пути включает в себя уникастный IP-адрес предыдущего узла, который используется для маршрутизации сообщений Resv от узла к узлу в противоположном направлении. Сообщение Path содержит также следующую информацию:
Сообщение Path должно нести в себе шаблон отправителя (Sender Template), который описывает формат пакетов данных, посылаемых отправителем. Этот шаблон имеет форму спецификации фильтра, которая может использоваться для отделения пакетов данного отправителя от других пакетов в пределах сессии.
Шаблоны отправителя имеют тот же формат, что и спецификации фильтра, которые применяются в сообщениях Resv. Следовательно, шаблон отправителя может специфицировать только его IP-адрес и опционно UDP/TCP порт, с учетом идентификатора протокола, заданного для сессии.
Сообщения Path должны содержать спецификацию отправителя Tspec, которая определяет характеристики информационного трафика, формируемого отправителем. Спецификация Tspec используется для предотвращения избыточного резервирования.
Сообщение Path может нести в себе пакет данных оповещения OPWA, известный как Adspec. Пакет Adspec, полученный с сообщением Path, передается системе управления трафиком, которая присылает скорректированную версию Adspec. Последняя пересылается далее в виде сообщения Path.
Сообщения Path посылаются с теми же адресами отправителя и получателя, что и данные, так что они будут корректно маршрутизироваться даже через сетевые области, не поддерживающие RSVP. С другой стороны, сообщения Resv посылаются от узла к узлу; каждый узел, поддерживающий RSVP, переправляет сообщение Resv по уникастному адресу предшествующего узла RSVP.
Сообщение Resv, переадресованное предшествующему узлу, несет в себе спецификацию flowspec, которая является наибольшей из всех flowspec, запрошенных последующими узлами — получателями данных.
Так как flowspecs непрозрачны для RSVP, действительные правила для сравнения flowspecs должны быть определены и реализованы вне рамок этого протокола. Реализация RSVP потребует обращения к специальной программе, чтобы выполнить объединение спецификаций flowspec.
Заметим, что спецификации flowspecs представляют собой в общем случае многомерные векторы; они могут содержать как Tspec, так и Rspec компоненты, каждая из которых может сама быть многомерной.
Например, если один запрос требует высокой пропускной способности, а другой — жесткого ограничения задержек, то один не может быть "больше" другого. В таком случае, вместо взятия большего, прикладная программа объединения должна уметь сформировать такую спецификацию flowspec, которая по крайне мере столь же велика, как и каждая из составляющих; математически это наименьший верхний предел LUB (least flowspec по крайне мере настолько мала, насколько нужно; тогда это наибольший нижний предел GLB (Greatest
Для вычисления эффективного значения flowspec ( Re, Te ), инсталлируемого в интерфейс, используются следующие шаги [RFC-2210]. Здесь Te — эффективная спецификация Tspec, а Re — эффективная спецификация Rspec.
flowspec для выходного интерфейса. В зависимости от технологии канального уровня, это может требовать объединения спецификаций flowspecs различных последующих узлов. Это означает вычисление эффективной спецификации flowspec как LUB flowspecs. Какие спецификации следует объединять, определяется средой канального уровня, в то время как процедура объединения задается используемой моделью обслуживания [RFC-2210]. В результате получается спецификация flowspec, которая непрозрачна для RSVP, но в действительности состоит из пары ( Re, Resv_Te ), где Re является эффективной спецификацией Rspec, а Resv_Te — эффективная спецификация Tspec.Path_Te, зависящей от приложения и представляющей собой сумму всех Tspecs, которые были присланы в сообщениях Path, пришедших от различных предшествующих узлов (например, некоторые или все узлы A, Б, и Б' на рис. 10.28).Re, Resv_Te ) и Path_Te передаются системе управления трафиком. Управление трафиком вычислит эффективную спецификацию flowspec, как минимум Path_Te и Resv_Te.RSVP использует подход soft state (гибкое состояние) для управления состоянием резервирования в маршрутизаторах и ЭВМ. Гибкое состояние RSVP создается и периодически обновляется посредством сообщений Path и Resv. Состояние уничтожается, если не приходит подтверждения в течение заданного времени таймаута очистки. Состояние может быть стерто также посредством сообщения teardown (уничтожение). По истечении каждого тайм-аута обновления и после любых изменений состояния RSVP осуществляет проверку, чтобы подготовить и отправить сообщения обновления Path и Resv последующим узлам.
Сообщения Path и Resv практически идемпотентны. Когда маршрут меняется, следующее сообщение Path инициализирует состояние прохода для нового маршрута, а последующие сообщения Resv установят для него резервирование. Состояние же на неиспользованном в данный момент сегменте маршрута будет аннулировано по тайм-ауту. Следовательно, определение того, является ли сообщение новым или обновляющим, принимается отдельно для каждого узла в зависимости от его текущего состояния.
Протокол RSVP посылает свои сообщения в виде IP-дейтограмм без какого-либо улучшения надежности. Периодическая передача сообщений обновления от ЭВМ и маршрутизаторов позволяет компенсировать случайные потери отдельных RSVP-сообщений. Если тайм-аут удаления установлен равным K периодам обновления, то RSVP может допускать потерю K-1 RSVP-пакетов подряд без аннулирования состояния. Механизм управления сетевым трафиком должен быть отконфигурирован так, чтобы предоставить минимальную полосу пропускания для сообщений RSVP и предотвратить их потерю из-за перегрузки канала.
Состояние, поддерживаемое RSVP, является динамическим. Для изменения набора отправителей Si или изменения любого запроса QoS, ЭВМ просто начинает посылать измененные сообщения Path и/или Resv. В результате будет осуществлено соответствующее изменение RSVP-состояния во всех узлах вдоль пути, а неиспользуемые состояния будут аннулированы по тайм-ауту, если не поступит прямых указаний по их ликвидации до этого.
В стабильном состоянии осуществляется обновление статуса узел за узлом. Когда полученное состояние отличается от хранящегося, последнее обновляется. О модификации состояния соседи оповещаются с помощью сообщений обновления, которые рассылаются сразу после изменения состояния. Но эта волна изменений может остановиться в узле, где в результате слияния получается состояние, которое не отличается от прежнего. Это минимизирует трафик управления RSVP, что весьма существенно для больших мультикастинг-групп.
Состояние, которое получено через конкретный интерфейс I*, никогда не должно переадресовываться этому
(рис 10.29) Независимые резервированияСуществует еще одно правило, которое управляет процессом переадресации сообщений Resv: состояние из сообщения Resv, полученное через выходной интерфейс Io, следует передавать входному интерфейсу Ii только в том случае, когда сообщение Path от Ii переадресовано к Io.
Сообщение RSVP аннулирование удаляет проход или состояние резервирования. Хотя прямое уничтожение старого резервирования не является обязательным, оно настоятельно рекомендуется, так как ускоряет переходные процессы в сети.
Существует два типа RSVP сообщений аннулирования: PathTear и ResvTear. Сообщение PathTear направляется всем получателям и ликвидирует состояние прохода, а также все зависящие от него состояния резервирования. Сообщение ResvTear уничтожает состояние резервирования и направляется всем отправителям.
Запрос аннулирование (teardown) может посылаться приложением оконечной системы (получатель или отправитель) или маршрутизатором в результате тайм-аута или при появлении привилегированной задачи. После инициализации запрос-аннулирование должен переадресовываться от узла к узлу без задержки. Сообщение аннулирования уничтожает специфицированное состояние в узле-получателе.
Подобно другим сообщениям RSVP, запросы-аннулирования доставляются без гарантии надежности. Потеря такого запроса не вызовет катастрофы. Если маршрутизатор не получил сообщения аннулирования, он ликвидирует соответствующее состояние по тайм-ауту и формирует сообщение аннулирования, рассылаемое последующим узлам. Предполагая, что вероятность потери сообщения RSVP мала, наибольшее среднее время ликвидации ненужного состояния не превышает периода обновления.
Необходимо иметь возможность ликвидировать любой субнабор установленных состояний. Для состояний прохода минимально это может быть один отправитель. Для состояний резервирования таким объектом является спецификация фильтра. Например, в случае, показанном на рис. 10.29, получатель R1 может послать сообщение ResvTear только отправителю S2 (или любому субнабору из списка спецификаций фильтрации), оставляя S1 без изменений.
Сообщение ResvTear специфицирует стиль и фильтры, любая спецификация flowspec игнорируется. Любая рабочая спецификация flowspec будет убрана, если все ее спецификации фильтров будут ликвидированы.
Существует два типа RSVP сообщений об ошибках: ResvErr и PathErr. Сообщения PathErr очень просты, они посылаются отправителю — виновнику ошибки и не изменяют состояния прохода в узлах, через которые проходят. Существует всего несколько причин ошибок прохода.
Однако и для синтаксически верных запросов резервирования существует опасность быть отвергнутыми. Узел может решить аннулировать установленное резервирование из-за более приоритетных заданий. Так как неудовлетворение запроса может быть вызвано объединением нескольких запросов, ошибка резервирования должна быть ретранслирована всем получателям группы. Кроме того, объединение разнородных запросов создает потенциальную трудность, известную как проблема "резервирования килера", в которой один запрос может блокировать услуги другого. В действительности существует две такие проблемы.
Q0. Если другой получатель делает новое Q1 > Q0, результирующее объединенное резервирование Q0 и Q1 может быть отвергнуто системой контроля доступа в некотором последующем узле. Это не должно вредить услугам на уровне Q0. Решение этой проблемы весьма просто: когда контроль доступа не пропускает запрос резервирования, существующее состояние резервирования сохраняется.Q1, сохраняет свое состояние даже в случае непрохождения контроля доступа для Q1 в каком-то узле. Это не должно мешать другому получателю установить меньшее резервирование Q0, которое бы прошло, если бы не было объединено с Q1.Чтобы решить эту проблему, сообщения ResvErr устанавливают дополнительное состояние, называемое состоянием блокады, в каждом из узлов, через которые проходит это сообщение. Состояние блокады в узле модифицирует процедуру объединения так, чтобы игнорировать блокирующие спецификации flowspec (Q1 в вышеприведенном примере), позволяя скромным запросам проходить и осуществлять свое резервирование. Состояние резервирования Q1 считается в данном случае заблокированным.
Запрос резервирования, не прошедший контроль допуска создает состояние блокады в соответствующем узле, но остается действующим во всех предшествующих узлах. Было предложено, чтобы эти резервирования до точки отказа были удалены. Однако они были сохранены по следующим причинам:
Tb секунд, они могли бы быть удалены по тайм-ауту ( Tb — время тайм-аута состояния блокады).Чтобы запросить подтверждение на свое резервирование, получатель Rj включает в сообщение Resv объект запроса подтверждения, содержащий IP-адрес Rj. В каждой точке объединения только наибольшая из спецификаций flowspec и соответствующий объект запроса подтверждения посылаются далее. Если запрос резервирования от Rj равен или меньше уже существующего резервирования, его Resv не переадресуется последующим узлам, и если Resv включает в себя запрос подтверждения, отправителю Rj посылается сообщение ResvConf. Если запрос подтверждения переадресуется, это делается немедленно и не более одного раза на каждый запрос. Этот механизм подтверждения имеет такую последовательность:
ResvErr, либо ResvConf, отправляемое получателю каждым из отправителей данных. В этом случае сообщение ResvConf будет подтверждением, относящимся ко всему пути;ResvConf не предоставляет никаких гарантий. Предположим, что два запроса резервирования от получателей R1 и R2 пришли в узел, где они были объединены. R2, чье резервирование было вторым по времени, может получить подтверждение ResvConf от данного узла, в то время как запрос R1 еще не прошел весь путь и может еще быть отвергнут каким-то последующим узлом. Таким образом, R2 может получить ResvConf, когда не имеется полномасштабного резервирования вдоль всего пути; более того, R2 может получить ResvConf, за которым последует сообщение ResvErr.Механизм управления политикой определяет, каким пользователям или приложениям позволено осуществлять резервирование и в каком объеме. RSVP-запросы QoS позволяют определенным пользователям получить предпочтительный доступ к сетевым ресурсам. Для предотвращения злоупотреблений необходима некоторая обратная связь. Такого рода связь может быть реализована с помощью административной политики обеспечения доступа или путем введения прямой или виртуальной оплаты резервирования. В любом случае требуется идентификация пользователя.
Когда запрашивается новое резервирование, каждый узел должен ответить на два вопроса: "Имеется ли достаточно ресурсов, чтобы удовлетворить запрос?" и "Позволено ли данному пользователю осуществлять резервирование?" Эти два решения называются "управлением доступа" и "управлением политикой", соответственно. Различные административные домены в Интернет могут иметь разные политики резервирования.
На вход управления политикой поступают специфические блоки данных, которые заключены в объектах POLICY_DATA протокола RSVP. Эти блоки могут включать в себя параметры доступа пользователя, его класс, номер акаунта, пределы квоты и пр. Подобно flowspecs, эти данные недоступны для RSVP, который просто передает их, когда требуется, системе управления политикой. Аналогично, объединение этих данных должно выполняться системой управления политикой, а не самим протоколом RSVP. Заметим, что точки объединения данных, характеризующих политику, должны находиться на границах административных доменов.
Перенос таких данных, поставляемых пользователями, в сообщениях Resv может представлять проблему в случае существенного увеличения числа пользователей. Когда мультикастинг-группа содержит большое число получателей, может оказаться невозможно или нежелательно транспортировать данные, описывающие политику, вдоль всего маршрута. Эти данные должны объединяться как можно ближе к получателям, чтобы избежать чрезмерного информационного потока.
При использовании протокола RSVP возникают определенные проблемы безопасности.
Повреждение или фальсификация запросов резервирования может привести к получению услуг неавторизованными пользователями или к отказам в услугах. RSVP осуществляет защиту против таких атак с помощью механизма аутентификации, действующего в каждом из узлов и использующего шифрование с применением хэш-функций. Механизм поддерживается объектами INTEGRITY, которые могут быть включены в любое сообщение RSVP. Эти объекты используют технику криптографических дайджестов, которая предполагает, что соседи RSVP совместно владеют секретом шифрования (см. [Baker96]).
Управление политикой будет зависеть от положительного результата аутентификации для каждого из запросов резервирования. Информация, характеризующая политику, может быть включена в сообщение в виде криптографически защищенного сертификата пользователя.
Первые два пункта касались выполнения операций RSVP. Третий пункт касается резервирования для безопасных потоков данных. В частности, применение IPSEC (
Для решения этой проблемы определено расширение RSVP, в котором идентификатор секретности (IPSEC SPI) играет ту же роль, что и номер порта [RFC-2207].
Невозможно развернуть протокол RSVP (или любой новый протокол) во всем Интернет одновременно. Более того, RSVP, вероятно, никогда не будет развернут повсеместно. RSVP должен гарантировать корректную работу, когда два RSVP-маршрутизатора объединены друг с другом через сетевую область, не поддерживающую этот протокол. Конечно, промежуточная сетевая область, лишенная поддержки RSVP, не способна осуществлять резервирование ресурсов. Однако если эта область обладает достаточной емкостью, она может обеспечить необходимый уровень услуг.
Протокол RSVP приспособлен для работы через такие, не поддерживающие его, сетевые области. Как поддерживающие, так и не поддерживающие RSVP маршрутизаторы переадресуют сообщения Path в соответствии с адресом места назначения, используя свои локальные таблицы маршрутизации. Следовательно, на маршрутизацию сообщений Path не оказывает влияние наличие промежуточных маршрутизаторов, лишенных RSVP-поддержки. Когда сообщение Path проходит через сетевую область, не поддерживающую RSVP, оно, направляясь к следующему узлу, поддерживающему RSVP, несет в себе IP-адрес последнего RSVP-маршрутизатора. Сообщение Resv тогда переадресуется непосредственно следующему RSVP-маршрутизатору на пути к отправителю.
Хотя RSVP работает корректно и через сетевые области без поддержки RSVP, узлы из этой области могут внести искажения в QoS. При встрече области без поддержки RSVP протокол устанавливает бит-флаг NonRSVP и передает его механизму управления трафиком. Управление трафиком комбинирует этот однобитовый флаг со своей собственной информацией об источниках и передает ее вдоль транспортного пути получателям, используя спецификацию Adspecs [RFC-2210].
При некоторых топологиях маршрутизаторов с поддержкой RSVP и без нее возможна доставка сообщений Resv не в тот узел или не на тот интерфейс. Процесс RSVP должен быть готов обрабатывать такие ситуации. Если адрес места назначения не соответствует ни одному локальному интерфейсу, а сообщение не является Path или PathTear, то оно должно передаваться далее без какой-либо обработки в данном узле. Чтобы обработать случай с неправильным интерфейсом, используется дескриптор логического интерфейса LIH (Path, содержит не только IP-адрес предшествующего узла, но также и LIH, определяющий логический выходной интерфейс; обе величины записываются в состояние прохода. Сообщение Resv, пребывающее в адресуемый узел, несет в себе IP-адрес и LIH правильного выходного интерфейса, т.е. интерфейса, который должен получить запрошенное резервирование, вне зависимости от того, на какой интерфейс оно п
опало.
Прежде чем будет сформирована сессия, ей должен быть присвоен идентификатор ( DestAddress, ProtocolId, DstPort ), который рассылается всем отправителям и получателям. Когда RSVP сессия сформировалась, в оконечных системах должны произойти следующие события.
H1 Получатель посредством IGMP подключается к мультикаст-группе, заданной адресом DestAddress
H2 Потенциальный отправитель начинает посылать сообщения Path по адресу DestAddress
H3 Приложение получателя принимает сообщение Path
H4 Получатель начинает посылать соответствующие сообщения Resv, задавая дескрипторы нужных потоков
H5 Приложение отправителя получает сообщение Resv
H6 Отправитель начинает посылать информационные пакеты
Существует несколько соображений, касающихся синхронизации.
Path (H2) и данных (H6) одновременно, и имеется некоторое число получателей, но сообщения Resv пока не достигли отправителя (например, потому что его сообщения Path еще не дошли до получателей). Тогда исходные данные могут прийти к получателю без желаемого уровня QoS. Отправитель может немного облегчить эту проблему, подождав прибытия первого сообщения Resv (H5). Однако получатели, которые достаточно далеко, могут еще не получить необходимого резервирования.Resv (H4) до получения какого-либо сообщения Path (H3), RSVP пришлет получателю сообщение об ошибке.Получатель может просто игнорировать такие сообщения об ошибке или может избежать их, ожидая сообщений, прежде чем посылать сообщения Resv. Программный интерфейс приложения (API) для RSVP в данной спецификации не определен, так как он может зависеть от ЭВМ и ОС.
Сообщение RSVP состоит из общего заголовка, за которым следует тело сообщения, состоящее из переменного числа объектов переменной длины. Для каждого типа сообщения RSVP существует набор правил допустимого выбора типов объектов. Эти правила специфицированы с использованием стандартных форм Бакуса-Наура (
Общий заголовок
(рис 10.30) Формат общего заголовкаВ общем заголовке имеются следующие поля:
Vers. 4 бита — Номер версии протокола. В данном описании = 1.
Флаги: 4 бита — 0x01-0x08. Зарезервированы.
Флаги пока не определены.
Тип Msg. Тип сообщения (8 бит).
1 = Path 2 = Resv 3 = PathErr 4 = ResvErr 5 = PathTear 6 = ResvTear 7 = ResvConf
Контрольная сумма RSVP: 16 бит
Дополнение по модулю один контрольной суммы сообщения (в процессе вычисления поле контрольной суммы считается нулевым). Если в поле записан нуль, это означает, что контрольная сумма не вычислялась.
Send_TTL: 8 бит
Значение TTL для протокола IP, с которым было послано сообщение.
Длина RSVP: 16 бит
Полная длина RSVP сообщения в байтах, включая общий заголовок и объекты переменной длины, которые за ним следуют.
Каждый объект состоит из одного или более 32-битных слов с 4-байтовым заголовком. Формат объекта показан на рис. 10.31:
(рис 10.31) Формат объектаЗаголовок объекта имеет следующие поля.
Длина в байтах
16-битовое поле, содержащее полную длину объекта в байтах. Длина должна быть кратна 4 октетам, минимальное значение равно 4.
ClassNum
Идентифицирует класс объекта. Каждый класс объекта имеет свое имя, которое в данном документе записывается прописными буквами. Приложения RSVP должны распознавать следующие классы.
NULL Объект NULL имеет код Class-Num, равный нулю, а его C-тип игнорируется. Его длина должна быть, по крайней мере, равна 4, но может быть любой, кратной 4. Объект NULL может появиться где угодно в последовательности объектов. Его содержимое получателем игнорируется.
SESSION Содержит IP-адрес места назначения ( DestAddress ), идентификатор протокола IP и обобщенный номер порта назначения, чтобы специфицировать сессию для других объектов, которые следуют далее. Объект SESSION должен присутствовать в любом сообщении RSVP.
RSVP_HOP Несет в себе IP-адрес узла, поддерживающего протокол RSVP, который послал это сообщение, и дескриптор логического выходного интерфейса (LIH). RSVP_HOP характеризует предшествующий узел (hop).
TIME_VALUES Содержит значение периода обновления R, используемого отправителем сообщения. Этот объект необходим в каждом сообщении Path и Resv.
STYLE Определяет стиль резервирования, а также зависящую от стиля информацию, которая не включена в объекты FLOWSPEC или FILTER_SPEC. Объект STYLE необходим в каждом сообщении Resv.
FLOWSPEC Определяет желательный уровень QoS, в сообщениях Resv.
FILTER_SPEC Определяет субнабор информационных пакетов сессии, которые должны получить желательный уровень QoS (специфицированный объектом FLOWSPEC ), в сообщениях Resv.
SENDER_TEMPLATEСодержит IP-адрес отправителя и, может быть, некоторую дополнительную информацию, идентифицирующую отправителя. Этот объект необходим в сообщениях Path.
SENDER_TSPECОпределяет характеристики информационного трафика отправителя. SENDER_TSPEC необходим в сообщениях Path.
ADSPECНесет в себе данные OPWA в сообщении Path.
ERROR_SPECСпецифицирует ошибку в сообщениях PathErr и ResvErr или подтверждение в сообщении ResvConf.
POLICY_DATAНесет в себе информацию, которая позволит локальному модулю, определяющему политику, принять решение, допустимо ли административно соответствующее резервирование. Может присутствовать в сообщениях Path, Resv, PathErr или ResvErr.
INTEGRITYНесет в себе криптографические данные для аутентификации исходного узла и для верификации содержимого сообщения RSVP. Использование объекта INTEGRITY описано в ссылке [Baker96] в конце данного раздела.
SCOPEНесет в себе список ЭВМ-отправителей, к которым должно быть переадресовано данное сообщение. Может присутствовать в сообщениях Resv, ResvErr или ResvTear.
RESV_CONFIRMНесет в себе IP-адрес получателя, который запросил подтверждение. Может присутствовать в сообщениях Resv или ResvConf.
CType
Тип объекта, уникален в пределах класса Class-Num.
Максимальная длина объекта равна 65528 байт. Поля Class-Num и C-Тип могут использоваться совместно как 16-битовое число для определения уникального типа для каждого из объектов.
Старшие два бита Class-Num применяются для определения того, какие действия должен предпринять узел, если он не распознает Class-Num объекта.
Каждая ЭВМ-источник периодически отправляет сообщения Path для каждого из информационных потоков, берущих здесь свое начало. Это сообщение содержит объект SENDER_TEMPLATE, определяющий формат пакетов данных, и объект SENDER_TSPEC, специфицирующий характеристики трафика потока. Опционно сообщение может содержать объект ADSPEC, несущий в себе информацию о потоке (OPWA).
Сообщение Path направляется от отправителя к получателю по тому же маршруту, по которому движутся информационные пакеты. IP-адрес источника в сообщении Path должен характеризовать адрес отправителя, в то время как адрес места назначения должен быть равен DestAddress для текущей сессии. Эти адреса гарантируют, что сообщение будет корректно маршрутизовано даже через области сети, не поддерживающие RSVP. Формат сообщения Path имеет следующий вид:
<Path Message> ::= <Common Header> [ <INTEGRITY> ] <SESSION> <RSVP_HOP> <TIME_VALUES> [ <POLICY_DATA> ... ] [ <sender descriptor> ] <sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC> [ <ADSPEC> ]
Если присутствует объект INTEGRITY, он должен следовать непосредственно за стандартным общим заголовком. Не существует каких-либо иных ограничений порядка передачи, хотя упомянутое выше требование является рекомендательным. Число объектов POLICY_DATA может быть произвольным.
Объект PHOP (т.е., предыдущий RSVP_HOP ) каждого сообщения Path содержит адрес предшествующего узла, например, IP-адрес интерфейса, через который только что было послано сообщение Path. Он также содержит дескриптор логического интерфейса (LIH).
Каждый узел вдоль пути, поддерживающий RSVP, перехватывает сообщение Path и обрабатывает его с тем, чтобы сформировать состояние пути для отправителя, заданного объектами SENDER_TEMPLATE и SESSION. Любой из объектов POLICY_DATA, SENDER_TSPEC и ADSPEC также записываются в состояние пути. Если случилась ошибка при обработке сообщения Path, посылается сообщение PathErr первичному отправителю сообщения Path.
Path для посылки их получателям. Каждое сообщение содержит дескриптор, характеризующий одного отправителя, и несет в себе IP-адреса отправителя.
Процесс RSVP переадресует и размножает (если требуется, — например, при мультикастинге) сообщения Path, используя маршрутную информацию, которую он получает от соответствующих процессов маршрутизации. Маршрут зависит от DestAddress сессии и для некоторых протоколов маршрутизации — от адреса источника. Маршрутная информация обычно включает в себя список выходных интерфейсов, куда должно направляться сообщение Path. Так как каждый выходной интерфейс имеет свой IP-адрес, сообщения Path, посланные разными интерфейсами, содержат отличные адреса PHOP. Кроме того, объекты ADSPEC, содержащие сообщения Path, будут отличаться для разных выходных интерфейсов.
Состояние пути для данной сессии и отправителя не обязательно должны иметь уникальные PHOP или уникальный входной интерфейс. Существует два случая, соответствующие мультикастной и уникастной сессиям.
Мультикастинговая маршрутизация позволяет иметь стабильное дерево рассылки, в котором сообщения Path от одного и того же отправителя приходят от более чем одного PHOP, и RSVP должен быть готов поддерживать все такие состояния пути. RSVP не должен пересылать сообщения Path, которые прибывают через входной интерфейс, отличный от указанного в маршрутной таблице.
В течение короткого периода времени после изменения уникастного маршрута узел может получать сообщения Path от нескольких PHOP для данной сессии и отправителя. Узел не может надежно определить, какой из PHOP является правильным, хотя узел будет получать данные одновременно только от одного PHOP. Одним из вариантов реализации RSVP является игнорирование PHOP и допущение для PHOP переключаться между имеющимися кандидатами. Другим вариантом является поддержание состояния пути для каждого PHOP и посылка сообщения Resv всем таким PHOP. В любом варианте ситуация является переходной, неиспользуемые состояния пути все равно будут удалены (явно или по тайм-ауту).
Сообщения Resv несут в себе запросы резервирования от узла к узлу, от получателей к отправителям в направлении, противоположном движению потока данных. IP-адрес места назначения сообщения Resv является уникастным адресом предшествующего узла, полученным из состояния прохода. IP-адрес источника является адресом узла, который посылает сообщение. Сообщение Resv имеет следующий формат:
<Resv Message> ::= <Common Header> [ <INTEGRITY> ] <SESSION> <RSVP_HOP> <TIME_VALUES> [ <RESV_CONFIRM> ] [ <SCOPE> ] [ <POLICY_DATA> ... ] <STYLE> <flow descriptor list> <flow descriptor list> ::= <empty> | <flow descriptor list> <flow descriptor>
Если присутствует объект INTEGRITY, он должен непосредственно следовать за общим заголовком. За объектом STYLE следует список дескрипторов
Объект NHOP (напр., RSVP_HOP ) содержит IP-адрес интерфейса, через который посылаются сообщения Resv, и LIH для логического интерфейса, где требуется резервирование.
Появление объекта RESV_CONFIRM сигнализирует о запросе подтверждения резервирования и несет в себе IP-адрес получателя, которому должен быть послан ResvConf. Число объектов POLICY_DATA не лимитировано.
Ниже приведены правила, которые специфицируют структуру дескриптора потока для каждого из стилей резервирования.
<flow descriptor list> ::= <WF flow descriptor> <WF flow descriptor> ::= <FLOWSPEC>
<flow descriptor list> ::= <FLOWSPEC> <FILTER_SPEC> | <flow descriptor list> <FF flow descriptor> <FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC>
Каждый запрос стиля FF описывается одной парой спецификаций (FLOWSPEC, FILTER_SPEC), несколько таких запросов могут быть уложены в один список дескрипторов потока сообщения Resv. Объект FLOWSPEC может быть опущен, если он идентичен последнему такому объекту в списке; первый дескриптор потока стиля FF должен содержать FLOWSPEC.
<flow descriptor list> ::= <SE flow descriptor> <SE flow descriptor> ::= <FLOWSPEC> <filter spec list> <filter spec list> ::= <FILTER_SPEC> | <filter spec list> <FILTER_SPEC>
Набор отправителей (reservation scope), которым направляется конкретный запрос резервирования, определяется следующим образом.
Резервирование переадресуется всем отправителям, чьи объекты SENDER_TEMPLATE, записанные в состоянии прохода, соответствуют объекту FILTER_SPEC.
Запрос с произвольным выбором отправителя соответствует всем отправителям, которые маршрутизированы на данный выходной интерфейс.
Когда сообщение Resv с произвольным выбором отправителя переадресуется более чем одному предыдущему узлу, в сообщение должен быть включен объект SCOPE. В этом случае список IP адресов для рассылки хранится именно в этом объекте.
Сообщение Resv, которое пересылается узлом, является в общем случае результатом объединения входящих сообщений Resv. Если одно из этих объединенных сообщений содержит объект RESV_CONFIRM и имеет число FLOWSPEC, большее, чем FLOWSPEC всех других объединенных запросов резервирования, тогда этот объект RESV_CONFIRM переадресуется в виде исходящего сообщения Resv. Объект RESV_CONFIRM из одного из объединенных запросов (чья спецификация flowspecs равна, меньше или сравнима с объединенной спецификацией flowspec и которая не подвергнута блокаде) запустит генерацию сообщения ResvConf, содержащего RESV_CONFIRM. Объект RESV_CONFIRM в запросе, который подвергнут блокаде, не будет переадресован или возвращен, он будет аннулирован в текущем узле.
Получение сообщения PathTear (path teardown) аннулирует состояния прохода. Соответствующее состояние должно согласовываться с объектами SESSION, SENDER_TEMPLATE и PHOP. Кроме того, сообщение PathTear для мультикастной сессии может соответствовать только состоянию прохода для входного интерфейса, через который получено сообщение PathTear. Если соответствия состоянию прохода нет, сообщение должно быть отброшено без дальнейшей рассылки.
Сообщения PathTear инициализируются непосредственно отправителем или в результате тайм-аута состояния прохода в каком-либо узле и направляются всем отправителям. Уникастное PathTear не должно переадресовываться, если состояние прохода соответствует той же сессии и отправителю, но имеет другой PHOP.
Сообщение PathTear должно маршрутизоваться в точности так же, как соответствующие сообщения Path. Следовательно, его IP-адрес места назначения должен совпадать с DestAddress, а его IP-адрес отправителя должен быть адресом, взятым из данных о состоянии прохода.
Сообщение PathTear может содержать в своем дескрипторе отправителя объект SENDER_TSPEC или ADSPEC, но они должны игнорироваться.
Удаление состояния прохода в результате получения сообщения PathTear или тайм-аута должно модифицировать состояние резервирования в данном узле. Эта модификация зависит от стиля резервирования. Например, предположим, что PathTear удаляет состояние прохода отправителя S. Когда стиль специфицирует явный выбор отправителя (FF или SE), всякое резервирование со спецификацией фильтрации, соответствующей отправителю S, должно быть удалено; когда стиль предусматривает произвольный выбор отправителя (WF), резервирование удаляется, если S является последним отправителем, участвующим в сессии. Эти изменения резервирования не должны вызвать немедленную посылку сообщения обновления Resv, так как сообщение PathTear уже вызвало необходимые изменения. Они не должны также вызвать отправку сообщения ResvErr, так как это может вызвать лавину таких сообщений.
Получение сообщения ResvTear (reservation teardown) вызывает удаление соответствующего состояния резервирования. При этом проверяется соответствие объектов SESSION, STYLE и FILTER_SPEC, а также LIH в объекте RSVP_HOP. Если соответствие не обнаружено, сообщение ResvTear игнорируется. Сообщение ResvTear может отменить любой субнабор спецификаций фильтрации в состояниях резервирования стилей FF или SE.
Сообщения ResvTear отправляются получателями или любым узлом, в котором состояние резервирование аннулируется в результате таймаута; далее они движутся в направлении получателей.
Сообщение ResvTear должно маршрутизироваться аналогично соответствующим сообщениям Resv, а его IP-адрес места назначения является уникастным адресом предыдущего узла.
Объекты FLOWSPEC в списке дескрипторов потоков сообщения ResvTear будут игнорироваться и могут быть опущены. Сообщение ResvTear может включать в себя объект SCOPE, но он должен игнорироваться.
В зависимости от изменения состояния узла получение сообщения ResvTear может вызвать переадресацию этого сообщения, посылку модифицированного сообщения Resv или не вызвать никакого сообщения. Эти три случая могут быть проиллюстрированы для стиля резервирования FF на рис. 10.26.
ResvTear для резервирования S3{B}, соответствующее резервирование удаляется из интерфейса ( IГ ) и посылается ResvTear для S3{B} интерфейсу ( IБ ).ResvTear для резервирования S1{4B}, соответствующее резервирование удаляется из интерфейса ( IВ ) и немедленно посылается модифицированное сообщение Resv FF(S1{3B}) интерфейсу ( IА ).ResvTear для S1{B}, никаких изменений резервирования не происходит и никаких сообщений далее не посылается.Сообщения PathErr (path error) несут в себе данные об ошибке в обрабатываемых сообщениях Path. Они направляются отправителям данных и маршрутизируются от узла к узлу, используя состояние прохода. При каждом шаге IP-адрес места назначения является уникастным адресом предыдущего узла. Сообщения PathErr не модифицируют состояния узлов, через которые проходят; они предназначаются только приложению отправителя.
Объект ERROR_SPEC специфицирует ошибку и включает в себя IP-адрес узла, который обнаружил эту ошибку (Error Node Address). Для приобщения необходимой информации в сообщение могут быть включены один или более объектов POLICY_DATA.
Сообщения ResvErr (reservation error) сообщают об ошибках при обработке запросов Resv или о спонтанном нарушении резервирования, например, в результате административного вмешательства.
Сообщения ResvErr направляются соответствующим получателям, они маршрутизируются от узла к узлу с использованием состояния резервирования. В каждом из узлов в качестве IP-адреса места назначения используется уникастный адрес следующего узла.
Объект ERROR_SPEC специфицирует ошибку и включает в себя IP-адрес узла, который обнаружил ошибку (Error Node Address). Для приобщения необходимой информации в сообщение могут быть включены один или более объектов POLICY_DATA. Объект RSVP_HOP содержит адрес предыдущего узла, а объект STYLE копируется из сообщения Resv.
Следующие правила, зависящие от стиля резервирования, определяют структуру ошибки дескриптора потока.
<error flow descriptor> ::= <WF flow descriptor>
<error flow descriptor> ::= <FF flow descriptor>
Каждый дескриптор потока в сообщении Resv стиля FF должен обрабатываться независимо, и для каждого из них, имеющего ошибку, должно посылаться отдельное сообщение ResvErr.
<error flow descriptor> ::= <SE flow descriptor>
Сообщение ResvErr стиля SE может представить список субнабора спецификаций фильтрации, которые вызвали ошибки, в соответствующем сообщении Resv.
Заметим, что сообщение ResvErr содержит только один дескриптор потока. Следовательно, сообщение Resv, которое содержит N > 1 дескрипторов потока (стиль FF), может быть причиной N сообщений ResvErr.
Вообще говоря, сообщение ResvErr следует пересылать всем получателям, которые могут быть причиной данной ошибки. Конкретнее:
ResvErr узлу, от которого получен ошибочный запрос резервирования.Это сообщение ResvErr должно содержать информацию, необходимую для определения ошибки и для маршрутизации сообщения об ошибке последующим узлам. Такое сообщение, следовательно, включает в себя объект ERROR_SPEC, копию объекта STYLE и соответствующий дескриптор потока, где зафиксирована ошибка. Если ошибка является результатом отказа при попытке увеличить резервирование, тогда существующее резервирование должно быть сохранено и должен быть установлен бит-флаг InPlace в ERROR_SPEC сообщения ResvErr ;
ResvErr последующим узлам, которые имеют локальное состояние резервирования. Для резервирования с произвольным выбором отправителей имеется дополнительное ограничение на пересылку сообщений ResvErr, связанное с блокировкой возможных циклических маршрутов. Существует строгое правило рассылки сообщений при ошибке, связанной с разрешением доступа. Сообщение ResvErr, которое посылается, должно нести в себе спецификацию FILTER_SPEC соответствующего состояния резервирования;ResvErr достигает получателя, приложение должно принять объект STYLE, список дескрипторов потока и объект ERROR_SPEC (включая его флаги).Сообщения ResvConf посылаются в ответ на запрос подтверждения резервирования. Сообщение ResvConf посылается в результате появления объекта RESV_CONFIRM в сообщении Resv. Сообщение ResvConf посылается по уникастному адресу ЭВМ получателя, адрес берется из объекта RESV_CONFIRM.
Объект RESV_CONFIRM является копией объекта в сообщении Resv, который вызвал подтверждение. ERROR_SPEC используется только для переноса IP-адреса исходного узла в поле адрес узла с ошибкой (Error Node Address). Равенство кода ошибки и значения нулю свидетельствует о подтверждении. Список дескрипторов потоков специфицирует конкретное резервирование, которое подтверждается. Это может быть субнабор из списка дескрипторов потоков Resv, для которого запрошено подтверждение.
Сессия RSVP определяется в нормальной ситуации тремя параметрами: DestAddress, ProtocolId, DstPort. Здесь DstPort является полем порта назначения UDP/TCP. DstPort может быть опущен (сделан равным нулю), если ProtocolId специфицирует протокол, который не имеет поля порта места назначения.
RSVP допускает любое значение для ProtocolId. Однако реализации оконечных систем RSVP могут знать об определенных значениях для этого поля и, в частности, о значениях для UDP и TCP (17 и 6 соответственно). Оконечная система может выдать сигнал ошибки приложению, которая:
DstPort для протокола, который не имеет портов типа UDP/TCP, илиDstPort для протокола, который имеет порты, специфицированные для UDP/TCP.Спецификации фильтра и шаблоны отправителя определяют пару: SrcAddress, SrcPort, где SrcPort — поле UDP/TCP порта. В некоторых случаях SrcPort может быть опущен (установлен равным нулю). Существуют следующие правила использования нулевого значения полей DstPort и/или SrcPort в RSVP.
Состояния прохода и резервирования для одного и того же DestAddress и ProtocolId должны иметь свои значения DstPort, которые все равны нулю или все не равны нулю. Нарушение этого условия в узле является ошибкой "конфликт портов назначения (Conflicting Dest Ports)".
Если DstPort в описании сессии равен нулю, все поля SrcPort, используемые для этой сессии, также должны быть равны нулю. При этом предполагается, что протокол не имеет портов типа UDP/TCP. Нарушение этого условия в узле вызовет ошибку Bad Src Ports.
ЭВМ-отправитель не должна посылать состояния прохода со значением SrcPort как равным, так и неравным нулю. Нарушение этого условия вызовет ошибку Conflicting Sender Port. Заметим, что протокол не допускает произвольного назначения номеров портов (wildcard), т.е., нулевой порт не может соответствовать ненулевому порту.
Сообщения RSVP посылаются от узла к узлу между RSVP-маршрутизаторами, поддерживающими этот протокол, в виде IP-дейтограмм с кодом протокола 46. IP-дейтограммы предназначены также для использования между оконечными системами и первыми/последними маршрутизаторами.
Сообщения Path, PathTear и ResvConf должны посылаться с опцией Router Alert IP [RFC-2113] в их IP-заголовках.
По прибытии RSVP-сообщения M, которое меняет статус, узел должен немедленно послать сообщение о модификации состояния. Однако это не должно привести к посылке сообщения через интерфейс, откуда пришло M (что может случиться, если приложение запустит процедуру обновления состояний для текущей сессии). Это правило предотвращает лавину пакетов в сетях с широковещательной рассылкой.
Каждое RSVP-сообщение должно пересылаться только в одной IP-дейтограмме. Если оно превосходит MTU, такая дейтограмма будет фрагментирована. Восстановление сообщения будет произведено узлом-получателем. Это имеет несколько следствий.
RSVP использует свой механизм периодического обновления для предотвращения влияния случайной потери отдельных пакетов. При перегрузке сети, однако, существенные потери RSVP-сообщений могут вызвать серьезные нарушения резервирования сетевых ресурсов. Для контроля задержек, связанных с обслуживанием очереди, и влияния потерь RSVP-пакетов маршрутизаторы должны быть сконфигурированы так, чтобы обеспечивать для данных целей приоритетное обслуживание. Если RSVP-пакеты идут через область сети, где вероятность потери значительна, следует увеличить значение таймаутов.
Некоторые мультикастные протоколы маршрутизации обеспечивают туннели, которые организуют IP-инкапсуляцию мультикастных пакетов и их транспортировку через маршрутизаторы, не поддерживающе мультикастную маршрутизацию. RSVP может работать через такие мультикастные туннели следующим образом.
Path выходному логическому интерфейсу L, он включает в сообщение дескриптор логического интерфейса LIH (RSVP_HOP.Resv узлу N, он включает в него значение LIH из состояния прохода (содержится в объекте RSVP_HOP ).Resv прибывает в N, его значение LIH выдает информацию, необходимую для осуществления резервирования в определенном логическом интерфейсе. Заметим, что узел N создает и интерпретирует LIH, которое совершенно не доступно для узла N'.Переадресация сообщений RSVP должна исключать возможность образования петель. В спокойном состоянии сообщения Path и Resv направляются каждому узлу только раз за период обновления. Это исключает зацикливание пакетов, но имеется еще возможность петель автоматического обновления. Такие петли сохраняют состояние вечно, даже если оконечные узлы прекращают их обновление до тех пор, пока получатели не покинут мультикастинг-группу и/или отправители прекратят посылку сообщения Path. С другой стороны сообщения об ошибке и об аннулировании (teardown) посылаются немедленно и могут служить причиной возникновения циклов. Рассмотрим каждый тип сообщения.
Path. Эти сообщения направляются точно тем же путем, что и информационные IP-пакеты. Следовательно, не должно возникать циклов для сообщений типа Path (за исключением циклов, связанных с переходными процессами установления маршрута).PathTear. Эти сообщения используют ту же маршрутизацию, что и сообщения Path и, следовательно, не могут образовывать циклы.PathErr. Так как сообщения Path не образуют циклов, они формируют состояние прохода, описывающее обратный маршрут для каждого из отправителей, который не может иметь петель. Сообщения PathErr всегда направлены определенному отправителю и, следовательно, не могут образовывать циклы.Resv. Эти сообщения направлены определенному отправителю и не могут иметь циклы. Однако, сообщения Resv с произвольным выбором отправителя (wildcard) (стиль WF) имеет потенциал для запуска циклов обновления.ResvTear. Хотя сообщения ResvTear маршрутизируются так же, как и сообщения Resv, при повторном проходе по петле состояние будет отсутствовать (аннулировано) и любое сообщение ResvTear будет отброшено.ResvErr. Эти сообщения для стиля резервирования WF могут вызывать зацикливание по той же причине, что и для сообщений Resv.ResvConf. Эти сообщения направляются фиксированному уникастному получателю и не могут приводить к циклам.Если топология не содержит петель, зацикливания сообщений Resv и ResvErr при произвольном выборе отправителя можно избежать, следуя приведенному выше правилу: состояние, которое получено через определенный интерфейс, никогда не должно переадресовываться через этот же интерфейс. Однако когда топология содержит петли, необходимы дополнительные усилия для предотвращения циклов автоматического обновления для сообщений Resv и ResvErr с произвольным выбором отправителя. Решением этой проблемы может быть включение списка адресов получателей в объект SCOPE.
Когда сообщение Resv со стилем WF должно быть переадресовано определенному предыдущему узлу, следует определить новый список адресов для объекта SCOPE на основе аналогичного объекта, полученного с соответствующими сообщениями Resv. Если новый объект SCOPE пуст, сообщение не направляется предыдущему узлу. Правила для вычисления нового объекта SCOPE для сообщения Resv приведены ниже.
SCOPE состояния резервирования данной сессии. Если состояние резервирования от некоторых NHOP не содержит объектов SCOPE, должен быть создан заменяющий список отправителей, который и помещается в указанное объединение. Для сообщения, полученного выходным интерфейсом OI, список замен представляет собой набор отправителей, которые маршрутизированы на этот OI.SCOPE должен быть послан PHOP, следует удалить из набора любого отправителя, который не присылает данные через PHOP.На рис. 10.32 дан пример Resv -сообщений (стиль WF). Адресный список объекта SCOPE показан в квадратных скобках.
(рис 10.32) Объекты SCOPE при резервировании в стиле WFОбъекты SCOPE не являются обязательными, если мультикастинг-маршрутизация использует совместные деревья или если стиль резервирования предполагает явный выбор отправителей. При работе с объектами SCOPE в сообщениях ResvErr стиля WF следует придерживаться следующих правил.
ResvErr, содержащее копию объекта SCOPE, который соответствует состоянию резервирования или сообщению, вызвавшему ошибку.ResvErr с произвольным указанием отправителей (wildcard), содержащее объект SCOPE со списком адресов отправителей L. Сообщение ResvErr, переадресованное интерфейсу OI, должно содержать объект SCOPE, извлеченный из L и включающий только те адреса отправителей, которые маршрутизированы на OI. Если этот объект SCOPE пуст, сообщение ResvErr не должно посылаться OI.Основным правилом при формировании сообщения обновления Resv является объединение спецификаций flowspecs резервирования в узле посредством вычисления их LUB (наименьший верхний предел). Однако это правило модифицируется при наличии состояния блокады, возникшего из-за сообщений ResvErr при решении проблемы KR-II.
Когда получено сообщение ResvErr, его спецификация flowspec Qe используется для формирования или обновления элемента местного состояния блокады. Каждый элемент состояния блокады состоит из спецификации flowspec Qb, взятой из спецификации сообщения ResvErr, и соответствующего таймера блокады Tb. Когда время таймера блокады истекает, соответствующее состояние блокады аннулируется.
Гранулярность состояния блокады зависит от стиля сообщения ResvErr, которое явилось ее причиной. Каждому конкретному стилю может соответствовать свой элемент состояния блокады ( Qb(S),Tb(S) ), где S — отправитель. Для произвольного стиля выбора отправителя состояние блокады определяется предыдущим узлом P.
Элемент состояния блокады со спецификацией flowspec Qb называется блокадой резервирования со спецификацией flowspec Qi, если Qb не больше, чем Qi. Например, предположим, что LUB (least Qb блокирует Qi, если для некоторой компоненты $$j Qb[j] \le Qi[j]$$.
Предположим, что узел получает сообщение ResvErr от предыдущего узла P или, если стиль выбора отправителя S является явным — в результате ошибки доступа. Тогда:
P (или S ) создается элемент состояния блокады, если его не было;Qb(P) (или Qb(S) ) делается равным flowspec Qe из сообщения ResvErr ;Tb(P) (или Tb(S) ) на время Kb*R. Здесь Kb является фиксированным множителем, а R равно интервалу времени обновления состояния резервирования. Kb можно варьировать;P (или S );ResvErr переадресуется последующим узлам. Если бит InPlace=0, сообщение ResvErr направляется всем последующим узлам, где имеется состояние резервирования. Если бит InPlace=1, сообщение ResvErr направляется только следующим узлам, чьи Qi блокированы спецификацией Qb.В результате предлагается модифицированное правило для объединения спецификаций flowspecs при формировании сообщения обновления резервирования.
Qi, которые не заблокированы, они объединяются путем вычисления их LUB. Заблокированные резервирования игнорируются. Это позволяет требовать меньшее резервирование, которое имеет шанс на успех, после того как большее резервирование не удалось.Qi блокированы), они объединяются путем взятия GLB (Greatest Qi.Этот алгоритм объединения обновления применяется отдельно для каждого потока (каждого отправителя или PHOP), вносящего вклад в общее резервирование (стили WF или SE).
На рис. 10.33 приведен пример использования состояния блокады для совместного резервирования (стиль WF). Имеется два предшествующих узла, помеченных как (a) и (b), и два последующих узла, помеченных как (c) и (d). Большее резервирование 4B пришло сначала от (c), но "застряло" где-то до PHOP (a), а не по пути через PHOP (b). Рисунок показывает оконечное состояние после меньшего резервирования 2B, пришедшего позднее из (d). Это стабильное состояние нарушается каждые Kb*R секунд, когда состояние блокады удаляется по тайм-ауту. Следующее обновление (4B), посылаемое предыдущему узлу (a), предположительно будет отвергнуто путем посылки сообщения ResvErr, которое восстановит состояние блокады, возвращая ситуацию к тому, что изображено на рисунке. В то же самое время сообщение ResvErr будет направлено следующему узлу (c) и всем получателям, ответственным за резервирование 4B.
(рис 10.33) Блокада для стиля WF
Когда маршрут изменяется, следующее сообщение обновления Path или Resv установит проход или состояние резервирования (соответственно) вдоль нового маршрута. Чтобы обеспечить быструю адаптацию к изменениям маршрута, не вводя чрезмерно коротких периодов обновления, местный модуль протокола маршрутизации может сообщить процессу RSVP об изменении маршрута до определенных мест назначения. Процесс RSVP должен использовать эту информацию для запуска обновления в соответствующих областях с учетом изменения маршрута. При этом соблюдаются следующие правила спецификации.
W и затем послать сообщение обновление Path всем сессиям G/* (т.е., любой сессии с местом назначения G, вне зависимости от порта назначения). Короткая выдержка перед рассылкой сообщения обновления Path нужна, чтобы позволить завершиться переходным процессам в маршрутном протоколе. В настоящее время предлагается W = 2 сек; однако, эта величина должна быть задана при конфигурировании каждого интерфейса.Path с адресом предыдущего узла, который отличается от записанного в состоянии прохода, RSVP должен немедленно послать сообщение обновления Resv этому PHOP.Существует два временных параметра, соответствующие каждому элементу прохода или состоянию резервирования RSVP в узле: период обновления R между последовательными коррекциями состояния соседнего узла и время жизни локального состояния L. Каждое сообщение RSVP Resv или Path может содержать объект TIME_VALUES, специфицирующий значение R, которое было использовано при генерации данного сообщения обновления. Эта величина R затем используется для определения значения L. Величины R и L могут варьироваться от узла к узлу. Ниже данные соображения излагаются более подробно.
[0.5R, 1.5R].L должно удовлетворять условию L \ge (K + 0.5)*1.5*R, где K — небольшое целое число. Тогда, в худшем случае, K-1 последовательных сообщений могут быть потеряны без ликвидации состояния. Чтобы вычислить время жизни L для комбинации состояний с различными R R0, R1, ..., заменяем R на max(Ri). В настоящее время по умолчанию K = 3. Однако может быть необходимо установить большее значение K для узлов с высокой вероятностью потерь. K может устанавливаться при конфигурации интерфейса вручную или с помощью какой-либо адаптивной процедуры.Path или Resv несет в себе объект TIME_VALUES, который содержит время обновления R, использованное при генерации обновлений. Узел получателя использует это R для определения времени жизни L записанного состояния, созданного или обновленного данным сообщением.R выбирается локально для каждого из узлов. Если узел не использует локального восстановления резервирования, нарушенного в результате изменения маршрута, меньшее значение R ускоряет адаптацию к изменениям маршрута, но увеличивает издержки RSVP. Узел может настраивать эффективное значение R динамически, чтобы контролировать уровень издержек, связанных с сообщениями обновления. В настоящее время по умолчанию выбирается R = 30 секундам. Однако значение по умолчанию Rdef должно выбираться индивидуально для каждого интерфейса.R меняется динамически, существует предел того, как быстро оно может расти. Отношение величин R2/R1 не должно превосходить 1 + Slew .Max. В настоящее время, Slew .Max равно 0.30. При K = 3 один пакет может быть потерян без тайм-аута состояния, в то время как R увеличивается на 30% за период обновления.Rdef, K и Slew .Max, используемые в приложении, должны легко модифицироваться для каждого интерфейса.Некоторые уровни QoS могут требовать определенной политики в управлении трафиком в некоторых или всех перечисленных ниже случаях.
RSVP знает, где такие точки находятся, и должен обеспечивать этими данными механизм управления трафиком. С другой стороны, RSVP не интерпретирует информацию в flowspec и, следовательно, не знает, использованы ли рекомендации управления в каждом конкретном случае.
Процесс RSVP передает управлению трафиком специальный флаг политики для каждой из трех указанных выше ситуаций.
E_Police_Flag — управление входомЭтот флаг устанавливается для первого узла RSVP, который реализует управление трафиком. Например, ЭВМ-отправители должны поддерживать RSVP, но многие из них не поддерживают управление трафиком, — в этом случае флаг E_Police_Flag в ЭВМ-отправителе должен быть равен нулю. Флаг устанавливается равным 1, когда достигнута первая ЭВМ, поддерживающая управление трафиком. Это контролируется флагом E_Police в объектах SESSION.
M_Police_Flag — управление объединениемЭтот флаг должен быть установлен для резервирования, использующего стили WF или SE, когда объединяются потоки более чем одного отправителя.
B_Police_Flag — управление ветвлениемЭтот флаг должен быть установлен, когда инсталлированная flowspec меньше или сравнима с FLOWSPEC какого-либо другого интерфейса для того же самого FILTER_SPEC и SESSION.
RSVP должен также проверять наличие вдоль пути узлов, не поддерживающих RSVP, и переправлять эту информацию управлению трафиком. На основании этого флага и другой сопутствующей информации система контроля трафиком может обнаружить узлы, которые не способны обеспечить управление QoS. Эта информация передается получателям в спецификации Adspecs [RFC-2210].
При обычной IP-переадресации RSVP может обнаружить узлы без поддержки RSVP путем сравнения значения IP TTL, с которым послано сообщение Path, и полученного TTL. Для этой цели TTL помещается в общий заголовок. Однако TTL не всегда является надежным индикатором узлов без поддержки RSVP, и для этих целей иногда применяются другие средства. Например, если маршрутный протокол использует туннели с IP-инкапсуляцией, этот протокол должен проинформировать RSVP о наличии узлов, лишенных поддержки RSVP. В отсутствии автоматических механизмов осуществляется ручная конфигурация.
При работе с ЭВМ, имеющими несколько сетевых интерфейсов, требуется выполнение ряда специальных правил. К такого рода устройствам относятся и маршрутизаторы, которые поддерживают локальные прикладные программы.
Приложение, исполняемое на такой машине, должно явно указывать, через какой интерфейс осуществляется передача данного информационного потока, чтобы заменить интерфейс, заданный по умолчанию системой.
Посылка данных
Приложение отправителя использует API-вызов для декларации характеристик его информационного потока для RSVP. Этот вызов может опционно включать локальный IP-адрес отправителя. Если он установлен приложением, этот параметр должен быть адресом интерфейса для отправки информационных пакетов, в противном случае используется системный интерфейс по умолчанию.
RSVP-процесс ЭВМ посылает затем приложению сообщения Path только через специфицированный интерфейс.
Приложение-получатель использует вызов API для запроса резервирования RSVP. Этот вызов может опционно включать локальный IP-адрес получателя, т.е., адрес интерфейса для получения информационных пакетов. В случае мультикаст-сессий — это интерфейс, к которому подключилась группа. Если этот параметр опущен, система использует значение по умолчанию.
Процесс RSVP должен посылать сообщения Resv приложению через специфицированный интерфейс. Однако когда приложение исполняется в маршрутизаторе, а сессия является мультикастной, возникает более сложная ситуация. Предположим, что в этом случае приложение получателя присоединяется к группе через интерфейс Iapp, который отличается от Isp — ближайшего интерфейса по пути к отправителю. Теперь имеется два возможных пути для мультикастной маршрутизации при доставке информационных пакетов приложению. Процесс RSVP должен определить, какой вариант выбрать, просмотрев состояние прохода и решив, какой из входных интерфейсов следует использовать для посылки сообщений.
Local_only. Если существует состояние прохода Local_only для Iapp, сообщение Resv должно посылаться через Iapp. Заметим, что есть возможность для блоков состояния прохода Isp и Iapp иметь один и тот же следующий узел, если в маршрут вклинивается область, не поддерживающая RSVP.Resv должны будут посылаться через Isp.Path и PathTear переадресованы, состояние прохода, помеченное как Local_Only, должно игнорироваться.В будущем для существующих классов могут быть описаны новые объекты C-типа, а могут быть определены и новые классы объектов. Крайне желательно использовать такие объекты Интернет в рамках старых приложений, которые их не распознают. К сожалению, это возможно с заметными ограничениями. Здесь нужно придерживаться следующих правил (b в дальнейшем означает бит).
Существует три возможных способа, чтобы приложение RSVP могло работать с объектом неизвестного класса. Этот выбор определяется двумя старшими битами октета Class-Num.
Class-Num = 0bbbbbbb. Все сообщение должно быть отброшено и возвращена ошибка Unknown Object Class (неизвестный класс объекта).Class-Num = 10bbbbbb. Узел должен игнорировать объект без дальнейшей пересылки или отправки сообщений об ошибке.Class-Num = 11bbbbbb. Узел должен игнорировать объект, но может переадресовать его далее без модификации со всеми сообщениями, вызванными данным запросом.Ниже приведены более детализированные правила работы с нераспознанными классами объектов для Class-Num вида 11bbbbbb.
PathTear, ResvTear, PathErr или ResvErr, должны немедленно переадресовываться в рамках того же сообщения.Path или Resv, должны быть записаны в соответствующие состояния и посланы в сообщениях обновления, сопряженных с указанным состоянием.Resv путем объединения нескольких запросов резервирования, сообщение обновления должно включать в себя объединение объектов неузнанных классов всех компонентов запроса. В этом объединении каждый такой объект может присутствовать только один раз.Хотя объекты с неизвестным классом не могут объединяться, эти правила позволяют передать их вплоть до узла, который сможет их распознать и объединить.
Появление объекта с неизвестным C-типом приведет к выбрасыванию всего сообщения и генерации сообщения об ошибке ( ResvErr или PathErr ). Сообщение об ошибке будет включать Class-Num и C-тип, который был не распознан. Оконечная система, которая отправила нераспознанное сообщение, может использовать эту информацию, чтобы попытаться повторить попытку с объектом другого C-типа.
Объекты определенных классов ( FLOWSPEC, ADSPEC и POLICY_DATA ) не прозрачны для протокола RSVP, который просто передает их системе управления трафиком или другим модулям управления. В зависимости от внутренних правил любой из упомянутых модулей может отвергнуть C-тип и информировать об этом RSVP-процесс; RSVP должен тогда отвергнуть такое сообщение и проинформировать об ошибке.
RSVP в маршрутизаторе имеет интерфейсы для управления трафиком, а в ЭВМ — интерфейсы для приложений (т.е., API), а также для управления трафиком (если такой контроль предусмотрен).
Структура реального интерфейса может зависеть от операционной системы. Некоторые из вызовов предполагают асинхронную присылку информации.
Этот вызов инициирует RSVP обработку сессии, заданной DestAddress, ProtocolId и, возможно, номером порта DstPort. В случае успеха вызов SESSION возвращает локальный Session-id, который может использоваться при последующих вызовах.
Параметр Upcall_Proc_addr определяет адрес вызова процедуры получения кода ошибки или информации о событии. Параметр SESSION_object включен для организации механизма поддержки более общего описания сессии (обобщенный порт назначения). Обычно SESSION_object опускается.
Отправитель использует этот вызов, чтобы определить или модифицировать атрибуты информационного потока. Первое обращение к SENDER для регистрации сессии как Session-id заставит RSVP начать рассылку сообщений Path для данной сессии; последующие вызовы будут модифицировать информацию о проходе. Параметры SENDER интерпретируются следующим образом:
Source_Address. Это адрес интерфейса, через который будут посылаться данные. Если этот параметр пропущен, будет использоваться интерфейс по умолчанию. Этот параметр необходим для ЭВМ с двумя и более сетевыми интерфейсами;Source_Port. Это UDP/TCP порт, через который будут посылаться данные;Sender_Template. Этот параметр включен для поддержки механизма более общего описания отправителя (обобщенный порт источника). Обычно этот параметр может быть опущен;Sender_Tspec. Этот параметр описывает трафик потока (смотри [RFC-2210]);Adspec. Этот параметр может быть специфицирован для инициализации вычисления свойств QoS вдоль пути (смотри [RFC-2210]);Data_TTL. Это IP TTL параметр, который несут в себе информационные пакеты. Он необходим, чтобы гарантировать условие, при котором сообщения Path не будут попадать за пределы зоны мультикастинг-сессии;Policy_data. Это опционный параметр несет в себе управляющую информацию для отправителя. Эта информация может задаваться системной службой и для приложения может быть недоступной;RESERVE. Получатель использует этот вызов, чтобы осуществить или модифицировать резервирование session-id сессии. Первое обращение RESERVE инициирует периодическую передачу сообщений Resv. Последующие вызовы RESERVE могут служить для модификации параметров предыдущих обращений.Опционный параметр receiver_address может использоваться получателем в маршрутизаторе или ЭВМ с несколькими сетевыми интерфейсами; это IP-адрес одного из интерфейсов узла. Флаг CONF_flag должен быть установлен, если желательно подтверждение резервирования. Параметр Policy_data специфицирует управляющие данные получателя, в то время как параметр style указывает на стиль резервирования. Остальные параметры зависят от стиля; обычно они соответствуют спецификациям фильтра и flowspecs.
Отбой. Вызов: RELEASE( sessionid )Этот вызов удаляет состояние RSVP для сессии, указанной в sessionid. Узел затем шлет соответствующие сообщения отмены (teardown) и прекращает рассылку сообщений обновления для session-id.
Вызовы Error/Event (ошибка/событие)Общая форма вызова имеет вид:
Обращение: <Upcall_Proc>( ) > sessionid, Info_type, information_parameters
Upcall_Proc представляет собой процедуру, чей адрес был дан при вызове SESSION. Это обращение может произойти асинхронно в любое время после вызова SESSION до вызова RELEASE и служит для индикации ошибки или события.
В настоящее время имеется пять типов обращений, отличающихся параметром Info_type. Выбор информационных параметров зависит от типа.
Info_type = PATH_EVENTОбращение Path Event приводит к тому, что получение первого сообщения Path для данной сессии указывает приложению получателя на наличие, по крайней мере, одного отправителя или на изменение состояние прохода.
Это обращение выдает спецификации Sender_Tspec, Sender_Template, Adspec и управляющую информацию из запроса Path.
Info_type = RESV_EVENTОбращение Resv Event запускается в результате получения первого сообщения RESV или как следствие модификации предшествующего состояния резервирования для данной сессии.
Обращение (отклик): <Upcall_Proc>( ) > sessionid, Info_type = RESV_EVENT, Style, Flowspec, Filter_Spec_list [ , Policy_data ]
Flowspec — эффективное значение QoS, которое получено. Заметим, что сообщение Resv (стиль FF) может вызвать несколько обращений RESV_EVENT, по одному для каждого дескриптора потока.
Info_type = PATH_ERRORСобытие Path Error индицирует ошибку в информации отправителя, которая была специфицирована в запросе SENDER.
Параметр Error_code определяет ошибку, а Error_value может нести в себе некоторую дополнительную (возможно, системно-зависимую) информацию об ошибке. Параметр Error_Node специфицирует IP-адрес узла, который обнаружил ошибку. Параметр Policy_data_list, если он присутствует, содержит любые объекты POLICY_DATA из неудачного сообщения Path.
Info_type = RESV_ERRСобытие Resv Error указывает на ошибку в сообщении резервирования, в формировании которого приняло участие данное приложение.
Параметр Error_Node специфицирует IP-адрес узла, который обнаружил данное событие. Имеется два флага Error_flags:
— InPlace
Этот флаг может быть равен 1 при ошибке контроля доступа для индикации наличия резервирования в узле, где произошла ошибка. Этот флаг устанавливается при ошибке и транспортируется сообщениями ResvErr.
— NotGuilty
Этот флаг может быть равен 1 при ошибке контроля доступа для индикации того, что запрошенная получателем спецификация flowspec оказалась меньше той, которая вызвала ошибку. Этот флаг устанавливается API получателя.
Filter_spec_list и Flowspec содержат соответствующие объекты из дескриптора ошибки. List_count специфицирует число FILTER_SPECS в списке Filter_spec_list. Параметр Policy_data_list содержит любые объекты POLICY_DATA из сообщения ResvErr.
Info_type = RESV_CONFIRMСобытие Подтверждение указывает, что получено сообщение ResvConf.
Хотя сообщения RSVP, указывающие на события path или resv, могут приходить периодически, API должно послать соответствующие асинхронные отклики приложению только на первое из них или при изменении полученной информации. Все события, сопряженные с ошибками или подтверждениями, должны доводиться до сведения приложения.
Трудно представить общий интерфейс для управления трафиком, так как детали установления резервирования сильно зависят от технологии реализации канального уровня в интерфейсе.
Объединение RSVP-резервирований необходимо из-за мультикастной доставки данных, при которой информационные пакеты размножаются для отправки последующим узлам. В каждой такой точке размножения RSVP должен объединять запросы резервирования от последующих узлов путем выбора максимума их спецификаций flowspecs. В данном маршрутизаторе или ЭВМ может присутствовать несколько таких точек объединения/размножения.
Мультикастная IP рассылка выполняет разветвление потока на IP-уровне. В этом случае протокол RSVP должен объединять резервирования соответствующих выходных интерфейсов для последующей отправки запроса резервирования далее.
Размножение пакетов может происходить и после узла, например, в широковещательных сетях, в переключателях канального уровня или системе маршрутизаторов, не поддерживающих RSVP. В этих случаях RSVP должен объединять запросы резервирования от ряда предыдущих узлов, чтобы выполнить резервирование для одного выходного интерфейса
В технологиях с множественным доступом размножение пакетов может осуществляться на уровне канального драйвера или сетевого интерфейса.
В общем, эти сложности не влияют на реализацию протокола RSVP, нужно только четко определить, какие запросы резервирования следует объединить. Может оказаться желательным организовать реализацию RSVP из двух блоков: ядро, которое выполняет канально-независимую обработку, и адаптационный уровень, учитывающий канальную специфику.
Вызов: TC_AddFlowspec( Interface, TC_Flowspec,TC_Tspec, TC_Adspec, Police_Flags ) > RHandle [, Fwd_Flowspec]
Параметр TC_Flowspec определяет желательное значение QoS для управления доступом. Его значение вычисляется как максимум совокупности спецификаций flowspecs для последующих узлов (см. ниже описание вызова Compare_Flowspecs ). Параметр TC_Tspec определяет эффективное значение спецификации отправителя Tspec Path_Te. Параметр TC_Adspec задает спецификацию Adspec. Параметр Police_Flags несет в себе три флага: E_Police_Flag, M_Police_Flag и B_Police_Flag.
Если данный вызов оказался успешным, он устанавливает новый канал резервирования, соответствующий RHandle ; в противном случае, он возвращает код ошибки. Код RHandle используется вызывающей программой для будущих ссылок на это резервирование. Если служба управления трафиком модифицирует flowspec, вызов вернет модифицированный объект Fwd_Flowspec.
Вызов: TC_ModFlowspec( Interface, RHandle, TC_Flowspec, TC_Tspec, TC_Adspec, Police_flags ) [ > Fwd_Flowspec ]
Этот вызов используется для модификации существующего резервирования. TC_Flowspec передается блоку контроля разрешения. Если разрешения нет, текущая спецификация flowspec остается в силе. Соответствующие спецификации фильтров, если таковые имеются, остаются не затронутыми. Другие параметры определены так же, как и в TC_AddFlowspec. Если система модифицирует flowspec, вызов вернет также модифицированный объект Fwd_Flowspec.
Вызов: TC_DelFlowspec( Interface, RHandle )
Этот вызов ликвидирует существующее резервирование, включая спецификацию flowspec и все сопряженные спецификации фильтров.
Вызов: TC_AddFilter( Interface, RHandle, Session , FilterSpec ) > FHandle
Этот вызов добавляет новую спецификацию фильтра для резервирования, заданного RHandle. Запрос посылается после успешного вызова TC_AddFlowspec. Этот вызов возвращает дескриптор фильтра FHandle.
Вызов: TC_DelFilter( Interface, FHandle )
Этот вызов используется для удаления какого-либо фильтра, идентифицируемого FHandle.
Вызов: TC_Advertise( Interface, Adspec, Non_RSVP_Hop_flag ) > New_Adspec
Этот вызов используется при OPWA и служит для вычисления выходной спецификации New_Adspec для заданного интерфейса. Битовый флаг Non_RSVP_Hop_flag должен устанавливаться в случае, когда демон RSVP обнаруживает, что предшествующий узел содержит один или более маршрутизаторов, не поддерживающих RSVP. TC_Advertise вставит эту информацию в New_Adspec для оповещения обнаружения такого узла.
Обращение (отклик): TC_Preempt() > RHandle, Reason_code
Чтобы выдать новый запрос резервирования, модули контроля разрешения и управления могут осуществить выделение квот для одного или двух существующих резервирований. Это вызовет отклик TC_Preempt() на каждое привилегированное RSVP-резервирование, отправляя дескриптор резервирования RHandle и субкод причины.
Реализация RSVP нуждается в следующей поддержке со стороны механизма маршрутизации узла.
Запрос маршрута
Для пересылки сообщений Path и PathTear процесс RSVP должен быть способен запрашивать процесс маршрутизации с целью получения маршрутных данных.
Ucast_Route_Query( [ SrcAddress, ]
DestAddress, Notify_flag ) > OutInterface
Mcast_Route_Query( [ SrcAddress, ]
DestAddress, Notify_flag ) > [ IncInterface, ] OutInterface_list
В зависимости от протокола маршрутизации запрос может зависеть или нет от SrcAddress, т.е., от IP-адреса ЭВМ-отправителя, который является также IP-адресом источника сообщения. IncInterface характеризует интерфейс, через который ожидается прибытие пакета. Некоторые мультикастные протоколы маршрутизации могут не выдавать этот адрес. Когда флаг Notify_flag = True, блок маршрутизации отправит сообщение о непреднамеренном изменении маршрута, если такое изменение произойдет.
Мультикастный маршрутный запрос может вернуть пустой список OutInterface_list, если за оговоренным маршрутизатором нет ни одного получателя. Запрос маршрутной информации может вернуть сообщение No such route — такой маршрут отсутствует, возможно, в результате временной рассогласованности (например, сообщение Path или PathTear для запрошенного маршрута не дошло). В любом случае локальное состояние должно быть актуализовано так, как это требуется в запросе, который не может быть переслан далее.
При маршрутном запросе с флагом Notify_flag = True процесс маршрутизации может послать асинхронное сообщение процессу RSVP, который уведомляет об изменении определенного маршрута.
Ucast_Route_Change( ) > [ SrcAddress, ]
DestAddress, OutInterface Mcast_Route_Change( ) > [ SrcAddress, ]
DestAddress, [ IncInterface, ] OutInterface_list
RSVP должен быть способен запоминать, какой реальный и виртуальный интерфейсы являются активными, а также их IP-адреса.
Должна быть предусмотрена возможность логической дезактивации интерфейса для RSVP. Когда интерфейс дезактивирован, сообщения Path не должны проходить через данный интерфейс; если сообщение RSVP получено, оно должно быть отброшено (возможно, с соответствующей записью в журнале операций).
Реализация RSVP нуждается в следующей поддержке со стороны систем ввода/вывода пакетов и со стороны механизма переадресации узла.
Пакеты, полученные для IP-протокола (код 46), но не адресованные узлу, должны быть переправлены программе RSVP для последующей обработки. Сообщения RSVP, переправляемые таким образом, включают сообщения Path, PathTear и ResvConf. Эти типы сообщений несут в себе IP-опцию оповещение маршрутизатора (Router Alert), которая может быть использована для выделения этих пакетов в высокоскоростном канале переадресации. В качестве альтернативы узел может перехватывать все пакеты с кодом протокола 46.
В маршрутизаторе или ЭВМ с несколькими сетевыми интерфейсами идентификация интерфейса (реального и виртуального), через который получено заданное сообщение, так же, как IP-адрес источника и TTL, с которым оно получено, должна быть доступна для процесса RSVP.
RSVP должен уметь обеспечить посылку дейтограммы через специальный выходной интерфейс (реальный или виртуальный) в обход обычного механизма маршрутизации. Виртуальным каналом может быть, например, мультикастный туннель.
RSVP должен быть способен специфицировать IP-адрес отправителя и TTL, которые могут использоваться при посылке сообщений Path.
RSVP должен быть способен вызвать посылку сообщения Path, PathTear и ResvConf с опцией оповещения маршрутизатора (Router Alert).
Flowspecs, Tspecs и Adspecs являются объектами, совершенно недоступными для RSVP; их содержимое определено в документах спецификации услуг. Чтобы манипулировать этими объектами, процесс RSVP должен иметь в своем распоряжении следующие программы, зависящие от типа услуг.
Compare_Flowspecs( Flowspec_1, Flowspec_2 ) > result_code
Возможный результат операции result_codes указывает: flowspecs равны, Flowspec_1 меньше, Flowspec_2 больше, flowspecs совместимы и можно вычислить LUB, или flowspecs не совместимы. Заметим, что, сравнивая две спецификации, мы косвенно сопоставляем Tspecs, которые они содержат. Хотя процесс RSVP не может сам осуществить разбор flowspec с целью извлечения Tspec, он может использовать вызов процедуры Compare_Flowspecs для косвенного вычисления Resv_Te.
LUB_of_Flowspecs( Flowspec_1, Flowspec_2 ) > Flowspec_LUB
GLB_of_Flowspecs( Flowspec_1, Flowspec_2 ) > Flowspec_GLB
Compare_Tspecs( Tspec_1, Tspec_2 ) > result_code
Возможным результатом процедуры result_codes может быть: Tspecs равны или Tspecs не равны.
Sum_Tspecs( Tspec_1, Tspec_2 ) > Tspec_sum
Этот вызов используется для вычисления Path_Te.
Протокол SIP является лишь одним из протоколов, которые обеспечивают мультимедийный обмен через Интернет. SIP представляет собой сигнальный протокол, который позволяет одному партнеру послать запрос другому и согласовать параметры мультимедиа-сессии.
Собственно транспортировка мультимедиа-данных обычно осуществляется с помощью протокола RTP (RealTime Transport Protocol).
Базовым стимулом создания протокола SIP являлась необходимость реализации работы с VoIP (Voice over IP). Протокол поддерживает пять аспектов, сопряженных с установлением и завершением мультимедийных коммуникаций.
Положение пользователя. Пользователи могут менять свое положение и сохранять доступ к телефонии и другим приложениям дистанционно.
Доступность пользователя. Предполагается проверка готовности парнера-адресата участвовать в коммуникациях.
Возможности пользователя. Определяются параметры среды, которые должны быть использованы.
Формирование сессии. Создается соединение точка-точка или сессия с несколькими партнерами при заданных коммуникационных параметрах.
Управление сессией. Предполагается создание и завершение сессий, модификация параметров сессии и сервисов.
SIP базируется на модели транзакций, сходных с запросами/откликами в протоколе HTTP. Каждая транзакция состоит из запроса клиента, который включает в себя определенный метод, или функцию, для сервера и, по крайней мере, один отклик. SIP использует большинство полей заголовков, правил кодирования и кодов статуса протокола HTTP. Это позволяет работать с данными легко читаемого и отображаемого формата. SIP применяет протокол
Система, использующая SIP, может рассматриваться как состоящая из клиентов, серверов и индивидуальных сетевых элементов. RFC-3261 определяет клиента и сервер следующим образом.
Клиент. Клиент является субъектом сети, который посылает SIP-запросы и получает SIP-отклики. Клиенты, если это требуется, могут непосредственно взаимодействовать с человеком. Агент пользователя клиента и прокси являются клиентами.
Сервер. Сервер является сетевым элементом, который получает запросы и должен их обслуживать, посылая отклики. Примерами серверов являются прокси, агенты пользователя серверов, серверы переадресации и регистраторы.
Индивидуальные элементы стандартной конфигурации включают в себя:
Агент пользователя. Резидентно присутствует в каждой конечной станции SIP. Он выполняет две роли:
Агент пользователя клиента
Сервер переадресации. Используется во время инициализации сессии, чтобы определить адрес запрашиваемого устройства. Сервер переадресации отсылает полученную информацию устройству, инициировавшему запрос, направляя
Прокси сервер. Является промежуточным объектом, который действует как сервер и как клиент, чтобы реализовать запросы для обслуживания других клиентов. Прокси сервер играет роль маршрутизатора, его задача заключается в отслеживании того, что запрос будет послан другому объекту, более близкому к клиенту. Прокси серверы полезны также для реализации определенной политики (например, гарантирование пользователю возможности послать запрос). Прокси сервер интерпретирует и если нужно, переписывает специфические части сообщения-запроса перед его отправкой.
Регистратор. Является сервером, который принимает запросы REGISTER и помещает информацию, которую он получает (SIP-адрес и ассоциированный IP-адрес регистрирующего устройства) из этих запросов, в службу локализации для домена, который обслуживает.
Служба локализации. Используется серверами переадресации SIP или прокси, чтобы получить информацию о возможном положении источника запроса. Для этой цели служба локализации поддерживает базу данных SIP-адресов/ IP-адресов.
В RFC-3261 в качестве логических устройств определены различные серверы. Они могут быть использованы в качестве отдельных серверов в Интернет или могут объединяться в рамках одного приложения, которое работает резидентно на определенном физическом сервере.
(рис 10.34) Протоколы и компоненты SIPНа рис. 10.34 показано, как некоторые SIP компоненты связаны друг с другом и с протоколами, которые они применяют. Агент пользователя А использует SIP для установления сессии с другим агентом пользователя B, который выступает в роли сервера. Диалог запуска сессии пользуется SIP и включает один или более прокси серверов, чтобы переадресовать запросы и отклики между двумя агентами пользователя. Агенты пользователя работают также с протоколом
Прокси серверы могут, если это требуется, работать в качестве серверов переадресации. Система DNS (Domain Name System) является важной частью, реализующей протокол SIP. Обычно,
Из эксплуатационных соображений SIP часто работает поверх UDP (User Datagram Protocol), и обеспечивает свои собственные механизмы обеспечения надежности доставки, но может использовать и TCP. Если необходим безопасный или криптографический транспортный механизм, сообщения SIP могут передаваться посредством протокола TLS (Transport Layer Security).
С протоколом SIP ассоциирован
Ресурсы в конфигурации SIP идентифицируются URI. Примерами ресурсов могут служить:
URI SIP имеют формат, базирующийся на формате адресов email, в частности user@domain. Существует две общие схемы. Обычные URI имеют форму:
sip:ааа@itep.com
URI могут также включать пароль, номер порта и сопряженные параметры. Если требуется безопасная передача, sip: заменяется на sips:. В последнем случае сообщения SIP передаются с привлечением протокола TLS.
Спецификация SIP достаточно сложна; главный документ, RFC-3261, содержит 269 страниц. Для пояснения работы протокола рассмотрим несколько примеров.
На рис. 10.35 показана успешная попытка пользователя А установить сессию с пользователем B, чье URI bbb@itep.com. [10.9]
(рис 10.35) DNS-сервер откликается (4) отправкой IP-адреса прокси сервера itep.com. Прокси сервер А может теперь переадресовать сообщение INVITE выходному прокси серверу (5), который посылает подтверждение сообщения (6). Входной прокси сервер теперь консультируется с сервером локализации для определения адреса B (7), а сервер локализации откликается посылкой адреса B, что позволяет послать ему сообщение SIP (8).
Прокси сервер может теперь отослать сообщение INVITE B (9). Посылается отклик от B к А (10, 11, 12), в то время как
Наконец,
(рис 10.36) В следующем примере (рис. 10.36) используется два типа сообщений, которые пока еще не входят в стандарт SIP, но описаны в документе RFC-2848 [5] и вероятно будут включены в последующие версии SIP. Эти типы сообщений поддерживают телефонные приложения. Предположим, что в предыдущем примере А была проинформирована о том, что B недоступен.
Этот запрос будет переадресован в нашем случае через два прокси к серверу PINT (Public Switched
На рис. 10.37 показано продолжение обмена. B подключается к системе локализации, послав сообщение REGISTER прокси серверу своего домена (1). Прокси обновляет базу данных службы локализации, отражая факт регистрации (2). Обновление подтверждается прокси (3), что подтверждает регистрацию B (4). PINT воспринимает новый статус B от сервера локализации и посылает сообщение NOTIFY, содержащее новый статус B (5). Это сообщение переадресуется А (6, 7).
Как было замечено, SIP является протоколом, базирующемся на текстах, с синтаксисом, сходным с HTTP. Существует два разных типа SIP сообщений: запросы и отклики. Различие форматов этих сообщений проявляется в первой строке. Первая строка запроса содержит метод, определяющий природу запроса, и URI запроса, указывающий, куда следует послать запрос. Первая строка отклика содержит код отклика. Все сообщения имеют заголовок, состоящий из нескольких строк, каждая строка начинается с метки заголовка. Сообщение может содержать в себе описание транспортируемых данных
(рис 10.37) REGISTER (регистр). Используется агентом пользователя, чтобы проинформировать конфигурацию SIP о своем текущем IP адресе и URL, для которого желательно получать вызовы.INVITE (приглашение). Применяется, чтобы установить медийную сессию между агентами пользователей.ACK. Подтверждает надежную доставку сообщения.CANCEL (аннулирование). Прерывает обслуживание незавершенного запроса, но не изменяет BYE. Завершает сессию между двумя пользователями.OPTIONS (опции). Запрашивает информацию об источнике запроса, но не реализует сам запрос.Например, заголовок сообщения (1) на рис. 10.35 может выглядеть следующим образом:
INVITE sip:bbb@ itep.com SIP/2.0 Via: SIP/2.0/UDP 12.26.17.91:5060 MaxForwards: 70 To: B <sip:bbb@ itep.com From: A <sip:aaa@iae.com;tag=1928301774 CallID: a84b4c76e66710@12.26.17.91 CSeq: 314159 INVITE Contact: <sip:aaa@iae.com> ContentType: application/sdp ContentLength: 142
Первая строка содержит название метода ( INVITE ), SIP URI, номер используемой версии протокола SIP. Последующие строки представляют собой список полей заголовка. В данном примере представлен минимально необходимый набор.
Заголовки Via показывают путь запроса через конфигурацию SIP (отправитель и промежуточные прокси), и используются при передаче по тому же маршруту откликов. Когда посылается сообщение INVITE, оно имеет только заголовок, вставленный А. Строка содержит IP адрес (12.26.17.91), номер порта (5060), и транспортный протокол (UDP), которые B должен применить в отклике.
Заголовок MaxForwards ограничивает число шагов, которые запрос может сделать до точки назначения. Содержимое этого поля является целым числом, которое декрементируется на 1 каждым прокси, переадресующим запрос. Если значение MaxForwards станет равным 0, прежде чем запрос достигнет места назначения, он отвергается с кодом ошибки в отклике, равным 483 (Too Many Hops – слишком много шагов).
Поле заголовка To содержит имя (B) и URI SIP или SIPS (sip:bbb@ itep.com), которому первоначально предназначался запрос. Поле заголовка From также содержит имя (A) и URI SIP или SIPS (sip:aaa@, которое указывает на отправителя запроса. Это поле заголовка имеет также свободный параметр, который содержит произвольную строку (1928301774), добавляемую к URI
Поле заголовка Call-ID содержит глобально уникальный идентификатор данного вызова, генерируемый из комбинации псевдослучайной строки и имени ЭВМ или IP-адреса. Комбинация тэгов To, From и Call-ID полностью определяет отношение SIP партнеров А и B.
CSeq или поле заголовка Command Sequence содержит целое число и имя метода. Число CSeq инициализируется в начале вызова (в данном примере 314159), инкрементируется для каждого нового запроса в рамках диалога и является традиционным порядковым номером. CSeq используется, чтобы отличить повторную передачу от нового запроса.
Поле заголовка Contact содержит SIP URI для непосредственной коммуникации между агентами пользователя. Несмотря на то, что поле заголовка Via говорит другим элементам, куда следует посылать отклик, поле заголовка Contact сообщает другим элементам, куда посылать будущие запросы для заданного диалога.
Поле заголовка ContentType указывает на тип тела сообщения. Поле заголовка ContentLength содержит длину тела сообщения в октетах.
Типы откликов SIP, определенных в RFC-3261, имеют следующие категории.
Например, заголовок сообщения (13) на рис. 10.35 может выглядеть следующим образом:
SIP/2.0 200 OK Via: SIP/2.0/UDP server10.itep.com Via: SIP/2.0/UDP bgb3.site3.iae.com Via: SIP/2.0/UDP 12.26.17.91:5060 To: B <sip:bbb@itep.com;tag=a6c85cf From: A <sip:aaa@iae.com;tag=1928301774 CallID: a84b4c76e66710@12.26.17.91 CSeq: 314159 INVITE Contact: <sip:bbb@itep.com> ContentType: application/sdp ContentLength: 131
Первая строка содержит номер версии SIP, которая используется, код отклика и имя. Последующие строки представляют собой список полей заголовка. Поля заголовка Via, To, From, Call-ID и CSeq копируются из запроса INVITE. (Существует три значения поля заголовка Via — одно связано с
Протокол
медиа-потоках. Сессия может реализовывать несколько потоков данных. В протоколе
адресах.
портах. Для каждого потока специфицируются номера UDP портов для отправителя и получателя;
типах данных. Для каждого используемого типа потока (например, телефония) тип поля данных указывает на медиа-форматы, которые могут применяться во время сессии;
времени старта и остановки. Эти данные используются в случае широковещательных сессий, например, телевизионных или радиопрограмм. Указываются время начала, завершения и времена повторов сессии;
инициаторе. Для широковещательных сессий инициатор специфицируется контактной информацией. Это может быть полезно, если получатель встретится с техническими трудностями.
Несмотря на то, что
В начале 90-х годов были сделаны первые попытки использовать Интернет для передачи голоса в реальном масштабе времени (VocalTek). В настоящее время IP-телефония стала обычным видом услуг. Более того, она сыграла определяющую роль в снижении телефонных тарифов. Появились регулярные музыкальные программы. На подходе подключение к этому виду сервиса всех мобильных коммуникаций и
С решением проблемы транспортировки мультимедиа связан бум в разработке протоколов, обеспечивающих данный процесс. Главной целью разработчиков была организация процедуры формирования групп слушателей/зрителей и передача им запрошенных мультимедийных потоков.
Для формирования групп слушателей в 1982 (RFC-1112) был создан протокол IGMP (Internet Group Management Protocol), позднее он несколько раз дополнялся и совершенствовался (RFC-2236 и -3376). В рамках технологии IPv6 функцию IGMP взял на себя протокол ICMP (см. http://book.itep.ru/4/44/igmp_449.htm и там же ~/ip6_4411.htm).
Для доставки мультимедиа-потоков обычно используется мультикастинг-адресация, но в последнее время определенную популярность приобрела технология P2P (Peer-to-Peer). Маршрутизация таких потоков также имеет свою специфику. Если обычно маршрут прокладывается от отправителя к получателю, то для мультикаст-потоков это делается в обратном направлении (см. описание протоколов
Специфическим для мультимедиа является использование для транспортировки протокола UDP (без установления соединения и без гарантии доставки). В случае передачи голоса или изображения повторная передача дейтограммы становится бессмысленной.
При передаче мультимедийных данных крайне важно иметь необходимую полосу пропускания, малую задержку, низкий разброс времени доставки (исключает повтор) и малую вероятность потери пакетов. По существу, речь идет о гарантированном уровне качества обслуживания (QoS).
Разработано два алгоритма гарантии QoS – это
При формировании привилегированных потоков данных нужно иметь механизм, с помощью которого пакеты, принадлежащие этим потокам, могли распознаваться маршрутизаторами или другими аналогичными сетевыми устройствами. В качестве признаков распознавания дейтограмм могут применяться адреса отправителя и получателя, номера их портов, а также значения поля протокола и DSCP (ToS). Анализ такого числа параметров для каждого пакета достаточно трудоемок.
Очевидно, что широкое внедрение IPv6 привлекательно, кроме всего прочего, благодаря возможности использования меток потоков и поля приоритет, существенно удешевляющих процедуру сортировки пакетов.
Передача мультимедийных данных по сетям Интернет является одним из наиболее важных направлений. Этот вид информации передается обычно в режиме без установления соединения (протокол UDP-RTP). Наиболее типичной схемой в этом случае является наличие одного передатчика и большого числа приемников. Эта схема реализуется с использованием мультикастинг-адресации. Мультикастинг-адресация может осуществляться на IP- и MAC-уровнях. В Ethernet для этих целей зарезервирован блок адресов в диапазоне от 01:00:5E:00:00:00 до 01:00:5E:7F:FF:FF. Первый байт адреса, равный 01, указывает на то, что адрес является мультикастным. Данная схема резервирования адресного пространства позволяет использовать 23 бита Ethernet-адреса для идентификации группы рассылки при IP-мультикастинге (см. рис. 10.1.).
(рис 10.1) 1 Соотношение мультикастинговых MAC- и IP-адресовОбласть из 5 бит в IP-адресе, отмеченная *****, не используется при формировании Ethernet-адреса. Так как соотношение IP и MAC-адресов не является однозначным, драйверы должны обеспечивать обработку адресов, чтобы интерфейсы получали только те кадры, которые действительно им предназначены. Для того, чтобы информировать маршрутизатор о наличии участников мультикастинг-обмена в субсети, связанной с тем или иным интерфейсом, применяется протокол IGMP.
Групповая форма адресации нужна тогда, когда какое-то сообщение или последовательность сообщений необходимо послать нескольким (но не всем) адресатам субсети одновременно. При этой форме адресации ЭВМ имеет возможность выбрать, будет ли она участвовать в этой процедуре. Когда группа ЭВМ хочет взаимодействовать друг с другом, используется один групповой (мультикастинг) адрес. Групповая адресация может рассматриваться как обобщение обычной системы адресов, а традиционный IP-адрес — частный случай группового обращения при числе ЭВМ в группе, равном 1.
При групповой адресации один и тот же пакет может быть доставлен заданной группе ЭВМ. Членство в этой группе может динамично меняться со временем. Любая ЭВМ может войти в группу и выйти из группы в любое время по своей инициативе. В то же время ЭВМ может быть членом большого числа таких групп. ЭВМ может посылать пакеты членам группы, не являясь им сама. Каждая группа имеет свой IP-адрес класса D (рис. 10.2, см. также рис. 10.1).
(рис 10.2) Формат группового адресаАдрес 224.0.0.1 предназначен для обращения ко всем группам (все узлы и серверы, вовлеченные в данный момент в мультикастинг-обмен, например, участвующие в видеоконференции). ЭВМ может участвовать в мультикастинг-процессе на одном из следующих уровней (таблица 10.1).
| Уровень мультикастинг-процесса | описание |
|---|---|
| 0 | ЭВМ не может ни посылать, ни принимать данные |
| 1 | ЭВМ может только посылать пакеты в процессе IP-мультикастинга |
| 2 | ЭВМ в режиме мультикастинга может передавать и принимать пакеты |
Ряд мультикастинг-адресов зарезервирован строго для определенных целей (таблица 10.2).
| мультикастинг адрес | описание |
|---|---|
| 224.0.0.0 | Зарезервировано |
| 224.0.0.1 | Все системы данной субсети |
| 224.0.0.2 | Все маршрутизаторы данной субсети |
| 224.0.0.4 | Все DVMRP-маршрутизаторы |
| 224.0.0.5-224.0.0.6 | OSPFIGP (MOSPF) |
| 224.0.0.9 | Маршрутизаторы RIP2 |
| 224.0.0.10 | |
| 224.0.1.0 | VMTP-группа менеджеров |
| 224.0.1.1 | NTP-network time protocol — сетевая службы времени |
| 224.0.1.6 | |
| 224.0.1.7 | Audionews — audio news multicast (аудиослужба новостей) |
| 224.0.1.9 | |
| 224.0.1.10 | IETF-1-low-audio |
| 224.0.1.11 | IETF-1-audio |
| 224.0.1.12 | IETF-1-video |
| 224.1.0.0-224.1.255.255 | ST мультикастинг-группы |
| 224.2.0.0-224.2.255.255 | Вызовы при мультимедиа-конференциях |
| 232.0.0.0-232.255.255.255 | VMTP переходные группы |
Чтобы участвовать в коллективных обменах в локальной сети, ЭВМ должна быть снабжена программой, которая поддерживает этот режим. При этом сервер локальной сети (gateway) информируется о намерении использовать мультикастинг. Сервер передает эту информацию другим внешним серверам IP-сети. IGMP для передачи своих сообщений использует IP-дейтограммы (IGMP-пакеты инкапсулируются в них). Для подключения к группе сначала посылается IGMP-сообщение всем ЭВМ о включении в группу, а локальный мультикаст-сервер подготавливает маршрут. Локальный мультикаст-сервер время от времени проверяет ЭВМ и определяет, не покинули ли они группу (ЭВМ не подтверждает свое членство в группе). Все обмены между ЭВМ и мультикаст-сервером производятся в режиме IP-мультикастинга, те есть, любое сообщение адресуется всем ЭВМ группы. ЭВМ, не принадлежащая группе, IGMP-сообщений не получает, что сокращает загрузку сети. Формат сообщений в протоколе IGMP имеет вид, показанный ниже на рис.10.3.
(рис 10.3) Формат IGMP-сообщенийПоле версия определяет используемую версию протокола, поле тип=1 говорит о том, что это запрос, отправленный мультикастинг-маршрутизатором, тип=2 указывает, что этот отклик послан ЭВМ. ЭВМ использует групповой адрес, чтобы сообщить о своем подключении к группе. Контрольная сумма вычисляется по тому же алгоритму, что и для ICMP. IGMP-сообщения используются мультикастингмаршрутизатором, чтобы отслеживать членство в группе каждой из сетей, подключенных к нему. В группе может участвовать несколько активных процессов одной и той же ЭВМ, но при этом посылается только один запрос для регистрации. Когда какой-то процесс покидает группу, ЭВМ не шлет сообщения об этом, даже в случае, когда это последний из процессов-членов группы на данной ЭВМ. Просто при очередном запросе ЭВМ не подтвердит членство в группе. Мультикастинг-маршрутизатор регулярно посылает запросы с требованием подтвердить участие в группе. ЭВМ посылает отклик-подтверждение для каждой из групп, если у нее есть хотя бы один процесс-член группы. На основе этих запросов-откликов мультикастинг-маршрутизатор составляет и поддерживает таблицу интерфейсов, которые имеют одну или более ЭВМ, входящих в мультикастинг-группы.
Протокол IGMP применяется при организации мультикастинг-туннелей для передачи звуковой и видеоинформации. Для решения проблем мультимедиа в сетях Интернет используется идея
По умолчанию мультикаст-дейтограммы имеют значение поля TTL=1 (time-to-live), что ограничивает их распространение одной субсетью. Приложения могут увеличивать значение TTL. Первая дейтограмма, тем не менее, всегда имеет TTL=1. Если получение этой дейтограммы не подтверждается сервером, посылается вторая — с TTL=2 и т.д. Таким образом, попутно измеряется и число шагов между клиентом и сервером. Для случая, когда число шагов не более 1, зарезервирован блок адресов 224.0.0.0 - 224.0.0.255. Маршрутизатор не обрабатывает пакеты с такими адресами, вне зависимости от кода поля TTL.
При использовании мультикастинга MAC-переключатели переадресуют пакеты через все имеющиеся интерфейсы, что заметно ухудшает эффективность сети. Чтобы решить эту проблему, компания CISCO разработала протокол CGMP (Cisco Group Management Protocol), который позволяет взаимодействовать маршрутизаторам и переключателям, и это способствует передаче мультикаст-пакетов только на те интерфейсы, где имеются активные члены группы.
IP-мультикастинг-пакеты инкапсулируются при передаче через туннели так, что они выглядят как обычные IP-уникаст-пакеты.
Мультикастинг-маршрутизатор при посылке пакета через туннель подготавливает IP-пакет с заголовком, который содержит адрес маршрутизатора-партнера на другом конце туннеля, при этом в поле IP-протокола включен код 4 (IP поверх IP). Маршрутизатор-приемник извлекает вложенный мультикастинг-пакет и направляет далее, если это требуется.
Каждый туннель имеет определенный порог для переменной времени жизни пакета (timetolive — TTL). Согласно договоренности (IETF) широкополосная видеоинформация передается с малыми начальными значениями TTL. Малые значения TTL не позволяет видеопакетам загружать слишком большие участки сети. Мультикастинг-дейтограмма с TTL=0 может быть доступна только процессу, который существует в ЭВМ, породившей эту дейтограмму. По умолчанию мультикастинг-дейтограммы имеют TTL=1, такая дейтограмма не может покинуть пределов субсети, и только дейтограммы с TTL>1 могут переадресовываться маршрутизаторами.
Следует помнить, что маршрутизатор не откликнется ICMP-сообщением "время истекло", когда TTL достигнет нуля, так как дейтограммы с мультикастинг-адресами не вызывают ICMP-откликов.
Увеличивая TTL, прикладной процесс может расширять зону взаимодействия. Сначала дейтограмма может посылаться с TTL=1, затем, если отклика не получено — c TTL=2, и так далее. Эта схема позволяет найти ближайший сервер (с точки зрения числа шагов до него). Для приложений, которые ограничивают свою активность в пределах одного шага, предусмотрен специальный интервал адресов 224.0.0.0 - 224.0.0.255. Мультикастинг-маршрутизатор не должен переадресовывать дейтограммы с такими адресами, вне зависимости от значения TTL. Адрес 224.0.0.1 является адресом группы "все ЭВМ" и относится ко всем ЭВМ и маршрутизаторам, способным работать в режиме мультикастинга. Каждая ЭВМ автоматически включается в эту группу при инициализации интерфейса. О членстве в этой группе ЭВМ не сообщает.
Конфигурация системы в режиме мультикастинга производится автоматически. Чтобы изменить конфигурацию системы, или добавить еще один туннель используются специальные конфигурационные команды, которые записываются в /etc/mrouted.conf. Существует два типа таких команд:
phyint <localaddr> [disable] [metric <m>] [threshold <t>] tunnel <localaddr> <remoteaddr> [metric <m>] [threshold <t>]
Первая команда может отменить мультикастинг-маршрутизацию для конкретного физического интерфейса, идентифицируемого по его IP-адресу (<localaddr>), или заменить значение метрики или порога. Эта команда должна выдаваться до команды tunnel. Вторая команда может служить для установления туннеля между местным IP-адресом (<local-addr>) и удаленным IP-адресом (<remote-addr>). Значения метрики и порога по умолчанию равны 1.
В Интернет, так же, как и в некоторых других сетях, возможна потеря пакетов, изменение их порядка в процессе транспортировки, а также вариация времени доставки в достаточно широких пределах. Мультимедийные приложения накладывают достаточно жесткие требования на транспортную среду. Для согласования таких требований с возможностями LAN и Интернет был разработан протокол RTP.
Следует иметь в виду, что сам по себе RTP не обеспечивает своевременной доставки и не предоставляет каких-либо гарантий уровня сервиса (QoS). Этот протокол не может гарантировать также корректного порядка доставки данных.
Правильный порядок выкладки информации может быть обеспечен принимающей стороной с помощью порядковых номеров пакетов. Такая возможность крайне важна практически всегда, но особое внимание этому уделяется при восстановлении передаваемого изображения.
RTP — гибкий протокол, который может доставить приложению нужную информацию; его функциональные модули не образуют отдельный слой, а чаще встраиваются в прикладную программу. Протокол RTP не является жестко регламентирующим.
При организации аудиоконференции каждый участник должен иметь адрес и два порта, один для мультмедиа-данных, другой — для управляющих
Заголовок пакета RTP указывает, какой вид кодирования звука применен (PCM,
При передаче звука весьма важным становится взаимное положение закодированных фрагментов во времени. Для решения задачи корректного воспроизведения заголовки пакетов RTP содержат временную информацию и порядковые номера. Порядковые номера позволяют не только восстановить правильный порядок фрагментов, но и определить число потерянных пакетов-фрагментов.
Так как участники конференции могут появляться и исчезать по своему усмотрению, полезно знать, кто из них присутствует в сети в данный момент и как до них доходят передаваемые данные. Для этой цели периодически каждый из участников транслирует через порт
Если в ходе конференции передается не только звук, но и изображение, они пересылаются как два независимых потока с использованием двух пар UDP-портов.
На уровне RTP не существует какой-либо взаимосвязи между аудио- и видеосессиями. Только
В некоторых случаях можно столкнуться с ситуацией, когда один из участников конференции подключен к сети через узкополосный канал. Было бы не слишком хорошо требовать от всех участников перехода на кодировку, соответствующую этой малой полосе. Чтобы этого избежать, можно установить преобразователь, называемый смесителем, в непосредственной близости от узкополосной области.
Смеситель преобразует поток аудиопакетов в последовательность дейтограмм, которая соответствует возможностям узкополосного канала. Эти пакеты могут быть уникастными (адресованными одному получателю) или мультикастными. Заголовок RTP включает в себя средства, которые позволяют мультиплексорам идентифицировать источники, внесшие вклад, — так что получатель может правильно идентифицировать источник звукового сигнала.
Некоторые участники конференции, использующие широкополосные каналы, не доступны для IP-мультикастинга (например, находятся за Firewall). Для таких узлов смесители не нужны, здесь используется другой RTP-уровень передачи, называемый трансляцией. Устанавливается два транслятора по одному с каждой из сторон Firewall. Внешний транслятор передает мультикастинг-пакеты по безопасному каналу внутреннему транслятору. Внутренний же транслятор рассылает их подписчикам локальной сети обычным образом.
Смесители и трансляторы могут выполнять и другие функции, например, преобразование IP/UDP пакетов в ST-II при видеоконференциях.
Поле данных RTP. Информация, пересылаемая в пакете RTP, например, фрагменты звука или сжатые видеоданные.
Пакет RTP. Информационный пакет, содержащий фиксированный заголовок. Один пакет транспортного нижнего уровня, например, UDP, обычно содержит один RTP-пакет, но это требование не является обязательным. Поле источников информации может быть пустым.
Пакет
Транспортный адрес. Комбинация сетевого адреса и порта, которая идентифицирует конечную точку канала (например, IP-адрес и UDP-порт). Пакеты следуют от транспортного адреса отправителя к транспортному адресу получателя.
Сессия RTP. Период с момента формирования группы участников RTP-обмена до ее исчезновения. Для каждого из участников сессия определяется конкретной парой транспортных адресов (сетевой адрес и номера портов для RTP и
Источник синхронизации (SSRC). Источник потока RTP-пакетов, определяется 32-битным числовым SSRC-идентификатором, который записывается в заголовок RTP-пакета и не зависит от сетевого адреса. Все пакеты от источника синхронизации образуют часть с идентичной временной привязкой и нумерацией. Эти данные используются принимающей стороной при воспроизведении. Источниками синхронизации могут служить источники первичного сигнала (микрофоны или видеокамеры), а также RTP-смесители. SSRC-идентификатор представляет собой случайное число, которое является уникальным для данной RTP-сессии. Участник сессии не должен применять один и тот же SSRC-идентификатор для всех RTP-сессий мультимедийного набора. Если участник формирует несколько потоков в рамках одной RTP-сессии (например, от нескольких видеокамер), каждый участник должен быть снабжен уникальным SSRC-идентификатором.
Информационный источник CSRC (
Оконечная система. Приложение, которое генерирует или воспринимает данные, посылаемые в виде RTP-пакетов. Оконечная система может выступать в качестве одного или нескольких источников синхронизации для конкретной сессии.
Смеситель. Промежуточная система, которая получает RTP-пакеты от одного или нескольких источников, при необходимости меняет их формат, объединяет и пересылает их адресатам. Так как временная привязка входных пакетов может отличаться, смеситель осуществляет их синхронизацию и генерирует свой собственный поток RTP-пакетов. Таким образом, все посылаемые пакеты имеют в качестве источника синхронизации смеситель.
Транслятор. Промежуточная система, которая переадресует RTP-пакеты, не изменяя их идентификаторы источника синхронизации. Такие устройства используются для преобразования системы кодирования, перехода от мультикастинг- к традиционной уникаст-адресации или при работе с Firewall.
Монитор. Приложение, которое получает
Все целочисленные поля передаются в соответствии c сетевым порядком, т.е. старший байт следует первым (big-
Абсолютное время представляется с помощью временных меток в соответствии с форматом NTP (network time protocol), который характеризует время в секундах от начала суток (UTC) 1 января 1900 года [10.4]. Полное разрешение временной метки NTP определяется 64-битовым числом с
Первые 12 октетов присутствуют во всех RTP-пакетах, в то время как список CSRC-идентификаторов присутствует только, когда пакет формируется смесителем. Поля имеют следующие назначения:
(рис 10.4) Заголовок пакета RTPV (Версия): 2 бита
Это поле идентифицирует версию протокола RTP. В настоящее время в это поле записывается код 2. Значение 1 использовалось в опытной версии RTP, а код 0 — в аудиоприложении
p (Заполнитель): 1 бит
Если Р=1, пакет содержит один или более дополнительных октетов-заполнителей в конце поля данных (заполнители не являются частью поля данных). Последний октет заполнителя содержит число октетов, которые должны игнорироваться. Заполнитель нужен при использовании некоторых алгоритмов шифрования при фиксированном размере блоков или при укладке нескольких RTP-пакетов в одну UDP-дейтограмму.
x (Расширение): 1 бит
Если бит Х=1, далее следует фиксированный заголовок, за которым размещается одно расширение заголовка.
CC (CSRC count — число CSRC): 4 бита
Число CSRC содержит код количества CSRC-идентификаторов, которые записаны в пакете.
M (маркер): 1 бит
Интерпретация маркера определяется профайлом. Предполагается разрешить выделять в потоке пакетов существенные события, такие, как границы кадра. Профайл может определить дополнительные маркерные биты или специфицировать отсутствие маркерных битов путем изменения числа битов в поле PT.
PT (Тип данных): 7 бит
Это поле идентифицирует формат поля данных RTP-пакета и определяет его интерпретацию приложением. Могут быть определены дополнительные коды типа данных. Исходный набор кодов по умолчанию для аудио и видео задан в профайле Internet-draft и может быть расширен в следующих редакциях стандарта (RFC-1700) [10.5].
Номер по порядку: 16 бит
Номер по порядку инкрементируется на 1 при посылке очередного RTP-пакета данных, этот код может использоваться получателем для регистрации потерь пакетов и для восстановления истинного порядка присланных фрагментов. Начальное значение кода является случайным. Алгоритм генерации таких кодов рассмотрен в [10.6].
Временная метка: 32 бита
Временная метка соответствует времени стробирования для первого октета в информационном RTP-пакете. Время стробирования должно быть получено от часов, показания которых увеличиваются монотонно и линейно, чтобы обеспечить синхронизацию и вычисление временного разброса. Разрешающая способность часов должна быть достаточной для обеспечения приемлемой точности синхронизации (одного тика на видеокадр обычно не достаточно). Частота часов зависит от формата данных и задается статически в профайле, в спецификации поля данных или динамически средствами, выходящими за пределы спецификации протокола RTP. Если RTP-пакеты генерируются периодически, используется временная привязка, определенная задающим генератором стробирования, а не показаниями системных часов.
Начальное значение временной метки является случайным. Несколько последовательных RTP-пакетов могут иметь идентичные временные метки, если логически они генерируются одновременно (например, относятся к одному и тому же видео кадру).
SSRC: 32 бита
Поле SSRC идентифицирует источник синхронизации. Этот идентификатор выбирается случайным образом, так, чтобы в пределах одной RTP-сессии не было двух равных SSRC-кодов. Все приложения должны быть способны выявлять случаи равенства SSRC-кодов. Если отправитель изменяет свой транспортный адрес, он должен также сменить и SSRC-идентификатор.
CSRC-список: от 0 до 15 элементов, по 32 бита каждый
CSRC-список идентифицирует источники информации, которые внесли свой вклад в поле данных пакета. Число идентификаторов задается полем CC. Если число источников больше 15, только 15 из них могут быть идентифицированы.
Для эффективной реализации протокола число точек мультиплексирования должно быть минимизировано. В RTP мультиплексирование осуществляется по транспортным адресам мест назначения, которые определены RTP-сессией. Использование пакетов с различным типом поля данных, но с идентичным SSRC создает определенные проблемы:
Первые три из этих проблем вполне устранимы, если использовать различные SSRC для каждого вида среды при посылке их в пределах одной RTP-сессии.
Хотя существующие RTP-заголовки позволяют решать широкий круг проблем, предусмотрена также возможность их модификации с помощью профайлов. При этом сохраняется контроль и мониторирование с использованием стандартных средств.
В протоколе RTP предусмотрен механизм расширений заголовка, который позволяет модифицировать заголовок и экспериментировать с новыми форматами поля данных. Этот механизм устроен так, что расширения заголовка могут игнорироваться приложениями, которые не нуждаются в расширениях.
Расширения заголовка предназначены для ограниченного использования — и многие приложения лучше реализовать, используя профайл. Формат реализации расширений показан на рис. 10.5.
(рис 10.5) Формат расширения заголовкаЕсли бит x в RTP-заголовке равен 1, то к заголовку добавлено расширение переменной длины, за которым может следовать список CSRC. Расширение заголовка содержит 16-битовое поле длины, определяющее число 32-битных слов в расширении, исключая 4-октета заголовка расширения (т.о. значения поля длина, равное нулю, вполне допустимо). Информационный заголовок RTP может иметь только одно расширение. Чтобы обеспечить работу различных приложений с различными расширениями заголовка или чтобы обеспечить работу с более чем одним типом расширений, первые 16 бит расширения заголовка остаются свободными для выбора идентификаторов или параметров. Формат этих 16 бит определяется спецификацией профайла, с которым работает приложение.
Кроме оконечных систем, RTP поддерживает трансляторы и смесители, которые рассматриваются как промежуточные системы на уровне RTP.
RTP транслятор/смеситель соединяет две или более области на транспортном уровне. Обычно каждая область определяется сетью и транспортным протоколом (например, IP/UDP), мультикаст-адресом или парой уникаст-адресов, а также портом назначения транспортного уровня. Одна система может служить транслятором или смесителем для нескольких RTP сессий.
Для того, чтобы исключить зацикливание при использовании транслятора или смесителя, следует придерживаться следующих правил.
Аналогично все оконечные системы RTP, которые взаимодействуют через один или более транслятор или смеситель, принадлежат одной и той же SSRC-области, т.е., SSRC-идентификаторы должны быть уникальными для задействованных оконечных систем. Существует большое разнообразие трансляторов и смесителей, спроектированных для решения различных задач и приложений. Некоторые служат для шифрования/дешифрования несущих дейтограмм.
Различие между смесителями и трансляторами заключается в том, что последние пропускают через себя потоки данных, при необходимости их преобразуя, а смесители просто объединяют несколько потоков в один.
Транслятор. Переадресует RTP-пакеты, не изменяя их SSRC-идентификаторы. Это позволяет получателям идентифицировать отдельные источники, даже если пакеты от всех источников проходят через один общий транслятор и имеют сетевой адрес транслятора. Некоторые типы трансляторов передают данные без изменений, другие кодируют данные и соответственно изменяют коды типа данных и временные метки. Приемник не может заметить присутствия транслятора.
Смеситель. Принимает потоки RTP-данных от одного или нескольких источников, может изменять формат данных, определенным образом объединяет потоки и затем формирует из них один общий поток. Так как объединяемые потоки не синхронизованы, смеситель производит синхронизацию потоков и формирует свою собственную временную шкалу для исходящего потока. Смеситель является источником синхронизации. Таким образом, все пакеты данных, переадресованные смесителем, будут помечены SSRC-идентификатором смесителя. Чтобы сохранить информацию об источниках исходных данных, смеситель должен внести свои SSRC-идентификаторы в список CSRC-идентификаторов, который следует за RTP-заголовком пакета. Смеситель, который, кроме того, вносит в общий поток свою составляющую, должен включить свой собственный SSRC-идентификатор в CSRC-список данного пакета.
Для некоторых приложений смеситель может не идентифицировать источники в CSRC-списке. Так возникает опасность, что петли, включающие эти источники, не смогут быть выявлены.
Преимуществом смесителя перед транслятором для аудиоприложений является то, что выходная полоса не превосходит полосы одного источника, даже когда в сессии на входе смесителя присутствуют несколько участников. Недостаток смесителя: получатели с выходной стороны не имеют никаких средств для контроля того, какой из источников передает данные, даже в случае наличия дистанционного управления смесителем.
(рис 10.6) Пример RTP сети с оконечными системами, смесителями и трансляторамиНекоторый набор смесителей и трансляторов представлен на рис. 10.6. Здесь показано их влияние на SSRC и CSRC-идентификаторы. Оконечные системы обозначены символами ES и выделены цветом. Трансляторы обозначены буквами TRS (на рисунке — овалы), и смесители обозначены как M1:13(1,17 ) обозначает пакет, отправленный смесителем MUX1, который идентифицируется случайным значением SSRC 13 и двумя CSRC-идентификаторами 1 и 17, скопированными с SSRC-идентификаторов пакетов оконечных систем ES1 и ES2.
В RTP-сессии могут быть задействовано несколько смесителей и трансляторов, как это показано на рис. 10.6. Если два смесителя включены последовательно, так, как MUX2 и MUX3, то пакеты, полученные смесителем, могут быть уже объединены и включать CSRC-список со многими идентификаторами. Смеситель (MUX3) должен формировать CSRC-список для исходящих пакетов, используя CSRC-идентификаторы уже смешанных входных пакетов (выход MUX2) и SSRC-идентификаторы несмешанных входных пакетов, поступивших от ES9 ( E:36 ). Это отмечено на рисунке для выходных пакетов смесителя MUX3 как M3:99(9,11,36). Если число идентификаторов в списке CSRC превышает 15, остальные не могут быть туда включены.
SSRC-идентификаторы в RTP-заголовках и в различных полях
Недостаточно применять в качестве идентификатора локальный сетевой адрес (такой как IPv4), так как он может быть не уникальным. Так как RTP трансляторы и смесители разрешают работу с сетями, использующими различные адресные пространства, это допускает их случайное совпадение с большей вероятностью, чем в случае использования случайных чисел.
Неприемлемо также получать идентификаторы SSRC путем простого обращения к функции random() без тщательной инициализации.
Так как идентификаторы выбраны случайным образом, существует малая, но конечная вероятность того, что два или более источников выберут одно и то же число. Столкновение более вероятно, если все источники стартуют одновременно. Если N — число источников, а L — длина идентификатора (в нашем случае 32 бита), вероятность того, что два источника независимо выберут одно и то же значение (для больших N [10.8]), составляет 1-exp(-N2 /2(L+1)). Для N=1000 вероятность примерно равна 10-4.
Типовое значение вероятности столкновения много меньше худшего случая, рассмотренного выше. Возьмем случай, когда новый источник подключается к RTP-сессии, в которой все остальные источники уже имеют уникальные идентификаторы. Если N равно числу источников, а L — длина идентификатора, вероятность столкновения равна N/2L. Для N=1000 вероятность составит около 2*10-7.
Вероятность столкновения уменьшается еще больше в случае, когда новый источник получает пакеты других участников до того, как передаст свой первый пакет. Если новый источник отслеживает идентификаторы других участников, он легко может устранить вероятность конфликта.
Хотя вероятность столкновения идентификаторов SSRC довольно мала, все RTP-реализации должны быть готовы обнаруживать столкновения и предпринимать адекватные меры для их преодоления. Если источник обнаруживает в какой-либо момент, что другой источник использует тот же идентификатор SSRC, он посылает пакет
Так как идентификаторы уникальны, они могут использоваться для детектирования петель, которые могут создаваться смесителем или транслятором. Петля приводит к дублированию данных и управляющей информации.
Источник может обнаружить, что его собственный пакет движется по кругу, или что пакеты других источников осуществляют циклическое движение.
Оба вида петель и столкновения приводят к тому, что пакеты приходят с тем же самым SSRC-идентификатором, но с разными транспортными адресами, которые могут принадлежать оконечной или какой-то промежуточной системе. Следовательно, если источник меняет свой транспортный адрес, он должен также выбрать новый SSRC-идентификатор, чтобы ситуация не была интерпретирована как зацикливание. Петли или столкновения, происходящие на дальней стороне транслятора или смесителя, не могут быть детектированы с использованием транспортного адреса источника, если все копии пакетов идут через транслятор или смеситель. Однако столкновения могут быть детектированы, когда фрагменты двух
Чтобы детектировать и устранять конфликты, реализации RTP должны содержать алгоритм, аналогичный описанному ниже. Он игнорирует пакеты от нового источника, которые входят в противоречие с работающим источником. Алгоритм разрешает конфликты с SSRC-идентификаторами участников путем выбора нового идентификатора и посылки
Этот алгоритм зависит от равенства транспортных адресов для RTP и
Данный алгоритм требует наличия таблицы транспортных адресов источников, упорядоченных по их идентификаторам. В таблицу заносятся адреса, откуда данный идентификатор был впервые получен. Каждый SSRC- или CSRC-идентификатор, полученный с информационным или управляющим пакетом, отыскивается в этой таблице, чтобы корректно обработать полученные данные. Для управляющих пакетов каждый элемент с его собственным SSRC, например, фрагмент SDES, требует отдельного просмотра. SSRC в сообщениях-отчетах составляют исключение. Если SSRC или CSRC не найдены, создается новая запись в таблице. Эти записи в таблице удаляются, когда приходит пакет
Чтобы отслеживать зацикливание собственных пакетов участников, необходимо также завести отдельный список транспортных адресов источников, которые считаются конфликтными. Заметим, что это должен быть короткий список, обычно пустой. Каждый элемент этого списка хранит адрес источника и время, когда был получен последний конфликтный пакет. Элемент может быть удален из списка, если за время 10 периодов посылки
Предполагается, что собственные идентификаторы и состояния участников записаны в таблицу идентификаторов источников.
Алгоритм:
IF SSRC или CSRC-идентификатор не найден в таблице идентификаторов источников: THEN создать новую запись и внести туда транспортный адрес источника и SSRC или CSRC вместе с кодом состояния. CONTINUE (продолжить) обычную процедуру обработки. Идентификатор найден в таблице IF транспортный адрес источника из пакета совпадает с одним из записанных в таблице: THEN CONTINUE Продолжить обычную процедуру обработки. Обнаружено столкновение идентификаторов или зацикливание IF идентификатор источника не совпадает с собственным идентификатором участника: THEN IF идентификатор источника совпадает с тем, что содержится в фрагменте RTCP SDES, содержащем элемент CNAME, который отличается от CNAME из рекорда таблицы: THEN (опционно) Случилось столкновение посторонних идентификаторов. ELSE (опционно) Случилось зацикливание. ABORT Прервать обработку информационного или управляющего пакета. Столкновение для идентификатора участника или зацикливание его пакетов IF транспортный адрес найден в списке конфликтных адресов: THEN IF идентификатор источника не найден во фрагменте RTCP SDES, содержащем CNAME, или если CNAME принадлежит участнику: THEN (опционно) случилось зацикливание собственного трафика. Записать текущее время в соответствующую запись таблицы конфликтных адресов. ABORT (прервать) обработку информационного или управляющего пакета. Зафиксировать факт столкновения. Внести новую запись в таблицу конфликтных адресов и зафиксировать время записи. Послать пакет RTCP BYE с идентификатором SSRC. Выбрать новый идентификатор. Внести новую запись в таблицу идентификаторов источников со старым SSRC, транспортным адресом источника обработанного пакета. CONTINUE Продолжить обычную процедуру обработки.
В этом алгоритме все пакеты от вновь конфликтующих источников будут игнорироваться, а пакеты от исходного источника будут приниматься. Если в течение достаточно протяженного периода времени пакеты от исходного источника не приходят, соответствующая запись в таблице будет аннулирована.
Когда из-за столкновения выбран новый SSRC-идентификатор, кандидат-идентификатор должен быть сверен с содержимым таблицы идентификаторов. Если такой код там уже имеется, должен быть выбран другой кандидат и процедура сверки повторена.
Зацикливание информационных мультикастинг-пакетов может вызвать сильную перегрузку сети. Все смесители и трансляторы должны реализовывать алгоритм детектирования зацикливания с тем, чтобы немедленно прервать этот опасный процесс. Это должно уменьшить лишний трафик. Однако, в крайних случаях, где смеситель или транслятор не прерывают зацикливание, может быть необходимо для оконечных систем прервать передачу.
Когда необходимо шифрование RTP или
Алгоритмом шифрования по умолчанию является DES (Data Encryption Standard), работающий в режиме CBC (Cipher Block Chaining), как это описано в RFC-1423 [10.9], за исключением того, что используется заполнение, кратное 8 октетам. Инициализационный вектор равен нулю, так как для RTP-заголовка используются случайные числа. Более подробно о векторах инициализации можно прочесть в [10.10]. Приложения, которые применяют шифрование, должны поддерживать алгоритм DES в режиме CBC. Этот метод выбран потому, что он показал на практике свою эффективность при работе с аудио- и видеоприложениями в Интернет. Возможно применение и других криптографических средств.
В качестве альтернативы шифрованию на уровне RTP можно определить дополнительные типы поля данных для шифрованных полей данных в профайлах. Этот метод позволяет шифровать только данные, в то время как заголовки остаются незашифрованными. Это может оказаться полезным для реализации шифрования и дешифрования.
Для обеспечения демультиплексирования RTP полагается на нижележащий протокольный уровень. Для UDP и сходных с ним протоколов RTP использует четные номера портов, а соответствующие
Информационные RTP-пакеты не имеют поля длины или каких-либо других средств ограничения размеров пакета, по этой причине RTP полагается на нижележащий протокол при задании размера поля данных. Максимальная длина RTP-пакетов ограничена размером используемых транспортных пакетов (например, UDP).
Если RTP-пакеты переносятся посредством протокола, который поддерживает поточный метод передачи, должен быть определен механизм вложения. Механизм вложения должен быть детализован и в случае, когда транспортный протокол использует в поле данных заполнители.
Механизм вложения может быть определен в профайле даже в случае, когда для транспортировки RTP применяется не поточный протокол, — это позволяет укладывать несколько RTP-пакетов в одну дейтограмму транспортного протокола (например, UDP). Передача нескольких RTP-пакетов в одном транспортном уменьшает издержки, связанные с заголовком, и может упростить синхронизацию различных потоков.
Константы, определяющие тип данных (PT) RTP-пакета, задаются профайлом, а не самим протоколом. Однако значение октета RTP-заголовка, который содержит бит(ы) маркера, не должно ни при каких обстоятельствах равняться 200 и 201 (десятичные), чтобы отличить RTP-пакеты от
Использование протокола RTP в различных приложениях может предъявлять различные требования. Адаптация протокола к этим требованиям осуществляется путем выбора определенных параметров, применения различных расширений (см. рис. 10.5) или путем вариации формата на основе профайлов. Типовое приложение использует только один профайл.
В рамках RTP-стандарта определены следующие элементы поля данных (этот список не следует рассматривать, как окончательный).
Заголовок поля данных RTP. Октет RTP заголовка, содержащий маркер типа поля данных, может быть переопределен с помощью профайла (например, можно изменить число маркерных битов).
Типы поля данных. Профайл обычно определяет набор форматов поля данных (например, типов кодирования исходных данных) и соответствие между этими форматами и кодами типа поля данных. Для каждого описанного типа поля данных должна быть определена частота временных меток.
Дополнения к заголовку RTP. К стандартному RTP-заголовку могут быть добавлены новые поля, расширяющие функциональность приложения.
Расширения заголовка RTP. Структура содержимого первых 16 бит расширения RTP-заголовка должна быть определена профайлом (см. рис. 10.5).
Безопасность. Профайл может специфицировать, какие услуги и алгоритмы безопасности должно обеспечить приложение.
Установка соответствия между строкой и ключом. Профайл может специфицировать, какому ключу шифрования соответствует введенный пользователем пароль.
Нижележащий протокол. Определяется нижележащий транспортный протокол, который служит для пересылки RTP-пакетов.
Транспортное соответствие. Соответствие RTP и
Инкапсуляция. Инкапсуляция RTP-пакетов может быть определена для того, чтобы позволить транспортировку нескольких RTP-пакетов в одной дейтограмме нижележащего протокола.
Не предполагается, что для каждого приложения требуется свой профайл. В пределах одного класса приложений целесообразно использовать расширения одного и того же профайла. Простое расширение, такое, как введение дополнительного типа поля данных или нового типа
Алгоритмы работы отправителя и получателя RTP-пакетов определены в RFC-3550 на примере кодов, написанных на языке СИ.
Чтобы посчитать частоту потерь пакетов, нужно знать ожидаемое и реально полученное число пакетов для каждого из источников. Число полученных пакетов определяется простым их подсчетом с учетом возможного дублирования и запаздывания. Ожидаемое число пакетов может быть подсчитано получателем как разность между наибольшим порядковым номером пакета ( s->max_seq ) и номером первого пакета в последовательности ( S->base_seq ). При этом нужно учитывать, что номера имеют 16 бит и по этой причине могут переполниться (число переполнений хранится в переменной s->cycles ).
extended_max = s>cycles + s>max_seq; expected = extended_max s>base_seq + 1;
Число потерянных пакетов определяется как разность между ожидаемым и реально полученным числом пакетов:
lost = expected s>received;
Доля потерянных пакетов за отчетный период (с момента посылки предыдущего SR или RR пакета) вычисляется из разности ожидаемого и реально полученного числа пакетов за отчетный период, где expected_prior и received_prior представляют собой значения, записанные в момент подготовки предыдущего отчета:
expected_interval = expected s>expected_prior; s>expected_prior = expected; received_interval = s>received s>received_prior; s>received_prior = s>received; lost_interval = expected_interval received_interval; if (expected_interval == 0 || lost_interval <= 0) fraction = 0; else fraction = (lost_interval << 8) / expected_interval;
Результирующее значение доли потерянных пакетов равно 8-битовому числу с
Управляющий протокол
Функции 1-3 являются обязательными, когда RTP работает в среде с IP мультикастингом, и рекомендательными для всех остальных сред. Разработчикам приложений RTP рекомендуется избегать механизмов, которые могут работать только в уникастном режиме.
Формат пакетов
Стандарт определяет несколько типов
SR: Отчет отправителя. Для статистики приема и передачи участников, которые являются активными отправителями
RR: Отчет получателя. Для получения статистики от участников, которые не являются активными отправителями
SDES: Элементы описания источника, включая CNAME
BYE: Отмечает прекращение участия в группе
APP: Специфические функции приложения
Каждый
Каждый индивидуальный
SDES CNAME.Таким образом, все
Префикс шифрования. Если составной пакет должен быть зашифрован, он снабжается 32-битным случайным числом-префиксом, которое копируется для каждого передаваемого составного пакета.
SR или RR. Первый
Дополнительные RR. Если число источников, для которых приводится статистика приема, превышает 31, в первый пакет помещается информация по части источников, остальная часть размещается в следующих RR-пакетах.
SDES. SDES-пакет, содержащий CNAME, должен быть включен в каждый составной
Bye или APP. Другие типы
Для трансляторов и смесителей рекомендуется объединять
Приложение может игнорировать
(рис 10.7) Пример составного пакета RTCPПротокол RTP построен так, чтобы позволять приложению изменять число участников от единиц до тысяч. Например, при аудиоконференциях информационный поток всегда ограничен (сколько бы ни было участников, все они одновременно говорить не могут, так как не смогут ничего понять). Однако трафик управления таким свойством не обладает. Если доклады о приеме от каждого участника поступают с постоянной частотой, трафик управления будет расти пропорционально числу участников. Следовательно, нужно принимать меры по ограничению трафика.
Для каждой сессии предполагается, что предельно допустимый информационный трафик сессии делится между участниками. Эта полоса пропускания может быть зарезервирована. Полоса не зависит от метода кодирования, но на выбор этого метода может оказать влияние имеющаяся в распоряжении полоса пропускания используемого канала. Определенные ограничения на полосу сессии может накладывать конкретное приложение. Вычисление полосы пропускания, необходимой для управления, требует учета издержек транспортных протоколов (например, UDP и IP).
Трафик управления должен быть ограничен малой долей полной полосы пропускания сессии: настолько малой, чтобы не нанести ущерба основной функции транспортного протокола — переносу информации. Предлагается, чтобы доля трафика сессии, выделенная на
Алгоритм вычисления периода рассылки составных
Этот алгоритм может использоваться для сессий, в которых всем участникам позволено посылать данные. В этом случае полоса пропускания сессии зависит от произведения трафика индивидуального отправителя на число участников сессии, а полоса пропускания
Вычисление периода рассылки
Участник может пометить другой узел как пассивный или удалить его из списка, если от него не получено RTP или
Если зарегистрированный узел помечен как пассивный, он будет оставаться в списках достаточно долго и учитываться при вычислении распределения полосы пропускания для
Данная спецификация определяет несколько элементов описания источника (SDES). Сюда входит CNAME (каноническое имя), Name (персональное имя) и Email (электронный адрес). Спецификация предлагает также средства для определения типа
Когда несколько приложений работают одновременно, например, в случае мультимедиа-конференции, допускается, чтобы дополнительная информация пересылалась только в рамках одной RTP-сессии. Остальные сессии будут использовать только элемент CNAME.
RTP-получатели обеспечивают обратную связь контроля качества, используя
Как SR, так и RR-формы включают в себя нуль или более блоков отчетов о приеме, по одному для каждого источника синхронизации, от которого получатель принял информационные RTP-пакеты с момента последнего отчета. Отчеты не направляются для источников, перечисленных в списке CSRC. Каждый блок отчета о приеме содержит статистику данных, полученных от конкретного источника. Так как в SR или RR-пакет можно поместить максимум 31 блок отчетов, дополнительные RR-пакеты укладываются после исходного SR или RR-пакета.
Пакет отчета отправителя состоит из трех секций (см. рис. 10.8), за которыми может следовать четвертая, определяемая, если необходимо, профайлом. Первая секция — заголовок, имеет 8 октетов. Эта секция содержит следующие поля.
Версия (v): 2 бита
Идентифицирует версию протокола RTP, которая совпадает с версией v=2.
Заполнитель (P): 1 бит
Если бит заполнителя P=1, то этот пакет
Число отчетов о приеме (RC): 5 бит
Число блоков отчетов о приеме, содержащихся в этом пакете. Допустимо значение нуль.
Тип пакета(PT): 8 бит
Содержит константу 200 для пакетов
Длина: 16 бит
(рис 10.8) Формат RTCP пакета сообщения отправителяДлина
SSRC: 32 бит
Идентификатор источника синхронизации для отправителя SR-пакета.
Вторая секция информации из 20 октетов присутствует в каждом пакете отправителя. Поля этой секции имеют следующие значения.
Временная метка NTP: 64 бита
Указывает абсолютное время, когда данный доклад был послан; оно может быть использовано в комбинации с временными метками, присланными в докладах о приеме другими получателями, для измерения RTT до этих получателей.
Временная метка RTP: 32 бита
Соответствует тому же времени, что и временная метка NTP, но измеряется в тех же единицах и с тем же произвольным смещением, что и временные метки информационных пакетов RTP. Это соответствие может использоваться для внутри- и межсредовой синхронизации для источников, чьи временные метки NTP синхронизованы, и может применяться получателями, не зависящими от среды для оценки номинальной задающей частоты RTP. Заметьте, что в большинстве случаев эти временные метки не будут равны временным меткам RTP в любых последовательных информационных пакетах.
Число пакетов отправителя: 32 бита
Полное число информационных RTP-пакетов, переданных отправителем от начала передачи до момента генерации SR-пакета. Число сбрасывается в нуль, если отправитель изменяет свой SSRC-идентификатор.
Число октетов отправителя: 32 бита
Полное число октетов поля данных (исключая заголовки и заполнители), переданных в информационных RTP-пакетах отправителем, начиная с начала передачи до момента генерации SR-пакета. Это число сбрасывается в нуль, когда отправитель меняет свой SSRC-идентификатор. Оно может быть использовано для оценки среднего потока данных.
Третья секция состоит из нуля или более блоков отчета о приеме в зависимости от числа источников, откуда приняты пакеты с момента последнего отчета. Каждый блок отчета о приеме несет в себе статистику получения RTP-пакетов, поступающих от одного из источников синхронизации. Получатель не сохраняет статистику, когда источник изменяет свой SSRC-идентификатор.
SSRC_n (идентификатор источника): 32 бита
SSRC -идентификатор источника, к которому относится информация, содержащаяся в блоке отчета о получении.
Доля потерянных (пакетов): 8 бит
Часть информационных RTP-пакетов от источника SSRC_n, потерянная с момента посылки предыдущего SR или RR-пакетов, представленная в виде числа с
Суммарное число потерянных пакетов: 24 бита
Полное число информационных RTP-пакетов от источника SSRC_n, которые были потеряны с момента начала передачи. Это число определяется как разность между ожидаемым и полученным числами пакетов, где число полученных включает в себя и дубликаты. Таким образом, пакеты, пришедшие с опозданием, не считаются потерянными, а число потерянных пакетов может оказаться отрицательным, если получены дубликаты пакетов. Число ожидаемых пакетов определяется как разность между номером последнего полученного пакета и номером первого пакета.
Наибольший номер из числа полученных пакетов: 32 бита
Младшие 16 бит содержит наибольший порядковый номер полученного от источника SSRC_n информационного RTP-пакета. Старшие 16 бит несут в себе число циклов нумерации (переполнения счетчика номеров пакетов). Заметим, что различные получатели в рамках одной и той же сессии генерируют разные коды циклов нумерации (расширений), если они начали свою работу в разное время.
Разброс времени доставки: 32 бита
Оценка статистической вариации периода прихода RTP-пакетов, измеряемого с помощью временных меток и характеризуемого целым числом. Разброс периода прихода пакетов j определяется как усредненное отклонение разности D расстояния между пакетами со стороны получателя по отношению к той же величине для стороны отправителя. Эта величина характеризует относительный разброс времени транспортировки пакетов.
Если si равно временной метке i -го пакета RTP, а ri — время прибытия в единицах временной метки пакета i, тогда для двух пакетов i и j D может быть выражено как
Di,j =(rjri)(sjsi)=(rjsj)(risi)
Разброс времени доставки вычисляется непрерывно для каждого пребывающего от SSRC_n пакета i, используя разность D для данного пакета и предыдущего пакета i-1 согласно формуле
j=j+(|Di-1,i|j)/16
Вычисление разброса времени доставки позволяет мониторам, не зависимым от профайла, осуществлять интерпретацию докладов, приходящих от различных приложений. Этот алгоритм является оптимальным первым приближением, а масштабный параметр 1/16 обеспечивает приемлемое уменьшение влияние шума и разумную скорость сходимости [4].
Последняя временная метка (LSR = last SR): 32 бита
Средние 32 бита из 64 во временной метке NTP, полученной как часть последнего отчета SSRC_n. Если SR пока не получено, в поле заносится нуль.
Задержка с момента последнего SR (DLSR = delay of last SR): 32 бита
Задержка, выраженная в единицах 1/65536 секунды, между моментом получения последнего SR-пакета от источника SSRC_n и временем посылки блока отчета о приеме. Если ни одного пакета SR от SSRC_n пока не получено, в поле DLSR заносится нуль.
Пусть SSRC_r обозначает получателя, отправляющего отчет о приеме. Источник SSRC_n может вычислить RTT для SSRC_r путем записи времени a, когда этот блок доклада о приеме был получен. Он вычисляет полное время RTT A-
Это может быть использовано в качестве меры расстояния до кластера получателей, хотя некоторые связи имеют весьма асимметричный характер задержек.
rr: RTCO-пакет отчета о приеме (RFC-1889)

(рис 10.10) Пример вычисления RTT(рис 10.9) Формат пакета отчета о приеме (RR)Формат пакета отчета о приеме (RR) аналогичен формату SR пакета, за исключением того, что поле типа содержит код 201 и опущены первые пять слов информации об отправителе (это NTP/RTP временные метки, а также число пакетов и октетов отправителя). Остальные поля имеют то же самое значение, как и для пакета SR.
Когда нет информации об отправке или приеме, в начало составного RC = 0 ).
Профайл должен определять специфические для приложения расширения в докладах получателей и отправителей, если имеется дополнительная информация о получателе или отправителе, которая должна регулярно сообщаться. Этот метод предпочтительнее, чем описание нового типа
Если необходима дополнительная информация, она должна быть включена в первую очередь в расширение для отчета отправителя, но не будет присутствовать в отчетах о приеме. Если должна быть подключена информация о получателях, эти данные могут структуризоваться в виде массива блоков дополнительно к существующему массиву блоков-отчетов, т.е. число блоков будет задано полем RC.
Ожидается, что качество обратной связи важно не только для отправителя и получателей, но и для независимых мониторов. Отправитель может модифицировать свою передачу на основе обратной связи, получатели могут определить, являются ли проблемы локальными, региональными или глобальными. Менеджер сети может использовать независимые мониторы, которые получают только
На основе информации отправителя независимый монитор может вычислить усредненное значение потока данных, не получая этих данных. Если можно предположить независимость вероятности потери пакета от его размера, тогда число полученных пакетов, умноженное на средний размер поля данных, может дать оценку пропускной способности получателя.
Для
(рис 10.11) Зашифрованный и незашифрованный RTCP-пакеты (#ssrc)SDES:
(рис 10.12) Формат пакета SDESПакет SDES состоит из заголовка и нескольких фрагментов, каждый из которых содержит элементы описания источника, соответствующего данному фрагменту (число фрагментов может быть равно нулю).
Поля версия (V), заполнитель (P) и длина имеют то же назначение, что и в случае SR-пакетов.
Тип пакета (PT): 8 бит
Содержит константу 202, которая идентифицирует данный пакет как
Число источников (SC): 5 бит
Число фрагментов SSRC/CSRC, содержащихся в данном SDES-пакете. Значение нуль допустимо, но бесполезно.
Каждый фрагмент состоит из идентификатора SSRC/CSRC, за которым следует список элементов описания источника SSRC/CSRC (число элементов может равняться нулю). Каждый фрагмент начинается на 32-битовой границе. Каждый элемент состоит из 8-битового поля типа, 8-битового поля числа октетов, характеризующего длину текста, исключая эти 2 октета заголовка, и собственно текста. Заметьте, что текст не может содержать более 255 октетов, но это вполне согласуется с требованиями ограничений на полосу, выделяемую для
Текст кодируется согласно требованиям UTF-2, определенным в стандарте 10646 [10.5],[10.6], annex F ISO. Эта кодировка известна также под названием UTF-8 или UTF-FSS. Она описана в документе "File System Safe
Описания элементов плотно прилегают друг к другу, т.е., их описания не выравниваются на 32-битовые границы путем индивидуального заполнения. Текст не завершается нулем, так как мультиоктетное кодирование может включать в себя нули. Список элементов в каждом фрагменте завершается одним или несколькими нулевыми октетами, первый из которых интерпретируется как тип элемента нуль, завершающий список, а последующие служат для заполнения до 32-битовой границы. Фрагменты, содержащие только нулевые элементы (4 нулевых октета), допускаются, но бесполезны.
Оконечные системы посылают один пакет SDES, содержащий их собственный идентификатор источника (то же, что и SSRC в фиксированных RTP-заголовках). Смеситель посылает один пакет SDES, содержащий фрагмент для каждого источника, от которого поступает SDES-информация, или несколько SDES-пакетов описанного выше формата в случае, когда число таких источников больше 31.
Из числа SDES-элементов только СNAME является обязательным. Некоторые элементы, описанные ниже, могут оказаться полезными только для определенных профайлов, но типы элементов выделяются из общего кодового пространства, чтобы обеспечить совместную работу различных приложений. Дополнительные элементы могут быть определены в профайле путем регистрации их кодов IANA.
CNAME: Канонический идентификатор конечной системы (рис. 10.13).
(рис 10.13) Формат CNAMEИдентификатор CNAME имеет следующие свойства.
CNAME должен обеспечить связь между идентификатором SSRC и источником, которая должна оставаться неизменной.CNAME должно быть удобным средством идентификации источника как для программы, так и для человека.Следовательно, CNAME должно по возможности получаться алгоритмически, а не вводиться вручную. Чтобы удовлетворить этому требованию, следует использовать описанный ниже формат, если другой синтаксис или семантика не заданы. Элемент CNAME должен иметь формат user@host, или host, если имя пользователя не доступно, как это бывает в однопользовательских системах. Для обоих форматов host является либо полным именем домена ЭВМ, откуда поступают данные в реальном масштабе времени, форматированные согласно требованиям документов RFC-1034 [7], RFC-1035 [8] и раздела 2.1 RFC-1123 [10.9]; либо стандартным ASCII-представлением цифрового, сетевого адреса интерфейса ЭВМ, используемого для RTP-обмена: например, стандартное ASCII-представление IP-адреса (версия 4) в точечно-цифровом виде. Стандартное полное имя домена более удобно для человека и исключает необходимость посылать в дополнение элемент Name, но в некоторых обстоятельствах его может быть трудно или невозможно пол
учить. Примерами могут служить dwarf@sleepy.
Имя пользователя должно иметь форму, которая может быть использована в запросах Finger или Talk, — т.е., это скорее имя, вводимое при аутентификации, чем истинное имя пользователя. Имя ЭВМ не обязательно идентично электронному почтовому адресу участника.
Этот синтаксис не обеспечит уникальности имени в тех случаях, когда приложение позволяет пользователю сформировать несколько источников на своей ЭВМ. Такое приложение должно полагаться на SSRC для дополнительной идентификации источника или на профайл, для которого приложение должно специфицировать синтаксис идентификаторов CNAME.
Если каждое приложение создает свои CNAME независимо, в результате можно получить дублированные имена. Если необходимо осуществить связь между сессиями, работающими в разных средах, должны использоваться специальные средства, которые, с одной стороны, обеспечат уникальность имен, а с другой — припишут идентичные имена источникам, размещенным в одной ЭВМ, но работающим с разными средами.
Разработчики приложений должны учитывать возможность того, что использование сетевого адреса, например, для Net-10 (описано в документе RFC-1597 [10.10]) может привести к появлению имен-дубликатов. Дубликаты имен могут возникать, когда ЭВМ с частными адресами, не имеющие выхода в Интернет, переадресуют свои RTP-пакеты в Интернет через транслятор RTP-уровня. (См. также RFC-1627 [10.11].) Чтобы разрешать такие конфликты, приложение должно иметь средства для выработки и присвоения уникальных имен CNAME.
Name: Имя пользователя (рис. 10.14).
(рис 10.14) Формат элемента NameЭто настоящее имя, используемое для описания источника, например, "Иван Дурак, russia.com". Оно может быть сформировано пользователем в произвольной форме. Для приложений типа конференций эта форма имени может быть наиболее желательной при отображении в списках участников и, следовательно, может посылаться более часто, чем любые другие элементы помимо CNAME. Такой приоритет может быть установлен профайлом. Значение NAME предполагается неизменным, по крайней мере, в пределах сессии. В то же время не требуется, чтобы оно было уникальным для группы участников сессии.
Email: Адрес электронной почты (рис. 10.15).
(рис 10.15) Формат элемента EmailАдрес электронной почты должен иметь формат, согласующийся с требованиями документа RFC-822, например, ivan.durak@itep.ru. Значение элемента Email предполагается неизменным в пределах сессии.
phone: Телефонный номер
(рис 10.16) Формат элемента phoneТелефонный номер должен иметь формат с символом плюс, замещающим международный код. Например, +7 095 129 9442 для номера в России.
LOC: Географический адрес пользователя
(рис 10.17) Формат элемента LOCРазличная детализация этого элемента сильно зависит от приложения. Для использования во время конференций строки типа "Zuzino, Moscow" может быть достаточно, в то время как для активной системы поиска сотрудников приемлемой может стать строка "room 205, itep bl 143". Значение LOC предполагается неизменным на время сессии. Исключение могут составлять мобильные ЭВМ.
TOOL: Имя приложения или программного средства
(рис 10.18) Формат элемента TOOLСтрока, сообщающая имя и, возможно, версию приложения, формирующего поток, например, "VC 2.1". Эта информация может быть полезной для отладочных целей и сходна с SMTP-заголовками. Предполагается, что значение TOOL остается постоянным в течение сессии.
Note: Уведомление/статус
(рис 10.19) Формат элемента NoteДля этого элемента предлагается следующая семантика (она может быть определена профайлом). Элемент NOTE предназначен для сообщений, характеризующих текущее состояние источника, например, "on the phone, can't talk". Или, во время семинара этот элемент может быть использован для передачи темы обсуждения. Он может служить только для передачи необычной информации и не должен включаться в систематическую рассылку, так как замедлит скорость передачи отчетов. В частности, он не должен включаться в конфигурационный файл пользователя.
Так как может быть важно отобразить элемент Note (в случае, когда он активен), скорость, с которой передаются другие элементы (кроме CNAME), может быть уменьшена ради того, чтобы передать элемент Note. Когда сообщение становится не актуальным, элемент NOTE передается еще несколько раз с той же частотой, но с длиной строки, равной нулю. Однако получатели должны рассматривать элемент Note как потерявший актуальность, если они не получают его, например, на протяжении 20-30
PRIV: Элемент частного расширения SDES
(рис 10.20) Формат элемента расширения PRIVЭтот элемент используется, чтобы описать экспериментальные или специфические для приложения расширения SDES. Элемент содержит префикс, включающий в себя субполя длины и строки префикса, за которыми следует строка значения, занимающая остальное пространство элемента и несущая необходимую информацию. Поле длины префикса занимает 8 бит. Строка префикса представляет собой имя, определенное человеком, который сформировал элемент PRIV. Это имя должно быть уникальным, и никакой другой элемент PRIV не может иметь такое же. Разработчик приложения может выбрать имя приложения и, если необходимо, субтип дополнения.
Заметьте, что префикс занимает некоторое количество из 255 октетов элемента, поэтому желательно, чтобы он был короче.
Префиксы SDES PRIV не нужно регистрировать в IANA. Если некоторая форма элемента PRIV окажется достаточно универсальной, она должна быть приписана некоторому регулярному типу элемента SDES, зарегистрированному IANA, так что необходимость в префиксе отпадет. Это упростит использование и увеличит эффективность передачи.
Bye: Пакет завершения сессии RTCP
(рис 10.21) Формат пакета ByeПакет Bye указывает на то, что один или более источников покинули сессию.
Поля версия (V), заполнитель (P) и длина имеют те же назначения, что и в случае SR-пакетов
Тип пакета (PT): 8 бит
Содержит код 203, который указывает на то, что это
Число источников (SC): 5 бит
Число фрагментов SSRC/CSRC, содержащихся в данном пакете. Значение нуль допустимо, но бесполезно.
Если пакет bye получен смесителем, он переадресует этот пакет с идентификаторами SSRC/CSRC без изменений. Если сам смеситель отключается, он должен послать пакет Bye, перечислив все источники, вносившие вклад в поток, с которым он работал, а также свой идентификатор SSRC. Опционно пакет Bye может содержать 8-битовое число октетов, за которым следует текст соответствующей длины, объясняющий причину отключения, например, "camera
APP: RTCPпакет, определенный приложением
(рис 10.22) Формат пакета, задаваемого приложениемПакет APP предназначен для экспериментального использования при разработке новых приложений или новых функций. Здесь не требуется регистрации типа пакета. APP-пакеты с неузнанными именами должны игнорироваться. После тестирования, когда предполагается широкое использование, рекомендуется новый APP-пакет переопределить без субтипа и поля имени, затем его следует зарегистрировать в IANA (Internet Assigned Numbers Authority) как новый тип
Поля версия (V), заполнитель (P) и длина имеют те же назначения, что и в случае SR-пакетов.
Субтип: 5 бит
Может использоваться в качестве субтипа, допуская описание набора APP-пакетов с уникальным именем, или для любых данных, специфических для конкретного приложения.
Тип пакета (PT): 8 бит
Содержит код 204, который указывает на то, что это
Имя: 4 октета
Имя, выбираемое разработчиком, который определил набор APP-пакетов. Это имя должно быть уникальным и не совпадать ни с одним другим именем другого APP-пакета данного приложения. Разработчик приложения может использовать для этой цели имя приложения, при этом новые типы пакетов приложения будут отличаться друг от друга кодом субтипа. Имя интерпретируется как последовательность четырех ASCII-символов, где строчные и прописные буквы не являются тождественными.
Поле информация, зависящая от приложения, имеет переменную длину.
Информация, зависящая от приложения, используется в APP-пакетах опционно. Она интерпретируется приложением, а не самим RTP. Размер поля должен быть кратным 32 бит.
Кроме переадресации информационных пакетов (иногда с некоторой модификацией) трансляторы и мультиплексоры должны также обрабатывать
Транслятор, который не модифицирует информационные пакеты, например, такой, который осуществляет связь между мультикастными и уникастными адресами, может просто переадресовывать
Информация отправителя SR. Транслятор не генерирует своей собственной информации отправителя, а переадресует SR-пакеты, полученные из одной области и адресованные в другие области. SSRC остается неизменным, но, если необходима трансляция, информация отправителя должна быть модифицирована. Если транслятор изменяет кодировку данных, он должен изменить поле число октетов отправителя. Если он объединяет несколько информационных пакетов в один, то нужно изменить поле число пакетов отправителя. Если он изменяет частоту временных меток, нужно модифицировать поле временная метка RTP в SR-пакете.
Блоки отчетов о приеме SR/RR. Транслятор переадресует доклады о приеме, полученные из одной области сети, в другие. Заметим, что эти сообщения движутся в направлении, противоположном данным. SSRC при этом остается неизменным. Если транслятор объединяет несколько информационных пакетов в один выходной пакет и, следовательно, изменяет номер по порядку, он должен позаботиться о модификации полей потерянных пакетов и наибольший номер из числа полученных пакетов.
Транслятор не нуждается в своем собственном SSRC-идентификаторе, но может и завести такой идентификатор, чтобы посылать отчеты о том, что получено. Такие отчеты будут посылаться во все области сети, подключенные к транслятору.
SDES. Трансляторы осуществляют переадресацию без изменения SDES-информации, которая получена из сетевых областей, участвующих в сессии. Но они могут, например, решить отфильтровывать некоторую информацию, если этого требуют ограничения пропускной способности. Транслятор, который генерирует свои собственные RR-пакеты, должен посылать SDES CNAME-информацию о самом себе в область сети, куда он шлет эти RR-пакеты.
BYE. Трансляторы переадресуют пакеты BYE без изменений. Трансляторы, имеющие свой собственный SSRC, должны генерировать пакеты BYE с этим SSRC-идентификатором, если они намереваются прекратить свою работу по переадресации.
APP. Трансляторы переадресовывают APP-пакеты без каких-либо изменений.
Обработка
Так как смеситель генерирует свой собственный информационный поток, он не пропускает через себя SR или RR-пакеты и вынужден формировать новые пакеты для отправки в обоих направлениях.
Информация отправителя SR. Смеситель не пропускает через себя данные об отправителе от источников, которые он объединяет, так как характеристики потока при смешении кардинально меняются. Как источник синхронизации смеситель генерирует свои собственные SR-пакеты с информацией отправителя и посылает их в том же направлении, что и смешанный поток.
Блоки отчетов о приеме SR/RR. Смеситель генерирует свои собственные отчеты о приеме для каждой из сетевых областей и посылает их туда. Он не посылает эти отчеты о приеме другим областям и не переадресует отчеты из одной области в другую.
SDES. Смесители обычно переадресуют без изменений SDES-информацию, которую они получают из сетевых областей зоны обслуживания, но могут в случае ограничения полосы пропускания отфильтровывать любую SDES-информацию помимо CNAME. CNAME должны доставляться, чтобы обеспечить работу по обслуживанию столкновений идентификаторов SSRC. Идентификатор в списке CSRC, сгенерированный смесителем, может вызвать столкновение с SSRC-идентификатором, сформированным оконечной системой. Смеситель должен послать SDES CNAME информацию о самом себе той сетевой области, куда он посылает SR или RR пакеты.
Так как смесители не переадресуют SR- или RR-пакеты, они обычно извлекают SDES-пакеты из составных
Смеситель, который не вводит идентификаторы CSRC, может также воздерживаться от пересылки SDES CNAME. В этом случае пространства идентификаторов SSRC для обеих сетевых областей оказываются независимыми.
BYE. Смесители должны переадресовывать пакеты BYE. Они должны генерировать пакеты BYE со своим собственным идентификатором SSRC, если они намериваются прервать пересылку пакетов.
APP. Обработка APP-пакетов смесителями зависит от вида приложения.
| Сокращенное название | Имя | значение |
|---|---|---|
| SR | sender report — сообщение отправителя | 200 |
| RR | receiver report — сообщение получателя | 201 |
| SDES | source description — описание источника | 202 |
| BYE | goodbye — завершение | 203 |
| APP | application-defined — определен приложением | 204 |
Эти значения типов были выбраны в диапазоне 200-204 для улучшенного контроля корректности заголовков
Другие константы определены IANA. Экспериментаторам предлагается зарегистрировать числа, которые им нужны, а затем аннулировать регистрацию, если необходимость в них отпадет.
Типы пакетов
Период отчетов
Расширения SR/RR. Секция расширения может быть определена для
Пакеты
| Сокращенное название | Имя | значение |
|---|---|---|
| END | Конец списка SDES | 0 |
| CNAME | Каноническое имя | 1 |
| NAME | Имя пользователя | 2 |
| Электронный адрес пользователя | 3 | |
| PHONE | Телефонный номер пользователя | 4 |
| LOC | Географическое положение пользователя | 5 |
| TOOL | Имя приложения или программного средства | 6 |
| NOTE | Информация об отправителе | 7 |
| PRIV | Частные расширения | 8 |
Протокол RSVP (L. Zhang, R. Braden, Ed., S. Berson, S. Herzog, S. Jamin "Resource ReSerVation Protocol", RFC-2205, 2210, 274547, 3182, смотри также http://book.itep.ru/ 4\44\rsv_4496.htm) используется ЭВМ для того, чтобы запросить для приложения определенный уровень качества сетевых услуг QoS (Quality of Service, например, определенный уровень полосы пропускания). RSVP применяется также маршрутизаторами для доставки QoS-запросов всем узлам вдоль пути информационного потока, а также для установки и поддержания необходимого уровня услуг (например, для приложений IP-телефонии). Функция этого протокола крайне важна и многообразна, и именно поэтому он — один из самых сложных протоколов.
В 1994 году группа IETF сформировала рабочую группу по интегрированным услугам (
RSVP запрашивает ресурсы только для одного из направлений трафика и только по указанию получателя. RSVP работает поверх IPv4 или IPv6. Протокол относится к числу управляющих, а не транспортных.
Протокол RSVP предназначен для работы с существующими и будущими маршрутными протоколами, управляющими как обычными, так и мультикастными потоками. В последнем случае ЭВМ сначала посылает IGMP-запрос, чтобы подключиться к мультикастинг-группе, а затем уже RSVP-сообщение для резервирования ресурсов по маршруту доставки.
Механизм обеспечения QoS включает в себя классификацию пакетов, административный контроль и диспетчеризацию. Классификатор пакетов определяет QoS класс (а иногда и маршрут движения) для каждого пакета. В процессе реализации резервирования RSVP-запрос проходит два местных
Структура и содержимое параметров QoS документировано в спецификации RFC-2210. Так как число участников группы, а также топология связей меняется со временем, структура RSVP предполагает адаптацию ЭВМ и маршрутизаторов к этим изменениям. Для этой цели RSVP периодически посылает сообщения для поддержания необходимого состояния вдоль всего маршрута обмена. При отсутствии этих сообщений происходит тайм-аут, и резервирование аннулируется. Обобщая, можно сказать, что RSVP имеет следующие атрибуты:
Подобно приложениям маршрутизации и протоколам управления, программы RSVP исполняется в фоновом режиме. Схема работы процесса RSVP показана на рис. 10.23.
(рис 10.23) RSVP в ЭВМ и маршрутизатореRSVP определяет сессию как поток данных с определенным местом назначения и заданным транспортным протоколом. Каждая сессия является совершенно независимой.
Сессия RSVP описывается тремя параметрами: DestAddress, ProtocolId DstPort. DestAddress — IP-адрес места назначения информационных пакетов (уникаст или мультикаст). ProtocolId — идентификатор IP протокола. Опционный параметр DstPort — обобщенный порт места назначения, т.е. еще одна точка демультиплексирования на транспортном или прикладном уровне. DstPort может быть определено полем порта места назначения UDP/TCP.
Заметим, что, строго говоря, не обязательно включать в описание сессии DstPort, когда DestAddress является мультикастным, так как различные сессии могут иметь различные мультикаст-адреса. Однако, DstPort необходим, чтобы разрешить более одной уникаст-сессии для одной и той же ЭВМ-получателя.
Для уникастной передачи может быть один получатель, но много отправителей; RSVP может выполнить резервирование для передачи много_точек -> одна_точка.
Простой запрос резервирования RSVP состоит из flowspec (спецификация потока) и filter spec (спецификация фильтра); эта комбинация называется описателем потока. Спецификация flowspec определяет желательное значение QoS. Спецификация фильтра в сочетании со спецификацией сессии определяют тип набора пакетов.
Спецификация flowspec используется для задания параметров диспетчеров в узлах, через которые транспортируется поток, а спецификация фильтра — для определения параметров классификатора пакетов. Информационные пакеты, адресованные конкретной сессии, но не удовлетворяющие какой-либо спецификации фильтра, обрабатываются без гарантий обеспечения оговоренного QoS.
Спецификация flowspec в запросе резервирования включает в себя значение класса услуг и два набора параметров:
Rspec, который определяет желательное значение QoS, иTspec, который описывает информационный поток. По существу этот набор параметров дает возможность определить, распространяется ли данное резервирование на данный конкретный пакет.В Tspec могут входить: IP-адрес отправителя, адрес получателя, номера портов получателя и отправителя, поле TOS и код транспортного протокола. Чем больше параметров входит в Tspec, тем сложнее задача транзитного маршрутизатора, тем больше и задержка. В случае IPv6 задача существенно упрощается (если ограничиться классификацией по меткам и не анализировать номера портов).
Форматы и содержимое Tspec и Rspec определяются общими моделями обслуживания [RFC-2210] и обычно недоступны для RSVP. Конкретный формат спецификации фильтра зависит от того, используется IPv4 или IPv6. Например, спецификация фильтра может применяться для выделения некоторых составных частей информационного потока, осуществляя отбор с учетом
Так как номера портов UDP/TCP задействуются для классификации пакетов, каждый маршрутизатор должен уметь анализировать эти поля. Поэтому возможны три проблемы.
Сообщения RSVP, несущие запросы резервирования, исходят со стороны получателя и направляются отправителю информации. В каждом промежуточном узле запрос резервирования запускает две процедуры:
A. Резервирование канала
Процесс RSVP проходит стадии проверки допуска и политики. Если какой-либо тест не прошел, резервирование отвергается и посылается сообщение об ошибке. Если все тесты прошли успешно, узел устанавливает классификатор пакетов, чтобы отбирать пакеты, указанные в спецификации фильтра. Далее устанавливается контакт с соответствующим канальным уровнем для получения желательного QoS, заданного в flowspec.
Для простой выделенной линии желаемый QoS будет получен с помощью диспетчера пакетов в драйвере канального уровня. Если технология канального уровня поддерживает свои средства управления QoS, тогда RSVP должен согласовать с канальным уровнем получение требуемого QoS.
Б. Переадресация запроса назад
Запрос резервирования посылается от получателя отправителю (или отправителям) данных. Запрос резервирования, который переадресуется узлом дальше, может отличаться от того, который он получил по двум причинам. Механизм управления трафиком модифицирует flowspec от узла к узлу. Что более важно, запросы резервирования, поступающие от получателей мультикастинг-дерева, должны объединяться по мере продвижения процесса резервирования в направлении отправителя данных.
Когда получатель данных отправляет запрос резервирования, он может запросить также присылку сообщения, подтверждающего резервирование. Процесс резервирования распространяется от получателей к отправителям, от узла к узлу. В каждом узле требования резервирования объединяются и сопоставляются с имеющимися возможностями. Это продолжается до тех пор, пока запрос не достигнет отправителя или пока не возникнет конфликт перегрузки. В результате получатель данных, направивший запрос резервирования, получит сообщение об успехе или ошибке.
Базовая модель резервирования RSVP является однопроходной: получатель посылает запрос резервирования вдоль мультикастинг-дерева отправителю данных и каждый узел по пути воспринимает или отвергает этот запрос. RSVP поддерживает улучшенную версию однопроходного варианта алгоритма, известного под названием OPWA (One Pass With Advertising) [OPWA95]. С помощью OPWA управляющие пакеты RSVP посылаются вдоль маршрута для сбора данных, которые могут быть использованы для предсказания значения QoS маршрута в целом. Результаты доставляются протоколом RSVP в ЭВМ получателя. Эти данные могут позднее служить для динамической адаптации соответствующих запросов резервирования.
Запрос резервирования включает в себя набор опций, которые в совокупности называются стилем. Одна опция резервирования определяет способ резервирования различными отправителями в пределах одной сессии.
Другая опция резервирования контролирует выбор отправителей. В одних случаях каждому отправителю ставится в соответствие определенная спецификация фильтра, в других — таких спецификаций не требуется вовсе. В настоящее время определены следующие стили.
Стиль WF использует опции разделенного резервирования и произвольного выбора отправителя (wildcard). Таким образом, резервирование со стилем WF создает резервирование, которое делится между потоками всех отправителей.
Резервирование WF может рассматриваться как общая труба, чей размер равен наибольшему из ресурсных запросов от получателей и не зависит от числа отправителей.
Стиль резервирования WF передается в направлении отправителей и автоматически распространяется на новых отправителей при их появлении. Символически можно представить запрос резервирования стиля WF как:
WF( * {Q}),
где звездочка представляет произвольную подстановку при выборе отправителя, а Q — спецификация flowspec.
Стиль FF использует опции четкое (distinct) резервирование и явный выбор отправителя. Таким образом, простой запрос со стилем FF создает точно заданное резервирование для информационных пакетов от определенного отправителя, без совместного использования ресурса с другими отправителями в пределах одной и той же сессии. Символически простой запрос резервирования FF можно представить как:
FF(S{Q}),
где S — выбранный отправитель, а Q — соответствующая спецификация flowspec; эта пара параметров образует дескриптор потока. RSVP позволяет применение нескольких простых стилей резервирования FF одновременно, при этом формируется список дескрипторов потоков:
FF(S1{Q1}, S2{Q2}, ...)
Полное резервирование в канале для данной сессии FF характеризуется суммой Q1, Q2, ... для всех отправителей, куда посланы запросы.
Стиль SE использует опции долевое (shared) резервирование и явный (explicit) выбор отправителя. Таким образом, стиль резервирования SE формирует одно резервирование, которое совместно эксплуатруется несколькими отправителями. В отличие от стиля WF, SE позволяет получателю непосредственно специфицировать набор отправителей. Запрос резервирования SE, содержащий flowspec Q и список отправителей S1, S2, ... можно представить в символьной форме как:
SE((S1,S2,...){Q} )
Долевое резервирование, выполненное с применением стилей WF и SE, пригодно для мультикастных приложений, где несколько источников данных редко осуществляют передачу одновременно. Пакетная передача голоса может служить примером долевого резервирования, так как лишь ограниченное число людей говорят одновременно. Каждый получатель может направить запрос резервирования WF или SE на удвоенную полосу пропускания, необходимую одному отправителю, позволяя тем самым говорить обоим партнерам одновременно. С другой стороны, стиль FF, который осуществляет четкое резервирование для потоков отдельных отправителей, подходит для передачи видеосигналов.
Правила RSVP не позволяют объединять долевое и четкое резервирование, так как эти модели абсолютно несовместимы. Не допускается также объединение явного и произвольного (wildcard) выбора отправителей, так как это может вызвать предоставление незаказанных услуг получателю, который указал тип услуг явно. Таким образом, стили WF, SE и FF не совместимы.
Можно моделировать эффект WF резервирования, используя стиль SE. Когда приложение запрашивает WF, процесс RSVP получателя может использовать местный статус для выполнения эквивалентного резервирования SE, которое в явном виде перечисляет всех отправителей. Однако резервирование SE вынуждает классификатор пакетов в каждом узле в явном виде выбрать каждого отправителя из списка, в то время как WF позволяет классификатору пакетов осуществить произвольный выбор отправителя и порта с помощью wildcard. Когда список отправителей велик, стиль резервирования WF обеспечивает значительно меньшие издержки, чем SE.
На рис. 10.24. показан пример маршрутизатора с двумя входными интерфейсами IА и IБ, через которые проходят входные потоки, и двумя выходными интерфейсами IВ и IГ, через которые осуществляется переадресация входных потоков. Пусть существует три отправителя S1, S2 и S3, подключенные к интерфейсам IА и IБ, соответственно. Имеется три получателя R1, R2 и R3, которые маршрутизированы через выходные интерфейсы IВ и IГ, соответственно. Будем также предполагать, что интерфейс IГ подключен к широковещательной сети, а R2 и R3 достижимы через разные маршрутизаторы, не показанные на рисунке.
Здесь нужно специфицировать мультикастные маршруты в пределах узла, отображенного на рис. 10.24. Предположим сначала, что информационные пакеты от каждого из отправителей Si, показанных на рисунке, маршрутизованы на оба выходных интерфейса. При этих предположениях на рисунках 10.25, 10.26 и 10.27 проиллюстрированы стили резервирования WF, FF и SE соответственно.
(рис 10.24) Конфигурация маршрутизатораДля простоты эти примеры показывают flowspec как одномерное кратное повторение некоторого базового качества ресурса B. Колонка "Резервирует" отображает запросы резервирования RSVP, полученные через выходные интерфейсы IВ и IГ, а колонка "Получает" — результирующее состояние резервирования для каждого интерфейса. Колонка "Посылает" показывает запросы резервирования, посланные предшествующим узлам (IА и IБ). В колонке "Резервирует" каждая рамка представляет один зарезервированный виртуальный канал с соответствующим дескриптором потока.
Рис. 10.25, демонстрируя стиль WF, приводит две ситуации, в которых требуется объединение.
(рис 10.25) Пример резервирования WF (Wildcard-Filter)На рис. 10.26 проиллюстрирован стиль резервирования FF (Fixed-Filter). У каждого выходного интерфейса имеется отдельное резервирование для каждого запрошенного источника, но это резервирование будет общим для всех получателей, которые послали запрос. Дескрипторы для получателей S2 и S3, полученные через выходные интерфейсы IВ и IГ, вкладываются в пакеты запросов, направляемых предыдущему узлу (IБ). С другой стороны, три различные дескриптора потоков, специфицирующих отправителя S1, объединяются в один запрос FF(S1{4B}), который посылается предыдущему узлу (IА).
На рис. 10.27 показан пример стиля резервирования SE. Когда резервирования стиля SE объединяются, результирующая спецификация фильтра является объединением исходных спецификаций, а результирующая спецификация flowspec равна наибольшей из flowspec.

(рис 10.27) Пример резервирования FF (Fixed-Filter)(рис 10.26) Пример резервирования SE (Shared-Explicit)Приведенные примеры предполагают, что информационные пакеты от S1, S2 и S3 маршрутизируются через оба выходных интерфейса. Нижняя часть рис. 10.24 показывает еще одно предположение о маршрутизации: информационные пакеты от S2 и S3 не переадресуются интерфейсу IВ, например, из-за того, что сеть обеспечивает более короткий путь для пакетов отправителя к R1. Рис. 10.25 показывает пример резервирования WF именно при этом предположении (стрелками отмечены допустимые маршруты). Так как нет пути от IБ к IВ, резервирование, переадресуемое интерфейсом IБ, рассматривает резервирование только для интерфейса IГ.
На рис. 10.28 проиллюстрирована модель RSVP узла маршрутизатора. Каждый поток данных приходит со стороны предшествующего узла через соответствующий входной интерфейс и выходит из маршрутизатора через один или несколько выходных интерфейсов. Один и тот же интерфейс для разных потоков в пределах одной сессии может выполнять как входную, так и выходную роль. Несколько предшествующих узлов и/или последующих узлов могут для коммуникаций использовать один и тот же физический интерфейс; например, на рисунке два узла Г и Г' подключены к широковещательной сети через интерфейс IГ.
(рис 10.28) Маршрутизатор, использующий RSVPСуществует два фундаментальных типа сообщений RSVP: Resv и Path. Каждый получатель посылает свой RSVP запрос резервирования в виде сообщений ( Resv ) отправителям данных. Эти сообщения должны двигаться в точности тем же маршрутом с учетом выбора отправителей, что и данные, только в противоположном направлении. Они создают и поддерживают состояние резервирования в каждом узле вдоль маршрута. Сообщения Resv должны быть в конце концов доставлены ЭВМ-отправителям, таким образом, ЭВМ устанавливают параметры управления трафиком.
Каждая ЭВМ-отправитель передает RSVP сообщения Path вдоль уникаст/мультикаст маршрутов, сформированных с помощью маршрутных протоколов. Эти сообщения Path запоминают состояние пути в каждом узле вдоль маршрута. Состояние пути включает в себя уникастный IP-адрес предыдущего узла, который используется для маршрутизации сообщений Resv от узла к узлу в противоположном направлении. Сообщение Path содержит также следующую информацию:
Сообщение Path должно нести в себе шаблон отправителя (Sender Template), который описывает формат пакетов данных, посылаемых отправителем. Этот шаблон имеет форму спецификации фильтра, которая может использоваться для отделения пакетов данного отправителя от других пакетов в пределах сессии.
Шаблоны отправителя имеют тот же формат, что и спецификации фильтра, которые применяются в сообщениях Resv. Следовательно, шаблон отправителя может специфицировать только его IP-адрес и опционно UDP/TCP порт, с учетом идентификатора протокола, заданного для сессии.
Сообщения Path должны содержать спецификацию отправителя Tspec, которая определяет характеристики информационного трафика, формируемого отправителем. Спецификация Tspec используется для предотвращения избыточного резервирования.
Сообщение Path может нести в себе пакет данных оповещения OPWA, известный как Adspec. Пакет Adspec, полученный с сообщением Path, передается системе управления трафиком, которая присылает скорректированную версию Adspec. Последняя пересылается далее в виде сообщения Path.
Сообщения Path посылаются с теми же адресами отправителя и получателя, что и данные, так что они будут корректно маршрутизироваться даже через сетевые области, не поддерживающие RSVP. С другой стороны, сообщения Resv посылаются от узла к узлу; каждый узел, поддерживающий RSVP, переправляет сообщение Resv по уникастному адресу предшествующего узла RSVP.
Сообщение Resv, переадресованное предшествующему узлу, несет в себе спецификацию flowspec, которая является наибольшей из всех flowspec, запрошенных последующими узлами — получателями данных.
Так как flowspecs непрозрачны для RSVP, действительные правила для сравнения flowspecs должны быть определены и реализованы вне рамок этого протокола. Реализация RSVP потребует обращения к специальной программе, чтобы выполнить объединение спецификаций flowspec.
Заметим, что спецификации flowspecs представляют собой в общем случае многомерные векторы; они могут содержать как Tspec, так и Rspec компоненты, каждая из которых может сама быть многомерной.
Например, если один запрос требует высокой пропускной способности, а другой — жесткого ограничения задержек, то один не может быть "больше" другого. В таком случае, вместо взятия большего, прикладная программа объединения должна уметь сформировать такую спецификацию flowspec, которая по крайне мере столь же велика, как и каждая из составляющих; математически это наименьший верхний предел LUB (least flowspec по крайне мере настолько мала, насколько нужно; тогда это наибольший нижний предел GLB (Greatest
Для вычисления эффективного значения flowspec ( Re, Te ), инсталлируемого в интерфейс, используются следующие шаги [RFC-2210]. Здесь Te — эффективная спецификация Tspec, а Re — эффективная спецификация Rspec.
flowspec для выходного интерфейса. В зависимости от технологии канального уровня, это может требовать объединения спецификаций flowspecs различных последующих узлов. Это означает вычисление эффективной спецификации flowspec как LUB flowspecs. Какие спецификации следует объединять, определяется средой канального уровня, в то время как процедура объединения задается используемой моделью обслуживания [RFC-2210]. В результате получается спецификация flowspec, которая непрозрачна для RSVP, но в действительности состоит из пары ( Re, Resv_Te ), где Re является эффективной спецификацией Rspec, а Resv_Te — эффективная спецификация Tspec.Path_Te, зависящей от приложения и представляющей собой сумму всех Tspecs, которые были присланы в сообщениях Path, пришедших от различных предшествующих узлов (например, некоторые или все узлы A, Б, и Б' на рис. 10.28).Re, Resv_Te ) и Path_Te передаются системе управления трафиком. Управление трафиком вычислит эффективную спецификацию flowspec, как минимум Path_Te и Resv_Te.RSVP использует подход soft state (гибкое состояние) для управления состоянием резервирования в маршрутизаторах и ЭВМ. Гибкое состояние RSVP создается и периодически обновляется посредством сообщений Path и Resv. Состояние уничтожается, если не приходит подтверждения в течение заданного времени таймаута очистки. Состояние может быть стерто также посредством сообщения teardown (уничтожение). По истечении каждого тайм-аута обновления и после любых изменений состояния RSVP осуществляет проверку, чтобы подготовить и отправить сообщения обновления Path и Resv последующим узлам.
Сообщения Path и Resv практически идемпотентны. Когда маршрут меняется, следующее сообщение Path инициализирует состояние прохода для нового маршрута, а последующие сообщения Resv установят для него резервирование. Состояние же на неиспользованном в данный момент сегменте маршрута будет аннулировано по тайм-ауту. Следовательно, определение того, является ли сообщение новым или обновляющим, принимается отдельно для каждого узла в зависимости от его текущего состояния.
Протокол RSVP посылает свои сообщения в виде IP-дейтограмм без какого-либо улучшения надежности. Периодическая передача сообщений обновления от ЭВМ и маршрутизаторов позволяет компенсировать случайные потери отдельных RSVP-сообщений. Если тайм-аут удаления установлен равным K периодам обновления, то RSVP может допускать потерю K-1 RSVP-пакетов подряд без аннулирования состояния. Механизм управления сетевым трафиком должен быть отконфигурирован так, чтобы предоставить минимальную полосу пропускания для сообщений RSVP и предотвратить их потерю из-за перегрузки канала.
Состояние, поддерживаемое RSVP, является динамическим. Для изменения набора отправителей Si или изменения любого запроса QoS, ЭВМ просто начинает посылать измененные сообщения Path и/или Resv. В результате будет осуществлено соответствующее изменение RSVP-состояния во всех узлах вдоль пути, а неиспользуемые состояния будут аннулированы по тайм-ауту, если не поступит прямых указаний по их ликвидации до этого.
В стабильном состоянии осуществляется обновление статуса узел за узлом. Когда полученное состояние отличается от хранящегося, последнее обновляется. О модификации состояния соседи оповещаются с помощью сообщений обновления, которые рассылаются сразу после изменения состояния. Но эта волна изменений может остановиться в узле, где в результате слияния получается состояние, которое не отличается от прежнего. Это минимизирует трафик управления RSVP, что весьма существенно для больших мультикастинг-групп.
Состояние, которое получено через конкретный интерфейс I*, никогда не должно переадресовываться этому
(рис 10.29) Независимые резервированияСуществует еще одно правило, которое управляет процессом переадресации сообщений Resv: состояние из сообщения Resv, полученное через выходной интерфейс Io, следует передавать входному интерфейсу Ii только в том случае, когда сообщение Path от Ii переадресовано к Io.
Сообщение RSVP аннулирование удаляет проход или состояние резервирования. Хотя прямое уничтожение старого резервирования не является обязательным, оно настоятельно рекомендуется, так как ускоряет переходные процессы в сети.
Существует два типа RSVP сообщений аннулирования: PathTear и ResvTear. Сообщение PathTear направляется всем получателям и ликвидирует состояние прохода, а также все зависящие от него состояния резервирования. Сообщение ResvTear уничтожает состояние резервирования и направляется всем отправителям.
Запрос аннулирование (teardown) может посылаться приложением оконечной системы (получатель или отправитель) или маршрутизатором в результате тайм-аута или при появлении привилегированной задачи. После инициализации запрос-аннулирование должен переадресовываться от узла к узлу без задержки. Сообщение аннулирования уничтожает специфицированное состояние в узле-получателе.
Подобно другим сообщениям RSVP, запросы-аннулирования доставляются без гарантии надежности. Потеря такого запроса не вызовет катастрофы. Если маршрутизатор не получил сообщения аннулирования, он ликвидирует соответствующее состояние по тайм-ауту и формирует сообщение аннулирования, рассылаемое последующим узлам. Предполагая, что вероятность потери сообщения RSVP мала, наибольшее среднее время ликвидации ненужного состояния не превышает периода обновления.
Необходимо иметь возможность ликвидировать любой субнабор установленных состояний. Для состояний прохода минимально это может быть один отправитель. Для состояний резервирования таким объектом является спецификация фильтра. Например, в случае, показанном на рис. 10.29, получатель R1 может послать сообщение ResvTear только отправителю S2 (или любому субнабору из списка спецификаций фильтрации), оставляя S1 без изменений.
Сообщение ResvTear специфицирует стиль и фильтры, любая спецификация flowspec игнорируется. Любая рабочая спецификация flowspec будет убрана, если все ее спецификации фильтров будут ликвидированы.
Существует два типа RSVP сообщений об ошибках: ResvErr и PathErr. Сообщения PathErr очень просты, они посылаются отправителю — виновнику ошибки и не изменяют состояния прохода в узлах, через которые проходят. Существует всего несколько причин ошибок прохода.
Однако и для синтаксически верных запросов резервирования существует опасность быть отвергнутыми. Узел может решить аннулировать установленное резервирование из-за более приоритетных заданий. Так как неудовлетворение запроса может быть вызвано объединением нескольких запросов, ошибка резервирования должна быть ретранслирована всем получателям группы. Кроме того, объединение разнородных запросов создает потенциальную трудность, известную как проблема "резервирования килера", в которой один запрос может блокировать услуги другого. В действительности существует две такие проблемы.
Q0. Если другой получатель делает новое Q1 > Q0, результирующее объединенное резервирование Q0 и Q1 может быть отвергнуто системой контроля доступа в некотором последующем узле. Это не должно вредить услугам на уровне Q0. Решение этой проблемы весьма просто: когда контроль доступа не пропускает запрос резервирования, существующее состояние резервирования сохраняется.Q1, сохраняет свое состояние даже в случае непрохождения контроля доступа для Q1 в каком-то узле. Это не должно мешать другому получателю установить меньшее резервирование Q0, которое бы прошло, если бы не было объединено с Q1.Чтобы решить эту проблему, сообщения ResvErr устанавливают дополнительное состояние, называемое состоянием блокады, в каждом из узлов, через которые проходит это сообщение. Состояние блокады в узле модифицирует процедуру объединения так, чтобы игнорировать блокирующие спецификации flowspec (Q1 в вышеприведенном примере), позволяя скромным запросам проходить и осуществлять свое резервирование. Состояние резервирования Q1 считается в данном случае заблокированным.
Запрос резервирования, не прошедший контроль допуска создает состояние блокады в соответствующем узле, но остается действующим во всех предшествующих узлах. Было предложено, чтобы эти резервирования до точки отказа были удалены. Однако они были сохранены по следующим причинам:
Tb секунд, они могли бы быть удалены по тайм-ауту ( Tb — время тайм-аута состояния блокады).Чтобы запросить подтверждение на свое резервирование, получатель Rj включает в сообщение Resv объект запроса подтверждения, содержащий IP-адрес Rj. В каждой точке объединения только наибольшая из спецификаций flowspec и соответствующий объект запроса подтверждения посылаются далее. Если запрос резервирования от Rj равен или меньше уже существующего резервирования, его Resv не переадресуется последующим узлам, и если Resv включает в себя запрос подтверждения, отправителю Rj посылается сообщение ResvConf. Если запрос подтверждения переадресуется, это делается немедленно и не более одного раза на каждый запрос. Этот механизм подтверждения имеет такую последовательность:
ResvErr, либо ResvConf, отправляемое получателю каждым из отправителей данных. В этом случае сообщение ResvConf будет подтверждением, относящимся ко всему пути;ResvConf не предоставляет никаких гарантий. Предположим, что два запроса резервирования от получателей R1 и R2 пришли в узел, где они были объединены. R2, чье резервирование было вторым по времени, может получить подтверждение ResvConf от данного узла, в то время как запрос R1 еще не прошел весь путь и может еще быть отвергнут каким-то последующим узлом. Таким образом, R2 может получить ResvConf, когда не имеется полномасштабного резервирования вдоль всего пути; более того, R2 может получить ResvConf, за которым последует сообщение ResvErr.Механизм управления политикой определяет, каким пользователям или приложениям позволено осуществлять резервирование и в каком объеме. RSVP-запросы QoS позволяют определенным пользователям получить предпочтительный доступ к сетевым ресурсам. Для предотвращения злоупотреблений необходима некоторая обратная связь. Такого рода связь может быть реализована с помощью административной политики обеспечения доступа или путем введения прямой или виртуальной оплаты резервирования. В любом случае требуется идентификация пользователя.
Когда запрашивается новое резервирование, каждый узел должен ответить на два вопроса: "Имеется ли достаточно ресурсов, чтобы удовлетворить запрос?" и "Позволено ли данному пользователю осуществлять резервирование?" Эти два решения называются "управлением доступа" и "управлением политикой", соответственно. Различные административные домены в Интернет могут иметь разные политики резервирования.
На вход управления политикой поступают специфические блоки данных, которые заключены в объектах POLICY_DATA протокола RSVP. Эти блоки могут включать в себя параметры доступа пользователя, его класс, номер акаунта, пределы квоты и пр. Подобно flowspecs, эти данные недоступны для RSVP, который просто передает их, когда требуется, системе управления политикой. Аналогично, объединение этих данных должно выполняться системой управления политикой, а не самим протоколом RSVP. Заметим, что точки объединения данных, характеризующих политику, должны находиться на границах административных доменов.
Перенос таких данных, поставляемых пользователями, в сообщениях Resv может представлять проблему в случае существенного увеличения числа пользователей. Когда мультикастинг-группа содержит большое число получателей, может оказаться невозможно или нежелательно транспортировать данные, описывающие политику, вдоль всего маршрута. Эти данные должны объединяться как можно ближе к получателям, чтобы избежать чрезмерного информационного потока.
При использовании протокола RSVP возникают определенные проблемы безопасности.
Повреждение или фальсификация запросов резервирования может привести к получению услуг неавторизованными пользователями или к отказам в услугах. RSVP осуществляет защиту против таких атак с помощью механизма аутентификации, действующего в каждом из узлов и использующего шифрование с применением хэш-функций. Механизм поддерживается объектами INTEGRITY, которые могут быть включены в любое сообщение RSVP. Эти объекты используют технику криптографических дайджестов, которая предполагает, что соседи RSVP совместно владеют секретом шифрования (см. [Baker96]).
Управление политикой будет зависеть от положительного результата аутентификации для каждого из запросов резервирования. Информация, характеризующая политику, может быть включена в сообщение в виде криптографически защищенного сертификата пользователя.
Первые два пункта касались выполнения операций RSVP. Третий пункт касается резервирования для безопасных потоков данных. В частности, применение IPSEC (
Для решения этой проблемы определено расширение RSVP, в котором идентификатор секретности (IPSEC SPI) играет ту же роль, что и номер порта [RFC-2207].
Невозможно развернуть протокол RSVP (или любой новый протокол) во всем Интернет одновременно. Более того, RSVP, вероятно, никогда не будет развернут повсеместно. RSVP должен гарантировать корректную работу, когда два RSVP-маршрутизатора объединены друг с другом через сетевую область, не поддерживающую этот протокол. Конечно, промежуточная сетевая область, лишенная поддержки RSVP, не способна осуществлять резервирование ресурсов. Однако если эта область обладает достаточной емкостью, она может обеспечить необходимый уровень услуг.
Протокол RSVP приспособлен для работы через такие, не поддерживающие его, сетевые области. Как поддерживающие, так и не поддерживающие RSVP маршрутизаторы переадресуют сообщения Path в соответствии с адресом места назначения, используя свои локальные таблицы маршрутизации. Следовательно, на маршрутизацию сообщений Path не оказывает влияние наличие промежуточных маршрутизаторов, лишенных RSVP-поддержки. Когда сообщение Path проходит через сетевую область, не поддерживающую RSVP, оно, направляясь к следующему узлу, поддерживающему RSVP, несет в себе IP-адрес последнего RSVP-маршрутизатора. Сообщение Resv тогда переадресуется непосредственно следующему RSVP-маршрутизатору на пути к отправителю.
Хотя RSVP работает корректно и через сетевые области без поддержки RSVP, узлы из этой области могут внести искажения в QoS. При встрече области без поддержки RSVP протокол устанавливает бит-флаг NonRSVP и передает его механизму управления трафиком. Управление трафиком комбинирует этот однобитовый флаг со своей собственной информацией об источниках и передает ее вдоль транспортного пути получателям, используя спецификацию Adspecs [RFC-2210].
При некоторых топологиях маршрутизаторов с поддержкой RSVP и без нее возможна доставка сообщений Resv не в тот узел или не на тот интерфейс. Процесс RSVP должен быть готов обрабатывать такие ситуации. Если адрес места назначения не соответствует ни одному локальному интерфейсу, а сообщение не является Path или PathTear, то оно должно передаваться далее без какой-либо обработки в данном узле. Чтобы обработать случай с неправильным интерфейсом, используется дескриптор логического интерфейса LIH (Path, содержит не только IP-адрес предшествующего узла, но также и LIH, определяющий логический выходной интерфейс; обе величины записываются в состояние прохода. Сообщение Resv, пребывающее в адресуемый узел, несет в себе IP-адрес и LIH правильного выходного интерфейса, т.е. интерфейса, который должен получить запрошенное резервирование, вне зависимости от того, на какой интерфейс оно п
опало.
Прежде чем будет сформирована сессия, ей должен быть присвоен идентификатор ( DestAddress, ProtocolId, DstPort ), который рассылается всем отправителям и получателям. Когда RSVP сессия сформировалась, в оконечных системах должны произойти следующие события.
H1 Получатель посредством IGMP подключается к мультикаст-группе, заданной адресом DestAddress
H2 Потенциальный отправитель начинает посылать сообщения Path по адресу DestAddress
H3 Приложение получателя принимает сообщение Path
H4 Получатель начинает посылать соответствующие сообщения Resv, задавая дескрипторы нужных потоков
H5 Приложение отправителя получает сообщение Resv
H6 Отправитель начинает посылать информационные пакеты
Существует несколько соображений, касающихся синхронизации.
Path (H2) и данных (H6) одновременно, и имеется некоторое число получателей, но сообщения Resv пока не достигли отправителя (например, потому что его сообщения Path еще не дошли до получателей). Тогда исходные данные могут прийти к получателю без желаемого уровня QoS. Отправитель может немного облегчить эту проблему, подождав прибытия первого сообщения Resv (H5). Однако получатели, которые достаточно далеко, могут еще не получить необходимого резервирования.Resv (H4) до получения какого-либо сообщения Path (H3), RSVP пришлет получателю сообщение об ошибке.Получатель может просто игнорировать такие сообщения об ошибке или может избежать их, ожидая сообщений, прежде чем посылать сообщения Resv. Программный интерфейс приложения (API) для RSVP в данной спецификации не определен, так как он может зависеть от ЭВМ и ОС.
Сообщение RSVP состоит из общего заголовка, за которым следует тело сообщения, состоящее из переменного числа объектов переменной длины. Для каждого типа сообщения RSVP существует набор правил допустимого выбора типов объектов. Эти правила специфицированы с использованием стандартных форм Бакуса-Наура (
Общий заголовок
(рис 10.30) Формат общего заголовкаВ общем заголовке имеются следующие поля:
Vers. 4 бита — Номер версии протокола. В данном описании = 1.
Флаги: 4 бита — 0x01-0x08. Зарезервированы.
Флаги пока не определены.
Тип Msg. Тип сообщения (8 бит).
1 = Path 2 = Resv 3 = PathErr 4 = ResvErr 5 = PathTear 6 = ResvTear 7 = ResvConf
Контрольная сумма RSVP: 16 бит
Дополнение по модулю один контрольной суммы сообщения (в процессе вычисления поле контрольной суммы считается нулевым). Если в поле записан нуль, это означает, что контрольная сумма не вычислялась.
Send_TTL: 8 бит
Значение TTL для протокола IP, с которым было послано сообщение.
Длина RSVP: 16 бит
Полная длина RSVP сообщения в байтах, включая общий заголовок и объекты переменной длины, которые за ним следуют.
Каждый объект состоит из одного или более 32-битных слов с 4-байтовым заголовком. Формат объекта показан на рис. 10.31:
(рис 10.31) Формат объектаЗаголовок объекта имеет следующие поля.
Длина в байтах
16-битовое поле, содержащее полную длину объекта в байтах. Длина должна быть кратна 4 октетам, минимальное значение равно 4.
ClassNum
Идентифицирует класс объекта. Каждый класс объекта имеет свое имя, которое в данном документе записывается прописными буквами. Приложения RSVP должны распознавать следующие классы.
NULL Объект NULL имеет код Class-Num, равный нулю, а его C-тип игнорируется. Его длина должна быть, по крайней мере, равна 4, но может быть любой, кратной 4. Объект NULL может появиться где угодно в последовательности объектов. Его содержимое получателем игнорируется.
SESSION Содержит IP-адрес места назначения ( DestAddress ), идентификатор протокола IP и обобщенный номер порта назначения, чтобы специфицировать сессию для других объектов, которые следуют далее. Объект SESSION должен присутствовать в любом сообщении RSVP.
RSVP_HOP Несет в себе IP-адрес узла, поддерживающего протокол RSVP, который послал это сообщение, и дескриптор логического выходного интерфейса (LIH). RSVP_HOP характеризует предшествующий узел (hop).
TIME_VALUES Содержит значение периода обновления R, используемого отправителем сообщения. Этот объект необходим в каждом сообщении Path и Resv.
STYLE Определяет стиль резервирования, а также зависящую от стиля информацию, которая не включена в объекты FLOWSPEC или FILTER_SPEC. Объект STYLE необходим в каждом сообщении Resv.
FLOWSPEC Определяет желательный уровень QoS, в сообщениях Resv.
FILTER_SPEC Определяет субнабор информационных пакетов сессии, которые должны получить желательный уровень QoS (специфицированный объектом FLOWSPEC ), в сообщениях Resv.
SENDER_TEMPLATEСодержит IP-адрес отправителя и, может быть, некоторую дополнительную информацию, идентифицирующую отправителя. Этот объект необходим в сообщениях Path.
SENDER_TSPECОпределяет характеристики информационного трафика отправителя. SENDER_TSPEC необходим в сообщениях Path.
ADSPECНесет в себе данные OPWA в сообщении Path.
ERROR_SPECСпецифицирует ошибку в сообщениях PathErr и ResvErr или подтверждение в сообщении ResvConf.
POLICY_DATAНесет в себе информацию, которая позволит локальному модулю, определяющему политику, принять решение, допустимо ли административно соответствующее резервирование. Может присутствовать в сообщениях Path, Resv, PathErr или ResvErr.
INTEGRITYНесет в себе криптографические данные для аутентификации исходного узла и для верификации содержимого сообщения RSVP. Использование объекта INTEGRITY описано в ссылке [Baker96] в конце данного раздела.
SCOPEНесет в себе список ЭВМ-отправителей, к которым должно быть переадресовано данное сообщение. Может присутствовать в сообщениях Resv, ResvErr или ResvTear.
RESV_CONFIRMНесет в себе IP-адрес получателя, который запросил подтверждение. Может присутствовать в сообщениях Resv или ResvConf.
CType
Тип объекта, уникален в пределах класса Class-Num.
Максимальная длина объекта равна 65528 байт. Поля Class-Num и C-Тип могут использоваться совместно как 16-битовое число для определения уникального типа для каждого из объектов.
Старшие два бита Class-Num применяются для определения того, какие действия должен предпринять узел, если он не распознает Class-Num объекта.
Каждая ЭВМ-источник периодически отправляет сообщения Path для каждого из информационных потоков, берущих здесь свое начало. Это сообщение содержит объект SENDER_TEMPLATE, определяющий формат пакетов данных, и объект SENDER_TSPEC, специфицирующий характеристики трафика потока. Опционно сообщение может содержать объект ADSPEC, несущий в себе информацию о потоке (OPWA).
Сообщение Path направляется от отправителя к получателю по тому же маршруту, по которому движутся информационные пакеты. IP-адрес источника в сообщении Path должен характеризовать адрес отправителя, в то время как адрес места назначения должен быть равен DestAddress для текущей сессии. Эти адреса гарантируют, что сообщение будет корректно маршрутизовано даже через области сети, не поддерживающие RSVP. Формат сообщения Path имеет следующий вид:
<Path Message> ::= <Common Header> [ <INTEGRITY> ] <SESSION> <RSVP_HOP> <TIME_VALUES> [ <POLICY_DATA> ... ] [ <sender descriptor> ] <sender descriptor> ::= <SENDER_TEMPLATE> <SENDER_TSPEC> [ <ADSPEC> ]
Если присутствует объект INTEGRITY, он должен следовать непосредственно за стандартным общим заголовком. Не существует каких-либо иных ограничений порядка передачи, хотя упомянутое выше требование является рекомендательным. Число объектов POLICY_DATA может быть произвольным.
Объект PHOP (т.е., предыдущий RSVP_HOP ) каждого сообщения Path содержит адрес предшествующего узла, например, IP-адрес интерфейса, через который только что было послано сообщение Path. Он также содержит дескриптор логического интерфейса (LIH).
Каждый узел вдоль пути, поддерживающий RSVP, перехватывает сообщение Path и обрабатывает его с тем, чтобы сформировать состояние пути для отправителя, заданного объектами SENDER_TEMPLATE и SESSION. Любой из объектов POLICY_DATA, SENDER_TSPEC и ADSPEC также записываются в состояние пути. Если случилась ошибка при обработке сообщения Path, посылается сообщение PathErr первичному отправителю сообщения Path.
Path для посылки их получателям. Каждое сообщение содержит дескриптор, характеризующий одного отправителя, и несет в себе IP-адреса отправителя.
Процесс RSVP переадресует и размножает (если требуется, — например, при мультикастинге) сообщения Path, используя маршрутную информацию, которую он получает от соответствующих процессов маршрутизации. Маршрут зависит от DestAddress сессии и для некоторых протоколов маршрутизации — от адреса источника. Маршрутная информация обычно включает в себя список выходных интерфейсов, куда должно направляться сообщение Path. Так как каждый выходной интерфейс имеет свой IP-адрес, сообщения Path, посланные разными интерфейсами, содержат отличные адреса PHOP. Кроме того, объекты ADSPEC, содержащие сообщения Path, будут отличаться для разных выходных интерфейсов.
Состояние пути для данной сессии и отправителя не обязательно должны иметь уникальные PHOP или уникальный входной интерфейс. Существует два случая, соответствующие мультикастной и уникастной сессиям.
Мультикастинговая маршрутизация позволяет иметь стабильное дерево рассылки, в котором сообщения Path от одного и того же отправителя приходят от более чем одного PHOP, и RSVP должен быть готов поддерживать все такие состояния пути. RSVP не должен пересылать сообщения Path, которые прибывают через входной интерфейс, отличный от указанного в маршрутной таблице.
В течение короткого периода времени после изменения уникастного маршрута узел может получать сообщения Path от нескольких PHOP для данной сессии и отправителя. Узел не может надежно определить, какой из PHOP является правильным, хотя узел будет получать данные одновременно только от одного PHOP. Одним из вариантов реализации RSVP является игнорирование PHOP и допущение для PHOP переключаться между имеющимися кандидатами. Другим вариантом является поддержание состояния пути для каждого PHOP и посылка сообщения Resv всем таким PHOP. В любом варианте ситуация является переходной, неиспользуемые состояния пути все равно будут удалены (явно или по тайм-ауту).
Сообщения Resv несут в себе запросы резервирования от узла к узлу, от получателей к отправителям в направлении, противоположном движению потока данных. IP-адрес места назначения сообщения Resv является уникастным адресом предшествующего узла, полученным из состояния прохода. IP-адрес источника является адресом узла, который посылает сообщение. Сообщение Resv имеет следующий формат:
<Resv Message> ::= <Common Header> [ <INTEGRITY> ] <SESSION> <RSVP_HOP> <TIME_VALUES> [ <RESV_CONFIRM> ] [ <SCOPE> ] [ <POLICY_DATA> ... ] <STYLE> <flow descriptor list> <flow descriptor list> ::= <empty> | <flow descriptor list> <flow descriptor>
Если присутствует объект INTEGRITY, он должен непосредственно следовать за общим заголовком. За объектом STYLE следует список дескрипторов
Объект NHOP (напр., RSVP_HOP ) содержит IP-адрес интерфейса, через который посылаются сообщения Resv, и LIH для логического интерфейса, где требуется резервирование.
Появление объекта RESV_CONFIRM сигнализирует о запросе подтверждения резервирования и несет в себе IP-адрес получателя, которому должен быть послан ResvConf. Число объектов POLICY_DATA не лимитировано.
Ниже приведены правила, которые специфицируют структуру дескриптора потока для каждого из стилей резервирования.
<flow descriptor list> ::= <WF flow descriptor> <WF flow descriptor> ::= <FLOWSPEC>
<flow descriptor list> ::= <FLOWSPEC> <FILTER_SPEC> | <flow descriptor list> <FF flow descriptor> <FF flow descriptor> ::= [ <FLOWSPEC> ] <FILTER_SPEC>
Каждый запрос стиля FF описывается одной парой спецификаций (FLOWSPEC, FILTER_SPEC), несколько таких запросов могут быть уложены в один список дескрипторов потока сообщения Resv. Объект FLOWSPEC может быть опущен, если он идентичен последнему такому объекту в списке; первый дескриптор потока стиля FF должен содержать FLOWSPEC.
<flow descriptor list> ::= <SE flow descriptor> <SE flow descriptor> ::= <FLOWSPEC> <filter spec list> <filter spec list> ::= <FILTER_SPEC> | <filter spec list> <FILTER_SPEC>
Набор отправителей (reservation scope), которым направляется конкретный запрос резервирования, определяется следующим образом.
Резервирование переадресуется всем отправителям, чьи объекты SENDER_TEMPLATE, записанные в состоянии прохода, соответствуют объекту FILTER_SPEC.
Запрос с произвольным выбором отправителя соответствует всем отправителям, которые маршрутизированы на данный выходной интерфейс.
Когда сообщение Resv с произвольным выбором отправителя переадресуется более чем одному предыдущему узлу, в сообщение должен быть включен объект SCOPE. В этом случае список IP адресов для рассылки хранится именно в этом объекте.
Сообщение Resv, которое пересылается узлом, является в общем случае результатом объединения входящих сообщений Resv. Если одно из этих объединенных сообщений содержит объект RESV_CONFIRM и имеет число FLOWSPEC, большее, чем FLOWSPEC всех других объединенных запросов резервирования, тогда этот объект RESV_CONFIRM переадресуется в виде исходящего сообщения Resv. Объект RESV_CONFIRM из одного из объединенных запросов (чья спецификация flowspecs равна, меньше или сравнима с объединенной спецификацией flowspec и которая не подвергнута блокаде) запустит генерацию сообщения ResvConf, содержащего RESV_CONFIRM. Объект RESV_CONFIRM в запросе, который подвергнут блокаде, не будет переадресован или возвращен, он будет аннулирован в текущем узле.
Получение сообщения PathTear (path teardown) аннулирует состояния прохода. Соответствующее состояние должно согласовываться с объектами SESSION, SENDER_TEMPLATE и PHOP. Кроме того, сообщение PathTear для мультикастной сессии может соответствовать только состоянию прохода для входного интерфейса, через который получено сообщение PathTear. Если соответствия состоянию прохода нет, сообщение должно быть отброшено без дальнейшей рассылки.
Сообщения PathTear инициализируются непосредственно отправителем или в результате тайм-аута состояния прохода в каком-либо узле и направляются всем отправителям. Уникастное PathTear не должно переадресовываться, если состояние прохода соответствует той же сессии и отправителю, но имеет другой PHOP.
Сообщение PathTear должно маршрутизоваться в точности так же, как соответствующие сообщения Path. Следовательно, его IP-адрес места назначения должен совпадать с DestAddress, а его IP-адрес отправителя должен быть адресом, взятым из данных о состоянии прохода.
Сообщение PathTear может содержать в своем дескрипторе отправителя объект SENDER_TSPEC или ADSPEC, но они должны игнорироваться.
Удаление состояния прохода в результате получения сообщения PathTear или тайм-аута должно модифицировать состояние резервирования в данном узле. Эта модификация зависит от стиля резервирования. Например, предположим, что PathTear удаляет состояние прохода отправителя S. Когда стиль специфицирует явный выбор отправителя (FF или SE), всякое резервирование со спецификацией фильтрации, соответствующей отправителю S, должно быть удалено; когда стиль предусматривает произвольный выбор отправителя (WF), резервирование удаляется, если S является последним отправителем, участвующим в сессии. Эти изменения резервирования не должны вызвать немедленную посылку сообщения обновления Resv, так как сообщение PathTear уже вызвало необходимые изменения. Они не должны также вызвать отправку сообщения ResvErr, так как это может вызвать лавину таких сообщений.
Получение сообщения ResvTear (reservation teardown) вызывает удаление соответствующего состояния резервирования. При этом проверяется соответствие объектов SESSION, STYLE и FILTER_SPEC, а также LIH в объекте RSVP_HOP. Если соответствие не обнаружено, сообщение ResvTear игнорируется. Сообщение ResvTear может отменить любой субнабор спецификаций фильтрации в состояниях резервирования стилей FF или SE.
Сообщения ResvTear отправляются получателями или любым узлом, в котором состояние резервирование аннулируется в результате таймаута; далее они движутся в направлении получателей.
Сообщение ResvTear должно маршрутизироваться аналогично соответствующим сообщениям Resv, а его IP-адрес места назначения является уникастным адресом предыдущего узла.
Объекты FLOWSPEC в списке дескрипторов потоков сообщения ResvTear будут игнорироваться и могут быть опущены. Сообщение ResvTear может включать в себя объект SCOPE, но он должен игнорироваться.
В зависимости от изменения состояния узла получение сообщения ResvTear может вызвать переадресацию этого сообщения, посылку модифицированного сообщения Resv или не вызвать никакого сообщения. Эти три случая могут быть проиллюстрированы для стиля резервирования FF на рис. 10.26.
ResvTear для резервирования S3{B}, соответствующее резервирование удаляется из интерфейса ( IГ ) и посылается ResvTear для S3{B} интерфейсу ( IБ ).ResvTear для резервирования S1{4B}, соответствующее резервирование удаляется из интерфейса ( IВ ) и немедленно посылается модифицированное сообщение Resv FF(S1{3B}) интерфейсу ( IА ).ResvTear для S1{B}, никаких изменений резервирования не происходит и никаких сообщений далее не посылается.Сообщения PathErr (path error) несут в себе данные об ошибке в обрабатываемых сообщениях Path. Они направляются отправителям данных и маршрутизируются от узла к узлу, используя состояние прохода. При каждом шаге IP-адрес места назначения является уникастным адресом предыдущего узла. Сообщения PathErr не модифицируют состояния узлов, через которые проходят; они предназначаются только приложению отправителя.
Объект ERROR_SPEC специфицирует ошибку и включает в себя IP-адрес узла, который обнаружил эту ошибку (Error Node Address). Для приобщения необходимой информации в сообщение могут быть включены один или более объектов POLICY_DATA.
Сообщения ResvErr (reservation error) сообщают об ошибках при обработке запросов Resv или о спонтанном нарушении резервирования, например, в результате административного вмешательства.
Сообщения ResvErr направляются соответствующим получателям, они маршрутизируются от узла к узлу с использованием состояния резервирования. В каждом из узлов в качестве IP-адреса места назначения используется уникастный адрес следующего узла.
Объект ERROR_SPEC специфицирует ошибку и включает в себя IP-адрес узла, который обнаружил ошибку (Error Node Address). Для приобщения необходимой информации в сообщение могут быть включены один или более объектов POLICY_DATA. Объект RSVP_HOP содержит адрес предыдущего узла, а объект STYLE копируется из сообщения Resv.
Следующие правила, зависящие от стиля резервирования, определяют структуру ошибки дескриптора потока.
<error flow descriptor> ::= <WF flow descriptor>
<error flow descriptor> ::= <FF flow descriptor>
Каждый дескриптор потока в сообщении Resv стиля FF должен обрабатываться независимо, и для каждого из них, имеющего ошибку, должно посылаться отдельное сообщение ResvErr.
<error flow descriptor> ::= <SE flow descriptor>
Сообщение ResvErr стиля SE может представить список субнабора спецификаций фильтрации, которые вызвали ошибки, в соответствующем сообщении Resv.
Заметим, что сообщение ResvErr содержит только один дескриптор потока. Следовательно, сообщение Resv, которое содержит N > 1 дескрипторов потока (стиль FF), может быть причиной N сообщений ResvErr.
Вообще говоря, сообщение ResvErr следует пересылать всем получателям, которые могут быть причиной данной ошибки. Конкретнее:
ResvErr узлу, от которого получен ошибочный запрос резервирования.Это сообщение ResvErr должно содержать информацию, необходимую для определения ошибки и для маршрутизации сообщения об ошибке последующим узлам. Такое сообщение, следовательно, включает в себя объект ERROR_SPEC, копию объекта STYLE и соответствующий дескриптор потока, где зафиксирована ошибка. Если ошибка является результатом отказа при попытке увеличить резервирование, тогда существующее резервирование должно быть сохранено и должен быть установлен бит-флаг InPlace в ERROR_SPEC сообщения ResvErr ;
ResvErr последующим узлам, которые имеют локальное состояние резервирования. Для резервирования с произвольным выбором отправителей имеется дополнительное ограничение на пересылку сообщений ResvErr, связанное с блокировкой возможных циклических маршрутов. Существует строгое правило рассылки сообщений при ошибке, связанной с разрешением доступа. Сообщение ResvErr, которое посылается, должно нести в себе спецификацию FILTER_SPEC соответствующего состояния резервирования;ResvErr достигает получателя, приложение должно принять объект STYLE, список дескрипторов потока и объект ERROR_SPEC (включая его флаги).Сообщения ResvConf посылаются в ответ на запрос подтверждения резервирования. Сообщение ResvConf посылается в результате появления объекта RESV_CONFIRM в сообщении Resv. Сообщение ResvConf посылается по уникастному адресу ЭВМ получателя, адрес берется из объекта RESV_CONFIRM.
Объект RESV_CONFIRM является копией объекта в сообщении Resv, который вызвал подтверждение. ERROR_SPEC используется только для переноса IP-адреса исходного узла в поле адрес узла с ошибкой (Error Node Address). Равенство кода ошибки и значения нулю свидетельствует о подтверждении. Список дескрипторов потоков специфицирует конкретное резервирование, которое подтверждается. Это может быть субнабор из списка дескрипторов потоков Resv, для которого запрошено подтверждение.
Сессия RSVP определяется в нормальной ситуации тремя параметрами: DestAddress, ProtocolId, DstPort. Здесь DstPort является полем порта назначения UDP/TCP. DstPort может быть опущен (сделан равным нулю), если ProtocolId специфицирует протокол, который не имеет поля порта места назначения.
RSVP допускает любое значение для ProtocolId. Однако реализации оконечных систем RSVP могут знать об определенных значениях для этого поля и, в частности, о значениях для UDP и TCP (17 и 6 соответственно). Оконечная система может выдать сигнал ошибки приложению, которая:
DstPort для протокола, который не имеет портов типа UDP/TCP, илиDstPort для протокола, который имеет порты, специфицированные для UDP/TCP.Спецификации фильтра и шаблоны отправителя определяют пару: SrcAddress, SrcPort, где SrcPort — поле UDP/TCP порта. В некоторых случаях SrcPort может быть опущен (установлен равным нулю). Существуют следующие правила использования нулевого значения полей DstPort и/или SrcPort в RSVP.
Состояния прохода и резервирования для одного и того же DestAddress и ProtocolId должны иметь свои значения DstPort, которые все равны нулю или все не равны нулю. Нарушение этого условия в узле является ошибкой "конфликт портов назначения (Conflicting Dest Ports)".
Если DstPort в описании сессии равен нулю, все поля SrcPort, используемые для этой сессии, также должны быть равны нулю. При этом предполагается, что протокол не имеет портов типа UDP/TCP. Нарушение этого условия в узле вызовет ошибку Bad Src Ports.
ЭВМ-отправитель не должна посылать состояния прохода со значением SrcPort как равным, так и неравным нулю. Нарушение этого условия вызовет ошибку Conflicting Sender Port. Заметим, что протокол не допускает произвольного назначения номеров портов (wildcard), т.е., нулевой порт не может соответствовать ненулевому порту.
Сообщения RSVP посылаются от узла к узлу между RSVP-маршрутизаторами, поддерживающими этот протокол, в виде IP-дейтограмм с кодом протокола 46. IP-дейтограммы предназначены также для использования между оконечными системами и первыми/последними маршрутизаторами.
Сообщения Path, PathTear и ResvConf должны посылаться с опцией Router Alert IP [RFC-2113] в их IP-заголовках.
По прибытии RSVP-сообщения M, которое меняет статус, узел должен немедленно послать сообщение о модификации состояния. Однако это не должно привести к посылке сообщения через интерфейс, откуда пришло M (что может случиться, если приложение запустит процедуру обновления состояний для текущей сессии). Это правило предотвращает лавину пакетов в сетях с широковещательной рассылкой.
Каждое RSVP-сообщение должно пересылаться только в одной IP-дейтограмме. Если оно превосходит MTU, такая дейтограмма будет фрагментирована. Восстановление сообщения будет произведено узлом-получателем. Это имеет несколько следствий.
RSVP использует свой механизм периодического обновления для предотвращения влияния случайной потери отдельных пакетов. При перегрузке сети, однако, существенные потери RSVP-сообщений могут вызвать серьезные нарушения резервирования сетевых ресурсов. Для контроля задержек, связанных с обслуживанием очереди, и влияния потерь RSVP-пакетов маршрутизаторы должны быть сконфигурированы так, чтобы обеспечивать для данных целей приоритетное обслуживание. Если RSVP-пакеты идут через область сети, где вероятность потери значительна, следует увеличить значение таймаутов.
Некоторые мультикастные протоколы маршрутизации обеспечивают туннели, которые организуют IP-инкапсуляцию мультикастных пакетов и их транспортировку через маршрутизаторы, не поддерживающе мультикастную маршрутизацию. RSVP может работать через такие мультикастные туннели следующим образом.
Path выходному логическому интерфейсу L, он включает в сообщение дескриптор логического интерфейса LIH (RSVP_HOP.Resv узлу N, он включает в него значение LIH из состояния прохода (содержится в объекте RSVP_HOP ).Resv прибывает в N, его значение LIH выдает информацию, необходимую для осуществления резервирования в определенном логическом интерфейсе. Заметим, что узел N создает и интерпретирует LIH, которое совершенно не доступно для узла N'.Переадресация сообщений RSVP должна исключать возможность образования петель. В спокойном состоянии сообщения Path и Resv направляются каждому узлу только раз за период обновления. Это исключает зацикливание пакетов, но имеется еще возможность петель автоматического обновления. Такие петли сохраняют состояние вечно, даже если оконечные узлы прекращают их обновление до тех пор, пока получатели не покинут мультикастинг-группу и/или отправители прекратят посылку сообщения Path. С другой стороны сообщения об ошибке и об аннулировании (teardown) посылаются немедленно и могут служить причиной возникновения циклов. Рассмотрим каждый тип сообщения.
Path. Эти сообщения направляются точно тем же путем, что и информационные IP-пакеты. Следовательно, не должно возникать циклов для сообщений типа Path (за исключением циклов, связанных с переходными процессами установления маршрута).PathTear. Эти сообщения используют ту же маршрутизацию, что и сообщения Path и, следовательно, не могут образовывать циклы.PathErr. Так как сообщения Path не образуют циклов, они формируют состояние прохода, описывающее обратный маршрут для каждого из отправителей, который не может иметь петель. Сообщения PathErr всегда направлены определенному отправителю и, следовательно, не могут образовывать циклы.Resv. Эти сообщения направлены определенному отправителю и не могут иметь циклы. Однако, сообщения Resv с произвольным выбором отправителя (wildcard) (стиль WF) имеет потенциал для запуска циклов обновления.ResvTear. Хотя сообщения ResvTear маршрутизируются так же, как и сообщения Resv, при повторном проходе по петле состояние будет отсутствовать (аннулировано) и любое сообщение ResvTear будет отброшено.ResvErr. Эти сообщения для стиля резервирования WF могут вызывать зацикливание по той же причине, что и для сообщений Resv.ResvConf. Эти сообщения направляются фиксированному уникастному получателю и не могут приводить к циклам.Если топология не содержит петель, зацикливания сообщений Resv и ResvErr при произвольном выборе отправителя можно избежать, следуя приведенному выше правилу: состояние, которое получено через определенный интерфейс, никогда не должно переадресовываться через этот же интерфейс. Однако когда топология содержит петли, необходимы дополнительные усилия для предотвращения циклов автоматического обновления для сообщений Resv и ResvErr с произвольным выбором отправителя. Решением этой проблемы может быть включение списка адресов получателей в объект SCOPE.
Когда сообщение Resv со стилем WF должно быть переадресовано определенному предыдущему узлу, следует определить новый список адресов для объекта SCOPE на основе аналогичного объекта, полученного с соответствующими сообщениями Resv. Если новый объект SCOPE пуст, сообщение не направляется предыдущему узлу. Правила для вычисления нового объекта SCOPE для сообщения Resv приведены ниже.
SCOPE состояния резервирования данной сессии. Если состояние резервирования от некоторых NHOP не содержит объектов SCOPE, должен быть создан заменяющий список отправителей, который и помещается в указанное объединение. Для сообщения, полученного выходным интерфейсом OI, список замен представляет собой набор отправителей, которые маршрутизированы на этот OI.SCOPE должен быть послан PHOP, следует удалить из набора любого отправителя, который не присылает данные через PHOP.На рис. 10.32 дан пример Resv -сообщений (стиль WF). Адресный список объекта SCOPE показан в квадратных скобках.
(рис 10.32) Объекты SCOPE при резервировании в стиле WFОбъекты SCOPE не являются обязательными, если мультикастинг-маршрутизация использует совместные деревья или если стиль резервирования предполагает явный выбор отправителей. При работе с объектами SCOPE в сообщениях ResvErr стиля WF следует придерживаться следующих правил.
ResvErr, содержащее копию объекта SCOPE, который соответствует состоянию резервирования или сообщению, вызвавшему ошибку.ResvErr с произвольным указанием отправителей (wildcard), содержащее объект SCOPE со списком адресов отправителей L. Сообщение ResvErr, переадресованное интерфейсу OI, должно содержать объект SCOPE, извлеченный из L и включающий только те адреса отправителей, которые маршрутизированы на OI. Если этот объект SCOPE пуст, сообщение ResvErr не должно посылаться OI.Основным правилом при формировании сообщения обновления Resv является объединение спецификаций flowspecs резервирования в узле посредством вычисления их LUB (наименьший верхний предел). Однако это правило модифицируется при наличии состояния блокады, возникшего из-за сообщений ResvErr при решении проблемы KR-II.
Когда получено сообщение ResvErr, его спецификация flowspec Qe используется для формирования или обновления элемента местного состояния блокады. Каждый элемент состояния блокады состоит из спецификации flowspec Qb, взятой из спецификации сообщения ResvErr, и соответствующего таймера блокады Tb. Когда время таймера блокады истекает, соответствующее состояние блокады аннулируется.
Гранулярность состояния блокады зависит от стиля сообщения ResvErr, которое явилось ее причиной. Каждому конкретному стилю может соответствовать свой элемент состояния блокады ( Qb(S),Tb(S) ), где S — отправитель. Для произвольного стиля выбора отправителя состояние блокады определяется предыдущим узлом P.
Элемент состояния блокады со спецификацией flowspec Qb называется блокадой резервирования со спецификацией flowspec Qi, если Qb не больше, чем Qi. Например, предположим, что LUB (least Qb блокирует Qi, если для некоторой компоненты $$j Qb[j] \le Qi[j]$$.
Предположим, что узел получает сообщение ResvErr от предыдущего узла P или, если стиль выбора отправителя S является явным — в результате ошибки доступа. Тогда:
P (или S ) создается элемент состояния блокады, если его не было;Qb(P) (или Qb(S) ) делается равным flowspec Qe из сообщения ResvErr ;Tb(P) (или Tb(S) ) на время Kb*R. Здесь Kb является фиксированным множителем, а R равно интервалу времени обновления состояния резервирования. Kb можно варьировать;P (или S );ResvErr переадресуется последующим узлам. Если бит InPlace=0, сообщение ResvErr направляется всем последующим узлам, где имеется состояние резервирования. Если бит InPlace=1, сообщение ResvErr направляется только следующим узлам, чьи Qi блокированы спецификацией Qb.В результате предлагается модифицированное правило для объединения спецификаций flowspecs при формировании сообщения обновления резервирования.
Qi, которые не заблокированы, они объединяются путем вычисления их LUB. Заблокированные резервирования игнорируются. Это позволяет требовать меньшее резервирование, которое имеет шанс на успех, после того как большее резервирование не удалось.Qi блокированы), они объединяются путем взятия GLB (Greatest Qi.Этот алгоритм объединения обновления применяется отдельно для каждого потока (каждого отправителя или PHOP), вносящего вклад в общее резервирование (стили WF или SE).
На рис. 10.33 приведен пример использования состояния блокады для совместного резервирования (стиль WF). Имеется два предшествующих узла, помеченных как (a) и (b), и два последующих узла, помеченных как (c) и (d). Большее резервирование 4B пришло сначала от (c), но "застряло" где-то до PHOP (a), а не по пути через PHOP (b). Рисунок показывает оконечное состояние после меньшего резервирования 2B, пришедшего позднее из (d). Это стабильное состояние нарушается каждые Kb*R секунд, когда состояние блокады удаляется по тайм-ауту. Следующее обновление (4B), посылаемое предыдущему узлу (a), предположительно будет отвергнуто путем посылки сообщения ResvErr, которое восстановит состояние блокады, возвращая ситуацию к тому, что изображено на рисунке. В то же самое время сообщение ResvErr будет направлено следующему узлу (c) и всем получателям, ответственным за резервирование 4B.
(рис 10.33) Блокада для стиля WF
Когда маршрут изменяется, следующее сообщение обновления Path или Resv установит проход или состояние резервирования (соответственно) вдоль нового маршрута. Чтобы обеспечить быструю адаптацию к изменениям маршрута, не вводя чрезмерно коротких периодов обновления, местный модуль протокола маршрутизации может сообщить процессу RSVP об изменении маршрута до определенных мест назначения. Процесс RSVP должен использовать эту информацию для запуска обновления в соответствующих областях с учетом изменения маршрута. При этом соблюдаются следующие правила спецификации.
W и затем послать сообщение обновление Path всем сессиям G/* (т.е., любой сессии с местом назначения G, вне зависимости от порта назначения). Короткая выдержка перед рассылкой сообщения обновления Path нужна, чтобы позволить завершиться переходным процессам в маршрутном протоколе. В настоящее время предлагается W = 2 сек; однако, эта величина должна быть задана при конфигурировании каждого интерфейса.Path с адресом предыдущего узла, который отличается от записанного в состоянии прохода, RSVP должен немедленно послать сообщение обновления Resv этому PHOP.Существует два временных параметра, соответствующие каждому элементу прохода или состоянию резервирования RSVP в узле: период обновления R между последовательными коррекциями состояния соседнего узла и время жизни локального состояния L. Каждое сообщение RSVP Resv или Path может содержать объект TIME_VALUES, специфицирующий значение R, которое было использовано при генерации данного сообщения обновления. Эта величина R затем используется для определения значения L. Величины R и L могут варьироваться от узла к узлу. Ниже данные соображения излагаются более подробно.
[0.5R, 1.5R].L должно удовлетворять условию L \ge (K + 0.5)*1.5*R, где K — небольшое целое число. Тогда, в худшем случае, K-1 последовательных сообщений могут быть потеряны без ликвидации состояния. Чтобы вычислить время жизни L для комбинации состояний с различными R R0, R1, ..., заменяем R на max(Ri). В настоящее время по умолчанию K = 3. Однако может быть необходимо установить большее значение K для узлов с высокой вероятностью потерь. K может устанавливаться при конфигурации интерфейса вручную или с помощью какой-либо адаптивной процедуры.Path или Resv несет в себе объект TIME_VALUES, который содержит время обновления R, использованное при генерации обновлений. Узел получателя использует это R для определения времени жизни L записанного состояния, созданного или обновленного данным сообщением.R выбирается локально для каждого из узлов. Если узел не использует локального восстановления резервирования, нарушенного в результате изменения маршрута, меньшее значение R ускоряет адаптацию к изменениям маршрута, но увеличивает издержки RSVP. Узел может настраивать эффективное значение R динамически, чтобы контролировать уровень издержек, связанных с сообщениями обновления. В настоящее время по умолчанию выбирается R = 30 секундам. Однако значение по умолчанию Rdef должно выбираться индивидуально для каждого интерфейса.R меняется динамически, существует предел того, как быстро оно может расти. Отношение величин R2/R1 не должно превосходить 1 + Slew .Max. В настоящее время, Slew .Max равно 0.30. При K = 3 один пакет может быть потерян без тайм-аута состояния, в то время как R увеличивается на 30% за период обновления.Rdef, K и Slew .Max, используемые в приложении, должны легко модифицироваться для каждого интерфейса.Некоторые уровни QoS могут требовать определенной политики в управлении трафиком в некоторых или всех перечисленных ниже случаях.
RSVP знает, где такие точки находятся, и должен обеспечивать этими данными механизм управления трафиком. С другой стороны, RSVP не интерпретирует информацию в flowspec и, следовательно, не знает, использованы ли рекомендации управления в каждом конкретном случае.
Процесс RSVP передает управлению трафиком специальный флаг политики для каждой из трех указанных выше ситуаций.
E_Police_Flag — управление входомЭтот флаг устанавливается для первого узла RSVP, который реализует управление трафиком. Например, ЭВМ-отправители должны поддерживать RSVP, но многие из них не поддерживают управление трафиком, — в этом случае флаг E_Police_Flag в ЭВМ-отправителе должен быть равен нулю. Флаг устанавливается равным 1, когда достигнута первая ЭВМ, поддерживающая управление трафиком. Это контролируется флагом E_Police в объектах SESSION.
M_Police_Flag — управление объединениемЭтот флаг должен быть установлен для резервирования, использующего стили WF или SE, когда объединяются потоки более чем одного отправителя.
B_Police_Flag — управление ветвлениемЭтот флаг должен быть установлен, когда инсталлированная flowspec меньше или сравнима с FLOWSPEC какого-либо другого интерфейса для того же самого FILTER_SPEC и SESSION.
RSVP должен также проверять наличие вдоль пути узлов, не поддерживающих RSVP, и переправлять эту информацию управлению трафиком. На основании этого флага и другой сопутствующей информации система контроля трафиком может обнаружить узлы, которые не способны обеспечить управление QoS. Эта информация передается получателям в спецификации Adspecs [RFC-2210].
При обычной IP-переадресации RSVP может обнаружить узлы без поддержки RSVP путем сравнения значения IP TTL, с которым послано сообщение Path, и полученного TTL. Для этой цели TTL помещается в общий заголовок. Однако TTL не всегда является надежным индикатором узлов без поддержки RSVP, и для этих целей иногда применяются другие средства. Например, если маршрутный протокол использует туннели с IP-инкапсуляцией, этот протокол должен проинформировать RSVP о наличии узлов, лишенных поддержки RSVP. В отсутствии автоматических механизмов осуществляется ручная конфигурация.
При работе с ЭВМ, имеющими несколько сетевых интерфейсов, требуется выполнение ряда специальных правил. К такого рода устройствам относятся и маршрутизаторы, которые поддерживают локальные прикладные программы.
Приложение, исполняемое на такой машине, должно явно указывать, через какой интерфейс осуществляется передача данного информационного потока, чтобы заменить интерфейс, заданный по умолчанию системой.
Посылка данных
Приложение отправителя использует API-вызов для декларации характеристик его информационного потока для RSVP. Этот вызов может опционно включать локальный IP-адрес отправителя. Если он установлен приложением, этот параметр должен быть адресом интерфейса для отправки информационных пакетов, в противном случае используется системный интерфейс по умолчанию.
RSVP-процесс ЭВМ посылает затем приложению сообщения Path только через специфицированный интерфейс.
Приложение-получатель использует вызов API для запроса резервирования RSVP. Этот вызов может опционно включать локальный IP-адрес получателя, т.е., адрес интерфейса для получения информационных пакетов. В случае мультикаст-сессий — это интерфейс, к которому подключилась группа. Если этот параметр опущен, система использует значение по умолчанию.
Процесс RSVP должен посылать сообщения Resv приложению через специфицированный интерфейс. Однако когда приложение исполняется в маршрутизаторе, а сессия является мультикастной, возникает более сложная ситуация. Предположим, что в этом случае приложение получателя присоединяется к группе через интерфейс Iapp, который отличается от Isp — ближайшего интерфейса по пути к отправителю. Теперь имеется два возможных пути для мультикастной маршрутизации при доставке информационных пакетов приложению. Процесс RSVP должен определить, какой вариант выбрать, просмотрев состояние прохода и решив, какой из входных интерфейсов следует использовать для посылки сообщений.
Local_only. Если существует состояние прохода Local_only для Iapp, сообщение Resv должно посылаться через Iapp. Заметим, что есть возможность для блоков состояния прохода Isp и Iapp иметь один и тот же следующий узел, если в маршрут вклинивается область, не поддерживающая RSVP.Resv должны будут посылаться через Isp.Path и PathTear переадресованы, состояние прохода, помеченное как Local_Only, должно игнорироваться.В будущем для существующих классов могут быть описаны новые объекты C-типа, а могут быть определены и новые классы объектов. Крайне желательно использовать такие объекты Интернет в рамках старых приложений, которые их не распознают. К сожалению, это возможно с заметными ограничениями. Здесь нужно придерживаться следующих правил (b в дальнейшем означает бит).
Существует три возможных способа, чтобы приложение RSVP могло работать с объектом неизвестного класса. Этот выбор определяется двумя старшими битами октета Class-Num.
Class-Num = 0bbbbbbb. Все сообщение должно быть отброшено и возвращена ошибка Unknown Object Class (неизвестный класс объекта).Class-Num = 10bbbbbb. Узел должен игнорировать объект без дальнейшей пересылки или отправки сообщений об ошибке.Class-Num = 11bbbbbb. Узел должен игнорировать объект, но может переадресовать его далее без модификации со всеми сообщениями, вызванными данным запросом.Ниже приведены более детализированные правила работы с нераспознанными классами объектов для Class-Num вида 11bbbbbb.
PathTear, ResvTear, PathErr или ResvErr, должны немедленно переадресовываться в рамках того же сообщения.Path или Resv, должны быть записаны в соответствующие состояния и посланы в сообщениях обновления, сопряженных с указанным состоянием.Resv путем объединения нескольких запросов резервирования, сообщение обновления должно включать в себя объединение объектов неузнанных классов всех компонентов запроса. В этом объединении каждый такой объект может присутствовать только один раз.Хотя объекты с неизвестным классом не могут объединяться, эти правила позволяют передать их вплоть до узла, который сможет их распознать и объединить.
Появление объекта с неизвестным C-типом приведет к выбрасыванию всего сообщения и генерации сообщения об ошибке ( ResvErr или PathErr ). Сообщение об ошибке будет включать Class-Num и C-тип, который был не распознан. Оконечная система, которая отправила нераспознанное сообщение, может использовать эту информацию, чтобы попытаться повторить попытку с объектом другого C-типа.
Объекты определенных классов ( FLOWSPEC, ADSPEC и POLICY_DATA ) не прозрачны для протокола RSVP, который просто передает их системе управления трафиком или другим модулям управления. В зависимости от внутренних правил любой из упомянутых модулей может отвергнуть C-тип и информировать об этом RSVP-процесс; RSVP должен тогда отвергнуть такое сообщение и проинформировать об ошибке.
RSVP в маршрутизаторе имеет интерфейсы для управления трафиком, а в ЭВМ — интерфейсы для приложений (т.е., API), а также для управления трафиком (если такой контроль предусмотрен).
Структура реального интерфейса может зависеть от операционной системы. Некоторые из вызовов предполагают асинхронную присылку информации.
Этот вызов инициирует RSVP обработку сессии, заданной DestAddress, ProtocolId и, возможно, номером порта DstPort. В случае успеха вызов SESSION возвращает локальный Session-id, который может использоваться при последующих вызовах.
Параметр Upcall_Proc_addr определяет адрес вызова процедуры получения кода ошибки или информации о событии. Параметр SESSION_object включен для организации механизма поддержки более общего описания сессии (обобщенный порт назначения). Обычно SESSION_object опускается.
Отправитель использует этот вызов, чтобы определить или модифицировать атрибуты информационного потока. Первое обращение к SENDER для регистрации сессии как Session-id заставит RSVP начать рассылку сообщений Path для данной сессии; последующие вызовы будут модифицировать информацию о проходе. Параметры SENDER интерпретируются следующим образом:
Source_Address. Это адрес интерфейса, через который будут посылаться данные. Если этот параметр пропущен, будет использоваться интерфейс по умолчанию. Этот параметр необходим для ЭВМ с двумя и более сетевыми интерфейсами;Source_Port. Это UDP/TCP порт, через который будут посылаться данные;Sender_Template. Этот параметр включен для поддержки механизма более общего описания отправителя (обобщенный порт источника). Обычно этот параметр может быть опущен;Sender_Tspec. Этот параметр описывает трафик потока (смотри [RFC-2210]);Adspec. Этот параметр может быть специфицирован для инициализации вычисления свойств QoS вдоль пути (смотри [RFC-2210]);Data_TTL. Это IP TTL параметр, который несут в себе информационные пакеты. Он необходим, чтобы гарантировать условие, при котором сообщения Path не будут попадать за пределы зоны мультикастинг-сессии;Policy_data. Это опционный параметр несет в себе управляющую информацию для отправителя. Эта информация может задаваться системной службой и для приложения может быть недоступной;RESERVE. Получатель использует этот вызов, чтобы осуществить или модифицировать резервирование session-id сессии. Первое обращение RESERVE инициирует периодическую передачу сообщений Resv. Последующие вызовы RESERVE могут служить для модификации параметров предыдущих обращений.Опционный параметр receiver_address может использоваться получателем в маршрутизаторе или ЭВМ с несколькими сетевыми интерфейсами; это IP-адрес одного из интерфейсов узла. Флаг CONF_flag должен быть установлен, если желательно подтверждение резервирования. Параметр Policy_data специфицирует управляющие данные получателя, в то время как параметр style указывает на стиль резервирования. Остальные параметры зависят от стиля; обычно они соответствуют спецификациям фильтра и flowspecs.
Отбой. Вызов: RELEASE( sessionid )Этот вызов удаляет состояние RSVP для сессии, указанной в sessionid. Узел затем шлет соответствующие сообщения отмены (teardown) и прекращает рассылку сообщений обновления для session-id.
Вызовы Error/Event (ошибка/событие)Общая форма вызова имеет вид:
Обращение: <Upcall_Proc>( ) > sessionid, Info_type, information_parameters
Upcall_Proc представляет собой процедуру, чей адрес был дан при вызове SESSION. Это обращение может произойти асинхронно в любое время после вызова SESSION до вызова RELEASE и служит для индикации ошибки или события.
В настоящее время имеется пять типов обращений, отличающихся параметром Info_type. Выбор информационных параметров зависит от типа.
Info_type = PATH_EVENTОбращение Path Event приводит к тому, что получение первого сообщения Path для данной сессии указывает приложению получателя на наличие, по крайней мере, одного отправителя или на изменение состояние прохода.
Это обращение выдает спецификации Sender_Tspec, Sender_Template, Adspec и управляющую информацию из запроса Path.
Info_type = RESV_EVENTОбращение Resv Event запускается в результате получения первого сообщения RESV или как следствие модификации предшествующего состояния резервирования для данной сессии.
Обращение (отклик): <Upcall_Proc>( ) > sessionid, Info_type = RESV_EVENT, Style, Flowspec, Filter_Spec_list [ , Policy_data ]
Flowspec — эффективное значение QoS, которое получено. Заметим, что сообщение Resv (стиль FF) может вызвать несколько обращений RESV_EVENT, по одному для каждого дескриптора потока.
Info_type = PATH_ERRORСобытие Path Error индицирует ошибку в информации отправителя, которая была специфицирована в запросе SENDER.
Параметр Error_code определяет ошибку, а Error_value может нести в себе некоторую дополнительную (возможно, системно-зависимую) информацию об ошибке. Параметр Error_Node специфицирует IP-адрес узла, который обнаружил ошибку. Параметр Policy_data_list, если он присутствует, содержит любые объекты POLICY_DATA из неудачного сообщения Path.
Info_type = RESV_ERRСобытие Resv Error указывает на ошибку в сообщении резервирования, в формировании которого приняло участие данное приложение.
Параметр Error_Node специфицирует IP-адрес узла, который обнаружил данное событие. Имеется два флага Error_flags:
— InPlace
Этот флаг может быть равен 1 при ошибке контроля доступа для индикации наличия резервирования в узле, где произошла ошибка. Этот флаг устанавливается при ошибке и транспортируется сообщениями ResvErr.
— NotGuilty
Этот флаг может быть равен 1 при ошибке контроля доступа для индикации того, что запрошенная получателем спецификация flowspec оказалась меньше той, которая вызвала ошибку. Этот флаг устанавливается API получателя.
Filter_spec_list и Flowspec содержат соответствующие объекты из дескриптора ошибки. List_count специфицирует число FILTER_SPECS в списке Filter_spec_list. Параметр Policy_data_list содержит любые объекты POLICY_DATA из сообщения ResvErr.
Info_type = RESV_CONFIRMСобытие Подтверждение указывает, что получено сообщение ResvConf.
Хотя сообщения RSVP, указывающие на события path или resv, могут приходить периодически, API должно послать соответствующие асинхронные отклики приложению только на первое из них или при изменении полученной информации. Все события, сопряженные с ошибками или подтверждениями, должны доводиться до сведения приложения.
Трудно представить общий интерфейс для управления трафиком, так как детали установления резервирования сильно зависят от технологии реализации канального уровня в интерфейсе.
Объединение RSVP-резервирований необходимо из-за мультикастной доставки данных, при которой информационные пакеты размножаются для отправки последующим узлам. В каждой такой точке размножения RSVP должен объединять запросы резервирования от последующих узлов путем выбора максимума их спецификаций flowspecs. В данном маршрутизаторе или ЭВМ может присутствовать несколько таких точек объединения/размножения.
Мультикастная IP рассылка выполняет разветвление потока на IP-уровне. В этом случае протокол RSVP должен объединять резервирования соответствующих выходных интерфейсов для последующей отправки запроса резервирования далее.
Размножение пакетов может происходить и после узла, например, в широковещательных сетях, в переключателях канального уровня или системе маршрутизаторов, не поддерживающих RSVP. В этих случаях RSVP должен объединять запросы резервирования от ряда предыдущих узлов, чтобы выполнить резервирование для одного выходного интерфейса
В технологиях с множественным доступом размножение пакетов может осуществляться на уровне канального драйвера или сетевого интерфейса.
В общем, эти сложности не влияют на реализацию протокола RSVP, нужно только четко определить, какие запросы резервирования следует объединить. Может оказаться желательным организовать реализацию RSVP из двух блоков: ядро, которое выполняет канально-независимую обработку, и адаптационный уровень, учитывающий канальную специфику.
Вызов: TC_AddFlowspec( Interface, TC_Flowspec,TC_Tspec, TC_Adspec, Police_Flags ) > RHandle [, Fwd_Flowspec]
Параметр TC_Flowspec определяет желательное значение QoS для управления доступом. Его значение вычисляется как максимум совокупности спецификаций flowspecs для последующих узлов (см. ниже описание вызова Compare_Flowspecs ). Параметр TC_Tspec определяет эффективное значение спецификации отправителя Tspec Path_Te. Параметр TC_Adspec задает спецификацию Adspec. Параметр Police_Flags несет в себе три флага: E_Police_Flag, M_Police_Flag и B_Police_Flag.
Если данный вызов оказался успешным, он устанавливает новый канал резервирования, соответствующий RHandle ; в противном случае, он возвращает код ошибки. Код RHandle используется вызывающей программой для будущих ссылок на это резервирование. Если служба управления трафиком модифицирует flowspec, вызов вернет модифицированный объект Fwd_Flowspec.
Вызов: TC_ModFlowspec( Interface, RHandle, TC_Flowspec, TC_Tspec, TC_Adspec, Police_flags ) [ > Fwd_Flowspec ]
Этот вызов используется для модификации существующего резервирования. TC_Flowspec передается блоку контроля разрешения. Если разрешения нет, текущая спецификация flowspec остается в силе. Соответствующие спецификации фильтров, если таковые имеются, остаются не затронутыми. Другие параметры определены так же, как и в TC_AddFlowspec. Если система модифицирует flowspec, вызов вернет также модифицированный объект Fwd_Flowspec.
Вызов: TC_DelFlowspec( Interface, RHandle )
Этот вызов ликвидирует существующее резервирование, включая спецификацию flowspec и все сопряженные спецификации фильтров.
Вызов: TC_AddFilter( Interface, RHandle, Session , FilterSpec ) > FHandle
Этот вызов добавляет новую спецификацию фильтра для резервирования, заданного RHandle. Запрос посылается после успешного вызова TC_AddFlowspec. Этот вызов возвращает дескриптор фильтра FHandle.
Вызов: TC_DelFilter( Interface, FHandle )
Этот вызов используется для удаления какого-либо фильтра, идентифицируемого FHandle.
Вызов: TC_Advertise( Interface, Adspec, Non_RSVP_Hop_flag ) > New_Adspec
Этот вызов используется при OPWA и служит для вычисления выходной спецификации New_Adspec для заданного интерфейса. Битовый флаг Non_RSVP_Hop_flag должен устанавливаться в случае, когда демон RSVP обнаруживает, что предшествующий узел содержит один или более маршрутизаторов, не поддерживающих RSVP. TC_Advertise вставит эту информацию в New_Adspec для оповещения обнаружения такого узла.
Обращение (отклик): TC_Preempt() > RHandle, Reason_code
Чтобы выдать новый запрос резервирования, модули контроля разрешения и управления могут осуществить выделение квот для одного или двух существующих резервирований. Это вызовет отклик TC_Preempt() на каждое привилегированное RSVP-резервирование, отправляя дескриптор резервирования RHandle и субкод причины.
Реализация RSVP нуждается в следующей поддержке со стороны механизма маршрутизации узла.
Запрос маршрута
Для пересылки сообщений Path и PathTear процесс RSVP должен быть способен запрашивать процесс маршрутизации с целью получения маршрутных данных.
Ucast_Route_Query( [ SrcAddress, ]
DestAddress, Notify_flag ) > OutInterface
Mcast_Route_Query( [ SrcAddress, ]
DestAddress, Notify_flag ) > [ IncInterface, ] OutInterface_list
В зависимости от протокола маршрутизации запрос может зависеть или нет от SrcAddress, т.е., от IP-адреса ЭВМ-отправителя, который является также IP-адресом источника сообщения. IncInterface характеризует интерфейс, через который ожидается прибытие пакета. Некоторые мультикастные протоколы маршрутизации могут не выдавать этот адрес. Когда флаг Notify_flag = True, блок маршрутизации отправит сообщение о непреднамеренном изменении маршрута, если такое изменение произойдет.
Мультикастный маршрутный запрос может вернуть пустой список OutInterface_list, если за оговоренным маршрутизатором нет ни одного получателя. Запрос маршрутной информации может вернуть сообщение No such route — такой маршрут отсутствует, возможно, в результате временной рассогласованности (например, сообщение Path или PathTear для запрошенного маршрута не дошло). В любом случае локальное состояние должно быть актуализовано так, как это требуется в запросе, который не может быть переслан далее.
При маршрутном запросе с флагом Notify_flag = True процесс маршрутизации может послать асинхронное сообщение процессу RSVP, который уведомляет об изменении определенного маршрута.
Ucast_Route_Change( ) > [ SrcAddress, ]
DestAddress, OutInterface Mcast_Route_Change( ) > [ SrcAddress, ]
DestAddress, [ IncInterface, ] OutInterface_list
RSVP должен быть способен запоминать, какой реальный и виртуальный интерфейсы являются активными, а также их IP-адреса.
Должна быть предусмотрена возможность логической дезактивации интерфейса для RSVP. Когда интерфейс дезактивирован, сообщения Path не должны проходить через данный интерфейс; если сообщение RSVP получено, оно должно быть отброшено (возможно, с соответствующей записью в журнале операций).
Реализация RSVP нуждается в следующей поддержке со стороны систем ввода/вывода пакетов и со стороны механизма переадресации узла.
Пакеты, полученные для IP-протокола (код 46), но не адресованные узлу, должны быть переправлены программе RSVP для последующей обработки. Сообщения RSVP, переправляемые таким образом, включают сообщения Path, PathTear и ResvConf. Эти типы сообщений несут в себе IP-опцию оповещение маршрутизатора (Router Alert), которая может быть использована для выделения этих пакетов в высокоскоростном канале переадресации. В качестве альтернативы узел может перехватывать все пакеты с кодом протокола 46.
В маршрутизаторе или ЭВМ с несколькими сетевыми интерфейсами идентификация интерфейса (реального и виртуального), через который получено заданное сообщение, так же, как IP-адрес источника и TTL, с которым оно получено, должна быть доступна для процесса RSVP.
RSVP должен уметь обеспечить посылку дейтограммы через специальный выходной интерфейс (реальный или виртуальный) в обход обычного механизма маршрутизации. Виртуальным каналом может быть, например, мультикастный туннель.
RSVP должен быть способен специфицировать IP-адрес отправителя и TTL, которые могут использоваться при посылке сообщений Path.
RSVP должен быть способен вызвать посылку сообщения Path, PathTear и ResvConf с опцией оповещения маршрутизатора (Router Alert).
Flowspecs, Tspecs и Adspecs являются объектами, совершенно недоступными для RSVP; их содержимое определено в документах спецификации услуг. Чтобы манипулировать этими объектами, процесс RSVP должен иметь в своем распоряжении следующие программы, зависящие от типа услуг.
Compare_Flowspecs( Flowspec_1, Flowspec_2 ) > result_code
Возможный результат операции result_codes указывает: flowspecs равны, Flowspec_1 меньше, Flowspec_2 больше, flowspecs совместимы и можно вычислить LUB, или flowspecs не совместимы. Заметим, что, сравнивая две спецификации, мы косвенно сопоставляем Tspecs, которые они содержат. Хотя процесс RSVP не может сам осуществить разбор flowspec с целью извлечения Tspec, он может использовать вызов процедуры Compare_Flowspecs для косвенного вычисления Resv_Te.
LUB_of_Flowspecs( Flowspec_1, Flowspec_2 ) > Flowspec_LUB
GLB_of_Flowspecs( Flowspec_1, Flowspec_2 ) > Flowspec_GLB
Compare_Tspecs( Tspec_1, Tspec_2 ) > result_code
Возможным результатом процедуры result_codes может быть: Tspecs равны или Tspecs не равны.
Sum_Tspecs( Tspec_1, Tspec_2 ) > Tspec_sum
Этот вызов используется для вычисления Path_Te.
Протокол SIP является лишь одним из протоколов, которые обеспечивают мультимедийный обмен через Интернет. SIP представляет собой сигнальный протокол, который позволяет одному партнеру послать запрос другому и согласовать параметры мультимедиа-сессии.
Собственно транспортировка мультимедиа-данных обычно осуществляется с помощью протокола RTP (RealTime Transport Protocol).
Базовым стимулом создания протокола SIP являлась необходимость реализации работы с VoIP (Voice over IP). Протокол поддерживает пять аспектов, сопряженных с установлением и завершением мультимедийных коммуникаций.
Положение пользователя. Пользователи могут менять свое положение и сохранять доступ к телефонии и другим приложениям дистанционно.
Доступность пользователя. Предполагается проверка готовности парнера-адресата участвовать в коммуникациях.
Возможности пользователя. Определяются параметры среды, которые должны быть использованы.
Формирование сессии. Создается соединение точка-точка или сессия с несколькими партнерами при заданных коммуникационных параметрах.
Управление сессией. Предполагается создание и завершение сессий, модификация параметров сессии и сервисов.
SIP базируется на модели транзакций, сходных с запросами/откликами в протоколе HTTP. Каждая транзакция состоит из запроса клиента, который включает в себя определенный метод, или функцию, для сервера и, по крайней мере, один отклик. SIP использует большинство полей заголовков, правил кодирования и кодов статуса протокола HTTP. Это позволяет работать с данными легко читаемого и отображаемого формата. SIP применяет протокол
Система, использующая SIP, может рассматриваться как состоящая из клиентов, серверов и индивидуальных сетевых элементов. RFC-3261 определяет клиента и сервер следующим образом.
Клиент. Клиент является субъектом сети, который посылает SIP-запросы и получает SIP-отклики. Клиенты, если это требуется, могут непосредственно взаимодействовать с человеком. Агент пользователя клиента и прокси являются клиентами.
Сервер. Сервер является сетевым элементом, который получает запросы и должен их обслуживать, посылая отклики. Примерами серверов являются прокси, агенты пользователя серверов, серверы переадресации и регистраторы.
Индивидуальные элементы стандартной конфигурации включают в себя:
Агент пользователя. Резидентно присутствует в каждой конечной станции SIP. Он выполняет две роли:
Агент пользователя клиента
Сервер переадресации. Используется во время инициализации сессии, чтобы определить адрес запрашиваемого устройства. Сервер переадресации отсылает полученную информацию устройству, инициировавшему запрос, направляя
Прокси сервер. Является промежуточным объектом, который действует как сервер и как клиент, чтобы реализовать запросы для обслуживания других клиентов. Прокси сервер играет роль маршрутизатора, его задача заключается в отслеживании того, что запрос будет послан другому объекту, более близкому к клиенту. Прокси серверы полезны также для реализации определенной политики (например, гарантирование пользователю возможности послать запрос). Прокси сервер интерпретирует и если нужно, переписывает специфические части сообщения-запроса перед его отправкой.
Регистратор. Является сервером, который принимает запросы REGISTER и помещает информацию, которую он получает (SIP-адрес и ассоциированный IP-адрес регистрирующего устройства) из этих запросов, в службу локализации для домена, который обслуживает.
Служба локализации. Используется серверами переадресации SIP или прокси, чтобы получить информацию о возможном положении источника запроса. Для этой цели служба локализации поддерживает базу данных SIP-адресов/ IP-адресов.
В RFC-3261 в качестве логических устройств определены различные серверы. Они могут быть использованы в качестве отдельных серверов в Интернет или могут объединяться в рамках одного приложения, которое работает резидентно на определенном физическом сервере.
(рис 10.34) Протоколы и компоненты SIPНа рис. 10.34 показано, как некоторые SIP компоненты связаны друг с другом и с протоколами, которые они применяют. Агент пользователя А использует SIP для установления сессии с другим агентом пользователя B, который выступает в роли сервера. Диалог запуска сессии пользуется SIP и включает один или более прокси серверов, чтобы переадресовать запросы и отклики между двумя агентами пользователя. Агенты пользователя работают также с протоколом
Прокси серверы могут, если это требуется, работать в качестве серверов переадресации. Система DNS (Domain Name System) является важной частью, реализующей протокол SIP. Обычно,
Из эксплуатационных соображений SIP часто работает поверх UDP (User Datagram Protocol), и обеспечивает свои собственные механизмы обеспечения надежности доставки, но может использовать и TCP. Если необходим безопасный или криптографический транспортный механизм, сообщения SIP могут передаваться посредством протокола TLS (Transport Layer Security).
С протоколом SIP ассоциирован
Ресурсы в конфигурации SIP идентифицируются URI. Примерами ресурсов могут служить:
URI SIP имеют формат, базирующийся на формате адресов email, в частности user@domain. Существует две общие схемы. Обычные URI имеют форму:
sip:ааа@itep.com
URI могут также включать пароль, номер порта и сопряженные параметры. Если требуется безопасная передача, sip: заменяется на sips:. В последнем случае сообщения SIP передаются с привлечением протокола TLS.
Спецификация SIP достаточно сложна; главный документ, RFC-3261, содержит 269 страниц. Для пояснения работы протокола рассмотрим несколько примеров.
На рис. 10.35 показана успешная попытка пользователя А установить сессию с пользователем B, чье URI bbb@itep.com. [10.9]
(рис 10.35) DNS-сервер откликается (4) отправкой IP-адреса прокси сервера itep.com. Прокси сервер А может теперь переадресовать сообщение INVITE выходному прокси серверу (5), который посылает подтверждение сообщения (6). Входной прокси сервер теперь консультируется с сервером локализации для определения адреса B (7), а сервер локализации откликается посылкой адреса B, что позволяет послать ему сообщение SIP (8).
Прокси сервер может теперь отослать сообщение INVITE B (9). Посылается отклик от B к А (10, 11, 12), в то время как
Наконец,
(рис 10.36) В следующем примере (рис. 10.36) используется два типа сообщений, которые пока еще не входят в стандарт SIP, но описаны в документе RFC-2848 [5] и вероятно будут включены в последующие версии SIP. Эти типы сообщений поддерживают телефонные приложения. Предположим, что в предыдущем примере А была проинформирована о том, что B недоступен.
Этот запрос будет переадресован в нашем случае через два прокси к серверу PINT (Public Switched
На рис. 10.37 показано продолжение обмена. B подключается к системе локализации, послав сообщение REGISTER прокси серверу своего домена (1). Прокси обновляет базу данных службы локализации, отражая факт регистрации (2). Обновление подтверждается прокси (3), что подтверждает регистрацию B (4). PINT воспринимает новый статус B от сервера локализации и посылает сообщение NOTIFY, содержащее новый статус B (5). Это сообщение переадресуется А (6, 7).
Как было замечено, SIP является протоколом, базирующемся на текстах, с синтаксисом, сходным с HTTP. Существует два разных типа SIP сообщений: запросы и отклики. Различие форматов этих сообщений проявляется в первой строке. Первая строка запроса содержит метод, определяющий природу запроса, и URI запроса, указывающий, куда следует послать запрос. Первая строка отклика содержит код отклика. Все сообщения имеют заголовок, состоящий из нескольких строк, каждая строка начинается с метки заголовка. Сообщение может содержать в себе описание транспортируемых данных
(рис 10.37) REGISTER (регистр). Используется агентом пользователя, чтобы проинформировать конфигурацию SIP о своем текущем IP адресе и URL, для которого желательно получать вызовы.INVITE (приглашение). Применяется, чтобы установить медийную сессию между агентами пользователей.ACK. Подтверждает надежную доставку сообщения.CANCEL (аннулирование). Прерывает обслуживание незавершенного запроса, но не изменяет BYE. Завершает сессию между двумя пользователями.OPTIONS (опции). Запрашивает информацию об источнике запроса, но не реализует сам запрос.Например, заголовок сообщения (1) на рис. 10.35 может выглядеть следующим образом:
INVITE sip:bbb@ itep.com SIP/2.0 Via: SIP/2.0/UDP 12.26.17.91:5060 MaxForwards: 70 To: B <sip:bbb@ itep.com From: A <sip:aaa@iae.com;tag=1928301774 CallID: a84b4c76e66710@12.26.17.91 CSeq: 314159 INVITE Contact: <sip:aaa@iae.com> ContentType: application/sdp ContentLength: 142
Первая строка содержит название метода ( INVITE ), SIP URI, номер используемой версии протокола SIP. Последующие строки представляют собой список полей заголовка. В данном примере представлен минимально необходимый набор.
Заголовки Via показывают путь запроса через конфигурацию SIP (отправитель и промежуточные прокси), и используются при передаче по тому же маршруту откликов. Когда посылается сообщение INVITE, оно имеет только заголовок, вставленный А. Строка содержит IP адрес (12.26.17.91), номер порта (5060), и транспортный протокол (UDP), которые B должен применить в отклике.
Заголовок MaxForwards ограничивает число шагов, которые запрос может сделать до точки назначения. Содержимое этого поля является целым числом, которое декрементируется на 1 каждым прокси, переадресующим запрос. Если значение MaxForwards станет равным 0, прежде чем запрос достигнет места назначения, он отвергается с кодом ошибки в отклике, равным 483 (Too Many Hops – слишком много шагов).
Поле заголовка To содержит имя (B) и URI SIP или SIPS (sip:bbb@ itep.com), которому первоначально предназначался запрос. Поле заголовка From также содержит имя (A) и URI SIP или SIPS (sip:aaa@, которое указывает на отправителя запроса. Это поле заголовка имеет также свободный параметр, который содержит произвольную строку (1928301774), добавляемую к URI
Поле заголовка Call-ID содержит глобально уникальный идентификатор данного вызова, генерируемый из комбинации псевдослучайной строки и имени ЭВМ или IP-адреса. Комбинация тэгов To, From и Call-ID полностью определяет отношение SIP партнеров А и B.
CSeq или поле заголовка Command Sequence содержит целое число и имя метода. Число CSeq инициализируется в начале вызова (в данном примере 314159), инкрементируется для каждого нового запроса в рамках диалога и является традиционным порядковым номером. CSeq используется, чтобы отличить повторную передачу от нового запроса.
Поле заголовка Contact содержит SIP URI для непосредственной коммуникации между агентами пользователя. Несмотря на то, что поле заголовка Via говорит другим элементам, куда следует посылать отклик, поле заголовка Contact сообщает другим элементам, куда посылать будущие запросы для заданного диалога.
Поле заголовка ContentType указывает на тип тела сообщения. Поле заголовка ContentLength содержит длину тела сообщения в октетах.
Типы откликов SIP, определенных в RFC-3261, имеют следующие категории.
Например, заголовок сообщения (13) на рис. 10.35 может выглядеть следующим образом:
SIP/2.0 200 OK Via: SIP/2.0/UDP server10.itep.com Via: SIP/2.0/UDP bgb3.site3.iae.com Via: SIP/2.0/UDP 12.26.17.91:5060 To: B <sip:bbb@itep.com;tag=a6c85cf From: A <sip:aaa@iae.com;tag=1928301774 CallID: a84b4c76e66710@12.26.17.91 CSeq: 314159 INVITE Contact: <sip:bbb@itep.com> ContentType: application/sdp ContentLength: 131
Первая строка содержит номер версии SIP, которая используется, код отклика и имя. Последующие строки представляют собой список полей заголовка. Поля заголовка Via, To, From, Call-ID и CSeq копируются из запроса INVITE. (Существует три значения поля заголовка Via — одно связано с
Протокол
медиа-потоках. Сессия может реализовывать несколько потоков данных. В протоколе
адресах.
портах. Для каждого потока специфицируются номера UDP портов для отправителя и получателя;
типах данных. Для каждого используемого типа потока (например, телефония) тип поля данных указывает на медиа-форматы, которые могут применяться во время сессии;
времени старта и остановки. Эти данные используются в случае широковещательных сессий, например, телевизионных или радиопрограмм. Указываются время начала, завершения и времена повторов сессии;
инициаторе. Для широковещательных сессий инициатор специфицируется контактной информацией. Это может быть полезно, если получатель встретится с техническими трудностями.
Несмотря на то, что
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.