Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

Сетевая базовая система ввода-вывода (NETBIOS)

Глава 2: Программирование


 Предыдущая страница    |    Следующая страница  
Добавить в избанное Обсудить в форуме Написать автору сайта Версия для печати

Общая процедура

         Для прикладных программ конечного пользователя, которые находятся над седьмым уровнем модели Соединения открытых систем, не требуется знания NETBIOS. Сетевые прикладные программы, находящиеся на седьмом уровне (например, обеспечиваемая DOS блокировка файла и записи), требуют большей функциональности, чем предоставляется PC-DOS; для них необходимо детальное знание того, что может делать NETBIOS, как он себя ведет, и как взаимодействовать с ним. Эти прикладные программы обычно требуют прямой отправки и получения сообщений между станциями. Примером такой сетевой прикладной програмы будет спецпроцессор, который обслуживает обмен данными (такой как порты RS-232 или контроллер 3274 на базе ПЭВМ) или обеспечивает доступ к периферии, к примеру, сменным жекстким дискам большой емкости.

         Чтобы использовать NETBIOS, к таблице имен сначала добавляется имя станции. Последнее представляет собой уникальное имя, под которым данная станция известна в сети. Как альтернативу можно использовать постоянный адрес узла (уникальный 48-битовый адрес в ПЗУ присваивается этому адаптеру), - в этом случае вводить "имя" нет необходимости. Однако, присвоение станции фонетического имени делает имя станции более значимым.

         После назначения имени станции, прикладная программа может установить сеанс с другим именем в сети. Это имя может даже существовать в таблице имен станции, - в этом случае устанавливается "местный" (локальный) сеанс. Однако, обычно, сеансы устанавливаются с "удаленными" именами, например, сеанс спецпроцессора на другой машине.

         Если сеанс установлен, можно передавать и получать сообщения по логическому каналу. Сеанс обеспечивает надежную передачу данных, при которой все сообщения квитируются; в противном случае, можно установить передачу дейтаграмм, - тогда NETBIOS будет посылать сообщения непосредственно на канальный уровень без квитирования. Передача дейтаграмм подходит для "широковещательных" сообщений.

[начало] [оглавление]

 

Интерфейс программирования

         В настоящем разделе будет рассматриваться интерфейс программирования с точки зрения прикладных программ. В оригинальной Сети ПЭВМ, NETBIOS находится в ПЗУ на плате адаптера. В ЭКС Token-Ring, NETBIOS загружается по подсказке PC-DOS, используя находящийся резидентно в памяти файл COM - NETBEUI (Расширенный пользовательский интерфейс NETBIOS), либо драйвер устройства, используя управляющую Служебную программу ЛВС ПЭВМ. Эта программа также работает с адаптером Сети ПЭВМ с модулированной передачей и с адаптером Сети ПЭВМ с немодулированной передачей. Рассмотрим сначала NETBEUI.

[начало] [оглавление]


NETBEUI


         Форматом для NETBEUI является: work0,SAP0,stn0,work1,SAP1,stn1. Параметры имеют следующее значение:

work0/work1:

         Объем рабочей памяти (ОЗУ) ПЭВМ, выделяемый для адаптера, составляет от 1 кбайт до 18 кбайт. Объем в 18 кбайт рекомендуется выделить для ПЭВМ, которая также работает и в качестве спецпроцессора. Так как NETBEUI поддерживает два адаптера, work0 и work1 являются рабочими областями для соответствующих адаптеров. Ограничение состоит в том, чтобы объем work0 плюс work1 был меньше 18 кбайт. Если этот параметр отсутствует, принимается емкость в 9 кбайт по умолчанию.

SAP0/SAP1:

         Точка доступа к сервису (точка для соединения между двумя узлами в логическом канале - или уровне 2 - урровне для адаптера0/адаптера1). Существуют дополнительные точки доступа к сервису (SAP), запрашиваемые по OPEN. В поддерживающей прикладной программе (которая не является NETBIOS) может иметься до девяти дополнительных точек доступа к сервису. Величина по умолчанию равна 0.

stn0/stn1:

         Количество дополнительных станций канала (до 9), запрашивваемых по неявной OPEN. Он уравнивыает станции с числом дополнительных удаленных точек доступа к сервису (не являющихся NETBIOS), с которыми могут одновременно взаимодействовать другие прикладные программы.

         В памяти рабочей ПЭВМ NETBEUI занимает примерно 46 кбайт оперативной памяти.

[начало] [оглавление]

 

ДРАЙВЕР

         NETBIOS входит в Служебную программу ЛВС ПЭВМ IBM в качестве драйвера устройства. Прикладные программы (т.е. Программа Сети ПЭВМ), записанная в NETBIOS для сети ПЭВМ, будет работать как таковая с эмулятором ЭКС. (См. рис.1-2 о реализации NETBIOS для сети ПЭВМ и ЭКС Token-Ring). По умолчанию, драйвер устройства занимает 23 кбайт оперативной памяти.
         Со Служебной программой ЛВС ПЭВМ, NETBIOS имеет больше параметров, чем в более ранних версиях. Поддержка для параметров NETBIOS более ранних версий осуществляется таким образом, что могут быть использованы все предыдущие параметры (в качестве средства миграции).

         Одна из новых опций обеспечивает поддержку для высокоскоростных асинхронных адаптероов - параметртры под названием ENABLE, которые выделяют NETBIOS меньше времени, а большее количество времени - для операций асинхронного адаптера.

         В таблице на рис.2-1 сведены все доступные параметры. Эти параметры предоставляются посредством DEVICE = DXMT0MOD.SYS в файле CONFIG.SYS и являются позиционно независимыми (в отличие от старой версии NETBEUI). Пример: DEVICE=DXMT0MOD.SYS ST=50 N=40- S=30: осуществляется поддержка 50 станций, 40 имен и 30 сеансов.

Ключевое слово Сокра- Допустимые Минимальн. Величина по щение величины величина умолчанию
----------------------------------------------------------------

Станции ST 0-254 * 1 6
Сеансы S 0-254 1 6
Команды C 0-255 1 12
Имена N 0-254 2 17
Откр. при
загрузке O Да/Нет - Да
Макс.дейтаграмм DG Да/Нет - Нет
Закр. при
переустановке CR Да/Нет - Нет
Размер DHB DS 200-9999 * 200 **
Номер DHB DN 0-9 * - **
Размер получаю-
щего буфера R 0-9999 * *** **
Тайм-аут
передачи TT 0-20 0 2
Подсчет
передач TC 0-10 0 3
DLC Maxout MO 0-9 0 2
DLC Maxin MI 0-9 0 1
Доступ к
кольцу RA 0-7 0 0
Доп.точки дос-
тупа к сервису ES 0-99 * 0 0
Доп.станции EST 0-99 * 0 0

----------------------------------------------------------------

ПРИМЕЧАНИЯ:

* - Если эта величина будет слишком большой, произойдет сбой в открытом адаптере

** - Если используется величина по умолчанию, Драйвер NETBIOS установит величины этих параметров в зависимости от ресурсов адаптера.

*** - Минимальная величина устанавливается адаптером при открытии, а не NETBIOS.

DLC - Управляющая процедура

Рис 2-1. Параметры драйвера устройства NETBIOS.

[начало] [оглавление]


ПРОГРАММИРОВАНИЕ

         Прикладная программа, требующая услуг NETBIOS, установит Блок управления сетью (NCB) (соответствующий Блоку управления сообщениями (MCB) в ЭКС Token-Ring) и выдаст прерывание 5CH. На рис.2-2 проиллюстрирована структура Блока управления сетью (NCB) и общее значение каждого поля. Если адаптер не был предварительно инициализирован загрузкой Интерфейса поддержки адаптера ЭКС Token-Ring, который называется TOKREUI (Расширенный пользовательский интерфейс ЭКС Token-Ring), NETBIOS сделает это автоматически.

ИМЯ ПОЛЯ ДЛИНА (байт) И ЗНАЧЕНИЕ
----------------------------------------------------------------

NCB_COMMAND 1 Поле команды Блока управления сетью (NCB)

NCB_RETCODE 1 Поле кода возврата NCB

NCB_LSN 1 Поле номера локального сеанса NCB

NCB_NUM 1 Поле номера Вашего имени NCB

NCB_BUFFER@ 4 Указатель NCB на адрес буфера сообщений (смещение:сегмент)

NCB_LENGTH 2 Длина буфера NCB (в байтах)

NCB_CALLNAME 16 Имя NCB на местном или удаленном адаптере. Если сообщение отправляется по цепочке, первые 2 байта обозначают длину второго буфера Следующие 4 байта обозначают адрес второго буфера

NCB_NAME 16 Имя NCB на местном адаптере

NCB_RTO 1 Величина тайм-аута получения сообщения

NCB_STO 1 Величина тайм-аута отправления сообщения

NCB_POST@ 4 Указатель NCB на подпрограмму регистрации (смещение:сегмент)

NCB_LANA_NUM 1 Номер адаптера NCB; 00H для первого адаптера, 01H для второго адаптера

NCB_CMD_CPLT 1 Поле состояния команды NCB

NCB_RESERVE 14 Зарезервированная область NCB

----------------------------------------------------------------


Рис. 2-1. Блок управления сетью (NCB).


Далее мы подробно раскажем о каждом поле.

NCB_COMMAND

         Когда прикладная программа выдает NETBIOS команды, она может сделать выбор: либо ждать, пока они будут завершены, либо прерваться по их завершению. Программа может установить величину 1 для ожидания, либо величину 0 для прерывания. Если выбрана операция ожидания, управление передается следущей команде, только когда NETBIOS завершит данную команду. Вызывающая подпрограмма должна затем проверить регистр AL или поле NCB_RETCODE на состояние завершенной команды. Предпочтительней выбрать, однако, другую опцию - прерывание (неожидание), потому что NETBIOS работает как фоновая задача, таким образом, что может выстраиваться очередь нескольких команд. Управление возвращается следующей команде прикладной программы, с кодом возврата в AL.

         Возможными кодами возврата будут: 00H - успешное завершение команды; 03H - неверная команда; 21H - интерфейс занят; 22H - слишком много команд находимтся в очереди; 23H - неверное поле NCB_LANA_NUM; 24H - команда завершена в то время как произошла отмена; 26H - команда не может быть отменена; 4XH - неверное условие сети; 50-FEH - сбой в адаптере. Величины кода возврата 40H - 4FH являются уникальными для реализации NETBIOS в ЭКС Token-Ring.

         Прикладная программа может выбрать также следующее: быть прерванной по коду возврата 00H (OK), либо опросить поле NCB_CMD_CPLT (первоначально установленное во время выполнения команды на FFH). Если выбрана опция прерывания, тогда поле NCB_POST@ должно быть установлено как ненулевое (non-zero). Если программа прерывается, она может проверить AL или NCB_RETCODE на конечный код возврата от NETBIOS.

NCB_RETCODE

         NETBIOS отражает код возврата в регистре AL. Возможные величины кода возврата даны выше. Если код возврата не равет 00H, тогда прикладная программа должна предпринять соответствующее действие по восстановлению при ошибках.

NCB_LSN

         После выполнения командв CALL или LISTEN это поле будет показывать номер, присвоенный местному сеансу. Это поле должно быть установлено при выдаче команды SEND или RECEIVE для данного сеанса. NETBIOS присваивает номер последовательно, начиная с 254 до 1 (255 или FFH и 0 никогда не используются).

NCB_NUM

         Номер, ассоциированный с именем. NETBIOS возвращает его после запроса прикладной программы ADD NAME или ADD GROUP NAME. Также, как и в случае с полем NCB_LSN, NETBIOS присваивает этот номер последовательно, начиная с 254 до 1. Этот номер должен использоваться при отправлении дейтаграмм и для команды RECEIVE ANY.

NCB_BUFFER@

         Если этого требует команда, (такая как SEND), NCB_BUFFER@ представляет собой 4-байтовый указатель, который обозначает адрес смещения:сегмента того буфера, который использует команда.

NCB_LENGTH

         Длина (в байтах) буфера, на который указывает NCB_BUFFER. Для команды SEND, это фактическое количество посылаемых байт. Для команды RECEIVE, NETBIOS устанавливает его к фактическому количеству принимаемых байт.

NCB_CALLNAME

         16-байтовое имя сеанса, с которым осуществляется обмен данными. Когда выполняется отправка ообщения по цепочке, первые 2 байта определяют длину, а следующие 4 байта - адрес буфера, в том же формате, что и NCB_BUFFER@.

NCB_NAME

         16-байтовое имя станции пользователя. Если используется постоянный адрес узла, тогда первые 10 байт устанавливаются как 0, за которыми следует 48-битовый (6-байтовый) адрес узла.

NCB_RTO

         Определяет тайм-аут получения сообщения в шагах, равных 500 мсек, перед истечением времени ожидания команды RECEIVE. Величина 0 означает отсутствие тайм-аута. NCB-RTO устанавливается, если устанавливается сеанс.

NCB_STO

         То же, что и для поля NCB_RTO, на данное поле относится к команде SEND.

NCB_POST@

         Адрес смещение:сегмент подпрограммы, которая выполняется после того, как NETBIOS завершит команду прерывания (неожидания). Прикладная программа должна установить подпрограмму POST, а подпрограмма POST - регистр DS. Стандартная команда возврата прерывания, IRET, исполдьзуется по завершении выполнения программы POST. Если величина поля NCB_POST@ равна 0, тогда NETBIOS не вызовет подпрограмму POST, и прикладной программе придется управлять полем NCB_CMD_CPLT.

NCB_LANA_NUM

         Используется для обозначения того, какому адаптеру предназначена команда. Величина 00H - для первого адаптера, величина 01H - для второго адаптера.

NCB_CMD_CPLT

         Величина FFH показывает, что команда еще не выполнена. Величина 00H показывает, что команда завершена. Как было отмечено выше, ненулевая величина указывает на ошибку.

NCB_RESERVE

         14-байтовая зарезервированная область, частично используемая реализацией NETBIOS в ЭКС Token-Ring.

[начало] [оглавление]


КОМАНДЫ NETBIOS


         Команды NETBIOS могут быть разделены на 4 группы: общие, команды поддержки имени, поддержки сеанса и команды поддержки дейтаграмм. Общие команды - это команды (не имеющие отношения к обмену данными), которые, главным образом, относятся к самому адаптеру.Команды поддержки имени позволяют прикладным программам ассоциировать (связывать) ресурсы и услуги с логическими именами, а не с дискретными именами. Команды поддержки сеанса позволяют прикладной программе устанавливать надежную связь между двумя именами для обмена информацией. Учтите, что сеансовый канал может находиться в самом адаптере, или вместе с именем на удаленном адаптере. Команды поддержки дейтаграмм позволяют транслировать короткие (менее 5 байт) сообщения и отправлять неквитированные сообщения другому имени.

         Ниже приводится краткий обзор всех возможных команд. Заметьте, что, кроме полей, которые требует каждая команда, должна быть установлена соответствующая величина поля NCB_COMMAND (в шестнадцатиричном счислении). Номер адаптера (0 или 1) должен быть выбран установкой поля NCB_LANA_NUM, и команды NETBIOS возвратят результат в поле NCB_RETCODE. Прикладная програма может запросить, чтобы команда была выполнена NETBIOS на фоне других задач, либо может подождать, пока NETBIOS завершит выполнение опции. Некоторые команды не имеют этой опции и рассматриваются как команды типа "ожидать до завершения".

Команда/NCB_COMMAND. Функция.

ОБЩИЕ КОМАНДЫ

         RESET/32H. Переустанавливает состояние местного адаптера и очищает таблицы имен и сеансов.

         Переустановив адаптер, прикладная программа может изменить количество сеансов и количество командных блоков NCB (Блок управления сетью), поддерживаемых NETBIOS. Величины по умолчанию для Сети ПЭВМ равны 6 и 12, соответственно. Эти величины влияют на производительность работы, потому, что, чем больше будет сеансов и командных блоков NCB, тем меньше окажутся размеры пакетов, в зависимости от доступной памяти адаптера.

         Для команды RESET (кроме полей NCB_COMMAND и NCB_LANA_NUM) потребуются только поля NCB_LSN, NCB_NUM.

CANCEL/35H. Дает запрос, чтобы была отменена ждущая команда, чей Блок управления сети (NCB) найден в NCB_BUFFER@. Можно отменить любую ждущую команду NETBIOS, кроме ADD (GROUP) NAME, DELETE NAME, SEND DATAGRAM, SEND BROADCAST DATAGRAM, SESSION STATUS, CANCEL и RESET. Отмена команды SEND прервет сеанс. Необходимо полу NCB_BUFFER@ (буфер, который отменяется).

STATUS/33H (ожидание) B3H (возврат). Дает информацию о состоянии местного или удаленного буфера.

         Эта команда выполняет диагностирование местных и удаленных адаптеров, даже если удаленная ПЭВМ не может нормально обмениваться данными со своим адаптером, либо она "зависла". Для команды требуются поля: NCB_BUFFER@, NCB_LENGTH, NCB_CALLNAME и NCB_POST (только для операции неожидания (прерывания)).

         Информация, возвращаемая в буфер, для Сети ПЭВМ включает 6-байтовый постоянный адрес узла, 1-байтовое состояние внешних передатчиков управления (переходников) на плате адаптера сети, 1-байтовый результат последней самопроверки, 2-байта, содержащие номер проверки программного обеспечения, 48 байт статистики трафика и ошибок, 26 байт статистики ресурсов адаптера, 2 байта для количества имен в местной таблице и 16 элементов - каждый размером в 18 байт - для таблицы местных имен.

         Статистика трафика и ошибок, возвращаемая для Сети ПЭВМ, включает 2 байта для периода отчета (в минутах), 2 байта для количества ошибок контроля при помощи циклического избыточного кода, 2 байта для количества ошибок согласования, 2 байта для числа конфликтов, 2 байта для количества экстренно прерванных передач, 4 байта для количества успешно переданных пакетов, 4 байта для количества успешно принятых пакетов, 2 байта для количества повторных передач и 2 байта для количества раз, когда получатель исчерпывал свои ресурсы.

         Статистика ресурсов адаптера, возвращаемая для сети ПЭВМ, включает 8 байт для зарезервированной области, 2 байта для количества свободных командных блоков, 2 байта для максимального количества отлаженных Блоков управления сетью (NCB), 2 байта для максимального количества свободных командных блоков, 4 заразервированных байта, 2 байта для количества ждущих сеансов, 2 байта для максимального количества ждущих сеансов, 2 байта для общего максимального количества сеансов и 2 байта для максимального размера пакета данных сеанса.

TRACE/79H (ожидание) F9H (возврат). Только в ЭКС Token-Ring. Команда начинает выполнять трассировку всех команд Блока управления сообщениями (MCB) и некоторых команд Блока управления (CCB), выдаваемых программой NETBIOS.

UNLINK/70H. Используется с удаленной загрузкой программы (RPL) для разрыва сеанса с IBMNETBOOT. Эта команда применяется, только если был сделан вызов в IBMNETBOOT во время работы ПЭВМ, т.е. была осуществлена удаленная начальная загрузка. Сеанс с IBMNETBOOT прерывается и прерывается программа переадресации (INT 13).

КОМАНДЫ ПОДДЕРЖКИ ИМЕНИ

         Имена позволяют прикладной программе и ПЭВМ, на которой она работает, быть узнанными другими прикладными программами и ПЭВМ в сети. Длина имен - 16 байт; они вводятся в таблицу местных имен, оригинальная Сеть ПЭВМ с модулированной передачей размещает до 16 имен, в то время, как Служебная программа ЛВС ПЭВМ размещает более 32 имен. Имя, уникальное для ПЭВМ, может также быть частью группы (имени группы). Учтите, что каждой станции всегда присваивается постоянное имя узла (6 байт адреса, за которыми следует 10 нулей) по умолчанию. Прикладная программа может обращаться к этому имени, выполняя команду ADAPTER STATUS со звездочками (символ *) в поле CALLNAME. Первые 6 байт в буфере возврата показывают адрес адаптера. Как Сеть ПЭВМ, так и ЭКС Token-Ring, используют 6-байтовые адреса узлов.

ADD NAME/30H (ожидание) B0H (возврат). Добавляет (уникальное) 16-символьное имя в таблицу имен (возврата). NETBIOS выполняет передачу сообщения, чтобы удостовериться, что это имя является уникальным. Если применяется опция неожидания, команде потребуется поле NCB_POST@. Коды ошибок будут возвращены, - они показывают на заполненную таблицу, дублирующиеся имя, имя, не являющееся уникальным, и т.п.

ADD GROUP NAME (ожидание) B6H (возврат). Добавляет имя группы в таблицу имен. NETBIOS осуществляет передачу сообщения, чтобы удостовериться, что это имя не используется в качестве уникального на другой ПЭВМ. Поля NCB и условия ошибок такие же, как и для кроманды ADD NAME. Так как имена могут иметь длину до 16 байт, а фактический размер адреса равен (на канальном уровне) только 6 байт, NETBIOS получит адрес группы для себя, используя один из двух способов.

         Первый способ требует применения следующей функции:

group_name = 000-0 concat (N1 xor N2...N5 xor N6)
concat FF

где N1...N5 являются с первого по пятое символьными полями имени, а N6 - последним символом имени.

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

group_name = 0000 concat (ID3 ID2 ID1) concat FF

где ID3...ID1 являются байтами низкого порядка постоянного имени узла.

         Эти адреса, полученные NETBIOS, обычно являются недоступными для прикладной программы, но могут быть вычислены с помощью формул. Вышеприведенные формулы были выбраны, чтобы снизить до минимума риск того, что два различных 16-байтовых имени будут "обррублены" до одного и того же 6-байтового адреса группы.

DELETE NAME/31 (ожидание) B1H (возврат). Стирает имя из таблицы имен. Эта команда убирает имя, введенное командой ADD NAME или ADD GROUP NAME, из таблицы местных имен. Команда DELETE NAME обычно выполняется после завершения сеанса с помощью команды HANG UP (см.ниже). Если все еще имеются активные сеансы, NETBIOS отложит выполнение команды стирания имени, пока не будут завершены все активные сеансы. Эта команда, (если применяется опция возврата (неожидания), требует наличия поля NCB_POST@.

КОМАНДЫ ПОДДЕРЖКИ СЕАНСА


         Эти команды образуют ядро NETBIOS, они несут ответственность за фактическую передачу информации (до 65535 байт по запросу) в сети. Прикладная программа использует команды поддержки сеанса для установления канала между двумя любыми именами в сети, или даже внутри самой ПЭВМ. Заметьте, что имена используются для инициации процесса, а NETBIOS возвращает номер в поле NCB_LSN, которое и будет применяться с этого момента далее.

CALL/10H (ожидание) 90H (возврат). Открывает сеанс с другим именем, определенным полем NCB_CALLNAME. Команда CALL инициирует сеанс с именем, определенным в поле NCB_CALLNAME, используя местное имя, предоставляемое полем NCB_NAME. При вызове (командой CALL) другого имени, оно уже должно установить команду LISTEN. NETBIOS возвращает номер сеанса в поле NCB_LSN. Необходимые для команды поля Блока управления сети (NCB) включают поля: NCB_RTO, NCB_STO и NCB_POST@ (если выбрана опция возврата (неожидания)).

LISTEN/11H (ожидание) 91H (возврат). Позволяет осуществлять установку сеанса с именем, определенным в поле NCB_CALLNAME. Выполенение команд CALL, LISTEN позволяет устанавливать сеанс с именем в поле NCB_CALLNAME и с именем в поле NCB_NAME. Поле NCB_CALLNAME может быть установлено с символами "*", - в этом случае из команды CALL принимается любое имя. Имя, которое инициирует команду CALL, затем возвращается в поле NCB_CALLNAME. Важно учесть, что уоманда LISTEN занимает ввод сеанса. Требуемые поля включают: NCB_NAME, NCB_RTO, NCB_STO и поле NCB_POST@ (если используется опция неожидания).

HANG UP/12H (ожидание) 92H (возврат). Закрывает сеанс с другим именем. Эта команда завершает сеанс и все ждущие кеоманды RECEIVE. Команда HANG UP требует поля NCB_POST@ для опции неожидания.

SEND/14H (ожидание) 94H (возврат). Посылает данные по номеру сеанса, показанному номером местного сеанса (LSN).

SEND NO_ACK/71H (ожидание) F1H (возврат). Обеспечивает команду SEND, которая не требует NO_ACK NETBIOS для передачи квитирования данных. Доступна только в версии NETBIOS 2.2 и выше. Команда SEND (надежно) передает буфер емкостью до 65535 байт, на который указывает NCB_BUFFER@ посредством сеанса, показанного NCB_LSN. Несколько команд SEND могут выстраиваться в чередь. Если команда SEND не может завершиться, сеанс заканчивается и должен быть переустановлен.

CHAIN SEND/17H (ожидание) 97H (возврат). Подобна команде SEND, за исключением того, что данные берутся из буферов для указанного числа байт. Вместе в цепочку могут быть связаны два
буфера.

CHAIN SEND NO_ACK/72H (ожидание) F2H (возврат). Обеспечивает команду CHAIN SEND, которая не требует NETBIOS для передачи квитирования данных. Доступна только в версии NETBIOS 2.2 и выше. NETBIOS посылает буферы как одно конкатенированное сообщение, предел для размера которого состоявляет 65535 байт. Поле NCB_CALLNAME используется для определения длины (первые 2 байта) и адреса (последующие 4 байта) второго буфера. Необходимые для команды поля включают: NCB_BUFFER@, NCB_LENGTH, NCB_CALLNAME (формат длины 0000H, формат адреса 00000000H) и поле NCB_POST@, если используется опция неожидания.

RECEIVE/15H (ожидание) 95H (возврат). Получает данные из определенной области. Могут быть определены величины тайм-аута. Эта команда устанавливает адаптер для получения данных из определенной области. Если объем получаемых данных превышает доступный размер буфера, будет возвращен код 06H в поле NCB_RETCODE. Требуемые поля включают: NCB_BUFFER@, NCB_LENGTH, и поле NCB_POST@, если используется опция неожидания.

RECEIVE ANY/16H (ожидание) 96H (возврат). Получает данные от любой станции, с которой был установлен сеанс. Подобна команде RECEIVE, за исключением того, что эта команда позволяет получать данные от любого сеанса. Поле NCB_NUM (как возвращеное из команд ADD NAME или ADD GROUP NAME) должно быть использовано вместо имени. Требуемые поля такие же как и для команды RECEVE.


SESSION STATUS/34H (ожидание) B4H (возврат). Получает состояние всех активных сеансов для имени станции. Эта команда возвращает информацию о состоянии всех активных сеансов ддя данного локального имени (NCB_NAME) или для всех локальных имен (если символ звездочки (*) является первым байтом поля NCB_NAME). Требуемые поля включают NCB_BUFFER@, NCB_LENGTH, и NCB_POST@, если используется опция неожидания. Формат возвращаемой информации о состоянии является следующим: 1 байт для количества сеансов, о которых дается отчет, 1 байт для количества сеансов с данным именем, 1 байт для количества ждущих команд дейтаграмм, 1 байт для количества ждущих команд RECEIVE ANY, 36 байт для информации о сеансе, которая включает: 1 байт для номера местного сеанса, 1 байт для состояния сеанса (01H - ждущая команда LISTEN, 02H - ждущая команда CALL, 03H - установка сеанса, 04H - ждущая команда HANG UP, 05H - завершена команда HANG UP, 06H - экстренное прерывание сеанса); 16 байт для местного имени, 16 байт для удаленного имени, 1 байт для количества ждущих команд RECEIVE и 1 байт для количества ждущих команд SEND и CHAIN SEND.


КОМАНДЫ ПОДДЕРЖКИ ДЕЙТАГРАММ


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

SEND DATAGRAM/20H (ожидание) A0H (возврат). Посылает дейтаграмму в уникальное имя или имя группы в местном или удаленном узле. Данная команда посылает дейтаграмму в имя или групповое имя. Такое имя должно быть установлено для этой команды. Требуются поля: NCB_BUFFER@, NCB_LENGTH, NCB_NUM и поле NCM_POST@, если используется опция неожидания.

SEND BROADCAST DATAGRAM/22H (ожидание) A2H (возврат). Посылает сообщение всем именам, которые имеют ждущую команду RECEIVE DROADCAST DATAGRAM. Требуются те же поля, что и для команды SEND DATAGRAM.

RECEIVE DATAGRAM/21H (ожидание) A1H (возврат). Получает дейтаграмму от любого имени в сети. Эта команда получает любую дейтаграмму, адресованную локальному имени или имени группы в данной ПЭВМ. Требуются те же поля, что и для команды SEND DATAGRAM. Если величина поля NCB_NUM установлена как FFH, то дейтаграма может быть получена от любого имени для любого из местных имен.

RECEIVE BROADCAST DATAGRAM/23H (ожидание) A3H (возврат). Получает дейтаграмму от любого имени,которое выдает команду SEND BROADCAST DATAGRAM. Эта команда получает любую переданную широковещательную дейтаграму. Требуемые поля совпадают с полями для команды SEND DATAGRAM. На рис.2-3 дан список всех возможных кодов ошибок, которые возвращает NETBIOS, когда прикладная программа использует Блок управление сетью (NCB) и прерывание 5CH.

Величина (в 16-ричной Значение
системе счисления)
----------------------------------------------------------------

00H Хороший возврат, команда завершена

Неправильная длина буфера для команд
SEND DATAGRAM, SEND BROADCAST,
01H ADAPTER STATUS или SESSION STATUS.

03H Неверный код команды

05H Истек период тайм-аута команды

Полученное сообщение было частичным,
т.к. была недостаточна длина
06H буфера получения

Определен номер сеанса, который не
08H является активным

В адаптере нет достаточного места
09H для сеанса

0AH Сеанс закрыт

0BH Команда не отменена

Дублирующееся имя в таблице
0DH местных имен

0EH Таблица местных имен переполнена

0FH Имя, которое стирается, является
активным в сеансе

11H Переполнена таблица местных сеансов

Открытый сеанс был отменен, т.к. нет
ожидающей команды LISTEN в удаленной
12H ЭВМ.

13H Неверный номер имени

Не могу найти вызванное имя или
14H ответа не существует

15H Имя в местной таблице не найдено

16H Имя где-то используется

Имя стерто без наличия ожидающих
17H команд для этого имени

18H Аварийное завершение сеанса
NETBIOS обнаружил два или более
одинаковых имени, которые используются
19H в сети

1AH Получен несовместимый протокол пакета

21H Интерфейс занят

Количество ожидающих команд слишком
22H велико

23H Неправильный номер в поле NCB_LANA_NUM

Команда завершена до запроса об отмене
24H или такой команды не существует

26H Команду отменять нельзя

4XH Неопределяемая ошибка в сети

50-FEH Произошел сбой в адаптере

FFH Команда все еще ожидает

----------------------------------------------------------------


Рис 2-3. Коды возврата ошибок NETBIOS.

[начало] [оглавление]

 

NETBIOS в ЭКС TOKEN-RING


         Как было замечено в Главе 1, NETBIOS в адаптере оригинальной Сети ПЭВМ (с модулированной передачей) не реализует стандарт 802.2 LLC или MAC. В ЭКС Token-Ring NETBIOS был присвоен функциональный адрес 00000080H, чтобы он удовлетворял требованиям стандарта 802.2. При рабочей программе NETBIOS, все адаптеры с набором функциональных адресов получат все кадры, предназначенные для данного адреса. Величина точки доступа к сервису по умолчанию F0H. Кадры, предназначенные для управляющей процедуры (DLC) точки доступа к сервису F0H, маршрутизируются в программу NETBIOS, вне зависимости от того, получены ли они посредством обнаружения функционального адреса, или же обнаружения особого адреса узла.

         NETBIOS в Token-Ring использует свойство кольца передавать шириковещательные сообщения. Во всех случаях, кроме одного, кадры посылаются как "ограниченное широковещательное сообщение", то есть промежуточные звенья (мосты) выдают каждому кольцу в много-мостовой кольцевой сети только один кадр. Бит широковещательного сообщения и бит ограниченного широковещательного сообщения в поле управления маршрутизацией установлены как 1. В другом случае,кадр посылается как общее "широковещательное сообщение", - то есть кадр будут ретранслироывать все мосты. Бит сообщения в поле управления маршрутизацией будет установлен как1, а бит ограниченного широковещательного сообщения - как 0.

         Рассмотрим NETBIOS в Token-Ring. Инициализация драйвера адаптера может быть осуществлена - явно - прикладной программой, в которой используется установленный коллективный адрес в ОЗУ, а приложения ошибок определяются либо прикладной программой, либо - неявно - программой NETBIOS, когда встречается RESET или первый Блок управления сетью (NCB). В нашем случае,будут использоваться коллективные адреса в ОЗУ D8000H/D4000H для адаптеров 00/01, а приложения ошибок будет определять сама программа NETBIOS.

         OPEN CCB является опциональным вызовом NETBIOS, который используется для определения набора особых параметров программы NETBIOS. OPEN CCB может быть явно выполнен прикладной программой;он должен быть запрошен перед первым Блоком управления сетью (NCB) и после того, как будет загружен NETBIOS. OPEN CCB может быть явно выполнен RESET или первым Блоком управления сетью (NCB).

         Типичной последовательностью инициализации будет: драйвер устройства NETBIOS запрашивает в ЭКС Token-Ring драйвер DIR.INITIALIZE, DIR.OPEN.ADAPTER, DIR.STATUS, DLP.OPEN.SAP (с точкой доступа к сервису (SAP), установленной как F0H), DIR.SET.FUNCTIONAL.ADDRESS, DLP.MODIFY и SET.TIMER. Приведем последовательность событий, происходящих в NETBIOS при запрашивании прикладной программой команды NETBIOS (через Блок управления сетью) для установки сеанса: драйвер устройства NETBIOS запрашивает в ЭКС драйвер DIR.SET.TIMER (для ответа с узнанным именем), запрашивает DIR.TRANSMIT.UI (широковещательное сообщение NAME.QUERY), возвращает непосредственный код возврата (если не была установлена опция неожидания для Блока управления сети - NCB), получает (RECEIVE) данные ответа (имя узнано), запрашивает DIR.CANCEL.TIMER, запрашивает DIR.FREE.BUFFER, запрашивает DLC.OPEN.STATION (устанавливает станцию канала), запрашивает DLC.CONNECT_STATION (соединяет узлы), запрашивает DIR.TRANSMIT.FRAME (посылает инициализированное сообщение), получает (RECEIVE) данные ответа (сеанс подтвержден) и возвращает конечный код возврата NCB.

[начало] [оглавление]

 

Различия в реализации

         Между NETBIOS в оригинальной Сети ПЭВМ и эмуляцией Служебной программы ЛВС ПЭВМ имеются некоторые неявные различия. Реализация Служебной программы содержит некоторые усовершенствования, которые не должны использоваться, если требуется совместимость с сетью ПЭВМ. Ниже приводятся основные различия.

NETBIOS в NETBIOS в оригинальной Служебной программе Сети ПЭВМ с модулированной передачей
----------------------------------------------------------------

254 каналов на адаптер 16

254 сеансов на адаптер 32

254 имен 17

255 ожидающих команд 32
----------------------------------------------------------------

         Эмулятор NETBIOS в ЭКС имеет дополнительные коды возврата NETBIOS. Когда следующие коды возврата устанавливаются в Блоке управления сетью, эмулятор также возвращает соответствующую информацию о состоянии в поле RESERVE Блока управления сетью (NCB). Расширенный код возврата Значение
----------------------------------------------------------------

4EH Кольцо в нерабочем состоянии

4FH Ошибка постоянного состояния кольца

F7H Ошибка в явном INITIALIZE

F8H Ошибка в неявном OPEN

F9H Внутренняя ошибка TOKREUI

FAH Машинная проверка адаптера

FBH Нет эмулятора NETBIOS

FCH Сбой OPEN адаптера или OPEN_SAP

FDH Неожиданное закрытие адаптера
----------------------------------------------------------------

         Как адаптер Сети ПЭВМ (с модулированной и немодулированной передачей), так и адаптер ЭКС Token-Ring могут сосуществовать в одной и той же ПЭВМ. Если имеется адаптер Сети ПЭВМ, и он находится в рабочем состоянии, все команды Блока управления сетью (NCB), запрошенные для этого номера адаптера, будут маршрутизированы к нему. Если адаптер Сети ПЭВМ не присутствует, то все запрошенные для этого номера адаптера команды NCB маршрутизируются к программе NETBIOS в Token-Ring. Пользователь может сам выбрать, какой адаптер является первичным (00), а какой - вто-
ричным (01).

[начало] [оглавление]

 

Драйвер протокола

         Драйвер протокола Сети ПЭВМ IBM - новый продукт, выпущенный одновременно с Personal System/2. Драйвер протокола обеспечивает эмуляцию NETBIOS для новых адаптеров Сети ПЭВМ (с модулированной передачей) (как Microchannel, так и PC), которые также были выпущены одновременно с PS/2, для поддержания совместимости с адаптером оригинальной Сети ПЭВМ. Однако, драйвер протокола не будет обмениваться данными с адаптерами новой сети ПЭВМ, работающей со Служебной программой ЛВС ПЭВМ. Еще одно различие заключается в количестве поддерживаемых имен и сеансов - до 62 и до 64 соответственно.

         Серьезным недостатком драйвера протокола является то, что, в отличие от Служебной программы ЛВС ПЭВМ, он не обеспечивает интерфейс управления логическим каналом (LLC) (второй уровень стандарта соединения открытых систем) стандарта IEEE 802.2. Это означает, что некоторое программное обеспечение, не принадлежащее NETBIOS, например APPC/PC, не сможет работать в сети с драйвером протокола.

         Как мы можем увидеть, драйвер протокола имеет несколько ограниченный характер. Он существует только как механизм сохранения обратной совместимости с NETBIOS в оригинальной установке Сети ПЭВМ (PC Network) с модулированной передачей.


Предыдущая страница    |    Следующая страница


Добавить в избанное Обсудить в форуме Написать автору сайта Версия для печати

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz