02-06-2008 14:35
Это было давным давно. Microsoft и IBM предложили протокол SMB (Server Message Block), который бросил вызов совместному доступу к файлам и принтерам от Novell, основанному на протоколе IPX. Хотя теперь в это и трудно поверить, однако было время, когда практически все корпоративные сети работали с IPX и серверами от Novell Netware. Домашних сетей было сравнительно мало и работали они под IPX, а военные и исследовательские сети использовали TCP/IP. SMB был первым протоколом, работающим поверх других сетевых протоколов: TCP/IP, NetBEUI и IPX/SPX. Говоря другими словами, SMB-сервер мог заменить Novell-сервер без необходимости смены оставшейся части сетевой инфраструктуры. Причем было обещано, что это будет открытая система -- любой сервер, разговаривающий на SMB, может обслуживать запросы любого клиента, также говорящего на SMB, причем все это работает поверх любого сетевого протокола. Однако припомните историю, однако это обещание не было претворено в жизнь в течении довольно продолжительного времени. Единственные серверы, которые разговаривали на SMB, были OS/2 и MS Windows. Когда случилось так, что OS/2 не смогла занять свое место под солнцем, то Иван Юзерович (Joe User) остался с "открытым" решением, и это решение было представлено одним производителем.
Отметим также, что это "открытое" решение (которое, насколько я знаю, никогда и не являлось таким) ничего не стоило в глазах Unix-пользователей. SMB был исключительно фишкой PC, а весь тот хлам, который был тогда связан с PC старательно манкировался пользователями Unix, по причине своей пустячности, слабосильности и неспособности поднять "настоящую OS". Так как MS Windows довольно быстро стал стандартом де-факто, точно то же случилось и с протоколом SMB. Пользователи начали использовать встроенный (SMB) в MS Windows совместный доступ к файлам и принтерам. Когда вышел Windows 95, этот процесс стал еще проще. Используя стандартный GUI-подход, любой пользователь мог настроить и/или получить разделяемый доступ к файлам, принтерам, ресурсам, защищенным паролем, отображению ресурсов на локальный диск (drive mapping). Для этого пользователю требовалось иметь лишь мышку и палец, чтобы "кликать" кнопочкой. Это позволило уйти от использования таинственных командных файлов, необходимых в ранних версиях Windows и современных версий Novell Netware. И вот к чему мы пришли на сегодняшний день, -- на сегодняшний день весь мир разделился на Microsoft, PC и SMB с одной стороны, и на Unix, "крутое железо" (big iron) и NFS с другой стороны. А в чем собственно разница? Вот разница-то как раз существенна, мы начнем ее рассматривать с именования.
Каждый компьютер в Windows-сети идентифицируется по NetBIOS-имени, которое схоже с именем хоста (hostname) в Linux. NetBIOS-имена нечувствительны к регистру и могут быть длиной до 15 символов. В отличие от имени хоста, они помимо этого содержат еще и байт, определяющий тип ресурса (resource-type byte), который описывает роль или роли компьютера в сети. Несколько имен и типов могут соотноситься с одним и тем же реальным компьютером. Например вот листинг NetBIOS-имен, соотносящихся с моим основным Linux-компьютером в домашней сети:
HOMER <00> - B <ACTIVE> HOMER <03> - B <ACTIVE> HOMER <20> - B <ACTIVE> __MSBROWSE__ <01> - <GROUP> B <ACTIVE> WORKGROUP <00> - <GROUP> B <ACTIVE> WORKGROUP <1d> - B <ACTIVE> WORKGROUP <1e> - <GROUP> B <ACTIVE>
NetBIOS-имена в левой колонке, а шестнадцатеричные значения в угловых скобках -- это байты типа ресурса. Тип <00> означает стандартную рабочую станцию, тип <03> означает WinPop-сервис, а тип <20> означает file- и print- сервер. Таким образом, мой компьютер HOMER, объявляет о себе как о рабочей станции, file-сервере, могущем получать WinPopup-сообщения.
Другое имя, __MSBROWSE__, это Microsoft-овский способ идентификации domain master browser-а (главный "просматриватель" домена). Master browser несет ответственность за периодическую проверку того, какие компьютеры и разделяемые ресурсы доступны в сети, а также за кэширование такой информации. Когда какой-либо другой компьютер хочет "исследовать" сеть, то ему требуется спросить master browser-а о том, что доступно, вместо того, чтобы самому выполнять широковещательный запрос.
А что это за WORKGROUP-записи? Они описывают рабочие группы или домены, к которым принадлежат компьютеры. У меня в сети только один домен -- WORKGROUP, и HOMER заявил о себе как о рабочей станции (тип 00) в этом домене. Остальные две строки соотносятся с ролью компьютера "master browser", -- это мы обсудим более детально в этой главе, но ниже.
Каждый компьютер, который понимает SMB, заявляет о себе, как об обеспечивающем некоторые сервисы. Эти сервисы не ограничены в предоставлении совместного доступа, в обычной Windows-сети они включают в себя предоставление в совместный доступ принтеров, возможность удаленного администрирования, popup-сообщения и другие возможности. Каждый сервис имеет уникальное имя в рамках компьютера, который их предоставляет. В сети, сервис идентифицируется согласно следующему синтаксису:
\\machine-name\service-name
Эта нотация называется универсальным соглашением по наименованию (universal naming convention или UNC) (хотя это можно назвать универсальным с большой натяжкой!). Так как обратная косая черта (\) являются метасимволом в Linux, то большинство утилит Samba будет также принимать UNC, использующие и прямую косую черту (/), и автоматически преобразовывать в обратную, если такое необходимо.
На Windows-овском файл-сервере любой каталог может быть определен корневым в качестве file-sharing сервиса. Причем в этом случае физическая "раскладка" файлов в системе не играет роли, каталоги предоставляемые в совместный доступ могут быть сами подсоединены к file-share на другом компьютере. Все подкаталоги каталога, предоставленного в совместный доступ, также доступны через этот сервис. Доступ к file-share определяется правами доступа к сервису и правами доступа к подлежащей файловой системе, если таковые на этой файловой системе присутствуют.
Windows-овский print-share позволяет предоставить доступ к локально подключенному принтеру. Этот сервис не предоставляет драйверы для принтера, только возможность отослать преформатированное задание принтеру с удаленного компьютера. И как следствие, если вы намереваетесь использовать Windows-принтер с Linux-компьютера, то Вы должны иметь Linux-драйвер, который способен генерировать соответствующий управляющий язык для такого принтера. Пакет Ghostscript, который включается в большинство Linux-дистрибутивов, предоставляет большое разнообразие фильтров для преобразования PostScript в проприетарные языки управления принтерами. Список принетров, поддерживаемых напрямую, а также принтереов, которые поддерживаются на основе программного обеспечения разрабатываемого "третьими лицами" (third-party-supported printers), доступен на web-сайте Ghostscript-а.
Например, на моем компьютере KEARNEY, доступны следующие ниже сервисы. То, каким образом можно получить список этих сервисов, мы рассмотрим в одной из следующих частей этой главы.
\\KEARNEY\CDROM maps to E:\\\KEARNEY\ZIPLIB maps to D:Ziplib\\\KEARNEY\CANON print service for a Canon BJ-200\\KEARNEY\IPC$ special OS service
Дополнительной информации о SMB и CIFS (Common Internet File System) довольно много. NetBIOS-имена и scoping описываются в RFC 1001 и 1002. Книга Using Samba by Robert Eckstein, David Collier-Brown, and Peter Kelly; published by O'Reilly & Assoc. является превосходным справочником, с помощью которого вы разберетесь во всех особенностях реализации Microsoft-овского SMB. Кроме того, она доступна также и в online.
<< '''Глава 5. Samba: Общаемся с Windows-сетями''' | Multi Tool Linux | Настройка Samba в качестве клиента >>