Scenariusz wymiany pakietów protokołu SMB firmy Microsoft
W tym temacie przedstawiono przykład wymiany pakietów protokołu SMB firmy Microsoft między klientem a serwerem. Poniżej przedstawiono omówienie procesu:
- Klient i serwer ustanowią sesję NetBIOS.
- Klient i serwer negocjują dialekt protokołu SMB firmy Microsoft.
- Klient loguje się na serwerze.
- Klient nawiązuje połączenie z udziałem na serwerze.
- Klient otwiera plik w udziale.
- Klient odczytuje z pliku.
Po pierwsze, połączenie TCP w trybie pełnodupleksowym jest ustanawiane przez klienta z serwerem. Następnie klient kompiluje i wysyła pakiet żądania sesji NetBIOS za pośrednictwem połączenia TCP. Jeśli pakiet został poprawnie sformatowany, serwer zwraca pakiet zawierający komunikat z potwierdzeniem ustanowienia sesji. Następnie klient wysyła do serwera pierwsze pakiety protokołu SMB firmy Microsoft.
pakiet 1: SMB_COM_NEGOTIATE kierunek : klient na serwer Opis: Klient żąda, aby serwer negocjował dialekt Protokołu SMB firmy Microsoft. Lista ciągów identyfikujących dialekty, z którymi klient może pracować, znajduje się w pakiecie. |
pakiet 2: SMB_COM_NEGOTIATE kierunek : serwer do klienta Opis: Serwer odpowiada na żądanie klienta w celu zidentyfikowania dialektu protokołu SMB firmy Microsoft, który będzie używany w sesji. Zwrócony pakiet zawiera również 8-bajtowy ciąg losowy, który będzie używany w następnym kroku do uwierzytelniania klienta podczas procesu logowania. |
pakiet 3: SMB_COM_SESSION_SETUP_ANDX kierunek : klient na serwer Opis: Ten pakiet zawiera informacje o możliwościach klienta, więc ten pakiet musi być wysyłany nawet wtedy, gdy serwer zaimplementował tylko zabezpieczenia na poziomie udziału. pakiet 3: SMB_COM_SESSION_SETUP_ANDX kierunek : serwer do klienta Opis: Jeśli żądanie/odpowiedź zostanie zaakceptowane przez serwer, prawidłowy identyfikator UID jest uwzględniony w pakiecie zwróconym klientowi. Jeśli nie zostanie zaakceptowana, serwer zwróci kod błędu w tym pakiecie i odmówi dostępu. |
pakiet 4: SMB_COM_TREE_CONNECT_ANDX kierunek : klient na serwer Opis: Klient żąda dostępu do udziału. Pakiet zawiera w pełni określoną ścieżkę udziału w formacie UNC. |
pakiet 5: SMB_COM_TREE_CONNECT_ANDX kierunek : serwer do klienta Opis: Jeśli udzielono dostępu do udziału, serwer zwraca 16-bitowy identyfikator drzewa (TID), który odpowiada udziałowi w tym pakiecie. Jeśli udział nie istnieje lub użytkownik nie ma wystarczających poświadczeń dostępu do udziału, serwer zwróci kod błędu w tym pakiecie i odmówi dostępu do udziału. |
pakiet 6: SMB_COM_OPEN_ANDX kierunek : klient na serwer Opis: Klient żąda, aby serwer otworzył plik w udostępnionym udziale w imieniu klienta. Ten pakiet zawiera nazwę pliku, który ma zostać otwarty. |
pakiet 7: SMB_COM_OPEN_ANDX kierunek : serwer do klienta Opis: Jeśli udzielono dostępu do pliku, serwer zwraca identyfikator pliku żądanego pliku. Jeśli plik nie istnieje lub użytkownik ma niewystarczające poświadczenia dostępu do pliku, serwer zwróci kod błędu w tym pakiecie i odmówi dostępu do pliku. |
pakiet 8: SMB_COM_READ_ANDX kierunek : klient na serwer Opis: Klient żąda od serwera odczytu danych z otwartego pliku w imieniu klienta i zwraca te dane do klienta. Identyfikator pliku uzyskany przez klienta podczas otwierania pliku jest uwzględniony w tym pakiecie w celu zidentyfikowania, z którego otwartego pliku serwer powinien odczytywać dane. |
pakiet 9: SMB_COM_READ_ANDX kierunek : serwer do klienta Opis: Serwer zwraca żądane dane pliku w tym pakiecie. Błąd w tym miejscu jest mało prawdopodobny, ponieważ udzielono dostępu do serwera, udziału i pliku. Może się to zdarzyć w niektórych sytuacjach: na przykład jeśli dostęp do udziału zostanie zmieniony między czasem otwarcia pliku a czasem jego odczytu. |
Nuta
W przypadku zaimplementowania systemu CIFS, który nie obsługuje powiadomień o zmianach, system Windows nie może zachować zaległego dojścia do systemu plików, a połączenie SMB może odejść bez powiadomienia.