NetBIOS/SMB
Стек NetBIOS/SMB
Фірми Microsoft і IBM спільно працювали над мережевими засобами для персональних комп'ютерів, тому стек протоколів NetBIOS/SMB є їх сумісним дітищем. На фізичному і канальному рівнях цього стека використовуються всі найбільш поширені протоколи Ethernet, Token Ring, FDDI і інші. Засоби NETBIOS з'явилися в 1984 році як мережеве розширення стандартних функцій базової системи вводу/виводу (BIOS) IBM РС для мережевої програми РС Network фірми IBM, яка на прикладному рівні (мал. 1.6) використовувала для реалізації мережевих сервісів протокол SMB (Server Message Block).
Надалі цей протокол був замінений так званим протоколом розширеного призначеного для користувача інтерфейсу NetBEUI NetBIOS Extended User Interface. Для забезпечення сумісності додатків як інтерфейс до протоколу NetBEUI був збережений інтерфейс NetBIOS. Протокол NetBEUI розроблявся як ефективний протокол, що споживає небагато ресурсів і призначений для мереж, що нараховують не більше за 200 робочих станцій. Цей протокол містить багато корисних мережевих функцій, які можна віднести до мережевого, транспортного і сеансовому рівнів моделі OSI, однак з його допомогою неможлива маршрутизація пакетів. Це обмежує застосування протоколу NetBEUI локальними мережами, не розділеними на підмережі, і унеможливлює його використання в складових мережах. Деякі обмеження NetBEUI знімаються реалізацією цього протоколу NBF (NetBEUI Frame), яка включена в операційну систему Microsoft Windows NT.
Протокол SMB (Server Message Block) виконує функції сеансового, представницького і прикладного рівнів. На основі SMB реалізовується файлова служба, а також служби друку і передачі сполучень між додатками.
Протокол NETBIOS працює на трьох рівнях моделі взаємодії відкритих систем: мережевому, транспортному і сеансовому. NETBIOS може забезпечити сервіс більш високого рівня, ніж протоколи IPX і SPX, проте не володіє здатністю до маршрутизації. Таким чином, NETBIOS не є мережевим протоколом в строгому сенсі цього слова. NETBIOS містить багато корисних мережевих функцій, які можна віднести до мережевого, транспортного і сеансового рівнів, проте з його допомогою неможлива маршрутизація пакетів, оскільки в протоколі обміну кадрами NETBIOS не вводиться таке поняття як мережа. Це обмежує застосування протоколу NETBIOS локальними мережами, не розділеними на підмережі. NETBIOS підтримує як дейтаграммный обмін, так і обмін зі встановленням з'єднань.
Протокол SMB (Server Message Block) виконує функції сеансового, представницького і прикладного рівнів моделі OSI. На основі SMB реалізовується файлова служба, а також служби друку і передачі сполучень між додатками. У функції SMB входять наступні операції:
• Управління сесіями. Створення і розрив логічного каналу між робочою станцією і мережевими ресурсами файлового сервера.
• Файловий доступ. Робоча станція може звернутися до файл-серверу із запитами на створення і видалення каталогів створення, відкриття і закриття файлів, читання і запис у файли, перейменування і видалення файлів, пошук файлів, отримання і установку файлових атрибутів, блокування записів.
• Сервіс друку. Робоча станція може ставити файли в чергу для друку на сервері і отримувати інформацію черги друку.
• Сервіс повідомлень. SMB підтримує просту передачу повідомлень з наступними функціями: послати просте повідомлення; послати широкомовне повідомлення; послати початок блоку повідомлень; послати текст блоку повідомлень; послати кінець блоку повідомлень; переслати ім'я користувача; відмінити пересилку; отримати ім'я машини.
На канальному рівні стеку NetBIOS/SMB використовують ті самі протоколи та технології, що й для стеку TCP/IP. SMB (Server Message Block) – протокол, що забезпечує прикладному процесудоступ до файлів та принтерів інших комп’ютерів. NetBIOS (Network Basic Input/Output System) – протокол, що доповнює базову систему (BIOS) персональних комп’ютерів типу IBM PC функціями для роботи у мережі.
Порівнюючи між собою можливості двох стеків NetBIOS/SMB та TCP/IP, бачимо, що кожен з них займає своє особливе місце за призначенням. Стек NetBIOS/SMB дозволяє легко створювати невеликі мережі, а ті ускладнення, які пов’язані з використанням стеку TCP/IP, виправдовуються можливістю утворення міжмережних зв’язків та підключення до всесвітньої мережі Інтернет. Через велику кількість додатків, які використовують функції API, NETBIOS, що надаються, в багато мережевих ОС ці функції реалізовані у вигляді інтерфейсу до своїх транспортних протоколів. У NetWare є програма, яка емулює функції NETBIOS на основі протоколу IPX, існують програмні емулятори NETBIOS для Windows NT і стека TCP/IP.
Робота з іменами
При додаванні імен команда додає вказане в поле NCB_name ім'я в таблицю імен, розташовану на робочій станції. Ім'я має бути унікальним в мережі. Воно не може використовуватися на інших станціях ні як звичайне, ні як групове. Якщо довжина імені менше 16 байт, воно має бути доповнене справа символами пропуску. В процесі додавання імені NETBIOS посилає по мережі запит. Якщо таке ім'я вже використовується на якій-небудь станції, ця станція пришле відповідь. В цьому випадку команда завершується з помилкою і ім'я додане не буде.
Після успішного виконання команди NETBIOS привласнює імені номер і повертає його в поле NCB_num блоку NCB. Номер імені потрібний для роботи з датаграмами. При додаванні імені станції здійснюється опит всієї мережі, що займає задоволено багато часу.
При видаленні імен команда видаляє ім'я з таблиці імен робочої станції, якщо воно не використовується яким-небудь каналом. Якщо ж ім'я використовується каналом, то воно позначається як призначене для видалення і віддаляється після закриття каналу. Якщо ім'я використовується декількома каналами, його можна видалити лише після закриття всіх пов'язаних з ним каналів.
Якщо спробувати видалити ім'я, яке використовується каналом, команда завершиться з кодом помилки 0xF. В цьому випадку перед видаленням імені необхідно закрити канал. Як тільки канал буде закритий, пов'язане з ним ім'я буде автоматично видалено, якщо перед закриттям каналу виконувалася спроба видалити ім'я.
Передача/Прийом датаграм
За допомогою команд прийому і передачі датаграм можна передавати і приймати пакети без підтвердження. Довжина повідомлень, передаваних за допомогою команд даної групи, обмежена 512 байтами. Існують команди для передачі і прийому датаграм по звичайному, груповому імені, а також адресованих одночасно всім станціям в мережі (Broadcast - широкомовному режимі). Для передачі датаграми не треба створювати канал з приймаючою станцією. При передачі і прийомі заповнюються адреса і розмір буфера в NCB_buFFER_ptr і NCB_length.
Для передачі (Send) необхідно записати ім'я, що викликається NCB_caLLNAME (не потрібний для широкомовного режиму). Номер станції, що видає команду, записаний в NCB_num. При прийомі (Receive) NCB_caLLNAME не заповнюється. Команди, що працюють з іменами, не можуть приймати датаграми, передані в широкомовному режимі і навпаки.
Ім'я може бути простим і груповим. Якщо перед викликом команди в полі NCB_num блоку NCB записати значення 0xFF, команда зможе приймати датаграми від будь-якої станції для будь-якого імені. Якщо довжина прийнятої датаграми перевищує значення, вказане в полі NCB_length, прийнятий блок даних буде усічений.
Датаграму передану в широкомовному режимі приймуть лише станції що видали команду широкомовного прийому (у тому числі і передавальна станція). Якщо таку команду прийому видати кілька разів, то всі буфери будуть заповнені однаковими даними.
Робота з каналами
За допомогою команд віртуальні канали можуть створюватися, видалятися, а також може бути визначений їх стан. При роботі з каналами імена використовуються лише для створення каналів.
Далі, коли канали вже будуть створені, для передачі даних використовуються номери каналів, а не імена або номери імен. Канал створюється одночасно двома станціями одна з яких при цьому знаходиться в режимі прийому запиту на створення каналу, а інша передає такий запит. Канал створюється з будь-якими двома іменами, тобто можна вказувати і своє ім'я як приймач.
Команда передачі запиту (Call) встановлює канал між двома іменами. У полі NCB_name вказується ім'я станції, яка встановлює канал, в полі NCB_caLLNAME - ім'я станції, яка встановлює канал, в полі NCB_caLLNAME - ім'я станції, з якою встановлюється канал. Ці імена можуть відноситися до програм, що працюють на одній або на різних станціях. Для успішного створення каналу приймаюча сторона повинна видати команду прийому запиту (Listen).
При створенні каналу вказується час тайм-ауту для операцій прийому і передачі даних. Команда робить декілька спроб створити канал і в разі невдачі повертає код помилки.
При роботі з груповим ім'ям команду Call слід видати кілька разів, оскільки за один виклик створюється лише один канал. Після створення каналу поле NCB_lsn в NCB обох станцій міститиме привласнений номер каналу. Його слід зберегти. Для команди Listen у полі NCB_caLLNAME вказується ім'я, з яким встановлюється канал. Якщо в перший байт імені записати символ "*", канал буде встановлений з будь-якою зухвалою станцією. Програма може видати декілька команд Listen для створення одночасно декількох каналів.
Команда Hung_up призначена для закриття каналу, номер якого вказаний в полі NCB_lsn. Вона має бути виконана з обох боків каналу після заверш роботи. Якщо канал зайнятий, то видається помилка. Для команд передачі з чеканням відводиться 20 секунд на завершення.
Передача/Прийом по каналах
Дані можуть передаватися (Send) декількома способами: c чеканням (Wait) і без нього, з перевіркою доставки (Ask) і без неї. Крім того, можна передати два блоки даних (Chain). При прийомі використовується варіант команди Receive.
За допомогою команди Send програма може передати блок даних розміром від 1 до 65535 байт по створеному раніше каналу. Номер каналу має бути записаний в полі NCB_lsn. Адреса передаваного блоку даних і його довжина мають бути записана в поля NCB_buFFER_ptr і NCB_length. Передачі даних з використанням каналів гарантує не лише доставку блоків даних, але і правильну послідовність, в якій ці блоки будуть прийняті. Якщо витік час тайм-ауту, заданого при створенні каналу, команда завершується з помилкою.
Для команди Chain_send дані передаються як один блок. Загальний розмір передаваних за допомогою цієї команди даних може досягати 2 х 64 байт. Перший буфер задається, як при звичайній передачі. Розмір другого буфера має бути записаний в перші два байти поля NCB_caLLNAME, а його адреса займає наступні чотири байти цього поля.
Окрім вибраного каналу можна отримати дані від будь-якого партнера (Receive_any). Для цієї команди замість номера каналу вказують номер імені, отриманий вашою програмою при додаванні імені. Якщо в полі NCB_num проставити значення 0xFF, ця команда прийматиме дані від будь-яких партнерів для будь-яких каналів, створених на вашій станції. Якщо розмір буфера недостаточен для запису прийнятих даних, команда повертає код помилки; в цьому випадку можна викликати команду ще раз для того, щоб отримати дані, що не помістилися в буфері при попередньому виклику команди.
Додаткові команди
Reset - для установки NETBIOS у вихідний стан (віддаляються все наявні канали і імена). За допомогою цієї команди можна також змінити максимальну кількість доступних програмі каналів і використовуваних одночасно блоків NCB. За умовчанням доступні шість каналів і 12 блоків NCB.
Cancel - Команда використовується для відміни інших запущених команд.
Додаткова інформація: NetBIOS Extended User Interface Розширений користувальницький інтерфейс NetBIOS
Дуже простий мережевий протокол, створений IBM і Microsoft. Використовується для реалізації NetBIOS поверх Ethernet з низькими накладними витратами. NetBEUI - немаршрутізіруемий протокол.
Network Basic Input / Output System Мережева базова система введення / виводу
NetBIOS - це простий інтерфейс програмування додатків (API), створений в 1980-х роках, що дозволяє програмам надсилати дані певним мережних іменами. NetBIOS завжди працює поверх іншого мережевого протоколу, такого як IPX / SPX, TCP / IP або Logical Link Control (LLC). NetBIOS, що працює поверх LLC, більше відомий як NetBEUI (NetBIOS Extended User Interface - помилкове вживання!).
NetBT
Протокол для передачі пакетів NetBIOS через TCP / IP. Використовує порти 137, 138 і 139. NetBT - повністю маршрутізіруемий протокол.
Інфо взята з: [1]
Цитата SOLDIER пише: SMB - це пішло від реалізації оной мережі в * nix. Відповідний пакет називається Samba.
Гиии ... Якщо б так коли б ... взагалі-то назва пакету SAMBA пішло від назви M $ протоколу.
SMB - Server Message Block юзается 445-й TCP порт
Витяг з M $ FAQ: Що таке SMB? Блок повідомлень сервера (SMB) та його вдосконалення Загальна файлова система Інтернету (EN) (CIFS) є стандартним Інтернет-протоколом, який використовується Windows для налаштування спільного використання файлів, принтерів, послідовних портів, а також для зв'язку між комп'ютерами. Для цього в SMB використовуються іменовані канали та поштові слоти. У мережевому оточенні сервери забезпечують доступність файлових систем і ресурсів для клієнтів. Клієнти роблять запити SMB на ресурси. Сервери відправляють відповіді SMB. Ця процедура відома як протокол клієнт-сервер або протокол запиту-відповіді.
Інфо взята з: [2]
Додаткова інформація:
Адресація Для адресації комп'ютера (робочої станції) використовуються імена раз - мером 16 байт. Кожна станція має одне постійне ім'я (permanent name), яка утворюється з апаратного адреси додаванням до нього ліворуч десяти ну - лівих байт. Постійне ім'я видалити не можна, так як воно повністю определя - ється апаратним забезпеченням станції. Окрім постійного імені протокол NETBIOS дозволяє додавати (і видаляти) звичайні імена та групові імена. Звичайні імена служать для ідентичний - тіфікаціі робочої станції, групові можуть служити для надсилання пакетів одночасно кільком станціям в мережі. При додаванні звичайного імені протокол NETBIOS опрашівает всю мережу для перевірки унікальності імені. Групове ім'я може бути однакове на кількох станціях, тому при додаванні групового імені опитування мережі не виконується. Після додавання нового імені цього імені присвоюється номер імені (name number), який використовується для передачі даних по мережі. Робота з протоколом NETBIOS Протокол NETBIOS надає програмами інтерфейс для передачі даних з використанням дейтаграмм або віртуального каналу зв'язку. У першому разі пакети доставляються незалежно. У другому випадку маршрут прохожде - ния пакетів встановлюється заздалегідь. Для виклику NETBIOS програма повинна створити в пам'яті керуючий блок - NCB (Network Control Block - мережевий керуючий блок). Адреса заповненого - ненного блоку NCB передається прериванію INT 5Ch. Є також альтернатив - ний інтерфейс, реалізований в рамках переривання INT 2Ah, який під - держівается емулятором NETBIOS, розробленим фірмою Novell. Перевірка присутності NETBIOS
Перше, що слід зробити програмі, викликає NETBIOS, перевірити наявність в системі інтерфейсу NETBIOS. Зробити це можна за допомогою переривань. За допомогою функції getvect () програма отримує покажчик на обработ - чік переривання INT 5Ch. NETBIOS вважається відсутнім, якщо сегмент адреси дорівнює нулю або F000h, обробник переривання не встановлено. Нижче наведено фрагмент програми перевірки присутності NETBIOS з використанням переривання INT 5Ch: void main (void) ( void interrupt (* int5C )(...); printf ( "Перевіряємо завантажений Чи NetBios. \ n"); int5C = getvect (0x5c); if (FP_SEG (int5C) == 0x0000 | | FP_SEG (int5C) == 0xF000) ( printf ( "NetBios не завантажений. \ n"); ) else printf ( "NetBios завантажений. \ n"); ) Інший спосіб перевірки наявності інтерфейсу NETBIOS полягає в виклик переривання INT 2Ah. Для цього потрібно завантажити в регістр AH нульове значення і викликати переривання. Якщо після повернення з переривання в регістрі AH попрежнему знаходиться нуль, драйвер NETBIOS не встановлено. Нижче при - ведено фрагмент програми перевірки присутності NETBIOS з використанням переривання INT 2Ah: void main (void) ( union REGS regs; printf ( "Перевірка завантажений Чи NetBios. \ n"); regs.h.ah = 0; int86 (0x2a, & regs, & regs); if (regs.h.ah == 0) ( printf ( "NetBios не завантажений. \ n"); ) else printf ( "NetBios завантажений. \ n"); ) Виклик команд протоколу NETBIOS Для виклику команд протоколу NETBIOS необхідно: 1. підготувати блок NCB; 2. підготувати дані для виклику переривання; 3. викликати переривання. Для виклику команд з програми, складеної на мові Сі, можна вос - користуватися засобами виклику програмних переривань, такими, як функції - тація int86x (). Формат блоку NCB Формат блоку NCB наступний: typedef struct (Byte NCB_COMMAND; byte NCB_RETCODE; byte NCB_LSN; byte NCB_NUM; void far * NCB_BUFFER_PTR; word NCB_LENGTH; byte NCB_CALLNAME [16]; byte NCB_NAME [16]; byte NCB_RTO; byte NCB_STO; void interrupt (* POST_FUNC) (void); byte NCB_ADAP_NUM; byte FINAL_NCB_RETCODE; byte NCB_RESERVE [14]; ) NCB; Поле NCB_COMMAND містить код команди, яку необхідно виконати. Існують команди для роботи з іменами станцій, для передачі і прийому датаграм, для роботи на рівні каналів і деякі інші. Поле NCB_RETCODE містить код помилки, повертається NETBIOS до виконання команди. Якщо, наприклад, програма затребовала виконання неправильної команди або поставила для команди неправильні параметри, NETBIOS не буде виконувати таку команду та встановить в поле NCB_RETCODE відповідний код помилки. Якщо ж у цьому полі після ви - зова NETBIOS знаходиться нульове значення, це ще не означає, що команда виполнілась правильно, однак вона почала виконуватись. Поле NCB_LSN (Local_Session_Number) містить номер каналу, а уста - новленного з іншою програмою. Це поле необхідно заповнювати при видачі команд передачі даних через канали. Поле NCB_NUM (Network_Name_Number) містить номер імені, що - рий присвоюється при додаванні звичайного або групового імені. Це поле повинно бути заповнено при прийомі датаграм. Поле NCB_BUFFER_PTR являє собою далекий покажчик в фор - мате [сегмент: зміщення] на буфер, який повинен містити дані перед виконанням передачі або на буфер, який буде використаний для прийому даних. Поле NCB_LENGTH визначає розмір буфера, який використовується для прийому або передачі даних. Поле NCB_CALLNAME містить ім'я станції, з якою станція бажаю - ет встановити канал для передачі даних. Поле NCB_NAME (Our_Name) повинно містити ім'я програми, під яким вона буде приймати дані. В якості цього імені може виступила - пать звичайне, групове або постійне ім'я. Поля NCB_RTO (Reseive_TimeOut) і NCB_STO (Send_TimeOut) містить жат інтервал часу (вимірюваний в 1 / 2 с), протягом якого очікується за - вершеніе відповідно команд прийому та передачі. Поле POST_FUNC - покажчик на програму, яка отримує управ - ня після завершення команди. Ця програма (POST-програма) викликається тільки в тому випадку, якщо в поле POST_FUNC було вказано адресу програми. Ес - Чи ж це поле заповнити нулями, ніяка програма викликатися не буде. Поле NCB_ADAP_NUM використовується, якщо в станції встановлено не - скільки мережевих адаптерів (в мережах Ethernet цього, як правило, не буває). У цьому полі вказується номер адаптера, для якого призначена команда. Пер - вий адаптер має номер 0, другий - 1. Поле FINAL_NCB_RETCODE містить під час виконання команди значення 0xFF. Після завершення виконання команди в це поле записує - ся код помилки, що належить до виконання команди в цілому (на відміну від коду в полі NCB_RETCODE). Якщо ваша програма не поставила адреса для про - грами в полі POST_FUNC, вона повинна опитувати в циклі вміст цього поля, чекаючи, поки в ньому не з'явиться значення, відмінне від 0xFF. Поле NCB_RESERVE зарезервоване для використання протоколом NETBIOS, програма не повинна змінювати його вміст. POST-програма POST-програма є програмою обробки переривання. Вона напів - Це означає управління в стані з забороненими переривання. Регістри ES: BX містять адресу блоку NCB, який використовувався при виконанні команди. У регістр AL записано значення з поля FINAL_NCB_RETCODE блоку NCB. Вимоги до POST-програмі - вона повинна зберегти регістри, устано - ти регістр DS на сегмент даних. POST-програма повинна працювати як можна швидше. Краще всього якщо вона буде використовуватися тільки для уста - новкі прапора, сігналізірующего основній програмі про завершення виконання команди. Перед завершенням своєї роботи POST-програма повинна відновити вміст всіх регістрів і виконати команду повернення з переривання IRET. Команди NETBIOS Кожна команда NETBIOS реалізована в двох варіантах - з очікуванням і без очікування. Перед виконанням команди її код повинен бути записаний в полі NCB_COMMAND блоку NCB. Якщо програма не критична до часу, можна вибрати варіант з очікуванням. У цьому випадку після виклику NETBIOS програм - ма знову отримає управління тільки після завершення виконання команди. Якщо з будь-яких причин виконання команди не може бути завершено, програма "зависне". Програма, що викликала команду NETBIOS без очікування, отримує управління негайно. Команда буде виконуватися у фоновому ре - жіме паралельно з роботою викликала її програми. На алгоритмічні мови Сі список команд може виглядати наступне про - щім чином: / / Команди NETBIOS / / Команди для роботи з іменами # define ADD_NAME 0xb0 # define ADD_NAME_WAIT 0x30 # define ADD_GROUP_NAME 0xb6 # define ADD_GROUP_NAME_WAIT 0x36 # define DELETE_NAME 0xb1 # define DELETE_NAME_WAIT 0x31 / / Команди для передачі / прийому дейтаграмм # define SEND_DATAGRAM 0xa0 # define SEND_DATAGRAM_WAIT 0x20 # define SEND_BCST_DATAGRAM 0xa2 # define SEND_BCST_DATAGRAM_WAIT 0x22 # define RECEIVE_DATAGRAM 0xa1 # define RECEIVE_DATAGRAM_WAIT 0x21 # define RECEIVE_BCST_DATAGRAM 0xa3 # define RECEIVE_BCST_DATAGRAM_WAIT 0x23 / / Команди для роботи з каналами # define CALL 0x90 # define CALL_WAIT 0x10 # define LISTEN 0x91 # define LISTEN_WAIT 0x11 # define HANG_UP 0x92 # define HANG_UP_WAIT 0x12 / / Команди для передачі / прийому з каналу # define SEND 0x94 # define SEND_WAIT 0x14 # define SEND_NO_ACK 0xf1 # define SEND_NO_ACK_WAIT 0x71 # define CHAIN_SEND 0x97 # define CHAIN_SEND_WAIT 0x17 # define CHAIN_SEND_NO_ACK 0xf2 # define CHAIN_SEND_NO_ACK_WAIT 0x72 # define RECEIVE 0x95 # define RECEIVE_WAIT 0x15 # define RECEIVE_ANY 0x96 # define RECEIVE_ANY_WAIT 0x16 / / Додаткові команди # define RESET 0x32 # define CANCEL 0x35 # define SESSION_STATUS 0xb4 # define SESSION_STATUS_WAIT 0x34 # define STATUS 0xb3 # define STATUS_WAIT 0x33 # define TRACE 0xf9 # define TRACE_WAIT 0x79 # define UNLINK 0x70 Виконання окремих команд Виконання команд з очікуванням і без очікування, з простим або групи - ним ім'ям виконуються, як правило аналогічно. Робота з іменами При додаванні імен команда додає вказане у NCB_NAME поле ім'я в таблицю імен, розташовану на робочій станції. Ім'я повинно бути унікальним в мережі. Воно не може використовуватися на інших станціях ні як звичайне, ні як групове. Якщо довжина імені менше 16 байт, воно повинне бути доповнено праворуч символами пробілу. У процесі додавання імені NETBIOS посилає по мережі запит. Якщо таке ім'я вже використовується на будь - або станції, ця станція надішле відповідь. У цьому випадку команда завершується з помилкою та ім'я додано не буде. Після успішного виконання команди NETBIOS присвоює імені но - мір і повертає його в поле NCB_NUM блоку NCB. Номер імені потрібно для роботи з датаграммамі. При додаванні імені станції здійснюється опитування всієї мережі, який займає досить багато часу. Під час видалення імен команда видаляє ім'я з таблиці імен робочої стан - засоби масової інформації, якщо воно не використовується будь-яким каналом. Якщо ж самі ім'я використовується каналом, то воно позначається як призначений для видалення і видаляється після за - критія каналу. Якщо ім'я використовується декількома каналами, його можна уда - лити тільки після закриття всіх пов'язаних з ним каналів. Якщо спробувати видалити ім'я, яке використовується каналом, команда завершиться з кодом помилки 0xF. У цьому випадку перед видаленням імені необхід - но закрити канал. Як тільки канал буде закритий, пов'язане з ним ім'я бу - Ваше автоматично видалено, якщо перед закриттям каналу була виконана спроба видалити ім'я. Передача / Прийом датаграм За допомогою команд прийому та передачі датаграм можна надсилати та приймати пакети без підтвердження. Довжина повідомлень, що передаються при допомогою команд цієї групи, обмежена 512 байт. Існують команди для передачі і прийому датаграм за звичайним, групповому імені, а також ад - ресованних одночасно всім станціям в мережі (Broadcast - шіроковещатель - ному режимі). Для передачі датаграмми не треба створювати канал з приймаю - щей станцією. При передачі і прийомі заповнюються адресу та розмір буфера в NCB_BUFFER_PTR і NCB_LENGTH. Для передачі (Send) необхідно записати яке викликається ім'я в NCB_CALLNAME (не потрібна для широкомовного режиму). Номер станції, що видає команду, записаного в NCB_NUM. При прийомі (Receive) NCB_CALLNAME не заповнюється. Команди, які працюють з іменами, не можуть приймати датаграмми, що були передані в шіроковещательном режимі, і навпаки. Ім'я може бути простим і груповим. Якщо перед викликом команди в поле NCB_NUM блоку NCB записати значення 0xFF, команда зможе приймати да - таграмми від будь-якої станції для будь-якого імені. Якщо довжина прийнятої датаграми
перевищує значення, вказане в полі NCB_LENGTH, прийнятий блок даних буде усечен.
Датаграмму переданих в шіроковещательном режимі візьмуть тільки станції видавшіе команду широкомовного прийому (в тому числі і пере - Будь-яка неурядова організація станція). Якщо таку команду прийому видати кілька разів, то все бу - фери будуть заповнені однаковими даними. Робота з каналами За допомогою команд віртуальні канали можуть створюватися, віддалятися, а також може бути визначено їх стан. При роботі з каналами імена використовуються тільки для створення каналів. Далі, коли канали вже будуть створені, для передачі даних використовуються номери каналів, а не імена або номери імен. Канал створюється одночасно двома станціями, одна з яких при цьому перебуває в режимі прийому запитів - са на створення каналу, а інша передає такий запит. Канал створюється з люби - ми двома іменами, тобто можна вказувати і своє ім'я в якості приймача. Команда передачі запиту (Call) встановлює канал між двома назва - нами. У полі NCB_NAME вказується ім'я станції, яка встановлює ка - нал, в полі NCB_CALLNAME - назва станції, з якою встановлюється канал. Ці імена можуть відноситися до програм, що працюють на одній або на раз - них станціях. Для успішного створення каналу приймаюча сторона повинна видати команду прийому запиту (Listen). При створенні каналу вказується час тайм-ауту для операцій прийому та передачі даних. Команда робить кілька спроб створити канал і у випадку невдачі повертає код помилки. При роботі з груповим ім'ям команду Call слід видати кілька раз, так як за один виклик створюється тільки один канал. Після створення каналу поле NCB_LSN в NCB обох станцій буде зо - тримати присвоєний номер каналу. Його слід зберегти. Для команди Listen в полі NCB_CALLNAME вказується ім'я, з яким - рим встановлюється канал. Якщо в перший байт імені записати символ "*", ка - нал буде встановлений з будь-якої викликає станцією. Програма може видати кілька команд Listen для створення одночасно декількох каналів. Команда Hung_Up призначена для закриття каналу, номер якого вказана в полі NCB_LSN. Вона повинна бути виконана з обох сторін каналу після заверш njя роботи. Якщо канал зайнятий, то видається помилка. Для команд передачі з очікуванням відводиться 20 секунд на завершення. Передача / Прийом по каналах Дані можуть передаватися (Send) кількома способами: c очікуванням (Wait) і без нього, з перевіркою доставки (Ask) і без неї. Крім того, можна пе - редать два блоки даних (Chain). При прийомі використовується варіант команди Receive. За допомогою команди Send програма може передати блок даних раз - мером від 1 до 65535 байт по створеному раніше каналу. Номер каналу повинен бути записаний в полі NCB_LSN. Адреса переданого блоку даних і його довжина повинні бути записані в поля NCB_BUFFER_PTR і NCB_LENGTH. Передачі даних з використанням каналів гарантує не тільки доставку блоків дан - них, але й правильну послідовність, в якій ці блоки будуть прийняті. Якщо минув час тайм-ауту, який вони поставили при створенні каналу, команда завер - шается з помилкою. Для команди Chain_Send дані передаються як один блок. Загальний раз - заходів переданих за допомогою цієї команди даних може досягати 2х64 К байт. Перший буфер задається, як при звичайній передачі. Розмір другого буфе - ра повинен бути записаний в перші два байти поля NCB_CALLNAME, а його адреса займає наступні чотири байти цього поля. Крім вибраного каналу можна отримати дані від будь-якого партнера (Receive_Any). Для цієї команди замість номера каналу вказують номер назва - ні, отриманий вашої програмою при додаванні імені. Якщо в полі NCB_NUM проставити значення 0xFF, ця команда буде приймати дані від будь-яких партнерів для будь-яких каналів, створених на вашій станції. Якщо розмір буфера недостатній для запису прийнятих даних, команда повертає код помилки; в цьому випадку можна викликати команду ще раз для то - го, щоб отримати дані, не поміститься в буфері при попередньому визо - ве команди. Додаткові команди Reset - для встановлення NETBIOS в початковий стан (видаляються всі наявні канали і імена). За допомогою цієї команди можна також змінити максимальну кількість доступних программе каналів і використовуваних одно - тимчасово блоків NCB. За замовчуванням доступні шість каналів і 12 блоків NCB. Cancel - Команда використовується для скасування інших запущених команд.