Scénario d’échange de paquets du protocole Microsoft SMB

Cette rubrique fournit un exemple d’échange de paquets de protocole Microsoft SMB entre un client et un serveur. Les étapes suivantes sont une vue d’ensemble du processus :

  1. Le client et le serveur établissent une session NetBIOS.
  2. Le client et le serveur négocient le dialecte du protocole Microsoft SMB.
  3. Le client se connecte au serveur.
  4. Le client se connecte à un partage sur le serveur.
  5. Le client ouvre un fichier sur le partage.
  6. Le client lit à partir du fichier.

Tout d’abord, une connexion TCP en duplex intégral est établie par le client avec le serveur. Ensuite, le client génère et envoie un paquet de requête de session NetBIOS via la connexion TCP. Si le paquet a été correctement mis en forme, le serveur retourne ensuite un paquet qui contient un message confirmant que la session a été établie. Après cela, le client envoie les premiers paquets de protocole Microsoft SMB au serveur.

Paquet 1 : SMB_COM_NEGOTIATE
Direction: Client à serveur
Description: Le client demande que le serveur négocie le dialecte du protocole Microsoft SMB. Une liste de chaînes identifiant les dialectes que le client peut utiliser est incluse dans le paquet.
Paquet 2 : SMB_COM_NEGOTIATE
Direction: Serveur à client
Description: Le serveur répond à la demande du client d’identifier le dialecte du protocole Microsoft SMB qui sera utilisé dans la session. Le paquet retourné inclut également une chaîne aléatoire de 8 octets qui sera utilisée à l’étape suivante pour authentifier le client pendant le processus d’ouverture de session.
Paquet 3 : SMB_COM_SESSION_SETUP_ANDX
Direction: Client à serveur
Description: Ce paquet inclut des informations sur les fonctionnalités du client. Ce paquet doit donc être envoyé même si le serveur a implémenté uniquement la sécurité au niveau du partage.
Paquet 3 : SMB_COM_SESSION_SETUP_ANDX
Direction: Serveur à client
Description: Si la contestation/réponse est acceptée par le serveur, un UID valide est inclus dans le paquet retourné au client. S’il n’est pas accepté, le serveur retourne un code d’erreur dans ce paquet et refuse l’accès.
Paquet 4 : SMB_COM_TREE_CONNECT_ANDX
Direction: Client à serveur
Description: Le client demande l’accès au partage. Le paquet contient le chemin d’accès entièrement spécifié du partage au format UNC.
Paquet 5 : SMB_COM_TREE_CONNECT_ANDX
Direction: Serveur à client
Description: Si l’accès au partage est accordé, le serveur retourne l’ID d’arborescence 16 bits (TID) qui correspond au partage dans ce paquet. Si le partage n’existe pas ou si l’utilisateur n’a pas d’informations d’identification suffisantes pour accéder au partage, le serveur retourne un code d’erreur dans ce paquet et refuse l’accès au partage.
Paquet 6 : SMB_COM_OPEN_ANDX
Direction: Client à serveur
Description: Le client demande au serveur d’ouvrir un fichier sur le partage accédé au nom du client. Ce paquet contient le nom du fichier à ouvrir.
Paquet 7 : SMB_COM_OPEN_ANDX
Direction: Serveur à client
Description: Si l’accès au fichier est accordé, le serveur retourne l’ID de fichier du fichier demandé. Si le fichier n’existe pas ou si l’utilisateur n’a pas d’informations d’identification suffisantes pour accéder au fichier, le serveur retourne un code d’erreur dans ce paquet et refuse l’accès au fichier.
Paquet 8 : SMB_COM_READ_ANDX
Direction: Client à serveur
Description: Le client demande au serveur de lire les données du fichier ouvert au nom du client et de renvoyer ces données au client. L’ID de fichier obtenu par le client lors de l’ouverture du fichier est inclus dans ce paquet afin d’identifier le fichier ouvert à partir duquel le serveur doit lire les données.
Paquet 9 : SMB_COM_READ_ANDX
Direction: Serveur à client
Description: Le serveur retourne les données de fichier demandées dans ce paquet. Une erreur ici est peu probable étant donné que l’accès au serveur, au partage et au fichier a été accordé. Toutefois, cela peut se produire dans certaines situations : par exemple, si l’accès à un partage est modifié entre le moment où le fichier est ouvert et le moment où il est lu.

Notes

Si vous implémentez un CIFS qui ne prend pas en charge les notifications de modification, Windows ne peut pas conserver un handle en attente pour le système de fichiers, et la connexion SMB peut disparaître sans préavis.