Запуск и завершение связи SCTP
Здесь приведена информация о запуске и завершении связи SCTP.
Связь SCTP состоит из четырехэтапного квитирования, которое происходит в следующем порядке:
- Клиент отправляет серверу сигнал INIT, чтобы инициировать связь.
- После получения сигнала INIT сервер отправляет клиенту ответ INIT-ACK. Этот сигнал INIT-ACK содержит cookie состояния. Сookie состояния содержит Идентификационный код сообщения (MAC), а также системное время создания cookie, срок действия cookie и информацию, необходимую для установки связи. MAC подсчитывается сервером на основе секретного ключа, известного только ему.
- После получения этого сигнала INIT-ACK клиент отправляет ответ COOKIE-ECHO, который просто повторяет cookie состояния.
- После проверки идентичности cookie состояния с помощью секретного ключа сервер выделяет ресурсы для связи, отправляет ответ COOKIE-ACK, подтверждая получение сигнала COOKIE-ECHO, и переводит связь в состояние ESTABLISHED (установлено).
SCTP также поддерживает контролируемое завершение активной связи по запросу пользователя SCTP. Это происходит следующим образом:
- Клиент отправляет сигнал SHUTDOWN серверу, сообщая о своей готовности закрыть соединение.
- Сервер отвечает, отправляя подтверждение SHUTDOWN-ACK.
- Затем клиент отправляет сигнал SHUTDOWN-COMPLETE обратно серверу.
SCTP также поддерживает быстрое закрытие активной связи (сигнал ABORT) по требованию клиента SCTP или из-за ошибки в стеке SCTP. Тем не менее, SCTP не поддерживает полуоткрытые соединения. Более подробные сведения об этом протоколе содержатся в RFC 4960.
Кроме указанных выше отличий SCTP от существующих транспортных протоколов, вSCTP предусмотрены следующие функции:
- Последовательная доставка в потоках: потоком в контексте SCTP называется последовательность пользовательских сообщений, передаваемых между конечными точками. Связь SCTP может поддерживать многопоточность. В ходе установки связи пользователь может указать число потоков. Фактическое значение числа потоков фиксируется после переговоров с другим участником соединения. В каждом потоке строго сохраняется порядок доставки данных. Однако доставка данных в параллельных потоках происходит независимо. Таким образом, потеря данных в одном потоке не мешает передаче данных в других потоках. Это позволяет пользовательским приложениям применять разные потоки для передачи логически независимых данных. Данные можно передавать и неупорядоченно - для этого служит специальная опция. Это может оказаться полезным, если требуется срочная передача данных.
- Фрагментация пользовательских данных: SCTP может фрагментировать пользовательские сообщения, чтобы размер пакетов, передаваемых на нижний уровень, не превышал MTU пути. После получения фрагменты объединяются в сообщение и передаются пользователю. Несмотря на то, что фрагментация может происходить и на сетевом уровне, фрагментация на транспортном уровне имеет некоторые преимущества перед фрагментацией на IP-уровне. К этим преимуществам относятся отсутствие необходимости повторно отправлять все сообщение целиком при потере отдельных фрагментов в сети и снижение нагрузки на маршрутизаторы, которым в ином случае пришлось бы выполнять IP-фрагментацию.
- Подтверждение и управление нагрузкой: для надежной доставки данных необходимо подтверждение получения пакетов. Когда SCTP не получает подтверждения доставки отправленного пакета за отведенное время, он посылает этот пакет еще раз. SCTP использует практически те же алгоритмы управления нагрузкой, что и TCP. Помимо применения совокупных подтверждений, используемых в TCP, SCTP использует и выборочные подтверждения (SACK), позволяющие выборочно подтверждать получение пакетов.
- Комплекты порций: порция может содержать пользовательские данные или управляющую информацию SCTP. Несколько порций могут быть объединены под одним заголовком SCTP. Комплекты порций формируются, образуя пакет SCTP, отправителем и расформировываются получателем.
- Проверка пакетов: каждый пакет SCTP содержит поле с тегом проверки, который задается каждой конечной точкой в момент установления связи. Все пакеты отправляются с одним и тем же тегом проверки на протяжении всего срока действия связи. Если в течение срока действия связи поступает пакет с иным тегом проверки, то такой пакет отбрасывается. Кроме того, отправитель должен задать контрольную сумму CRC-32 в каждом пакете SCTP, чтобы снизить вероятность повреждения данных при передаче по сети. Все пакеты с неправильной контрольной суммой CRC-32 отбрасываются.
- Управление путями: во время установления связи каждая конечная точка может предложить список имеющихся у нее транспортных адресов. Однако для обычной передачи данных в связи SCTP указывается только один главный путь. Если использовать главный путь становится невозможно, используются другие транспортные адреса. В течение срока действия связи по всем путям отправляются периодические сигналы, так называемый "пульс", для отслеживания состояния путей.