
- •Глава 7 Группа Sigtran
- •7.1. Система общеканальной сигнализации №7 в ip-сети
- •Архитектура Sigtran
- •Транспортный протокол с управлением потоками
- •Основные функциональные возможности sctp
- •Множественная адресация
- •С множественной адресацией
- •Соединения для нескольких потоков
- •Фрагменты
- •7.3.5. Фрагмент полезной нагрузки data
- •Б.С.Гольдштейн
- •Установление соединения
- •Протокол m3ua
- •Функции m3ua
- •Терминология
- •Код пункта сигнализации
- •Примитивы
- •7.4.5. Сообщения m3ua
- •Протокол m2ua
- •Протокол м2ра
- •Протокол sua
- •Протокол iua
- •Протокол v5ua
Рис.
7.3. Соединение SСТР
для оконечных пунктов
С множественной адресацией
Встроенная поддержка протоколом SСТР оконечных пунктов с множественной адресацией особенно полезна в среде, которая требует высокой доступности приложений, как в случае транспор-
тировки сигналов ОКС7. Соединение SСТР с множественной адресацией может также ускорять восстановление после отказов канала без прерывания текущей пересылки данных.
Соединения для нескольких потоков
Когда устанавливается соединение между оконечными пунктами, нужно учитывать количество потоков, которые это соединение должно поддерживать. Д. Коллинз в [39] приводит наглядную аналогию: если представить себе соединение как одностороннюю автомобильную магистраль между оконечными пунктами, то отдельные потоки, которые оно поддерживает, будут аналогичны отдельным полосам движения на этой магистрали.
Возвращаясь от этой наглядной аналогии к практическому применению принципа, приведем рис. 7.4, иллюстрирующий возможность мультиплексировать данные приложения верхнего уровня в одном SСТР-соединении [106].
Рис.
7.4.
SСТР-соединение
для четырех потоков данных одного
приложения
В каждом потоке производится упорядочение данных. Если фрагмент пакета, принадлежащего некоторому потоку потерян, то фрагменты этого пакета, следующие за потерянным, будут сохраняться в буфере приемника потока, пока потерянный фрагмент не будет передан источником повторно. Однако фрагменты пакетов из других потоков могут по-прежнему проходить в приложение верхнего уровня. Этим исключается блокировка head-of-line, которая имеет место в TCP, где данные из всех приложений верхнего уровня пересылаются в одном потоке. Иначе говоря, эффект блокировки head-of-line ограничен пределами отдельных потоков, но не проявляется для соединения в целом. Проще говоря, каждый поток обрабатывается отдельно, так что доставка сообщений одного потока не задерживается из-за ожидания следующего по порядку сообщения другого потока.
В заключение этого раздела напомним, что для передачи сообщения пользователя (user message), получаемого от протокола верхнего уровня ULP, SCTP передает в IP так называемый пакет SCTP, а тот маршрутизирует его к месту назначения. Пакет SCTP состоит из общего заголовка и нескольких фрагментов (chunks), как показано на рис. 7.5.
Фрагменты
Фрагмент (chunk - небольшой кусок) - это часть информации внутри SCTP-пакета, состоящая из заголовка и содержимого, зависящего от приложения. Общий заголовок SCTP-пакета на рис.7.5 включает в себя номера портов источника и пункта назначения, которые в сочетании с IP-адресами источника и пункта назначения однозначно определяют оконечные пункты. Далее в состав заголовка входит тэг верификации, который используется для подтверждения данных об отправителе пакета. Тэг верификации еще будет описан в этой главе подробнее.
Общий заголовок содержит также контрольную сумму Adler-32, которая образуется особым подсчетом значений всех октетов пакета. Эта контрольная сумма служит для того, чтобы гарантировать отсутствие повреждений в полученном пакете, и обеспечивает еще один уровень защиты в дополнение к контрольной сумме заголовка IP.
За общим заголовком следуют несколько фрагментов. Каждый фрагмент содержит свой заголовок плюс некоторое содержимое. Это содержимое может быть либо управляющей информацией SCTP, либо информацией пользователя SCTP В случае пользовательской информации SCTP из ULP значение идентификатора ID фрагмента равно 0, обозначая данные полезной нагрузки пользователя. В ином случае идентификатор фрагмента будет иметь значение, указывающее тип управляющей информации SCTP. Возможные значения флагов и длины зависят от идентификатора фрагмента.
Рис.
7.5. Формат пакета SCTP
Хотя всего может быть до 256 разных идентификаторов фрагмента, существуют четыре основные их категории: идентификаторы переноса данных пользователя SCTP, идентификаторы переноса управляющей информации SCTP, идентификаторы, которые резервированы IETF, и идентификаторы переноса расширений, определенных IETF. Типы фрагментов описываются в табл. 7.1.
Таблица 7.1. Фрагменты пакетов протокола SCTP
Имя фрагмента |
Описание применения |
DATA (0) |
Фрагменты с данными, передаваемыми портами терминалов после того, как между ними установлено SCTP-соединение. Чтобы обеспечить раннюю передачу данных, фрагменты DATA могут объединяться в группы с управляющими фрагментами COOKIE-ECHO и COOKIE-ACK, пока управляющие фрагменты идут в сообщении первыми. Сообщения могут сегментироваться, чтобы не превышался заданный максимальный размер передаваемого блока информации MTU. Если это имеет место, то флаг фрагмента указывает начало и конец сегмента исходного сообщения. Фрагменты DATA могут доставляться в порядке их приема (и тогда они могут быть неупорядоченными), или же перед доставкой сообщения к протоколу верхнего уровня может производиться полная сборка исходного сообщения Тип обслуживания, запрашиваемый потоком, указывается флагом фрагмента |
INIT (1) |
Это первый фрагмент, который инициирует установление SCTP-co- единения между двумя терминалами. Он переносит такие параметры, как транспортный адрес соединения (может быть более одного адреса и может быть адрес протокола IPv4, IPv6 или их сочетание), количество входящих потоков, которое может поддерживать отправитель, и количество исходящих потоков, которое желает поддерживать отправитель в данном SCTP-соединении. Здесь же удаленному порту сообщается о резервировании ресурсов отправителем (размер входного буфера в байтах) |
INIT АСК (2) |
Подтверждает прием фрагмента INIT и содержит переменную состояния cookie. Может также идентифицировать неопознанные параметры в сообщении INIT и, подобно INIT, задает количество выходных и входных потоков для SCTP-соединения с портом терминала, а также транспортные адреса, которые могут использоваться в этом соединении |
SACK (3) |
Подтверждает получение фрагментов DATA или информирует о том, что в последовательности принятых фрагментов DATA имеется разрыв |
HEARTBEAT REQUEST (4) |
Передается периодически для подтверждения доступности порта получателя |
HEARTBEAT АСК (5) |
Подтверждает запрос HEARTBEAT АСК. Должен передаваться на исходный IP-адрес отправителя фрагмента HEARTBEAT REQUEST |
ABORT (6) |
Немедленно закрывает SCTP-соединение и может содержать параметры, которые указывают причину |
SHUTDOWN (7) |
Передается, чтобы инициировать постепенное закрытие SCTP-соединения |
SHUTDOWN ACK (8) |
Получатель сообщения SHUTDOWN передает это сообщение как подтверждение |
ERROR (9) |
Указывает разные неисправности на порте. Ошибки могут быть внутренними или ошибками протокола, такими как некорректные параметры при управлении фрагментами DATA |
COOKIE ECHO (10) |
Используется только в фазе установления SCTP-соединения и завершает процесс установления соединения у отправителя данных. Может объединяться в группу с фрагментом DATA, но должен быть первым фрагментом в такой связке |
COOKIE-ACK (11) |
Подтверждает получение COOKIE-ECHO в фазе установления SCTP-соединения. Может объединяться в группу с фрагментом DATA, но должен быть первым фрагментом в такой связке |
ECNE (12) и CWR (13) |
Уведомление о явной перегрузке и уменьшенное окно перегрузки, резервированы для будущего использования |
SHUTDOWN COMPLETE (14) |
Подтверждает получение SHUTDOWN АСК |
Значения ID фрагментов кодируются двумя старшими битами, определяющими действие, которое нужно выполнить в случае, если обрабатывающий оконечный пункт не узнает тип фрагмента. Возможные значения этих битов и их смысл:
00 - остановить обработку этого пакета SCTP и отбросить его; остальные фрагменты в этом пакете не обрабатывать;
01 - остановить обработку этого пакета SCTP и отбросить его; остальные фрагменты в этом пакете не обрабатывать. Отправить сообщение о неопознанном параметре Unrecognized Parameter Туре (в фрагменте ERROR или INIT АСК);
10 - пропустить этот фрагмент и продолжить обработку;
11 - пропустить этот фрагмент и продолжить обработку, но отправить сообщение в фрагменте ERROR с использованием Unrecognized Parameter Туре в качестве причины ошибки.
Фрагмент INIT используется для инициирования соединения SCTP между двумя оконечными пунктами. В отличие от многих других, фрагмент INIT не должен делить пакет SCTP с другими фрагментами. Иначе говоря, пакет SCTP, содержащий фрагмент INIT, не должен содержать никаких других фрагментов.
Фрагмент INIT АСК используется для подтверждения инициирования соединения SCTP. Как и фрагмент INIT, фрагмент INIT АСК не должен делить пакет SCTP с другими фрагментами.
Фрагмент SACK служит для подтверждения приема фрагментов DATA (полезной нагрузки) и уведомления отправителя о пропусках в последовательности принятых фрагментов. Не каждый принятый фрагмент заслуживает передачи в ответе фрагмента SACK. Фрагмент SACK работает как указатель места пропуска. Предположим, что приемник получил фрагменты с 1 по 5, а также фрагменты 8 и 9, Сообщение SACK информирует об отсутствии фрагментов 6 и 7. Нужно повторно передать только эти фрагменты. Такой метод эффективнее механизма повторной передачи в TCP.
Фрагмент HEARTBEAT используется для проверки досягаемости определенного оконечного пункта. Предположим, что в течение некоторого отрезка времени никакие фрагменты передавать из оконечного пункта А в оконечный пункт В не нужно. В этом случае оконечный пункт А будет периодически передавать в оконечный пункт В сообщения HEARTBEAT, чтобы убедиться в работоспособности оконечного пункта В. Фрагмент HEARTBEAT содержит специальную информацию отправителя. Получатель фрагмента HEARTBEAT должен ответить фрагментом HEARTBEAT АСК, который содержит информацию, скопированную из принятого фрагмента HEARTBEAT.
Фрагмент ABORT передается оконечным пунктом, чтобы резко прекратить соединение. Этот фрагмент может содержать информацию о причине прекращения соединения и может быть передан в одном пакете с другими управляющими фрагментами SCTP. Однако в таких случаях он должен быть последним фрагментом в пакете. Если он передается не последним в пакете, то следующие за ним фрагменты игнорируются. Фрагменты DATA не должны входить в состав пакета, содержащего фрагмент ABORT.
Фрагмент SHUTDOWN используется для плавного прекращения соединения. Если приложение верхнего уровня или управляющее приложение хочет закрыть соединение, то оконечный пункт прекращает передачу новых данных на дальний конец. Он будет ждать, пока не получит подтверждения всех переданных данных, а затем передаст на дальний конец фрагмент SHUTDOWN, чтобы закрыть соединение. SHUTDOWN будет указывать последний фрагмент DATA, принятый от дальнего конца. Если это необходимо, оконечный пункт может повторно передать данные пользователя на дальний конец и только потом передать фрагмент SHUTDOWN.
После приема фрагмента SHUTDOWN оконечный пункт может убедиться, что все данные пользователя, которые он передал, подтверждены, и, если необходимо, повторно передать данные на дальний конец. Если действительно все, что оконечный пункт передавал прежде, получено, он должен передать фрагмент SHUTDOWN АСК.
После получения SHUTDOWN АСК отправитель SHUTDOWN должен ответить фрагментом SHUTDOWN COMPLETE и может стереть все сведения о соединении. Когда дальний конец принимает фрагмент SHUTDOWN COMPLETE, он тоже может стереть все сведения о соединении. В этот момент соединение разрушено.
Фрагмент ERROR передается для уведомления об обнаруженных оконечным пунктом ошибочных ситуациях. В состав фрагмента обычно входит извещение о причине ошибки, чтобы обеспечить возможность дальнейшей ее обработки. Например, оконечный пункт мог получить фрагмент несуществующего потока или фрагмент, в котором отсутствуют некоторые обязательные параметры. Получение фрагмента ERROR само по себе не указывает на непоправимое состояние. Переданный фрагмент ERROR просто может дать возможность приемнику исправить ошибочное состояние. Если ясно, что ошибочное состояние непоправимо, фрагмент ERROR может быть передан в той же дейтаграмме, что и фрагмент ABORT.
Фрагмент COOKIE ECHO используется только во время инициирования соединения. Когда оконечный пункт получает фрагмент INIT и отвечает фрагментом INIT АСК, он включает в состав INIT АСК параметр cookie. Этот параметр содержит особую для оконечного пункта и для его представления соединению информацию, временную метку, и значение времени жизни параметра cookie (рекомендуется 5 секунд). Когда на дальний конец приходит INIT АСК, копия
cookie вводится в фрагмент COOKIE ECHO, который передается в обратном направлении. COOKIE ECHO может передаваться в пакете, который содержит также фрагменты DATA. Однако в таком случае фрагмент COOKIE ECHO должен быть первым фрагментом в пакете.
Фрагмент COOKIE АСК передается в ответ на фрагмент COOKIE ECHO. Поэтому COOKIE АСК используется только во время установления соединения. Поскольку содержимое фрагмента COOKIE АСК такое же, какое было передано в INIT АСК, отправитель INIT АСК может убедиться, что инициатор соединения принял информацию cookie правильно. Если фрагмент COOKIE ECHO был принят без ошибок и в течение указанного для cookie времени жизни, приемник COOKIE ECHO передает фрагмент COOKIE АСК. В противном случае передается фрагмент ERROR. Фрагмент COOKIE АСК может передаваться в той же дейтаграмме, что и фрагменты DATA, но должен быть первым фрагментом в этой дейтаграмме.