O formato do pacote EAP-TTLS é visto a seguir:
O campo Code vale 1 para request e 2 para response.
O campo Identifier formado por um octeto e auxilia na combinação dos pacotes Response com os Request. O identificador muda a cada pacote Request, sendo ecoado no pacote Response correspondente.
O campo Length formado por dois octetos e indica o número de octetos de todo o pacote EAP.
O campo Type terá valor 21 e significa EAP-TTLS.
Uma seqüência de sinalizadores (flags) que ocupam um octeto dividido do seguinte modo:
O bit 0 (L) do octeto (mais a esquerda) é usado para indicar a presença de quatro octetos TLS campo tamanho da mensagem.
O bit 1 (M) indica mais fragmentos quando ativo.
O bit 2 (S) indica uma mensagem de início (Start).
Os bits 3 e 4 são reservados (R).
Os bits de 5 a 7 (V) indicam a versão do protocolo (000 para TTLSv0).
O campo Message Length - Comprimento da mensagem - Esse campo de quatro octetos somente está presente quando o sinalizador (L) está ativo. Esse campo informa o comprimento total do campo Data antes da fragmentação (?).
O campo Data - Para todos os pacotes que não sejam do tipo Start, o campo data consiste de uma mensagem TLS crua, em seqüência ou o fragmento de uma mensagem. Para os pacotes do tipo Start, o campo data pode conter uma seqüência de AVPs.
O pacote EAP-TTLS do tipo Start
O bit (S) DEVE ser configurado no primeiro pacote enviado pelo servidor para iniciar o protocolo EAP-TTLS e não deve ser usado em nenhum outro pacote seguinte.
Este pacote "especial" DEVE conter informações adicionais e necessárias na forma de AVPs, que fornecem dicas úteis ao cliente, que permitem ao cliente escolher corretamente o ID da sessão TLS, para que uma sessão seja reiniciada. Cada AVP deve começar na fronteira de quatro octetos relativa ao primeiro AVP da seqüência. Caso o AVP não seja múltiplo de quatro, ele deve ser preenchido (padded) com zeros até o limite de quatro octetos.
Negociação da versão
A negociação da versão de EAP-TTLS é feita na primeira troca feita entre o servidor e o cliente. O servidor apresenta o número da maior versão do protocolo atualmente aceita, configurando o sinalizador (V), com o número da versão (atualmente TTLSv0, com valor igual a 000), no pacote Start. Na primeira mensagem de Response, o cliente configura o sinalizador (V) com o maior número da versão suportada por ele. Caso a versão do cliente não seja suportada pelo servidor um pacote EAP-Failure será enviado para terminar a sessão. Caso cliente e servidor entrem em acordo sobre qual versão usar, todos os pacotes EAP seguintes terão o campo sinalizador (V) com o mesmo valor.
Fragmentação
Cada mensagem EAP-TTLS consiste em um perna de uma conversação half-duplex. Os protocolos EAP de portadora (como, PPP, RADIUS e EAPOL) podem impor limites ao tamanho da mensagem EAP. Como conseqüência, pode ser necessário fragmentar uma mensagem EAP-TTLS em múltiplas mensagens.
Cada fragmento, exceto o último, DEVE ter o sinalizador (M) ativo, indicando que mais fragmentos estão a chegar. O último fragmento possui o sinalizador desativado.
Caso sejam múltiplos fragmentos, o primeiro fragmento terá o sinalizador (L) ativado e incluirá o comprimento total da mensagem que segue fragmentada. Os demais fragmentos terão o sinalizador (L) desativado.
Mensagens não fragmentadas podem indicar o tamanho total da mensagem e ativar o sinalizador (L). Mas, isso não terá qualquer efeito prático, sendo visto mais como uma redundância.
Após a recepção de um pacote com o sinalizador (M) ativo, o recebedor DEVE transmitir um pacote Acknowledgement. O recebedor é responsável pela remontagem dos fragmentos do pacote.
Pacotes Acknowledgement
Um pacote Acknowledgement é um pacote EAP-TTLS sem dados após o octeto dos sinalizadores (flags), e com os sinalizadores L,M e S desativados. O sinalizador V deve informar a versão atualmente em uso pela sessão.
Um pacote Acknowledgement é enviado com os seguintes fins:
- Conhecimento da Fragmentação, em resposta a um pacote EAP com o sinalizador (M) ativado.
- Quando o pacote final de uma negociação EAP-TTLS é enviado pelo servidor, o cliente deve responder com um pacote Acknowledgement, para permitir que o servidor prossiga com completando a negociação EAP-TTLS (basicamente enviando ou causando o envio de um EAP-Success ou EAP-Failure para o cliente).