Если клиент CIFS хочет взаимодействовать с более старыми серверами SMB, он может повторить запрос с новым вызываемым именем, если вызов был отклонен сервером. Выбор нового имени зависит от типа используемого разрешения имени. Например, если используется DNS, вызываемое имя будет создаваться из первого компонента имени DNS сервера и затем обрезаться до 15 символов, если потребуется. Затем он будет дополнен до 16 символов с помощью символов пробела (20 hex). Если используется NETBIOS, то вызываемым именем является имя NETBIOS. Если это не работает, то можно сделать запрос NETBIOS "Состояние адаптера", чтобы получить имя NETBIOS на сервере и повторить создание соединения.
Настройка сеанса
Сервер CIFS ДОЛЖЕН зарегистрировать NETBIOS Listen, который принимает все вызывающие имена имени "*SMBSERVER". Кроме того, если он хочет поддерживать более старых клиентов SMB, он может иметь имя NETBIOS и зарегистрировать также порт 139 для прослушивания этого имени.
Управление соединением
Правила для прекращения надежного транспортного соединения перечислены ниже:
• Если сервер получает от клиента запрос создания транспорта, с которым он уже общается, сервер может прекратить все другие транспортные соединения с этим клиентом. Это позволяет серверу восстановиться из ситуации, когда клиент внезапно перезагружается и не может аккуратно прекратить свои действия по использованию общих ресурсов сервера.
• Сервер может прервать транспортное соединение с клиентом в любое время, если клиент создает неправильно сформированные или нелогичные запросы. Однако по возможности сервер будет сначала возвращать клиенту код ошибки, указывая причину прерывания.
• Если сервер получает тяжелую ошибку на транспорте (например, отказ передачи), то транспортное соединение с этим клиентом может быть прервано.
• Сервер может прекратить транспортное соединение, если клиент не имеет на сервере открытых ресурсов.
Windows NT 4 с Service Pack 3 включает усовершенствованную версию протокола аутентификации SMB, известную также как протокол совместного использования файлов общей системы файлов Интернета (CIFS). Модернизированный протокол имеет два основных усовершенствования. Он поддерживает взаимную аутентификацию, которая препятствует использованию атаки "человек в середине", и поддерживает аутентификацию сообщений, что препятствует использованию атак активных сообщений. Механизм подписи SMB обеспечивает эту аутентификацию, помещая цифровую подпись безопасности в каждый SMB. Затем она проверяется клиентом и сервером.
Чтобы использовать механизм подписи SMB, имеется две возможности: сделать возможным или потребовать ее использование на клиенте и на сервере. Если подпись SMB сделана возможной на сервере, то имеющие возможность клиенты будут использовать CIFS во время всех последующих сеансов. Преимущество такого подхода состоит в том, что клиенты, не имеющие возможности подписи SMB, смогут использовать более старый протокол SMB. Если на сервере требуется подпись SMB, то клиент не сможет создать сеанс, не будучи был специально инициирован для подписи SMB. Подпись SMB отключена по умолчанию на серверной системе при установке служебного пакета (service pack). Она, однако, инициирована по умолчанию, когда служебный пакет устанавливается на системе рабочей станции.
Примечание. Подпись SMB не будет работать с прямым протоколом хоста IPX. Это связано с тем, что прямой протокол хоста IPX изменяет SMB способом, который несовместим с поддерживающим подпись SMB. Эта несовместимость наиболее очевидна, когда используются прямые клиенты хоста IPX, и на сервере требуется подпись SMB. Требование на сервере подписей SMB не позволит серверу связываться с прямым интерфейсом хоста IPX, что заставит подписать все соединения с сервером. Если отключить связывание NWLink с сервером, то можно будет использовать подпись SMB.
Кроме того, подпись SMB будет снижать производительность системы. Хотя она не потребляет дополнительную полосу пропускания, но использует центральный процессор на клиенте и на сервере.
Сетевая производительность увеличивается, если клиент может локально буферизовать данные файла. Это связано с тем, что клиент не должен записывать информацию в файл на сервере, если знает, что никакой другой процесс не получает доступа к данным. Таким же образом клиент может буферизовать данные опережающего считывания из файла, если знает, что никакой другой процесс не записывает данные.
Оппортунистические блокировки, или oplocks, позволяют клиентам динамически изменять их стратегию буферизации согласованным образом. Все версии SMB из LAN-MAN 1.0 способствуют поддержке oplocks.
Три различных вида оппортунистических блокировок перечислены ниже.
1. Исключающая oplock позволяет клиенту открыть файл для своего собственного персонального использования, чтобы выполнить произвольную буферизацию.
2. Пакетная oplock позволяет клиенту держать на сервере открытый файл, даже если локальное средство доступа (accessor) на клиентской м шине закрыло файл.
3. Level II oplock позволяет нескольким машинам читать файл, если среди них нет записывающих клиентов. Level II oplock поддерживаются в том случае, если согласованный диалект будет LM 0.12 или больше.
Открыв файл, клиент запрашивает сервер задать на файле определенную oplock. Ответ сервера указывает тип oplock, предоставленный клиенту, позволяя ему соответствующим образом настроить свою политику буферизации.
SMB_COM_LOCKING_ANDX SMB используется для передачи информации ответа и прерывания oplock. Рассмотрим каждый из этих механизмов блокирования более подробно.
Когда клиенту предоставляется исключающая oplock, он может буферизи-ровать блокированную информацию, выполнять опережающее чтение и записывать данные на клиентской стороне общения, так как знает, что к файлу не будет других средств доступа. Это происходит следующим образом. Редиректор на клиенте открывает файл, запрашивая для клиента oplock. Если файл открыт кем-то другим, клиенту отказывают в oplock, и на локальном клиенте никакой локальной буферизации выполняться не может. Это означает также, что на файле не может выполняться никакого опережающего чтения, если только редиректор не знает, что он имеет блокированный диапазон опережающего чтения. Если сервер предоставляет исключающую oplock, клиент может выполнить некоторую оптимизацию для файла, например блокирование буферизации, чтение и запись данных.
Как можно видеть, когда клиент А открывает файл, он может запросить исключительную блокировку оріоскв. Если больше никто не открыл этот файл на сервере, то оріоск предоставляется клиенту А. Если в некоторый момент в будущем другой клиент, например клиент В, запрашивает открытие того же самого файла, то серверу необходимо, чтобы клиент А прервал свою блокировку оріоск. Прерывание оріоск включает отправку клиентом А на сервер любых данных для записи или блокировки, которые он буфери-зировал, и затем уведомление сервера, что подтверждается отмена блокировки. Это синхронизирующее сообщение информирует сервер, что теперь допустимо разрешить клиенту В завершить открытие файла.
Клиент А должен также стереть все буферы опережающего чтения, которые он имел для файла.
Пакетная блокировка орlоск используются там, где обычные программы на клиенте ведут себя таким образом, что объем сетевого трафика растет выше приемлемого уровня для предоставляемой программой функциональности.
Например, командный процессор выполняет команды из командной процедуры, делая следующие шаги:
• Открывает командную процедуру
• Ищет "следующую строку" в файле
• Считывает строку из файла
• Закрывает файл
• Выполняет команду
Этот процесс повторяется для каждой команды, выполняемой из файла командной процедуры. Очевидно, что это приводит к обработке множества файлов, создавая тем самым сетевой трафик, который можно было бы сократить, если бы программа просто оставляла файл открытым, считывала строку, выполняла команду и затем считывала новую строку.
Пакетное блокирование действует именно так, позволяя клиентам пропускать излишние запросы открытия и закрытия. Когда командный процессор запрашивает следующую строку в файле, клиент либо запрашивает сервер, либо уже имеет эти данные в кэше опережающего чтения. В любом случае объем сетевого трафика клиента существенно сокращается.
Если сервер получает запрос для переименования или удаления файла, который имеет пакетную блокировку ор1оск, он информирует клиента, что необходимо удалить ор1оск. Клиент затем переходит в режим открыть и закрыть, описанный ранее.
Клиент А открывает файл и запрашивает орlоск. Если никто не открывал этот файл на сервере, то клиенту А предоставляется ор1оск. В приведенном выше случае клиент А сохраняет файл открытым для своей вызывающей программы для нескольких операций открыть/закрыть. Данные могут читаться для вызывающей программы с опережением; может также использоваться и другая оптимизация, например буферизированная блокировка.
Однако когда другой клиент запрашивает на сервере операцию открытия, переименования или удаления файла, клиент А должен очистить свои буферизированные данные и синхронизироваться с сервером. В большинстве случаев это включает закрытие файла при условии, что вызывающая программа клиента А считает, что она закрыла файл. Когда файл закрыт, может быть завершен запрос клиента В на открытие.
