Поделиться через


Сценарий обмена пакетами протокола Microsoft SMB

В этом разделе приведен пример обмена пакетами протокола Microsoft SMB между клиентом и сервером. Ниже приведен обзор процесса.

  1. Клиент и сервер устанавливают сеанс NetBIOS.
  2. Клиент и сервер согласовывают диалект протокола Microsoft SMB.
  3. Клиент входит на сервер.
  4. Клиент подключается к общей папке на сервере.
  5. Клиент открывает файл в общей папке.
  6. Клиент считывает данные из файла.

Во-первых, клиент устанавливает полнодуплексное TCP-соединение с сервером. Затем клиент выполняет сборку и отправляет пакет запроса сеанса NetBIOS через TCP-подключение. Если пакет был отформатирован правильно, сервер возвращает пакет, содержащий сообщение о том, что сеанс установлен. После этого клиент отправляет на сервер первые пакеты протокола Microsoft SMB.

Пакет 1: SMB_COM_NEGOTIATE
Направление: Клиент — сервер
Описание: Клиент запрашивает, чтобы сервер согласовывал диалект протокола Microsoft SMB. Список строк, определяющих диалекты, с которыми может работать клиент, включается в пакет.
Пакет 2: SMB_COM_NEGOTIATE
Направление: Сервер — клиент
Описание: Сервер отвечает на запрос клиента на определение диалекта протокола Microsoft SMB, который будет использоваться в сеансе. Возвращенный пакет также содержит 8-байтовую случайную строку, которая будет использоваться на следующем шаге для проверки подлинности клиента во время входа в систему.
Пакет 3: SMB_COM_SESSION_SETUP_ANDX
Направление: Клиент — сервер
Описание: Этот пакет содержит сведения о возможностях клиента, поэтому этот пакет должен отправляться, даже если на сервере реализована безопасность только на уровне общего доступа.
Пакет 3: SMB_COM_SESSION_SETUP_ANDX
Направление: Сервер — клиент
Описание: Если запрос или ответ принимается сервером, допустимый идентификатор пользовательского интерфейса включается в пакет, возвращаемый клиенту. Если он не будет принят, сервер вернет код ошибки в этом пакете и запретит доступ.
Пакет 4: SMB_COM_TREE_CONNECT_ANDX
Направление: Клиент — сервер
Описание: Клиент запрашивает доступ к общей папке. Пакет содержит полностью указанный путь к общей папке в формате UNC.
Пакет 5: SMB_COM_TREE_CONNECT_ANDX
Направление: Сервер — клиент
Описание: Если доступ к общей папке предоставлен, сервер возвращает 16-разрядный идентификатор дерева (TID), соответствующий общей папке в этом пакете. Если общая папка не существует или у пользователя недостаточно учетных данных для доступа к общей папке, сервер вернет код ошибки в этом пакете и запретит доступ к общей папке.
Пакет 6: SMB_COM_OPEN_ANDX
Направление: Клиент — сервер
Описание: Клиент запрашивает у сервера открытие файла в общей папке, к которым можно получить доступ, от имени клиента. Этот пакет содержит имя открываемого файла.
Пакет 7: SMB_COM_OPEN_ANDX
Направление: Сервер — клиент
Описание: Если доступ к файлу предоставлен, сервер возвращает идентификатор запрошенного файла. Если файл не существует или у пользователя недостаточно учетных данных для доступа к файлу, сервер вернет код ошибки в этом пакете и запретит доступ к файлу.
Пакет 8: SMB_COM_READ_ANDX
Направление: Клиент — сервер
Описание: Клиент запрашивает у сервера чтение данных из открытого файла от имени клиента и возврат этих данных клиенту. Идентификатор файла, полученный клиентом при открытии файла, включается в этот пакет, чтобы определить, из какого открытого файла сервер должен считывать данные.
Пакет 9: SMB_COM_READ_ANDX
Направление: Сервер — клиент
Описание: Сервер возвращает запрошенные данные файла в этом пакете. Эта ошибка маловероятна, если доступ к серверу, общей папке и файлу предоставлен. Однако это может произойти в некоторых ситуациях: например, при изменении доступа к общей папке между моментом открытия файла и временем его чтения.

Примечание

При реализации CIFS, которая не поддерживает уведомления об изменениях, Windows не сможет сохранить неоплаченный дескриптор файловой системы, а подключение SMB может уйти без уведомления.