# NetBIOS

NetBIOS é um acrônimo para Network Basic Input/Output System, ou em português Sistema Básico de Entrada/Saída de Rede. É uma API que fornece serviços relacionados com a camada de sessão do modelo OSI, permitindo que os aplicativos em computadores separados se comuniquem em uma rede local, não podendo ser confundido, portanto, como um protocolo de rede. Sistemas operacionais mais antigos executavam o NetBIOS sobre o IEEE 802.2 e o IPX/SPX usando os protocolos NetBIOS Frames (NBF) e NetBIOS sobre IPX/SPX (NBX), respectivamente. Em redes modernas, o NetBIOS normalmente é executado sobre TCP/IP através do protocolo NetBIOS sobre TCP/IP (NBT). Isso resulta que cada computador na rede possua um endereço IP e um nome NetBIOS correspondente a um (possivelmente diferente) nome de hospedeiro.

## História e terminologia

É uma interface de programa que foi desenvolvida para permitir a comunicação entre máquinas. Nesta estrutura foi implementado o conceito de nome de serviço, o que possibilita que uma máquina conecte-se à rede reservando um nome para sua utilização. Não há um servidor central para tratar os nomes definidos e qualquer máquina pode utilizar quantos nomes desejar, desde que ele não esteja em uso.
Esta arquitetura dinâmica tem sua origem em redes de PCs onde a instalação de um novo nó da rede deveria ser tão simples quanto possível, ou seja a configuração de uma máquina reduziu-se à definição de seu nome (ou quase isto). Problemas de duplicação de nomes, com um limite de 16 caracteres são insignificantes em redes de tamanho pequeno. Além do nome de serviço, existem ainda tarefas de comunicação, uma vez que os dados podem estar em formato seguro ou inseguro, o que pode ser comparado com os protocolos TCP e UDP do Unix. Os protocolos superiores como o SMB formam uma camada sobre o NetBIOS.
A interface NetBIOS pode ser implementada em diferentes arquiteturas de rede. Uma implementação que funciona relativamente próxima ao hardware chama-se NetBEUI, sendo muitas vezes referenciada como NetBIOS.
Para endereçamento de pacotes simples, NetBEUI utiliza o endereço de hardware do adaptador de rede. Ao contrário do IPX e endereços IP não é possível obter informações de roteamento através desta implementação, assim como pacotes NetBEUI não podem ser enviados através de um roteador, reduzindo a rede à uma atuação local, que necessita de bridges e repetidores para possíveis expansões.
TCP/IP e IPX são protocolos de rede que implementaram o NetBIOS, sendo que no TCP/IP ele é descrito nas RFCs 1001 e 1002.
Os nomes usados pelo NetBIOS não têm relação com os nomes usados em /etc/hosts/ ou os utilizados via DNS, porém é indicado utilizar a mesma denominação em ambos os métodos a fim de se evitarem confusões.

## Serviços

O NetBIOS fornece três serviços distintos:
* Serviço de nomes para registro e resolução de nomes.
* Serviço de sessão para comunicação orientada à conexão.
* Serviço de distribuição de datagrama para a comunicação sem conexão.
(Observação: SMB, uma camada superior, é um serviço que roda em cima do serviço de sessão e do serviço de datagrama, e não deve ser confundido como uma parte necessária e integrante do próprio NetBIOS. Hoje, ele pode ser executado em cima do TCP com uma pequena camada de adaptação que adiciona um comprimento de pacote para cada mensagem SMB. Isto é necessário porque o TCP só oferece um serviço de fluxo de bytes sem nenhuma noção de limites de pacotes).

### Serviço de nomes

A fim de iniciar as sessões ou distribuir datagramas, um aplicativo deve registrar seu nome NetBIOS usando o serviço de nomes. Os nomes NetBIOS possuem 16 octetos de comprimento e variam com base na aplicação particular. Frequentemente, o 16º octeto é usado para designar um "tipo" semelhante ao uso de portas em TCP/IP. Ele é chamado de sufixo NetBIOS (leia abaixo) ou "tipo de recurso" e é usado para dizer as outras aplicações quais tipos de serviços que o sistema oferece. No NBT, o serviço de nome opera sobre a porta UDP 137 (a porta TCP 137 também pode ser usada, mas é raramente, se alguma vez, utilizada).
As primitivas do serviço de nomes oferecidas pelo NetBIOS são:
* Adicionar nome - registra um nome NetBIOS.
* Adicionar nome de grupo - registra um nome de "grupo" NetBIOS.
* Excluir nome - cancela o registro de um nome ou o nome do grupo NetBIOS.
* Encontrar nome - procura um nome NetBIOS na rede.
A resolução de nomes NetBIOS não é suportada pela Microsoft para o Protocolo da Internet Versão 6 (IPv6).