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.
Адресація
Для адресації комп'ютера (робочій станції) використовуються імена розміром 16 байт. Кожна станція має одне постійне ім'я (permanent name), яке утворюється з апаратної адреси додаванням до нього зліва десяти нульових байт. Постійне ім'я видалити не можна, оскільки воно повністю визначається апаратним забезпеченням станції.
Окрім постійного імені протокол NETBIOS дозволяє додавати (і видаляти) звичайні імена і групові імена. Звичайні імена служать для ідентифікації робочої станції, групові можуть служити для посилки пакетів одночасно декільком станціям в мережі.
При додаванні звичайного імені протокол NETBIOS опитує всю мережу для перевірки унікальності імені. Групове ім'я може бути однакове на декількох станціях, тому при додаванні групового імені опит мережі не виконується.
Після додавання нового імені цьому імені привласнюється номер імені (name number), який використовується для передачі даних по мережі.
Робота з іменами
При додаванні імен команда додає вказане в поле 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]