Solução de problemas avançada do protocolo SMB

Experimente nosso agente virtual – ele pode ajudar você a identificar e corrigir rapidamente problemas comuns do SMB.

O protocolo SMB é um protocolo de transporte de rede para operações de sistemas de arquivos que permite que um cliente acesse recursos em um servidor. A principal finalidade do protocolo SMB é habilitar o acesso remoto ao sistema de arquivos entre dois sistemas por TCP/IP.

A solução de problemas de SMB pode ser extremamente complexa. Este artigo não é um guia exaustivo de solução de problemas. Em vez disso, é uma cartilha curta para entender os conceitos básicos de como solucionar problemas de SMB com eficiência.

Ferramentas e coleta de dados

Um aspecto fundamental da solução de problemas de SMB de qualidade é comunicar a terminologia correta. Portanto, este artigo apresenta a terminologia básica do SMB para garantir a precisão da coleta e análise de dados.

Observação

O SRV (Servidor SMB) refere-se ao sistema que hospeda o sistema de arquivos, também conhecido como servidor de arquivos. O CLI (Cliente SMB) refere-se ao sistema que está tentando acessar o sistema de arquivos, independentemente da versão ou edição do sistema operacional.

Por exemplo, caso use o Windows Server 2016 para acessar um compartilhamento do SMB hospedado no Windows 10, o Windows Server 2016 será o cliente SMB e o Windows 10 o servidor SMB.

Coletar dados

Antes de solucionar problemas de SMB, é recomendável que primeiro colete um rastreamento de rede nos lados do cliente e do servidor. As seguintes diretrizes se aplicam:

  • Em sistemas do Windows, use o NetShell (netsh), Monitor de Rede, Analisador de Mensagens ou Wireshark para coletar um rastreamento de rede.

  • Os dispositivos de terceiros geralmente têm uma ferramenta de captura de pacotes, como tcpdump (Linux/FreeBSD/Unix) ou pktt (NetApp). Por exemplo, se o cliente SMB ou o servidor SMB for um host Unix, você poderá coletar dados executando o seguinte comando:

    # tcpdump -s0 -n -i any -w /tmp/$(hostname)-smbtrace.pcap
    

    Pare de coletar dados usando Ctrl+C do teclado.

Para descobrir a origem do problema, verifique os rastreamentos dos dois lados: CLI, SRV ou em algum lugar entre eles.

Usando o NetShell para coletar dados

Esta seção fornece as etapas para usar o NetShell para coletar rastreamento de rede.

Importante

A ferramenta Analisador de Mensagens da Microsoft foi desativada e recomendamos que o Wireshark para analisar os arquivos de ETL. Para aqueles que baixaram a ferramenta anteriormente e estão procurando mais informações, consulte Instalar e atualizar o Analisador de Mensagens.

Observação

Um rastreamento netsh cria um arquivo de ETL. Os arquivos de ETL podem ser abertos no MA (Analisador de Mensagens), no Monitor de Rede 3.4 (defina o analisador como Analisadores de Monitor de Rede do > Windows) e no Wireshark.

  1. No servidor SMB e no cliente SMB, crie uma pasta Temp na unidade C. Em seguida, execute o seguinte comando:

    netsh trace start capture=yes report=yes scenario=NetConnection level=5 maxsize=1024 tracefile=c:\Temp\netTrace.etl
    

    Caso esteja usando o PowerShell, execute os seguintes cmdlets:

    New-NetEventSession -Name trace -LocalFilePath "C:\Temp\netTrace.etl" -MaxFileSize 1024
    
    Add-NetEventPacketCaptureProvider -SessionName trace -TruncationLength 1500
    
    Start-NetEventSession trace
    
  2. Reproduza o problema.

  3. Pare o rastreamento executando o comando a seguir:

    netsh trace stop
    

    Caso esteja usando o PowerShell, execute os seguintes cmdlets:

    Stop-NetEventSession trace  
    Remove-NetEventSession trace
    

Observação

Rastreie apenas uma quantidade mínima dos dados transferidos. Para problemas de desempenho, sempre use um rastreamento bom e ruim, se a situação permitir.

Analisar o tráfego

O SMB é um protocolo de nível de aplicativo que usa TCP/IP como o protocolo de transporte de rede. Portanto, um problema de SMB também pode ser causado por problemas de TCP/IP.

Verifique se o TCP/IP apresenta algum destes problemas:

  1. O handshake de três vias do TCP não é concluído. Normalmente, isso indica que há um bloco de firewall ou que o serviço do Servidor não está em execução.

  2. Retransmissões estão ocorrendo. Isso pode causar transferências de arquivos lentas devido à limitação de congestionamento de TCP composta.

  3. Cinco retransmissões seguidas por uma redefinição de TCP podem significar que a conexão entre sistemas foi perdida ou que um dos serviços do SMB falhou ou parou de responder.

  4. A janela de recebimento de TCP está diminuindo. Isso pode ser causado pelo armazenamento lento ou por algum outro problema que impede que os dados sejam recuperados do buffer Winsock do AFD (Driver de Função Auxiliar).

Se não houver nenhum problema de TCP/IP perceptível, procure erros de SMB. Para fazer isso, execute estas etapas:

  1. Sempre verifique os erros de SMB em relação à especificação do protocolo MS-SMB2. Muitos erros de SMB são benignos (não prejudiciais). Consulte as seguintes informações para determinar por que o SMB retornou o erro antes de concluir que o erro está relacionado a qualquer um dos seguintes problemas:

  2. Verifique se um comando de redefinição de TCP é enviado imediatamente após um comando FSCTL_VALIDATE_NEGOTIATE_INFO (validar negociação). Nesse caso, consulte as seguintes informações:

    • A sessão do SMB deve ser encerrada (redefinição de TCP) quando o processo de Validar Negociação falhar no cliente ou no servidor.

    • Esse processo pode falhar porque um otimizador WAN está modificando o pacote Negociar SMB.

    • Se a conexão terminou prematuramente, identifique a última comunicação de troca entre o cliente e o servidor.

Analisar o protocolo

Examine os detalhes reais do protocolo SMB no rastreamento de rede para entender os comandos e opções exatas que são usados.

  • Lembre-se de que o SMB faz apenas o que é dito para fazer.

  • Aprenda muito sobre o que o aplicativo está tentando fazer examinando os comandos do SMB.

Compare os comandos e as operações com a especificação do protocolo para garantir que tudo esteja funcionando corretamente. Se não estiver, colete dados mais próximos ou em um nível inferior para procurar mais informações sobre a causa raiz. Para fazer isso, execute estas etapas:

  1. Coletar uma captura de pacote padrão.

  2. Execute o comando netsh para rastrear e coletar detalhes sobre se há problemas na pilha de rede ou quedas em aplicativos da WFP (Plataforma de Filtragem do Windows), como firewall ou programa antivírus.

  3. Se todas as outras opções falharem, colete um t.cmd se suspeitar que o problema ocorre no próprio SMB ou se nenhum dos outros dados for suficiente para identificar uma causa raiz.

Por exemplo:

  • Você enfrenta transferências de arquivos lentas para um único servidor de arquivos.

  • Os rastreamentos de dois lados mostram que o SRV responde lentamente a uma solicitação de LEITURA.

  • A remoção de um programa antivírus resolve as transferências de arquivos lentas.

  • Entre em contato com o fabricante do programa antivírus para resolver o problema.

Observação

Opcionalmente, você também pode desinstalar temporariamente o programa antivírus durante a solução de problemas.

Logs de eventos

O Cliente SMB e o Servidor SMB têm uma estrutura de log de eventos detalhada, conforme mostrado na captura de tela a seguir. Colete os logs de eventos para ajudar a encontrar a causa raiz do problema.

Event logs

Esta seção lista os arquivos do sistema relacionados ao SMB. Para manter os arquivos do sistema atualizados, verifique se o pacote cumulativo de atualizações mais recente está instalado.

Binários de Cliente SMB listados em %windir%\system32\Drivers:

  • RDBSS.sys

  • MRXSMB.sys

  • MRXSMB10.sys

  • MRXSMB20.sys

  • MUP.sys

  • SMBdirect.sys

Binários de Servidor SMB listados em %windir%\system32\Drivers:

  • SRVNET.sys

  • SRV.sys

  • SRV2.sys

  • SMBdirect.sys

  • Em %windir%\system32

  • srvsvc.dll

SMB components

Sugestões de atualização

Recomendamos que você atualize os seguintes componentes antes de solucionar problemas de SMB:

  • Um servidor de arquivos requer armazenamento de arquivos. Se o armazenamento tiver componente iSCSI, atualize esses componentes.

  • Atualize os componentes de rede.

  • Para melhorar o desempenho e a estabilidade, atualize o Windows Core.

Referência

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