Что такое протокол SMB?

«Что такое протокол SMB?» — вопрос из категории Сети, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SMB (Server Message Block) — это сетевой протокол прикладного уровня, предназначенный для предоставления общего доступа к файлам, принтерам, портам и другим ресурсам в локальной сети. Изначально разработан IBM, но наиболее известен по реализации в ОС Windows (где его часто называют CIFS — Common Internet File System).

Ключевые характеристики:

  • Работа поверх: TCP/IP (порт 445 в современных системах) или NetBIOS (порт 139, устаревший режим).
  • Аутентификация и безопасность: Поддерживает различные схемы (NTLM, Kerberos). Начиная с SMB 3.0, появилось сквозное шифрование и защита от атак "man-in-the-middle".
  • Кроссплатформенность: Хотя нативный для Windows, протокол реализован на других платформах через сервер Samba (для UNIX-подобных систем) и клиентские библиотеки.

Пример использования SMB в C++ на Windows через WinAPI:

#include <windows.h>
#include <iostream>

int main() {
    // Открытие файла на сетевой шаре по протоколу SMB
    HANDLE hFile = CreateFileW(
        L"\\server-name\share-name\document.txt", // UNC-путь
        GENERIC_READ,                                   // Режим доступа
        FILE_SHARE_READ,                                // Совместный доступ
        NULL,                                           // Атрибуты безопасности
        OPEN_EXISTING,                                  // Действие
        FILE_ATTRIBUTE_NORMAL,                          // Флаги и атрибуты
        NULL                                            // Шаблон файла
    );

    if (hFile == INVALID_HANDLE_VALUE) {
        DWORD error = GetLastError();
        std::cerr << "Ошибка открытия файла. Код: " << error << std::endl;
        return 1;
    }

    // ... чтение данных из hFile ...

    CloseHandle(hFile);
    return 0;
}

Важные версии:

  • SMB 1.0/CIFS: Устаревший, имеет критические уязвимости (например, EternalBlue). Рекомендуется отключать.
  • SMB 2.0/2.1: Значительное увеличение производительности, уменьшение количества команд.
  • SMB 3.0/3.1.1: Современные версии с шифрованием, устойчивостью к сбоям канала, поддержкой RDMA (SMB Direct).