4. Controle de Acesso ao Meio
4.2. Protocolo de Controle e Adaptação de Enlace Lógico (L2CAP)
O Protocolo de Controle e Adaptação de Enlace Lógico (L2CAP) é a outra parte da subcamada MAC no Bluetooth. Esse protocolo permite a multiplexação de protocolos de nível superior e os processos de segmentação e remontagem de pacotes (SAR). Além disso, ele transmite as informações sobre QoS. Como o LMP, o L2CAP está logo acima do protocolo de Banda Básica.
O L2CAP permite que aplicações de camadas superiores transmitam e recebam pacotes L2CAP de até 64 KB e trabalha apenas com um enlace ACL. Como o LMP, ele confia nos mecanismos de detecção e correção de erros da camada Banda Básica.
Dentre as características do L2CAP estão a simplicidade e o baixo overhead, o que o torna apropriado para dispositivos com pouca memória e capacidade de computação limitada, como celulares, computadores de mão e PDAs. O overhead é aliado também de uma característica desejada pelo Bluetooth, que é a eficiência energética, pois permite um alto aproveitamento da banda sem por isso consumir muita potência.
4.2.1. Comunicação com outros Protocolos
O Protocolo L2CAP, ao contrário do LMP, tem a capacidade de se comunicar com outros Protocolos, como o Protocolo de Descoberta de Serviços (SDP - Service Discovery Protocol), RFCOMM e Especificações de Controle de Telefonia (TCS - Telephony Control Specifications). Além disso, apesar de aplicações que envolvem áudio e telefonia estarem associadas trabalharem em enlaces SCO da Banda Básica, comunicações que trabalham com áudio em forma de pacotes (Telefonia IP, por exemplo) também podem se comunicar com o L2CAP e os pacotes são tratados como dados comuns.
Figura 4.1 - Comunicação do L2CAP com outros protocolos - Adaptado do livro Bluetooth Demystified
4.2.2. Funcionalidades
A capacidade de comunicação com diversas camadas exige do protocolo L2CAP uma série de funcionalidades. A figura abaixo divide a camada L2CAP em seus componentes arquiteturais. Ela mostra como ocorrem as comunicações com outras camadas e onde entram as funcionalidades.
Figura 4.2 - Arquitetura L2CAP - Adaptado de http://www.bluetooth.com/
Na figura acima o Gerente de Canais é responsável pelas sinalizações. As funcionalidades são descritas abaixo:
Multiplexação de protocolo/canal - Durante a configuração do canal, essa função é usada para encaminhar o pedido de conexão ao protocolo da camada superior correta.
Segmentação e Remontagem - O controle do tamanho dos pacotes das camadas superiores é dado ao L2CAP, que faz segmentações e remontagens de acordo com a necessidade.
Controle de Fluxo por Canal L2CAP - Usado quando diferentes fluxos de dados rodam num mesmo enlace lógico L2CAP em canais distintos. Nesse caso, cada canal pode pedir controle individual de fluxo. Essa funcionalidade é opcional
Controle de Erro e Retransmissões - No caso da aplicação requerer uma taxa de erro menor que a Banda Básica pode oferecer, o L2CAP fornece tratamento opcional de checagem de erros e retransmissão dos PDUs locais.
Fragmentação e Recombinação - As camadas inferiores podem precisar com tamanhos de pacotes diferentes dos criados pela segmentação do L2CAP. Para resolver esse problema o L2CAP cria fragmentes para atender as especificações das camadas inferiores.
Qualidade de Serviço - É possível que, durante o estabelecimento da conexão L2CAP, os dois dispositivos Bluetooth troquem informações a respeito da QoS esperada.
4.2.3. Formato do Pacote
Um PDU L2CAP depende do canal da comunicação. Para se ter uma boa noção de como é um PDU L2CAP, pode-se ver a figura abaixo. Ela mostra como é esse PDU num canal orientado a conexão (ver seção 4.2.4.1 - Identificadores de Canal). Neste caso ele recebe o nome de Quadro básico de informação, ou quadro B.
Figura 4.3 - Quadro B - Adaptado de http://www.bluetooth.com/
O campo Tamanho é de 2 octetos e indica o tamanho da carga útil de informação, em octetos. Esse tamanho pode variar de 0 a 65535 octetos. O campo ID do Canal também é de 2 octetos e indica o ponto final de destino do pacote no canal. Finalmente, o campo carga útil de informação contém a informação propriamente dita e pode ter de 0 a 65535 octetos de tamanho.
4.2.4. Operação
L2CAP é baseado no conceito de canais. Cada ponto final de um canal L2CAP é referido por um ID do Canal (CID - Channel ID).
4.2.4.1. Identificadores do Canal (CID)
Existem vários tipos de CIDs diferentes. Alguns são mostrados na tabela abaixo:
Tabela 4.1 - CIDs - Adaptado de http://www.bluetooth.com/
O identificador nulo (0x0000) é um valor inválido e não deve ser usado. IDs de 0x0001 a 0x003F estão reservados para funções específicas do protocolo. Os IDs restantes são liberados para o uso das implementações, desde que dois canais L2CAP não se comuniquem simultaneamente utilizando o mesmo CID.
4.2.4.2. Operação entre Dispositivos
A figura abaixo ilustra comunicações entre entidades L2CAP de dispositivos diferentes bem como o uso dos CIDs.
Figura 4.4 - Comunicações entre entidades L2CAP - Adaptado de http://www.bluetooth.com/
A seta bidirecional representa um canal orientado a conexão, em que os CIDs identificam cada ponto final do canal.
A seta unidirecional representa um canal sem conexão, em que o fluxo é restrito a uma direção apenas. Neste caso, o CID da fonte representa o grupo de dispositivos que recebem os dados. No destino, o CID é 0x0002 que identifica um canal sem conexão, como visto na tabela 4.1.
Por último, a seta preta representa um canal reservado, que é o canal de sinalização. Ele serve para criar e estabelecer canais orientados a conexão, além de negociar mudanças nas configurações dos canais.
4.2.4.3 Operação entre Camadas
Comunicações com camadas distintas seguem uma arquitetura padrão, mostrada na figura abaixo:
Figura 4.5 - Operações entre camadas - Adaptado de http://www.bluetooth.com/