Библиотека сайта rus-linux.net
Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly1st Edition November 1999 1-56592-449-5, Order Number: 4495 416 pages, $34.95 |
1.3 Разбираемся с сетью SMB/CIFS
Теперь, после того, как у вас был короткий тур в Samba, давайте немного разберемся с окружением Samba: сетью SMB/CIFS. Работа с сетью SMB отличается от работы с Unix TCP/IP, поскольку здесь присутствует несколько новых концепций и информация, которую необходимо рассмотреть. Во-первых, мы обсудим основные аспекты внутренней работы сети SMB, следуя нескольким его реализациям от Microsoft, а затем мы покажем вам, где именно сервер Samba может или не может выполнять работу в сети SMB.
1.3.1 Разбираемся с NetBIOS
Для начала давайте перенесемся во времени. В 1984 году фирма IBM создала простой программный интерфейс (API) для сетей, названный ⌠Network Basic Input/Output System (NetBIOS или Сетевая Базовая Система Ввода/Вывода)■. API NetBIOS позволял простой метод доступа и обмена данными различным приложениям, работающим в сети.
Давайте представим себе, что NetBIOS API √ это сетевое расширение BIOS API. В BIOS каждый вызов низкого уровня поступает к конкретному устройству, установленному на данном компьютере и не нуждается в каких-либо особых инструкциях по методу доступа к данному устройству. Но в то же время, NetBIOS должен производить обмен информацией между компьютерами по сетям IBM или TokenRing. Поэтому ему необходим транспортный протокол низкого уровня для передачи запросов от одного компьютера к другому.
В далеком 1985 году IBM реализовала протокол данного типа, в который был включен NetBIOS API, под названием NetBIO Extended User Interface (NetBEUI). NetBEUI был разработан для малых локальных сетей (LANs) и позволял отдельному компьютеру иметь имя не более, чем 15 символов при условии, что оно не занято. Под понятием ⌠малая сеть■ мы понимаем сеть с числом компьютеров, не превышающих 255, что считалось достаточным в 1985 г.
Протокол приобрел большую популярность при работе с сетевыми приложениями, включая те, которые использовались в Windows For Workgroups. Позже появился NetBIOS поверх протокола IPX фирмы Novell. Тем не менее, главными сетевыми протоколами развивающегося сообщества Internet стали TCP/IP UDP/IP, поэтому возникла потребность в реализации NetBEUI поверх этих протоколов.
Напомним, что протокол TCP/IP использует нумерацию из нескольких цифр, разделенных точками, для представления адреса компьютера, таких, как 192.168.220.110, в то время как NetBIOS использует только имена. Это было главной проблемой при соединении в один этих двух протоколов. В 1987г. Internet Engineering Task Force (IETF) выпустить серию стандартизирующих документов под названием RFC 1001 и 1102 для описания работы NetBIOS поверх TCP/IP. Этот пакет документов и по сей день является стандартом на все версии протокола, имеющиеся на сегодняшний день, включая модификации от Microsoft или Samba.
С тех пор пакет этих документов известен под именем ⌠NetBIOS поверх TCP/IP■, или NBT для краткости. Стандарт NBT(RFC 1001/1002) описывает 3 службы сети:
Служба имен отвечает за решение отмеченной ранее проблемы имя-адрес, она позволяет каждому компьютеру в сети задать имя, которое может быть переведено в понятный для компьютера IP адрес, похожая схема используется в службе DNS сети Internet. Обе из служб датаграмм и сессии √ это вторичные протоколы связи для передачи данных между компьютерами в сети NetBIOS.
1.3.2 Получение имени
По мнению человека, получение имени просто. Тем не менее, для компьютера в сети NetBIOS, это выполняется достаточно сложно. Давайте взглянем на несколько из этих процессов.
В сети NetBIOS после входа компьютера в сеть, ему необходимо зарегистрировать свое имя, назовем этот процесс регистрацией имени. Но два компьютера в одной сети не могут иметь одинаковые имена; такая ситуация приведет к путанице у клиентов, пытающихся установить соединение с данными компьютерами. Есть два метода решения этой проблемы:
использовать NetBIOS Name Server (NBNS) для того, чтобы следить, какие компьютеры зарегистрировали свои имена NetBIOS
позволить каждому компьютеру отстаивать свое имя, если кто-либо попытается его использовать
Рисунок 1.8 показывает (неудачную) регистрацию имени, с и без сервера имен NetBIOS.
Рисунок 1.8: регистрация имени NBNS против не-NBNS
К тому же, должен существовать метод привязки имени NetBIOS к конкретному IP адресу, этот процесс называется определением имени. В этой ситуации также возможны два метода решения этой проблемы:
каждый компьютер должен передать запросившему свой IP адрес, после получения широковещательного запроса на свое имя NetBIOS
использовать NBNS для распознавания имен NetBIOS и IP адресов
Рисунок 1.9 показывает два способа определения имен.
Рисунок 1.9: определение имен NBNS против не-NBNS
Вы наверное уже думаете, что использование NBNS в сети может оказаться очень полезным. Чтобы увидеть это давайте подробнее рассмотрим не-NBNS метод.
В этой ситуации, когда компьютер входит в сеть, он рассылает широковещательное сообщение, которое содержит информацию о желании зарегистрировать свое имя NetBIOS. Если никто не отвечает на данный запрос √ компьютер оставляет это имя за собой. Но если какой-либо компьютер в сети уже использует это имя, то он отправит сообщение запросившему о том, что имя уже занято. Данный метод называется защитой имени. Он плохо показывает себя в ситуации, когда один из компьютеров выходит из сети, после чего другой берет его имя, тем самым привлекая к себе чрезмерное количество сетевого траффика из-за простой регистрации имени.
При использовании NBNS в ситуации, описанной ранее, обмен информацией ограничивается компьютером, пославшим запрос, и сервером NBNS. При регистрации имени компьютера не происходит широковещательных запросов; запрос на регистрацию просто отсылается от клиента к серверу NBSN и он отвечает занято или нет данное имя. Данное соединение носит название ⌠точка-точка■ и часто применяется в сетях, разбитых на несколько подсетей. Это метод используется потому, что маршрутизаторы в большинстве случаев заранее отстроены на блокировку широковещательных пакетов в сети.
Похожие методы используются и при определении имен компьютеров в сети. Без NBNS определение имен будет опять выполнено широковещательным методом. Все пакеты с запросами будут переданы всем компьютерам в сети, с предположением, что компьютер, которому послан запрос, ответит запросившему компьютеру. Т.о. понятно, что использование NBSN сервера и соединения типа ⌠точка-точка■ для этих целей более целесообразно, чем загрузка сети широковещательными пакетами для определения имен компьютеров в сети.
1.3.3 Типы компьютеров в сети
Как вы можете заранее знать каким образом каждый клиент сети будет проходить регистрацию имени и определение имен компьютеров сети? Исходя из того, как компьютер производит регистрацию имени и просмотр имен сети, в сети NBT он получает следующее определение: b-node, p-node, m-node, и h-node. Различия каждого из них показаны в Таблице 1.1.
Таблица 1.1: Типы компьютеров NetBIOS Роль
Значение
b-node
Использует только широковещательную регистрацию и просмотр имен.
p-node
Использует только регистрацию ⌠точка-точка■ и просмотр имен.
m-node
Использует широковещательную регистрацию. Если она успешна, он сообщает об этом серверу NBNS. Использует широковещательный метод для просмотра имен; использует NBNS сервер, если метод широковещательных запросов неудачен.
h-node (гибрид)
Использует NBNS сервер для регистрации и просмотра имен; использует широковещательные запросы если сервер NBNS не доступен.
Если клиенты используют ОС Windows, то они обычно представлены как h-nodes, но h-nodes были разработаны позднее Microsoft и их описания нет в RFC 1001/1002.
Вы можете узнать тип компьютера в ОС Windows, набрав команду ipconfig /all в поле Node Type:
C:\> ipconfig /allWindows 98 IP Configuration ... Node Type . . . . . . . . . . : Hybrid ...1.3.4 Из чего состоит имя?
Имена NetBIOS довольно сильно отличаются от имен DNS. Во-первых имена NetBIOS задаются одним словом. Иначе говоря, здесь нет разделителей, таких как ara.com или samba.org в имени компьютера. Во-вторых длина имен NetBIOS не более 15 символов, они не могут начинаться со знака * и состоят из стандартных символов алфавита (a-z,A-Z,0-9), а также следующих:
! @ # $ % ^ & ( ) - ' { } . ~Не смотря на то, что развешено использование знака ⌠.■ в имени NetBIOS, мы не рекомендуем использовать этот знак, поскольку нет гарантий на использование таких имен в будущих версиях NetBIOS поверх TCP/IP. Не случайно возможно совпадение имен DNS с именами NetBIOS. Часто DNS имена используются и как NetBIOS имена. Например, если у вас есть компьютер phoenix.ora.com его NetBIOS имя может быть задано как PHOENIX.
1.3.4.1 Имена и типы ресурсов
В сети NetBIOS компьютер не только заявляет о своем присутствии, но и сообщает другим какие типы служб он может предоставить. Например, компьютер PHOENIX может сообщить о себе, что он не только рабочая станция, но и файловый сервер и имеет возможность получать сообщения WinPopup. Это происходит путем добавления 16-го байта к окончанию имени компьютера, названный resource type, регистрирующий имя более одного раза. Это показано на Рисунке 1.10.
Рисунок 1.10: Структура имен NetBIOS
Тип ресурса (resource type), заданный в один байт, показывает именно ту службу, которую предоставляет данный компьютер, мы будем обозначать их через символы <>, например: PHOENIX <00>
PHOENIX<00>Вы можете увидеть какие службы предоставлены на компьютере с NBT при помощи команды NBTSTAT. Поскольку эти службы существуют в одном экземпляре, вы увидите их в списке с типом UNIQUE. Например, следующий вывод показывает описание сервера hydra:
D:\> NBTSTAT -a hydraNetBIOS Remote Machine Name Table Name Type Status --------------------------------------------- HYDRA <00> UNIQUE Registered HYDRA <03> UNIQUE Registered HYDRA <20> UNIQUE Registered ...Здесь показано, что сервер зарегистрировал рабочую станцию под именем hydra, она может принимать сообщения WinPopup и является файловым сервером. Все возможные атрибуты, которые может иметь компьютер, перечислены в Таблице 1.2.
Таблица 1.2: Уникальные имена ресурсов NetBIOS Имя ресурса
Шестнад. значение
Standard Workstation Service
00
Messenger Service (WinPopup)
03
RAS Server Service
06
Domain Master Browser Service (associated with primary domain controller)
1B
Master Browser name
1D
NetDDE Service
1F
Fileserver (including printer server)
20
RAS Client Service
21
Network Monitor Agent
BE
Network Monitor Utility
BF
Отметим, что DNS имена не заданы как тип ресурса, разработчики преднамеренно задали 16-е значение 20 для службы файлового сервера.
1.3.4.2 Типы и имена групп
В протокол SMB также входит понятие групп, при помощи которых компьютеры регистрируют себя. Раннее на примере, мы отметили, что компьютеры принадлежат одной рабочей группе, находящейся в одной подсети. Например, в сети предприятия могут существовать рабочие группы ACCOUNTING и SALES, каждая с различными серверами и принтерами. В терминах Windows рабочая группа Windows и группа SMB - это одно и то же.
Продолжая наш пример с NBTSTAT, сервер Samba hydra является членом рабочей группы SIMPLE (атрибут группы шестнадцатиричное 00) и будет представлен на выборах в группе как browse master (мастер обзора, атрибут GROUP равен 1E). Вот что может показать NBTSTAT:
NetBIOS Remote Machine Name Table, continued Name Type Status --------------------------------------------- SIMPLE <00> GROUP Registered SIMPLE <1E> GROUP Registered ..__MSBROWSE__. <01> GROUP RegisteredВсе возможные атрибуты, которые может иметь компьютер, показаны в Таблице 1.3. Более полную информацию вы можете найти в книге Windows NT in a Nutshell by Eric Pearce, также выпущенной O'Reilly.
Таблица 1.3: Типы групповых ресурсов NetBIOS Именуемый ресурс
Шестнадцатиричное однобайтовое значение
Standard Workstation group
00
Logon Server
1C
Master Browser name
1D
Normal Group name (used in browser elections)
1E
Internet Group name (administrative)
20
<01><02>__MSBROWSE__<02>
01
Последняя запись
__MSBROWSE__ используется для оповещения о группах других главных браузеров (master browser). Параметры, которые нельзя отобразить, обозначены точками в выводе NBTSTAT. Не беспокойтесь, если вы не понимаете всех значений типов ресурсов или групп.
Многи из них не пригодятся при работе с Samba, а остальные вы освоете по мере продвижения по данному разделу. Следует запомнить важную вещь - в механизме присвоения имен нет логистики.1.3.5 Датаграммы и сессии
На этом этапе давайте рассмотрим другой аспект NBT, а именно: возможность создания соединения между двумя компьютерами по сети NetBIOS. Вообще NetBIOS поверх TCP/IP имеет в своем составе 2 службы: служба сессий и служба датаграмм.
Понимание работы этих двух служб не обязательно для работы с Samba, но это покажет вам как работает NBT и что делать, если Samba не работает.
Служба датаграмм не устанавливает постоянного соединения между двумя компьютерами, пакеты с данными просто отсылаются другому компьютеру, без проверки, дошли они или нет до места назначения. Использование датаграмм не так загружает сеть как сессии. Поэтому датаграммы используются для быстрой передачи простых блоков данных от одного компьютера другому. Служба датаграмм использует для соединения простые методы, показанные в
Таблице 1.4.
Таблица 1.4: Работа с датаграммами Команда
Описание
Send Datagram
Послать пакет датаграммы компьютеру или группе компьютеров.
Send Broadcast Datagram
Широков. рассылка датаграмм любому компьютеру, ожидающему датаграмму на получение широковещательного запроса.
Receive Datagram
Получить датаграмму от компьютера.
Receive Broadcast Datagram
Ожидание широковещательной датаграммы.
Работа службы сессии более сложна. Сессии √ это такой метод соединения, который позволяет определить проблему или невозможность соединения между двумя приложениями, использующими NetBIOS. Легко представить сессию NetBIOS как установление телефонного соединения. Полноценное двустороннее соединение устанавливается между вызываемым и вызвавшим компьютерами и оно должно постоянно оставаться открытым в течении всего соединения. Каждая из общающихся сторон знает, кто запрашивает, а кто отвечает, а соединение между ними происходит при помощи простых методов, показанных в
Таблице 1.5.[5] Как вы можете увидеть в RFC 1001, при создании службы NBT придерживалась аналогия работы телефона.
Таблица 1.5: Работа сессий Команда
Описание
Call
Установить сессию с ожидающим компьютером с определенным именем.
Listen
Ожидание звонка от одного или нескольких звонящих.
Hang-up
Закончить вызов.
Send
Послать данные другому компьютеру.
Receive
Получить данные с другого компьютера.
Session Status
Получить информацию на запрашиваемые сессии.
Сессии √ это основной метод доступа к ресурсам в сети NBT Они обычно используются для установки постоянных соединений компьютеров клиентов с дисками и принтерами сервера. Клиент ⌠звонит■ на сервер и запрашивает информацию, например файлы, которые он хочет открыть, данные которыми он хочет обменяться и т.д. Эти вызовы могут продолжаться достаточно долгое время- часы, даже дни, и все это происходит внутри одного соединения.
Если здесь возникла ошибка, п.о. сессий (TCP) заново передаст данные, пока данные не будут получены правильно, в отличие "отослал-и-забыл" в службе датаграмм (UDP).
На самом деле, не смотря на то, что сессии могут прервать плохое соединение- они этого не делают. Как вы уже наверное заметили, при использовании сетей Windows и сессий возникает большая проблема. Если соединение прервано по какой-либо причине, информация о сессии, которая открыта между двумя компьютерами может просто утерена. Если это произойдет, то единственный путь восстановить информацию о сессии √ это начать соединение заново.
Если вы хотите получить более полную информацию об этих службах, мы рекомендуем вам заглянуть в RFC 1001. Тем не менее, здесь следует помнить две важные вещи:
сессии всегда устанавливаются между двумя компьютерами в сети, не больше и не меньше. Если сессия прервана, подразумевается, что клиент хранит достаточное количество информации для установки нового соединения. Но тем не менее такая ситуация происходит редко.
датаграммы могут широковещательно рассылаться нескольким компьютерам, но они не надежны. Иначе говоря, нет точного способа узнать, дошли они или нет.
International | About O'Reilly | Affiliated Companies
© 1999, O'Reilly & Associates, Inc.