Операционная система NetWare

Протокол NETBIOS


В NetWare протокол NETBIOS является надстройкой над протоколом IPX и используется для организации обмена данными между рабочими станциями.

Протокол NETBIOS реализован в виде резидентной программы NETBIOS.EXE, входящей в комплект поставки NetWare. Для обмена данными между этими резидентными программами используются пакеты IPX с номером гнезда 0х0455 и типом пакета 20.

Для идентификации рабочей станции протоколы IPX и SPX используют номер сети, адрес станции в сети и номер гнезда. Адрес станции определяется на аппаратном уровне и представляет собой число длиной 6 байтов. Номер сети занимает 4 байта. Номер гнезда выделяется динамически протоколом IPX или может быть получен в фирме Novell. Номер гнезда занимает 2 байта.

Протокол NETBIOS использует другой механизм адресации станций и программ. Для адресации станций используются имена размером 16 байтов. Каждая станция имеет одно постоянное имя (permanent name), которое образуется из аппаратного адреса добавлением к нему слева десяти нулевых байтов. Кроме постоянного имени имеются обычные имена и групповые имена, которые протокол NETBIOS позволяет добавлять (и удалять). Обычные имена служат для идентификации рабочей станции, групповые имена могут служить для посылки пакетов одновременно нескольким станциям в сети. Постоянное имя удалять нельзя, так как оно полностью определяется аппаратным обеспечением станции.

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

После добавления новому имени присваивается так называемый номер имени (name number), который используется для передачи данных по сети.

Сравнивая методы адресации, используемые протоколами IPX/SPX и NETBIOS, можно заметить, что метод адресации протокола NETBIOS более удобен. Вы можете адресовать данные не только одной станции (как в IPX и SPX) или всем станциям сразу (как в IPX), но и группе станций, имеющим одинаковое групповое имя.


Чтобы выполнить функцию NETBIOS, в прикладной программе необходимо

  • заполнить поля блока NCB (Network Control Block),

  • загрузить в регистр ES:BX дальний адрес блока NCB,

  • вызвать программное прерывание 5С (INT 5C).

    Формат блока NCB представлен на рисунке 2.17.



    1Cmd-код команды

    1CCode-код ошибки до выполнения команды

    1LocalSessionNumber-номер канала

    1NetworkNameNumber-номер имени

    4Buffer-дальний указатель на буфер данных

    2Size-длина буфера

    16CallName-имя станции-получателя

    16OurName-имя станции-отправителя

    1ReceiveTimeout-время ожидания завершения приёма пакета

    1SendTimeout-время ожидания завершения передачи пакета

    4PostRoutine-адрес POST-программы

    1AdapterNumber-номер сетевого адаптера

    1FinalCCode-код ошибки после выполнения команды

    14Reserved-рабочий буфер протокола NETBIOS

    Рис. 2.17. Формат блока NCB

    Рассмотрим назначение полей блока NCB.

    Поле Cmd содержит код команды, которую необходимо выполнить.

    Поле CCode содержит код ошибки, возвращаемый после проверки параметров до выполнения команды.

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

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

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

    Поле Size определяет размер буфера, используемого для приёма или передачи данных.

    В поле CallName указывается имя станции-получателя.

    Поле OurName содержит имя станции-отправителя. Обычно используется в командах создания имени станции или создания канала.

    Поля ReceiveTimeout и SendTimeout содержат интервал времени (измеряемый в 1/2с), в течение которого ожидается завершение соответственно команд приёма и передачи.



    Поле PostRoutine - ноль или указатель на программу (POST-программу), которая получает управление после завершения команды.

    Поле AdapterNumber используется, если на рабочей станции установлено несколько сетевых адаптеров (в сетях Ethernet этого обычно не бывает). В этом поле указывается номер адаптера, для которого предназначена команда. Первый адаптер имеет номер 0, второй -1 и т. д.

    Поле FinalCCode содержит во время выполнения команды значение 0хFF. После завершения выполнения команды в это поле записывается ноль или код ошибки, который относится к выполнению команды в целом (в отличие от кода в поле CCode ).

    Поле Reserved зарезервировано для использования протоколом NETBIOS.

    Перед выполнением команды её код должен быть записан в поле Cmd блока NCB. Каждая команда NETBIOS реализована в двух вариантах: с ожиданием и без ожидания окончания выполнения команды.

    Все команды NETBIOS можно разделить на несколько групп:

    1. Для работы с именами:

  • 0х30, 0хB0 - добавить новое имя в таблицу имён станции (с ожиданием и без ожидания),

  • 0х36, 0хB6 - добавить новое групповое имя в таблицу станции,

  • 0х31, 0хB1 - удалить имя из таблицы имён станции.

    2. Для приёма и передачи датаграмм:

  • 0х20, 0хA0 - передать одной или группе станций блок данных в виде датаграммы,

  • 0х22, 0хA2 - передать всем станциям блок данных в виде датаграммы,

  • 0х21, 0хA1 - принять блок данных, переданный с помощью команды 0х20 или 0хA0,

  • 0х23, 0хA3 - принять блок данных, переданный с помощью команды 0х22 или 0хA2.

    3. Для работы с каналами:

  • 0х10, 0х90 - установить канал между двумя именами, заданными в блоке NCB,

  • 0х11, 0х91 - организовать канал с вызываемой стороны (работают в паре с командами 0х10 или 0х90),

  • 0х12, 0х92 - закрыть канал,

  • 0х34, 0хB4 - опросить состояние канала.

    4. Для приёма и передачи данных через каналы:

  • 0х14, 0х94 - передать блок данных (до 64 Кб) по каналу,

  • 0х71, 0хF1 - передать блок данных (до 64 Кб) по каналу без проверки доставки блока,

  • 0х17, 0х97 - передать два буфера (каждый по 64 Кб) по каналу как один блок,

  • 0х72, 0хF2 - передать два буфера (каждый по 64 Кб) по каналу как один блок без проверки доставки блока,

  • 0х15, 0х95 - принять блок данных, переданный по каналу,

  • 0х16, 0х96 - принять блок данных, переданный по любому каналу, который организовала принимающая станция.

    5. Другие команды:

  • 0х32 - удалить все имеющиеся каналы и имена,

  • 0х35 - отменить ранее запущенную команду.


    Содержание раздела