Сценарий обмена пакетами протокола Microsoft SMB
В этом разделе приведен пример обмена пакетами протокола Microsoft SMB между клиентом и сервером. Ниже приведен обзор процесса.
- Клиент и сервер устанавливают сеанс NetBIOS.
- Клиент и сервер согласовывают диалект протокола Microsoft SMB.
- Клиент регистрируется на сервере.
- Клиент подключается к общей папке на сервере.
- Клиент открывает файл в общей папке.
- Клиент считывает из файла.
Во-первых, полно дуплексное 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 может уйти без уведомления.