Опубликован: 26.01.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 10:

Безопасное сетевое взаимодействие (часть 3)

Механизм канала

Все терминальные сессии, перенаправляемые соединения и т.п. являются каналами. Каждая из сторон может открыть канал. Несколько каналов мультиплексируются в единственное соединение.

Каналы идентифицируются номерами на каждом конце. Номера канала на разных концах могут различаться. Запросы на открытие канала содержат номер канала отправителя. Любые другие относящиеся к каналу сообщения содержат номер канала получателя.

Каналы являются потокоуправляемыми. Никакие данные не могут быть посланы по каналу до тех пор, пока полученное сообщение не укажет, что пространство окна доступно. Пространство окна определяет количество данных, которое можно передать по каналу в данный момент времени.

Открытие канала

Когда любая из сторон хочет открыть канал, она определяет локальный номер для канала и посылает другой стороне сообщение, включающее локальный номер канала и размер начального окна.

SSH_MSG_CHANNEL_OPEN
тип канала (ограничение US-ASCII)
канал отправителя
начальный размер окна
максимальный размер пакета
. . . 	данные, специфичные для типа канала

Тип канала представляет собой имя, определенное в архитектуре протокола. "Канал отправителя" является локальным идентификатором канала, используемым отправителем данного сообщения. "Начальный размер окна" определяет, сколько байтов данных канала может быть послано отправителем данного сообщения без регулирования размера окна. "Максимальный размер пакета" определяет максимальный размер индивидуального пакета данных, который может быть послан отправителем. Например, можно использовать небольшие пакеты для интерактивных соединений для уменьшения времени ответа по медленным каналам.

Затем удаленная сторона решает, может ли она открыть канал, и отвечает следующим сообщением

SSH_MSG_CHANNEL_OPEN_CONFIGURATION
канал получателя
канал отправителя
начальный размер окна
максимальный размер пакета
. . . данные, специфичные для типа канала

Где "канал получателя" есть номер канала, указанный в первоначальном запросе открытия, и "канал отправителя" есть номер канала на другом конце, или

SSH_MSG_CHANNEL_OPEN_FAILURE
канал отправителя
код причины
дополнительная текстовая информация 
    (ISO-10646 UTF-8)
тег языка

Если получатель SSH_MSG_CHANNEL_OPEN сообщения не поддерживает указанный тип канала, он отвечает SSH_MSG_OPEN_FAILURE.

Передача данных

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

SSH_MSG_CHANNEL_WINDOW_ADJUST
канал получателя
байты для добавления

После получения этого сообщения получатель может послать на указанное число байтов больше, чем было разрешено посылать раньше. Размер окна при этом возрастает.

Данные передаются в сообщении следующего типа:

SSH_MSG_CHANNEL_DATA
канал получателя
данные

Максимально допустимое количество данных определяется текущим размером окна. Размер окна уменьшается на количество переданных данных. Оба участника могут игнорировать все данные, посланные после того, как разрешенное окно стало пустым.

Дополнительно некоторые каналы могут передавать несколько типов данных. Примером могут служить stderr данные из интерактивных сессий. Такие данные могут быть переданы в SSH_MSG_CHANNEL_EXTENDED сообщениях, где отдельное целое определяет тип данных. Допустимые типы и их интерпретация зависит от типа канала.

SSH_MSG_CHANNEL_EXTENDED_DATA
канал получателя
код типа данных
данные
Закрытие канала

Когда участник не собирается больше передавать данные по каналу, он должен послать:

SSH_MSG_CHANNEL_EOF
канал получателя

На данное сообщение явного ответа быть не должно, однако приложение может послать EOF на другой конец канала. Заметим, что канал после такого сообщения остается открытым , и данные могут быть посланы в другом направлении. Данное сообщение не использует пространство окна и может быть послано даже в том случае, если доступного пространства нет.

Когда один из участников хочет закрыть канал, он посылает SSH_MSG_CHANNEL_CLOSE. При получении данного сообщения участник должен послать обратно SSH_MSG_CHANNEL_CLOSE, если данное сообщение еще не было послано. Канал считается закрытым для участника, когда он и получил, и отправил SSH_MSG_CHANNEL_CLOSE, после чего участник может переиспользовать номер канала. Он может послать SSH_MSG_CHANNEL_CLOSE без отправления или получения SSH_MSG_CHANNEL_EOF.

SSH_MSG_CHANNEL_CLOSE
канал получателя

Данное сообщение не потребляет пространство окна и может быть послано даже в том случае, если доступного пространства нет.

Рекомендуется, чтобы любые данные, посланные до этого сообщения, были по возможности доставлены реальному получателю.

Запросы, специфичные для канала

Многие типы канала имеют расширения, специфичные для этого конкретного типа канала. Примером является запрос pty для интерактивной сессии.

Все запросы, специфичные для канала, имеют следующий формат.

SSH_MSG_CHANNEL_REQUEST
канал получателя
тип запроса (ограничено US-ASCII)
ждать ответа
. . . 	данные, специфичные для типа

Если ждать ответа есть FALSE, то никакого ответа на запрос послано не будет. В противном случае получатель отвечает либо SSH_MSG_CHANNEL_SUCCESS, либо SSH_MSG_CHANNEL_FAILURE, либо сообщениями, специфичными для запроса. Если запрос не распознан или не поддерживается каналом, возвращается SSH_MSG_CHANNEL_FAILURE.

Данное сообщение не потребляет пространство окна и может быть послано даже в том случае, если доступного пространства окна нет. Типы запросов определяются локально для каждого типа канала.

Допускается, что клиент посылает дальнейшие сообщения без ожидания ответа на запрос.

SSH_MSG_CHANNEL_SUCCESS
канал получателя
SSH_MSG_CHANNEL_FAILURE
канал получателя

Эти сообщения не потребляют пространства окна и могут быть посланы даже в том случае, если доступного пространства нет.

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Ярослав Ханько
Ярослав Ханько
Украина
Jacob Liberman
Jacob Liberman
Нидерланды, Amsterdam