Definição
O jDiameter é uma implementação do protocolo Diameter escrita em Java.
A partir do Diameter Base Protocol (RFC 3588), existem extensões que adicionam características (comandos e atributos) para a adicionar funcionalidades. No IMS existem diversas variações (chamadas de aplicações ou interfaces) do Diameter (abaixo eu mostro estas variações e suas aplicações).
Objetivos
- Permitir o desenvolvimento da arquitetura IMS.
Detalhamento Técnico
O Diameter é um protocolo para fazer AAA (Authentication, Authorization e Accounting) definido pela RFC 3588. É o sucessor do RADIUS, possuindo as seguintes vantagens:
- Protocolo de transporte confiável (TCP ou SCTP e não UDP)
- Network ou Transport Level Security (IPsec ou TLS)
- Endereço maior para os atributos-valores (AVPs) e identificadores de 32 bits ao invés de 8 bits
- Tanto stateful quanto stateless podem ser usados
- Notificações de erro
- Melhor suporte em roaming
- Mais facilmente extensível (novos comandos e atributos podem ser definidos)
- etc...
O jDiameter consiste de classes e interfaces Java para implementar as funcionalidades do Diameter Base e de algumas extensões. É possível desenvolver aplicações JEE e JSLEE (utilizando os RAs).
Integrações
O objetivo principal deste estudo foi encontrar os possíveis usos do jDiameter na arquitetura IMS.
A arquitetura IMS procura facilitar integrações, portanto utiliza sempre que possível protocolos definídos no IETF. O Diameter é um destes protocolos.
No core do IMS existem várias funções ligadas por interfaces (protocolos) padronizados. Vamos ver algumas destas funções e qual interface do Diameter elas utilizam. Não é escopo deste documento detalhar toda arquitetura IMS.
A interface Cx/Dx
O S-CSCF que é basicamente um SIP Server usa as interfaces Cx e Dx do Diameter para falar com o HSS. O "assunto da conversa" entre esses elementos é:
- Trocar informações de localização
- Autorizar um usuário acessar o IMS
- Trocar informações de autenticação
- Receber mudanças das informações do usuário
A interface Dx é usada para localizar um HSS em um ambiente multi-HSS
A interface Sh
Os servidores de aplicação (lugar que hospedam os nossos serviços) conversam com o HSS através da interface Sh do Diameter. O "assunto da conversa" normalmente é:
- Fazer o download ou enviar informações do usuário
- Fazer requisições ou enviar notificações sobre mudanças em alguma informação do usuário
A interface Ro
É uma das duas opções de charging do IMS. Esta interface cuida do online charging (sistemas pré-pago). O Servidor de Aplicação e o MRFC (Media Resource Function Controller) falam com o OCF (Online Charging Function) utilizando esta interface. São três tipos de mensagem:
- Immediate Event Charging
- Event charging with Reservation
- Session charging with Reservation
OBS: Aqui ainda existe uma outra variação que é a DCCA (Diameter Credit Control Application - RFC 4006) utilizada também para criar aplicações de controle de crédito. Me parece que esta variação é mais utilizada por ter atributos adicionais.
A interface Rf
É a outra opção de charging do IMS. Esta interface cuida do offline charging (sistemas pós-pago). O Servidor de Aplicação, CSCF, MRFC, MGCF, etc utilizam esta interface para falar com o CDF (Charging Data Function) responsável pelo offline charging. São dois tipos de mensagens:
- Event based Charging
- Session based Charging
A diferença entre os dois é o contexto onde é usado. Por exemplo, enviar um SMS é utilizado o Event Based Charging pois ocorre somente uma vez. Enquanto que Session Based Charging é mais duradouro e ocorrem em determinadas situações, por exemplo de minuto em minuto em uma ligação.
Comparativos
Existem outras soluções tanto free como pagas, como a http://www.traffixsystems.com/Javadiameter.html.
Entre as soluções open source, acredito que o fork do Mobicents é uma boa opção, pois a comunidade é bem ativa e ainda podemos ter o suporte da Red Hat.
Licenças e Restrições
É Open Source com uma comunidade pouco atuante. Acredito que o jDiameter não é uma implementação confiável na comunidade java.net. Enviei email na lista de discussão perguntando sobre a atividade da comunidade no dia 04/08/2010 e até agora não obtive resposta. Porém, o Mobicents Team criou um fork do jDiameter onde todos os RAs Diameter são baseados. Perguntei para eles sobre a comunidade eles me disseram que realmente parece estar parada, apesar do líder do projeto ter feito um anúncio de uma nova versão em breve.
Existe uma empresa por trás do jDiameter que oferece suporte a ServiceBricks. Também enviei um email solicitando mais detalhes e não obtive resposta.
Conclusões
Utilizar o jDiameter do java.net pode requerer de nós algum esforço adicional para entendimento e melhorias da biblioteca. Porém a comunidade do Mobicents pode nos ajudar bastante. Isso é um ponto forte para escolhermos o fork deles.
| Nome da Interface | Entidade IMS | Descrição | Implementa? |
|---|---|---|---|
| Cx | (I-CSCF, S-CSCF), HSS | Usado para enviar dados do assinante para o S-CSCF. Também usado para comunicação do CDF e/ ou OCF. | Sim |
| Dh | AS (SIP AS, OSA, IM-SSF) <-> SLF | Usado pelo Servidor de Aplicação para encontrar o HSS em um ambiente multi-HSS. | ??? |
| Dx | (I-CSCF or S-CSCF) <-> SLF | Usado pelo I-CSCF ou S-CSCF para encontrar o HSS em um ambiente multi-HSS | Sim |
| Go | PDF, GGSN | Permite operações para controlar QoS no plano de usuário e trocar informações entre o IMS e uma rede GPRS. | ??? |
| Gq | P-CSCF, PDF | Usado para trocar informações entre o P-CSCF e PDF | ??? |
| Rf | P-CSCF, I-CSCF, S-CSCF, BGCF, MRFC, MGCF, AS | Usado para trocar informações de offline charging | Sim |
| Ro | AS, MRFC, S-CSCF | Usado para trocar informações de online charging | Sim |
| Rx | P-CSCF, PCRF | Usado para trocar informações de charging e policy entre P-CSCF e PCRF | ??? |
| Sh | AS (SIP AS, OSA SCS), HSS | Usado para trocar informações do usuário entre os AS (SIP AS or OSA SCS) e HSS. | Sim |
Referências
https://jdiameter.dev.java.net/
http://groups.google.com/group/mobicents-public/web/mobicents-diameter
http://en.wikipedia.org/wiki/IP_Multimedia_Subsystem
http://en.wikipedia.org/wiki/Diameter_%28protocol%29
http://en.wikipedia.org/wiki/IP_Multimedia_Subsystem
Pesquisadores
- Normandes Junior