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


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

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

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

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

пакет 1 : SMB_COM_NEGOTIATE
направление : клиент на сервер
описание: клиент запрашивает, что сервер согласовывает диалект протокола 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 может уйти без уведомления.