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