Tutorial sobre a camada de Sessão

Por Cristiano André da Costa

Serviços

Intercâmbio de Dados

O intercâmbio de dados é o recurso mais importante da camada de sessão. Ele envolve três fases: estabelecimento, utilização e liberação.

O estabelecimento de sessão é feito através de um pedido de conexão à camada de transporte, e envolve a negociação entre usuários no que tange aos diversos parâmetros da conexão. Alguns destes parâmetros são pertinentes à conexão de transporte e são simplesmente passados para esta conexão sem qualquer modificação.

A liberação pode ser feita de duas formas na camada de sessão: de forma abrupta ou disciplinada. A primeira é análoga a disconexão na camada de transporte e uma vez emitida, a conexão não recebe mais nenhum dado. Ela é utilizada para abortar conexões. A liberação disciplinada, por sua vez, utiliza um handshake completo: pedido, indicação, resposta e confirmação. Com isso, esta forma de liberação pode aceitar mensagens até que uma confirmação seja enviada.

A camada de sessão pode transmitir quatro tipos diferentes de dados, a saber: regulares e expedidos (análogos aos tipos da camada de transporte), tipificados e dados de capacidade.

Gerenciamento de Diálogos

Existem muitas situações em que o software da camada superior está estruturado de forma a esperar que os usuários se revezem (comunicação half-duplex). Para tal, foram introduzidos controles para determinar de quem é a vez de transmitir.

O gerenciamento de diálogos foi implementado através do uso de tokens de dados. Ao se estabelecer uma sessão, pode ser utilizado um parâmetro que indique o modo (half-duplex) e um outro parâmetro que diga qual dos lados recebe inicialmente o token. Somente o usuário que está com o token pode transmitir, enviando o token para o outro usuário assim que encerrar sua transmissão.

Sincronização

A sincronização é utilizada para devolver as entidades na camada de sessão um estado conhecido. Isso pode ser necessário no caso de ocorrerem erros ou divergências. Este serviço pode parecer desnecessário, uma vez que a camada de transporte cuida dos erros de comunicação, porém podem ocorrer erros na camada superior.

O texto na camada de sessão pode ser dividido em páginas. Estas páginas podem ser separadas por pontos de sincronização. Se ocorrer algum problema é possível reiniciar a partir de um ponto de sincronização anterior (ressincronização). Quando essa ressincronização ocorre, o salvamento de mensagens e a retransmissão subseqüente ocorre acima da camada de sessão.

Existem dois tipos de pontos de sincronização, a saber: principal e secundário. O ponto de sincronização principal delimita partes logicamente significativas de trabalho, chamadas unidades de diálogo. Estas unidades podem conter vários pontos de sincronização secundários. Quando ocorre a resincronização retorna-se até o ponto de sincronização principal mais recente, ou a um ponto de sincronização secundário desde que este não tenha sido precedido de um ponto principal.

Para a fixação de pontos de sincronização são utilizados tokens. Existem dois tokens independentes, para o ponto principal e o secundário. Estes tokens são distintos entre si e diferentes também dos utilizados para controle de dados na comunicação half-duplex.

Gerenciamento de Atividades

O gerenciamento de atividades é utilizado para permitir que o usuário divida o fuxo de mensagens em unidades lógicas (atividades). Cada atividade é completamente independente de outra subseqüente ou anterior.

O usuário determina o que deve constituir cada atividade (e não a camada de sessão). Tudo o que a camada de sessão faz é transmitir para o receptor as indicações de inicio, finalização, retomada, imterrompimento ou descarte de uma atividade. Porém a camada de sessão não sabe quando as solicitações de atividades são feitas e como são as reações do receptor.

O gerenciamento de atividades é a forma principal de se estruturar uma sessão. Para que não ocorram pedidos simultâneos de inicio de atividades, todo gerenciamento é controlado por um token (o mesma token utilizado para pontos de sincronização principal). Esse token pode ser passado e solicitado de maneira independente de dados e de tokens de sincronização secundários.

A ISO concluiu que se um usuário iniciar uma atividade enquanto o outro estiver fazendo uma sincronização secundária, podem ocorrer problemas. Para solucionar isso, antes que uma atividade ou operação de sincronização seja iniciada o usuário deve reter os tokens de atividade, sincronização secundária e dados.

Outra questão importante é a relação entre as atividades e os pontos de sincronização. Cada vez que é iniciada uma nova atividade os números de séries dos pontos de sincronização são reinicializados e é criado um ponto de sincronização principal. Podem ser criados pontos de sincronizações adicionais, secundários ou não, dentro de atividades. Uma vez que uma atividade é iniciada, se ocorrer uma ressincronização não é possível retornar para uma atividade anterior.

Relatório de Exceções

Este serviço é utilizado para que sejam relatados erros inesperados. Se o usuário tiver algum problema, ele pode relatar este para seu parceiro explicando o que aconteceu.

O relatório de exceções não se aplica apenas a erros detectados pelo usuário, mas também para problemas internos na camada de sessão ou problemas relatados pelas camadas inferiores. Porém a decisão da ação que deve ser tomada é sempre feita pelo usuário.

Sumário