Узел источника

Поле узла источника — это адрес MAC узла источника. Адреса широковещания недопустимы.
Сокет источника Сокет источника — это адрес процесса, передающего пакет. Процессам, общающимся при равноправном соединении узлов, не требуется посылать и получать один и тот же номер сокета. В сети рабочих станций и серверов сервер обычно "ожидает" на определенном сокете запросы на обслуживание. В таком случае сокет источника не обязательно тот же самый или вообще имеет значение. Важно только, чтобы сервер ответил сокету источника. Например, все файловые серверы NetWare имеют один и тот же адрес сокета, но запрос к ним может исходить из сокета с любым номером.
Номера сокетов источников следуют тем же соглашениям, что и сокеты места назначения.
Заголовки протоколов более высокого уровня Заголовки протоколов более высокого уровня принадлежат таким Протоколам, как NCP или SPX. Они часто встречаются в части данных пакета IPX.
Адресация IPX
Теперь рассмотрим адресацию IPX. Как показано в таблице 3.3, IPX имеет свою собственную адресацию узлов (для внутрисетевой работы) и внутриуз-ловую адресацию. Для адресации узла IPX использует адрес MAC, который был присвоен карте сетевого интерфейса производителем самой карты.
Сетевой адрес IPX уникальным образом идентифицирует сервер IPX в сети IPX и отдельные процессы внутри сервера. Адрес IPX является 12-байтовым шестнадцатеричным числом, которое можно разделить на три части. Первая часть адреса IPX — самая длинная, это шестибайтовый аппаратный адрес сетевого адаптера. Последняя часть является двухбайтным номером сокета, который используется для ссылки на реальный выполняющийся на машине процесс. В таблице 3.3 показано, как выглядит этот адрес.
Каждый номер в адресе IPX содержится в поле в заголовке IPX и представляет сеть источника или места назначения, узел или сокет. Сетевой номер используется только для операций сетевого уровня, а именно, маршрутизации. Номер узла используется для локальной (или в том же сегменте) передачи пакетов. Номер сокета направляет пакет в процесс, действующий внутри узла.
Каждый адресный компонент описывается в следующих разделах.

Блоки сообщений сервера

Протокол блоков сообщений сервера (SMB — Server Message Blocks) является рабочей лошадкой мира Windows NT и Windows 2000. Он используется между компьютерами для общего доступа к файлам, принтерам, последовательным портам и для коммуникационных абстракций, таких как именованные каналы и почтовые ящики. SMB является клиент-серверным протоколом типа запрос-ответ.
Протокол SMB превратился в общую файловую систему Интернета (Common Internet File System, CIFS). CIFS предоставляет межплатформенный механизм клиентских систем для запроса служб файлов и печати на серверных системах. Он поддерживает файлы и печать, используя команды доступа open (открыть), close (закрыть), read (читать), write (писать) и seek (искать). Кроме того, он поддерживает доступ к файлам и записям как в блокированном, так и в неблокированном режиме. Когда приложение блокирует файл, ему не могут помешать другие приложения. Блокированные файл или запись недоступны не блокирующим приложениям.
SMB предоставляет кэширование с опережающим чтением и с обратной записью. Это безопасные операции до тех пор, пока только один клиент имеет доступ к файлу. Кэширование чтения и оптимизация упреждающего чтения являются безопасными при доступе к файлу или в режиме только чтения. Если несколько клиентов пытаются одновременно записывать в файл, то ничто не будет безопасным; поэтому все файловые операции должны управляться на сервере. SMB уведомляет обращающегося к файлу клиента об изменениях в режиме доступа, чтобы клиент мог использовать оптимальный метод доступа.
Приложения регистрируются для уведомления сервером об изменениях содержимого файла или каталога. Это позволяет приложению знать, когда обновить изображение, не требуя от него постоянно запрашивать сервер.
Существует почти столько же различных версий протокола SMB, сколько и поставщиков программного обеспечения. Каждая версия предоставляет дополнительные функции, свойства и средства. Чтобы справиться с этим изобилием, SMB выполняет так называемое согласование диалектов. Когда два компьютера вступают в контакт, они согласовывают диалект или версию SMB, которая будет использоваться при их общении. Это критический шаг в терминах как производительности, так и безошибочной коммуникации, так как каждый диалект может предоставлять различные сообщения, а также изменения в полях и семантике существующих сообщений других диалектов. В дополнение к обычным атрибутам файлов, например, времени создания и модификации, такими приложениями, как Word могут добавляться другие элементы, чтобы включить, например, имя автора или описание содержимого.
Протокол может поддерживать виртуальные тома, используя файловую систему, которая может охватывать несколько томов и серверов, но выглядеть при этом для клиентской машины как находящаяся на одном сервере. Файлы и каталоги поддерева могут перемещаться на другие серверы, имена при этом изменять не придется. В этом случае не нужно будет делать изменения на настольном компьютере, когда делаются изменения на сервере. Эти поддеревья могут также реплицироваться для выравнивания нагрузки и устойчивости к ошибкам. Когда клиент запрашивает файл, SMB использует направления для пересылки клиента на сервер, который содержит данные. Все это происходит за сценой без вмешательства клиента.
SMB позволяет клиенту преобразовывать имена серверов с помощью DNS, WINS, LMHOSTS или любого другого механизма преобразования имен. Это перемещает нас из неструктурированного, "плоского" пространства серверных имен в иерархически организованное пространство, поддерживающее более широкий диапазон взаимодействия. Чтобы сберечь полосу пропускания, SMB может пакетировать запросы в одном сообщении для минимизации задержки перемещения туда и обратно, даже когда более поздние запросы зависят от результатов предыдущих; он поддерживает также имена файлов в кодировке Unicode.
Обзор работы SM В
Для получения доступа к файлу на сервере клиентское приложение должно разобрать полное имя файла, чтобы определить имя сервера и относительное имя на этом сервере, разрешить имя сервера в адрес транспортировки, создать соединение с сервером и затем обменяться сообщениями. Если имя сервера было ранее разрешено, то оно может находиться в кэше, поэтому разрешение имени может не понадобиться. Кроме того, если предыдущее соединение все еще доступно, то новое соединение тогда не потребуется. Этот процесс повторяется множество раз в течение нормального рабочего дня. Если соединение простаивало в течение некоторого времени, оно будет разорвано.

Редиректор клиентской машины

Основная функция редиректора клиентской машины — форматирование удаленных запросов таким образом, который будет понятен машине места назначения, и отправка их по сети. Редиректор использует структуру БМВ в качестве стандартного средства перемещения для отправки и ответа на запросы редиректора. Каждый заголовок БМВ содержит код команды (определяющий задачу, выполнение которой редиректор хочет поручить удаленной станции) и несколько полей окружения и параметров (которые определяют, как команда должна выполняться). Кроме того, в заголовке SMB последнее поле в SMB может содержать до 64Кбайт данных, посылаемых на удаленную станцию.
Read SMB (запрос) Команда read SMB (иногда называемая командой чтения диапазона байтов) приказывает серверу прочитать определенный диапазон байтов из дискового файла. Она также включает дескриптор фаи ла, число байтов для чтения и т.д. Сдвиг файла основывается на "указателе поиска", который хранится редиректором локально для файла. Серверный указатель поиска для этого дескриптора файла недействителен в данном случае, так как множество процессов удаленных рабочих станций могут обращаться к одному серверу, используя системный дескриптор файла.
Параметр "est'd total" (оценка общего числа байтов для чтения, включая прочитанные этим запросом) является необязательным. Сервер может использовать эту информацию для упреждающего чтения или для оптимизации выделения буферов.
Read SMB (ответ) Ответ на Read SMB несет с собой запрошенные данные. Мультиплексный идентификатор (MID) помечает ответ SMB для соответствующего запроса SMB.
Вот как работает этот процесс:
• Программа посылает запрос ввода-вывода операционной системе через вызов интерфейса прикладного программирования (API).
• Операционная система (или редиректор с помощью прерывания "int21") определяет, что запрос предназначен для удаленного ресурса, и передает его редиректору.
• Редиректор форматирует запрос ввода-вывода как запрос SMB и посылает его по сети на сервер.
• Сервер получает SMB и посылает запрос ввода-вывода локальной операционной системе сервера.
• Сервер форматирует данные ответа SMB. Данные возвращаются, если выполнена операция чтения, или возвращается код, если выполнена операция записи. Сервер посылает их по сети запрашивающей рабочей станции.
• Редиректор передает ответ в операционную систему.
• Операционная система передает ответ вызывающему приложению.

Обратная совместимость

Если клиент CIFS хочет взаимодействовать с более старыми серверами SMB, он может повторить запрос с новым вызываемым именем, если вызов был отклонен сервером. Выбор нового имени зависит от типа используемого разрешения имени. Например, если используется DNS, вызываемое имя будет создаваться из первого компонента имени DNS сервера и затем обрезаться до 15 символов, если потребуется. Затем он будет дополнен до 16 символов с помощью символов пробела (20 hex). Если используется NETBIOS, то вызываемым именем является имя NETBIOS. Если это не работает, то можно сделать запрос NETBIOS "Состояние адаптера", чтобы получить имя NETBIOS на сервере и повторить создание соединения.
Настройка сеанса
Сервер CIFS ДОЛЖЕН зарегистрировать NETBIOS Listen, который принимает все вызывающие имена имени "*SMBSERVER". Кроме того, если он хочет поддерживать более старых клиентов SMB, он может иметь имя NETBIOS и зарегистрировать также порт 139 для прослушивания этого имени.
Управление соединением
Правила для прекращения надежного транспортного соединения перечислены ниже:
• Если сервер получает от клиента запрос создания транспорта, с которым он уже общается, сервер может прекратить все другие транспортные соединения с этим клиентом. Это позволяет серверу восстановиться из ситуации, когда клиент внезапно перезагружается и не может аккуратно прекратить свои действия по использованию общих ресурсов сервера.
• Сервер может прервать транспортное соединение с клиентом в любое время, если клиент создает неправильно сформированные или нелогичные запросы. Однако по возможности сервер будет сначала возвращать клиенту код ошибки, указывая причину прерывания.
• Если сервер получает тяжелую ошибку на транспорте (например, отказ передачи), то транспортное соединение с этим клиентом может быть прервано.
• Сервер может прекратить транспортное соединение, если клиент не имеет на сервере открытых ресурсов.

Пакетная блокировка орlоск

Пакетная блокировка орlоск используются там, где обычные программы на клиенте ведут себя таким образом, что объем сетевого трафика растет выше приемлемого уровня для предоставляемой программой функциональности.
Например, командный процессор выполняет команды из командной процедуры, делая следующие шаги:
• Открывает командную процедуру
• Ищет "следующую строку" в файле
• Считывает строку из файла
• Закрывает файл
• Выполняет команду
Этот процесс повторяется для каждой команды, выполняемой из файла командной процедуры. Очевидно, что это приводит к обработке множества файлов, создавая тем самым сетевой трафик, который можно было бы сократить, если бы программа просто оставляла файл открытым, считывала строку, выполняла команду и затем считывала новую строку.
Пакетное блокирование действует именно так, позволяя клиентам пропускать излишние запросы открытия и закрытия. Когда командный процессор запрашивает следующую строку в файле, клиент либо запрашивает сервер, либо уже имеет эти данные в кэше опережающего чтения. В любом случае объем сетевого трафика клиента существенно сокращается.
Если сервер получает запрос для переименования или удаления файла, который имеет пакетную блокировку ор1оск, он информирует клиента, что необходимо удалить ор1оск. Клиент затем переходит в режим открыть и закрыть, описанный ранее.
Клиент А открывает файл и запрашивает орlоск. Если никто не открывал этот файл на сервере, то клиенту А предоставляется ор1оск. В приведенном выше случае клиент А сохраняет файл открытым для своей вызывающей программы для нескольких операций открыть/закрыть. Данные могут читаться для вызывающей программы с опережением; может также использоваться и другая оптимизация, например буферизированная блокировка.
Однако когда другой клиент запрашивает на сервере операцию открытия, переименования или удаления файла, клиент А должен очистить свои буферизированные данные и синхронизироваться с сервером. В большинстве случаев это включает закрытие файла при условии, что вызывающая программа клиента А считает, что она закрыла файл. Когда файл закрыт, может быть завершен запрос клиента В на открытие.