Protocolo
"O protocolo NFS é definido em termos de um conjunto de procedimentos, seus argumentos e resultados, e seus efeitos." SANDBERG, 1986.
Uma analogia, se o NFS fosse um universo, o protocolo seria a física deste universo, ou seja, todo o funcionamento do NFS é coordenado pelo protocolo.
Algumas das características do protocolo NFS são:
Protocolo sem estado, que é o motivo do servidor ser sem estado.
"Os parâmetros de cada chamada de procedimento contém todas as informações necessárias para completar a chamada, e o servidor não mantém informações sobre requerimentos anteriores."SANDBERG, 1986.
Isto implica que o tratamento de falhas é fácil, uma vez que o servidor não necessita recuperar o estado do cliente, por exemplo.
Requerimentos idempotentes, onde uma operação pode ser executada várias vezes e o resultado é o mesmo se executada uma vez.
Por exemplo, podemos imaginar em uma conversa entre você e um meteorologista em que serão feitas duas perguntas, uma idempotente e outra não. Então primeiro você pergunta se em uma determinada data choveu, ele responderá. Neste caso você pode refazer esta pergunta até o fim de sua vida e a resposta será sempre a mesma, ou seja, é uma pergunta idempotente. Na segunda pergunta você questiona se hoje choverá, ele responderá. Neste caso não é garantido que se a pergunta for refeita algumas vezes a resposta será a mesma, ou seja, não é uma pergunta idempotente.
Os requerimentos idempotentes funcionam de forma similar o que possibilita, em caso de falhas, o reenvio do requerimento até se obter uma resposta do servidor, ou seja, não há alteração da resposta dada pelo servidor pelo reenvio do requerimento.
Exemplos de procedimentos do protocolo NFS:
.lookup: pesquisa no diretório pelo nome do arquivo e retorna um fhandle do arquivo, como parâmetros são passados fhandle do diretório e o nome do arquivo a ser pesquisado.
.acess: verifica a permissão de acesso de um usuário a um objeto do sistema de arquivo, são passados como parâmetro o fhandle do objeto e o tipo de acesso.
.create: cria um novo arquivo e retorna seu fhandle e os atributos do arquivo, são necessários como parâmetros o fhandle do diretório onde o arquivo será criado, o nome do arquivo e seus atríbutos.
.mkdir: cria um novo diretório e retorna seu fhandle e os atributos do diretório, são passados como parâmetros o fhandle do diretório onde será criado o subdiretório, o nome do subdiretório e seus atributos.
(Sun External Data Representation)
É o padrão de representação dos dados, é o modo como o NFS interpreta os dados.
Ele possibilita, por meio de um padrão, a comunicação entre padrões diferentes.
Pelo XDR é possível fazer a codificação e decodificação dos dados.
Codificação é quando a representação em um computador é convertida para a representação no XDR.
Decodificação é o processo de conversão da representação do XDR para a representação do computador.
Os computadores utilizam rotinas do XDR para fazer a conversão.
Dentre algumas das definições do XDR estão o tamanho dos dados, e formato de representação desses dados, onde os dados são representados por unidades de 4 bytes, e o formato utilizado é o big-endian (bytes mais significante primeiro).
Um exemplo das especificações utilizadas pelo XDR podem ser vista abaixo:
O XDR é utilizado ou é suportado por diversos sistemas atualmente, por exemplo CICS da IBM, que é um sistema que possibilita a interação de um conjunto de linguagens de aplicação em servidores para realizar processamento de transações online. O CICS suporta XDR.
E também, a rede Stellar que em definição resumida é software de código aberto para processamento de transações financeiras. No Stellar o XDR é parte fundamental do funcionamento do sistema.
RPC(Sun Remote Procedure Call)
É um mecanismo de chamada de procedimentos remotamente. É a base do NFS.
Sua operação normalmente está vinculada com XDR.
XDR e RPC são complementares, uma vez que RPC é definida pelo XDR.
Por exemplo CICS.
O modelo RPC é utilizado numa aplicação cliente servidor, onde um processo de um cliente chama um processo do servidor, que envia uma resposta ao processo do cliente. Neste modelo as chamadas podem ser implementadas para serem síncronas ou assíncronas.
No NFS o protocolo RPC é quem exerce a função de intermediador entre o cliente e o servidor. O protocolo RPC não se importa com transmissão dos dados, isto é feito pelos protocolos de transporte.
RPC utiliza os protocolos TCP e UDP.
Exemplo do funcionamento do RPC:
MOUNT Protocol
É um protocolo baseado em RPC.
O protocolo MOUNT pega o caminho de um diretório e retorna um fhandle para o diretório. Neste processo é verificado se o cliente tem permissão de acesso ao sistema de arquivo que contém o diretório.
Entre outras funções, é o protocolo responsável por entregar ao cliente o acesso ao sistema de arquivo no servidor.
No NFS este protocolo é implementado separadamente por questões técnicas.
Páginas Amarelas - NIS
Desenvolvido em paralelo ao NFS. Baseado em RPC.
Foi desenvolvido com a intenção de auxiliar o NFS na função de controlar as informações de acesso da conexão cliente servidor, como a identificação de um usuário na rede e sua autenticação.
O NIS armazena e permite a administração das informações sobre os usuários na rede. O principal beneficio do NIS é a administração centralizada que permite o controle de acesso de usuários e grupos a máquinas conectadas na rede.
Há clientes NIS e servidores NIS, as informações ficam armazenadas nos servidores que podem trocar e copiar entre si, e também, receber e enviar aos clientes respondendo às solicitações.
NFS Deamons
Um daemon é um processo que executa em plano de fundo e que realiza alguma tarefa.
Como se fosse um agente com uma função predeterminada que interage com o sistema quando necessário, ou seja, um processo executando que realizará alguma tarefa quando solicitado, seja essa solicitação periódica ou contínua.
No NFS temos daemons rodando no servidor e no cliente para garantir o funcionamento correto das operações.
Exemplos de daemons do NFS:
.nfsd: manipula requerimentos dos clientes, estes requerimentos são referentes às operações no sistema de arquivos.
.mountd: manipula requerimentos do tipo mount ou de montagem realizados pelos clientes, por exemplo, são verificadas as credenciais de acesso do cliente ao sistema de arquivo solicitado e a disponibilidade do sistema de arquivos.
Estes dois daemons são complementares, ou seja, as tarefas executadas por cada um fazem parte de uma tarefa maior que necessita do funcionamento de ambos para a correta execução. Há vários outros daemons no NFS, por exemplo, o lockd e o statd que são daemons que executam no cliente e no servidor.