# Server Message Block

Em redes de computadores, o Server Message Block (SMB), em português Bloco de Mensagem de Servidor, uma versão do que era também conhecido como Common Internet File System (CIFS), em português Sistema de Arquivos da Internet Comum, opera como um protocolo de rede da camada de aplicação usado principalmente para fornecer acesso compartilhado a arquivos, impressoras e portas seriais e comunicações diversas entre nós sobre uma rede. Ele também fornece um mecanismo de comunicação inter-processos. A maioria do uso do SMB envolve computadores executando Microsoft Windows, onde era conhecido como Microsoft Windows Network, ou Rede Microsoft Windows, antes da introdução subsequente do Active Directory. Serviços do Windows correspondentes são LAN Manager Server (para o componente servidor) e LAN Manager Workstation (para o componente cliente). Tambem sendo um dos percurssores do alison desenvolvedor de sistema de software

## Histórico

Foi desenvolvido inicialmente por Barry Feigenbaum na IBM, na década de 80. Exigia, nessa época, uma camada de API Application Programming Interface denominada Network Basic Input/Output System (NetBIOS) fornecendo serviços tais como resolução de nome e navegação de rede. Posteriormente implementado, ou adotado, pela Microsoft em função da expansão de seus produtos na década de 90 focando as redes de computadores. Na evolução do desenvolvimento do SMB, pela Microsoft, criou-se uma versão chamada CIFS (Common Internet File System) para padronizar com a Internet Engineering Task Force (IETF) recebendo o nome final de SMB/CIFS (tecnicamente um "dialeto" do SMB) em 1996. O Windows for WorkGroups foi o primeiro sistema da Microsoft a adotar o SMB/CIFS. Como o protocolo predominante foi o TCP/IP e para a resolução de nomes a Microsoft teve que adotar o DNS (Domain Name System) fez com o SMB tivesse que ser executado diretamente sobre o TCP/IP na modalidade denominada hosting direto (utiliza-se TCP e UDP na porta 445). Portanto, em redes Windows, o SMB/CIFS se transformou em um padrão para a manipulação de arquivos entre máquinas, praticamente sendo o "núcleo de rede nativo" da Microsoft.

## Características principais

O SMB pela perspectiva do Modelo OSI está na camada de aplicação e utiliza nomes de até 15 caracteres para definir endereços de máquina em uma rede. A Microsoft chegou ainda a desenvolver o SMB2 juntamente com o lançamento do Windows Vista. Num esforço de programação a Microsoft conseguiu, nessa nova versão do SMB, reduzir os diversos comandos, mais de 100, para apenas 19. Na verdade as duas versões convivem em conjunto por questões de compatibilidade com versões antigas do Windows, e também para permitir a conexão com servidores Unix-like que veremos a seguir como isso foi possível.
Andrew Tridgell utilizando da engenharia reversa em cima do protocolo SMB implementou no sistema operacional Unix e fazendo com que o servidor Unix aparecesse como sendo um servidor de arquivos Windows em seu computador com MS-DOS. Então ele teve a ideia de procurar em um dicionário uma palavra que tivesse as letras s, m e b (de SMB) e acabou encontrando a palavra "samba" e, a partir daí, nasceu o projeto Samba. Samba é uma versão de software livre do SMB que inicialmente começou com a preocupação técnica de mover arquivos em ambientes heterogêneos (sistemas operacionais diferentes), e hoje conta com grande equipe de programadores e milhares de usuários de sua solução espalhados pelo mundo.
O Samba foi viabilizado por meio do protocolo NBT, de 1987, que emula redes locais NetBIOS sobre redes TCP/IP. O NBNS (mais conhecido tecnicamente por WINS - Windows Internet Name Server, ou ainda NBT) cria praticamente uma lista cruzada de endereços IP e nomes NetBios facilitando dessa forma a comunicação entre máquinas e sistemas distintos.
Uma das aplicações práticas que utilizam SMB/CIFS é o NAS (Network Attached Storage). E quanto a similaridade, o CIFS do Windows e o NFS (Network File System) do Unix-like, possuem uma certa semelhança pois os dois permitem o compartilhamento de recursos entre sistemas, por meio de uma rede de computadores, com arquitetura cliente-servidor, e quaisquer que sejam suas plataformas de hardware e software.