Cenário de Troca de Pacotes de Protocolo SMB da Microsoft

Este tópico fornece um exemplo de uma troca de pacotes do Protocolo SMB da Microsoft entre um cliente e um servidor. As etapas a seguir são uma visão geral do processo:

  1. O cliente e o servidor estabelecem uma sessão NetBIOS.
  2. O cliente e o servidor negociam o dialeto do Protocolo SMB da Microsoft.
  3. O cliente faz logon no servidor.
  4. O cliente se conecta a um compartilhamento no servidor.
  5. O cliente abre um arquivo no compartilhamento.
  6. O cliente lê do arquivo.

Primeiro, uma conexão TCP full-duplex é estabelecida pelo cliente com o servidor. Em seguida, o cliente compila e envia um pacote de solicitação de sessão NetBIOS pela conexão TCP. Se o pacote tiver sido formatado corretamente, o servidor retornará um pacote que contém uma mensagem confirmando que a sessão foi estabelecida. Depois disso, o cliente envia os primeiros pacotes do Protocolo SMB da Microsoft para o servidor.

Pacote 1: SMB_COM_NEGOTIATE
Direção: Cliente para servidor
Descrição: O cliente solicita que o servidor negocie o dialeto do Protocolo SMB da Microsoft. Uma lista de cadeias de caracteres que identificam os dialetos com os quais o cliente pode trabalhar está incluída no pacote.
Pacote 2: SMB_COM_NEGOTIATE
Direção: Servidor para cliente
Descrição: O servidor responde à solicitação do cliente para identificar o dialeto do Protocolo SMB da Microsoft que será usado na sessão. O pacote retornado também inclui uma cadeia de caracteres aleatória de 8 bytes que será usada na próxima etapa para autenticar o cliente durante o processo de logon.
Pacote 3: SMB_COM_SESSION_SETUP_ANDX
Direção: Cliente para servidor
Descrição: Esse pacote inclui informações sobre os recursos do cliente, portanto, esse pacote deve ser enviado mesmo que o servidor tenha implementado apenas a segurança em nível de compartilhamento.
Pacote 3: SMB_COM_SESSION_SETUP_ANDX
Direção: Servidor para cliente
Descrição: Se o desafio/resposta for aceito pelo servidor, um UID válido será incluído no pacote retornado ao cliente. Se não for aceito, o servidor retornará um código de erro neste pacote e negará o acesso.
Pacote 4: SMB_COM_TREE_CONNECT_ANDX
Direção: Cliente para servidor
Descrição: O cliente solicita acesso ao compartilhamento. O pacote contém o caminho totalmente especificado do compartilhamento no formato UNC.
Pacote 5: SMB_COM_TREE_CONNECT_ANDX
Direção: Servidor para cliente
Descrição: Se o acesso ao compartilhamento for concedido, o servidor retornará a ID de árvore de 16 bits (TID) que corresponde ao compartilhamento nesse pacote. Se o compartilhamento não existir ou se o usuário não tiver credenciais suficientes para acessar o compartilhamento, o servidor retornará um código de erro neste pacote e negará o acesso ao compartilhamento.
Pacote 6: SMB_COM_OPEN_ANDX
Direção: Cliente para servidor
Descrição: O cliente solicita que o servidor abra um arquivo no compartilhamento acessado em nome do cliente. Esse pacote contém o nome do arquivo a ser aberto.
Pacote 7: SMB_COM_OPEN_ANDX
Direção: Servidor para cliente
Descrição: Se o acesso ao arquivo for concedido, o servidor retornará a ID do arquivo solicitado. Se o arquivo não existir ou se o usuário não tiver credenciais suficientes para acessar o arquivo, o servidor retornará um código de erro neste pacote e negará o acesso ao arquivo.
Pacote 8: SMB_COM_READ_ANDX
Direção: Cliente para servidor
Descrição: O cliente solicita que o servidor leia dados do arquivo aberto em nome do cliente e retorne esses dados ao cliente. A ID do arquivo obtida pelo cliente quando o arquivo foi aberto é incluída nesse pacote para identificar de qual arquivo aberto o servidor deve ler os dados.
Pacote 9: SMB_COM_READ_ANDX
Direção: Servidor para cliente
Descrição: O servidor retorna os dados de arquivo solicitados neste pacote. Um erro aqui é improvável, dado que o acesso ao servidor, ao compartilhamento e ao arquivo foi concedido. No entanto, isso pode acontecer em algumas situações: por exemplo, se o acesso a um compartilhamento for alterado entre o momento em que o arquivo é aberto e a hora em que ele é lido.

Observação

Se você implementar um CIFS que não dá suporte a notificações de alteração, o Windows não poderá manter um identificador pendente para o sistema de arquivos e a conexão SMB poderá desaparecer sem aviso prévio.