WirelessBR |
WirelessBr é um site brasileiro, independente, sem vínculos com empresas ou organizações, sem finalidade comercial, feito por voluntários, para divulgação de tecnologia em telecomunicações |
|
Segurança em Transações e Aplicações WAP (5) |
||
Autores: Jorge Luis Morales Cabral e Leonardo Mascarenhas Leite |
Esta página contém muitas figuras grandes. Aguarde a carga se a conexão estiver lenta.
6. Protocolos
6.1 Modelo OSI
No final da década de 70 foi criado um
modelo padrão para implementação de protocolos, a partir de então todos os
protocolos deveriam buscar uma série de objetivos, pois a heterogeneidade de
padrões existentes praticamente impossibilitava a interconexão entre
sistemas de fabricantes distintos.
Alguns dos objetivos necessários para a implementação de um sistema aberto
são [MOU86]:
interoperabilidade: capacidade que os sistemas abertos possuem de troca
de informações entre eles, mesmo que sejam fornecidos por fabricantes
diversos;
interconectividade: é a maneira através da qual se pode conectar
computadores de fabricantes distintos;
portabilidade da aplicação: é a capacidade de um software de
rodar em várias plataformas diferentes;
Ser escalável: capacidade de um software rodar com uma
performance aceitável em computadores de capacidades diversas, desde
computadores pessoais até supercomputadores.
Para se atingir estes objetivos, a ISO (International Organization for
Standardization) passou a se ocupar em criar um padrão de arquitetura
aberta e baseada em camadas. Foi então definido o Modelo de Referência para
Interconexão de Sistemas Abertos (Reference Model for Open Systems
Interconection - RM OSI) [ISO89].
A utilização de um ambiente de sistema aberto nos oferece algumas vantagens,
como:
liberdade de escolha entre soluções de diversos fabricantes;
acesso mais rápido a novas tecnologias e a preços mais accessíveis, já
que é mais barato e rápido fabricar produtos baseados em uma plataforma padrão;
redução de investimentos em novas máquinas, já que os sistemas e os softwares
de aplicação são portáveis para os vários tipos de máquinas existentes.
A adoção de um modelo baseado em camadas também não é arbitrária.
Considerando que uma rede de computadores tem como objetivo o processamento de
tarefas distribuídas pela rede de forma harmônica e cooperativa entre os vários
processos de aplicação, o projeto desta deve levar em conta vários fatores,
como:
considerar todos os eventos possíveis de acontecer durante a comunicação;
conhecer todos os efeitos e causas destes eventos;
especificar em detalhes todos os aspectos técnico-operacionais dos
meios físicos a serem utilizados como suporte à comunicação;
detalhes das próprias aplicações a serem executadas.
Pode ser percebido, então, que o problema é extremamente complexo e
abrangente. A fim de se lidar com esta complexidade (facilitando a implementação
e manutenção), projeta-se a rede como um conjunto de camadas.
Este conjunto de camadas é hierárquico, ou seja, cada camada baseia-se na
camada inferior [MOU86]. Reduzindo-se o projeto global da rede ao projeto de
cada uma das camadas, simplifica-se consideravelmente o trabalho de
desenvolvimento e de manutenção. O projeto de uma camada é restrito ao
contexto dessa camada e supõe que os problemas fora deste contexto já
estejam devidamente resolvidos.
Na realidade existem duas vantagens práticas na utilização de uma
arquitetura em camadas. Em primeiro lugar, a complexidade do esforço global
de desenvolvimento é reduzida através de abstrações (não interessa para
uma determinada camada como as demais implementam o fornecimento de seus serviços,
só o que elas oferecem). Na arquitetura hierárquica, a camada (N) sabe
apenas que existem a camada (N-1), prestadora de determinados serviços e a
camada (N+1), que lhe requisita os serviços. A camada (N) não toma
conhecimento da existência das camadas (N±2), (N±3), etc.
O segundo aspecto é relacionado com a independência entre as camadas. A
camada (N) preocupa-se apenas em utilizar os serviços da camada (N-1),
independentemente do seu protocolo. É assim que uma camada pode ser alterada
sem mudar as demais (facilidade de manutenção) - desde que os serviços que
ela presta não sejam modificados. É assim também que novas aplicações
podem ser implementadas, na camada apropriada, aproveitando os mesmos serviços
já fornecidos pelas outras camadas (redução dos esforços para evoluções).
Porém a elaboração de um sistema aberto passa por algumas etapas obrigatórias
que podem ser observadas claramente na definição do modelo OSI, da ISO:
definição do modelo do sistema aberto (padrão para arquitetura do
sistema aberto);
definição dos padrões dos componentes que fazem parte do modelo (padrões
de interoperabilidade e portabilidade), não só os relacionados à comunicação,
mas também alguns não relacionados, como estrutura de armazenamento de
dados, etc;
seleção dos perfis funcionais.
Pode ser observado que o modelo OSI da ISO corresponde exatamente ao primeiro
item citado acima. O modelo OSI é um modelo de referência e define apenas a
arquitetura do sistema. O padrão criado para o modelo OSI, então, define
exatamente o que cada camada deve fazer, mas não define como isto será
feito, ou seja, define os serviços que cada camada deve prestar, mas não o
protocolo que o realizará. Este primeiro passo já está bem definido pela
ISO.
A definição dos protocolos de cada camada, então, fica por conta do segundo
passo. Esta parte também está definida pela ISO, mas é realizado por grupos
de estudo diversos. Este passo é uma tarefa muito dinâmica, pois novas
tecnologias de transmissão surgem a todo instante. Portanto por um lado
existem alguns padrões bem documentados, mas por outro, existem tecnologias
emergentes que precisam ser adaptadas às condições do modelo OSI e ainda
estão em processo de definição.
Já a terceira etapa não é uma fase de responsabilidade da ISO. Esta etapa
de definição de perfis funcionais é realizada por cada país, que escolhe
os padrões que lhe cabem baseados em condições tecnológicas, base
instalada, visão futura, etc. Por exemplo, no Brasil existe o Perfil
Funcional do Governo Brasileiro. A escolha do Perfil Funcional é uma etapa
importante, pois apesar de dois sistemas seguirem o Modelo OSI, se eles
adotarem perfis diferentes, eles nunca vão conseguir interoperar.
A arquitetura OSI foi desenvolvida a partir de três elementos básicos,
conforme figura 6.1 [MOU86]:
os processos de aplicação existentes no ambiente OSI;
as conexões que ligam os processos de aplicação e que lhes permitem
trocar
informações;
os sistemas.
FIGURA 6.1 - PROCESSOS DE APLICAÇÃO, CONEXÕES E SISTEMAS
A figura 6.2 nos dá uma idéia da arquitetura de uma máquina pertencente a um sistema de comunicação.
FIGURA 6.2 - ARQUITETURA DE UMA MÁQUINA DO SISTEMA
Hardware:
provê a infra-estrutura necessária (no nível mais baixo) para o
processamento da aplicação, como a manipulação de bits, acesso a
disco, etc.
Sistema operacional: provê os serviços básicos de acesso a hardware,
etc.
Gerenciamento de dados: cuida de tarefas como o acesso, manipulação e troca
de vários tipos de dados. Uma consistência nesta tarefa é um grande passo
rumo à portabilidade de aplicações.
Linguagem: tem sido feitos esforços em relação à criação de uma
linguagem com independência da plataforma, de forma a prover a portabilidade
de código.
Interface com o usuário: um dos principais fatores de portabilidade, já que
provê a interface com o usuário da aplicação.
Comunicação: Proporciona a comunicação e interoperação entre máquinas e
sistemas diferentes, cuidando de características como padrões de interoperação,
endereçamento, etc.
O modelo OSI, então, se encaixa na figura 6.2 como um conjunto de funções
que possibilitam que máquinas distintas possam se comunicar e trocar informações.
Ele possui sete camadas, conforme figura 6.3, onde cada camada é responsável
por uma determinada função específica. Os princípios utilizados para se
chegar a estas camadas são [TAN94]:
uma camada deve ser criada onde é necessário um nível de abstração
diferente;
cada camada deve desempenhar uma função bem definida;
a função de cada camada deve ser definida tendo em vista a definição
de protocolos
padrões internacionais;
as fronteiras entre as camadas devem ser escolhidas de forma a minimizar
o fluxo de informações através das interfaces;
o número de camadas deve ser grande o suficiente para que não seja
preciso agrupar funções em uma mesma camada por necessidade, e pequeno o
suficiente para que a arquitetura fique manejável.
Cada camada é usuária dos serviços prestados pela camada imediatamente
inferior e presta serviços para a camada imediatamente superior. Esta troca
de informações entre as camadas adjacentes ocorre por meio da troca de
primitivas de serviços nas interfaces entre as camadas.
Apesar do modelo OSI estar dividido em sete níveis, pode-se considerar
genericamente que as três camadas mais baixas cuidam dos aspectos
relacionados à transmissão propriamente dita e a camada de transporte lida
com a comunicação fim-a-fim, enquanto que as três camadas superiores se
preocupam com os aspectos relacionados à aplicação, já a nível de usuário.
A comunicação entre sistemas ocorre a nível de camadas, ou seja, a camada
de aplicação do sistema A se comunica com a camada de aplicação do sistema
B e assim por diante até o nível físico, onde ocorre a comunicação física
entre os sistemas.
FIGURA 6.3 - MODELO DE REFERÊNCIA OSI
Uma maneira bastante fácil e simplificada de se enxergar a funcionalidade de um modelo em camadas, como o modelo OSI, é imaginar que cada camada tem como função adicionar um cabeçalho aos dados do usuário a serem transmitidos para outro sistema, conforme figura 6.4. Deste modo a função de cada camada do outro sistema é exatamente a inversa, ou seja, retirar os cabeçalhos dos dados que chegam e entregá-los ao usuário em sua forma original.
FIGURA 6.4 - TRANSFERÊNCIA DE DADOS ENTRE CAMADAS
Os dados entregues pelo usuário à camada de aplicação do sistema recebem a denominação de SDU (Service Data Unit). A camada de aplicação, então, junta à SDU (no caso, os dados do usuário) um cabeçalho chamado PCI (Protocol Control Information). O objeto resultante desta junção é chamado de PDU (Protocol Data Unit), que corresponde à unidade de dados especificada de um certo protocolo da camada em questão.
6.1.1 Primitivas de Serviços
As primitivas de serviços são informações
trocadas entre duas camadas adjacentes de forma a realizar um serviço. No
modelo OSI são definidas quatro tipos de primitivas:
pedido (Request): utilizada para solicitar ou ativar um
determinado serviço;
indicação (Indication): informa a ocorrência de um determinado
evento;
resposta (Response): utilizada para responder a um determinado
evento;
confirmação (Confirmation): utilizada para confirmar a execução
de um serviço solicitado.
As primitivas possuem parâmetros de entrada
e saída. Por exemplo, em um pedido de conexão, os parâmetros podem
especificar a máquina à qual se conectar, o tipo de serviço desejado e o
tamanho máximo de mensagem a ser utilizada e os parâmetros em uma indicação
de conexão podem conter a identidade do solicitante, o tipo de serviço e o
tamanho máximo de mensagem proposto. Quem cuida dos detalhes desta negociação
é o protocolo. Por exemplo, caso duas propostas para o tamanho máximo das
mensagens trocadas seja conflitante, o protocolo deve decidir qual das duas
será aceita.
Os serviços prestados podem ser basicamente de dois tipos: confirmado e não
confirmado. No serviço confirmado, há um pedido, uma indicação, uma
resposta e uma confirmação. Já no serviço não confirmado, há apenas um
pedido e uma indicação. Um exemplo de um serviço confirmado é o
estabelecimento de uma conexão, enquanto que a desconexão é um serviço não
confirmado. Será visto o exemplo de um serviço de conexão na figura 6.5.
FIGURA 6.5 - DIAGRAMA DE TEMPO DE ESTABELECIMENTO DE CONEXÃO
Este serviço pode ser descrito da seguinte
forma:
request.CONEXÃO - solicita o estabelecimento de uma conexão;
indication.CONEXÃO - informa à parte chamada;
response.CONEXÃO - entidade chamada aceita ou rejeita chamadas;
confirmation.CONEXÃO - indica ao solicitante se a chamada foi
aceita;
request.DADOS - solicita a transmissão de dados;
indication.DADOS - avisa sobre a chegada de dados;
request.DESCONEXÃO - solicita que a conexão seja liberada;
indication.DESCONEXÃO - informa ao parceiro sobre o pedido.
6.1.2 Serviços e Protocolos
Faz-se necessário deixar bem clara a distinção
entre serviços e protocolos. Um serviço é um conjunto de primitivas que uma
camada oferece à camada superior adjacente, ou seja, é uma interface entre
duas camadas onde a inferior se comporta como provedora do serviço e a
superior a usuária do serviço. O serviço define as operações que a camada
está preparada para realizar em nome de seus usuários, mas não diz nada a
respeito do modo como isso deve ser implementado [MOU86].
Já um protocolo é um conjunto de regras que governa o formato e o
significado dos quadros, pacotes ou mensagens trocados entre entidades
parceiras dentro de uma mesma camada. Os protocolos são utilizados para
implementar os serviços, não sendo diretamente visíveis aos usuários, ou
seja, o protocolo utilizado pode ser modificado, desde que o serviço
oferecido ao usuário permaneça o mesmo.
Deve-se sempre lembrar que ao falar em serviços, fala-se em camadas
adjacentes (níveis diferentes, no mesmo sistema), e ao falar em protocolo,
fala-se de entidades pares (no mesmo nível, em sistemas diferentes), conforme
figura 6.6.
FIGURA 6.6 - SERVIÇOS E PROTOCOLOS NO MODELO OSI
Os serviços providos pela camada (N) são
disponíveis para a entidade (N+1) através dos SAP´s (Service Access
Point). Os SAP´s são interfaces lógicas entre as entidades (N) e (N+1).
Portanto, quando a entidade (N+1) precisa utilizar o serviço provido pela
camada (N), ela busca este no SAP(N).
As informações entre entidades (N+1) são trocadas através de uma associação
chamada conexão (N) , estabelecida na camada (N) utilizando o protocolo (N).
A figura 6.7 ilustra este conceito.
FIGURA 6.7 - SAP´S E CONEXÕES
6.2 Arquitetura internet
A arquitetura internet se baseia
praticamente em um serviço de rede não orientado à conexão (datagrama não
confiável), o Internet Protocol (IP) e em um serviço de transporte
orientado à conexão, oferecido pelo Transmission Control Protocol (TCP).
Juntos, estes protocolos se completam, oferecendo um serviço confiável de
uma forma simples e eficiente.
A arquitetura internet se baseia em um modelo com quatro camadas
[SOU99], demonstrado na figura 6.8, onde cada uma executa um conjunto bem
definido de funções de comunicação. No modelo em camadas da internet,
não existe uma estruturação formal para cada camada, conforme ocorre no
modelo OSI. Ela procura definir um protocolo próprio para cada camada, assim
como a interface de comunicação entre duas camadas adjacentes.
FIGURA 6.8 - MODELO EM CAMADAS DA INTERNET
Estas camadas trocam informações entre si
de uma forma vertical e hierárquica, ou seja, a camada APLICAÇÕES passa
informações para TRANSPORTE, que passa para REDE que passa para ACESSO A
REDE. Cada camada trata das informações que correspondem a sua função.
Quando fala-se em comunicação entre dois hosts, a comunicação entre
as camadas é vista então de uma maneira horizontal, ou seja, a Camada
TRANSPORTE do host destino conversa somente com a Camada TRANSPORTE do host
Origem, assim como a camada APLICAÇÕES só conversará com a camada
APLICAÇÕES, e assim por diante.