등장 배경 및 필요성
- 기존 AAA 프로토콜은 다이얼업 환경(전화선으로 인터넷 연결 방식)을 위해서 개발
- 기술의 발전으로 서비스 다양화로 더 다양한 요구(확장성, 신뢰성, 보안 등) 생김
- RADIUS 프로토콜의 문제점을 보안하여 Diameter 등장
주요 기능
- AVP 기반 통신 : 모든 데이터를 AVP(attribute value peer) 형태로 전달
- 기능 협상 및 오류 처리 : 상대 피어와 지원 기능을 협상하고, 명확한 오류 메시지 제공
- 전송 계층 보안 : tls/tcp, dtls/sctp 지원
- 장애 조치 및 상태 관리 : 장애 조치 알고리즘과 상태 기계 내장, 신뢰성있는 트랜잭션 처리
- 에이전트, 프록시, 릴레이, 리다이렉트 등 명확한 동작 정의
- Server Initiated 메시지 지원 : 서버가 클라이언트에게 원하는 메시지 전달 가능
- 새로운 애플리케이션을 위한 확장 용이 : 인증과 인가를 위해서 확장은 필요 없을 것 같음
용어 정의 : Terminology
프로토콜 개요
- 피어 간 연결, 기능 협상, 메시지 송수신/라우팅, 연결 해제의 전반적인 메커니즘 담당
- 메시지는 AVP의 집합으로 이뤄지면, 세션 식별은 Session-Id AVP
- 인증, 인가 요청 시 Session-Id가 사용되고, 이후 관련 메시지는 반복
- 세션 상태는 세션 종료 요청이나 세션 타임아웃 등으로 해제
Transport
- 기본 통신(port: 3868) : TCP or SCTP
- 보안 통신(port: 5658) : TLS/DTLS
- 주소간 연결은 하나만 사용
- 연결이 없으면 주기적으로 재접속 시도
- DNS 기반 피어 탐색 시, SRV 레코드 포트 우선 적용(DNS에 SRV 레코드에 명시된 port를 우선 적용)
- 장애 발생 시 즉시 연결 종료
SCTP : Stream Control Transmission Protocol
Securing Diameter Message
- 피어간 통신은 반드시 TLS/TCP나 DTLS/SCTP를 지원해야한다.
- IPSec을 사용할 수도 있음(지양)
- 반드시 TLS, DTLS, IPSec 중 하나이상은 지원해야함
Diameter Application Compliance(지원)
- Diameter 기능 협상 과정에서 Application Id를 주고 받을 수 있는데
- Application Id를 보낸다는 건 해당 어플의 기능을 모든 제공한다는 의미
Application Identifiers(식별자)
- 모든 Diameter 어플리케이션은 IANA가 할당한 ID 사용
- 표준 ID list
- 0 : common message
- 3 : basic accounting
- 0xffffffff : relay
- 릴레이/리다이렉트 에어전트는 relay만 사용(협상)
- 프록시나 릴레이는 Application Id에 맞는 서버로 메시지 전달 및 적합한 서버가 없을 시 오류 반환(라우팅)
Connections VS Session
- Connection : 두 노드 간 네트워크 연결(tcp/sctp)을 뜻하며, 데이터 송수신 통로
- Session : Client 와 Server 간 논리적/서비스 단위, 각 세션은 Session Id AVP로 식별

Peer Table
- Diameter 네트워크 내에서 각 피어(상대 노드)의 정보를 관리하는 구조
- 피어 정보 사용 정보 : 호스트 식별자, 상태 값, 정적/동적 등록 여부, 만료 시간, 보안 여부, 보안 정보 등
- 피어 테이블은 메시지 라우팅이나 피어 상태 확인의 기반
- 피어란 : connection을 맺는 것을 피어 관계로 보면 됨
- 피어테이블은 각 노드 로컬에서 관리 → 분산형 네트워크이기 때문
- 피어의 정보를 보고 어디로 라우팅할지 결정하는 것임
- DWR(Device Watchdog Request)/DWA(Device Watchdog Answer)로 만료 시간 갱신
- 만료시간이 다 되면 상태를 변경하거나 삭제 가능(정적/동적에 따라 상이)
- 관계를 맺을 때 supported-Application-id를 보내는데 이건 내가 지원하는 것을 알리는 용도
- 내가 구현이 많이 되어있더라도 한정된 기능만 지원한다고 알릴 수 있음
- 즉, supported-Application-id == localAction은 다름
Routing table
- Realm(도메인/운영기관) 기반으로 메시지의 경로를 결정하는 구조
- peer table 기반으로 생성됨 → 피어의 realm을 가져와서 활용
- 주요 필드
- Realm Name : 도메인, Rounting 기준
- Application Identifier : Application Id에 따라 라우팅 경로가 달라질 수 있음
- Local Action : 메시지 처리 방식 지정
- LOCAL : 해당 노드에서 직접 처리
- RELAY : 다음 노드로 그대로 전달
- PROXY : 다음 노드로 전달, 필요 시 AVP 등 정책 적용 후 전달
- REDIRECT : 목적지 정보를 알려주고 메시지 반환
- Server Identifier : 메시지를 보낼 대상 서버(peer table의 Host ID 와 같아야함)
- Static or Dynamic : 경로가 정적/동적 구성되었는 지 여부
- Expiration Time : 동적경로 시 만료 시간
- 운용 포인트
- 각 에이전트는 local, relay, proxy, redirect 중 하나 이상 지원해야함
- 라우팅 테이블에 default 엔트리 둘 수 있음
- 라우팅 대상 서버는 반드시 해당 Application ID를 선언한 노드여야하며, 없으면 메시지 반환
- 라우팅 테이블엔 내가 하는 것도 들어가기 때문에 나를 판단하고 아니면 피어테이블에서 검색 후 점진적으로 늘이는 방식
Role of Diameter Agent
- Client, Server 외 Relay, Proxy, Redirect, Translation Agent 도입
- Agent는 메시지 운반, 변환 안내, 적책적용을 수행하는 중간 서버 역할
- Relay Agent
- 메시지를 목적지 Realm 및 피어 정보를 바탕으로 단순 전달(라우팅) 담당
- 세션 상태는 유지하지 않고 트랜잭션 상태만 유지(요청, 응답 매칭용)
- Supported-Application-Id : Relay(0xffffffff)
- Proxy Agent
- Relay와 유사하지만 정책 적용/리소스 제어 등 가공/검사 기능을 수행
- 하위(DownStream) 피어 상태를 유지하여, 자원 사용 제한, 입장 제어 등 수행
- Supported-Application-Id : 해당 노드에서 지원하는 것만
- Redirect Agent
- 메시지를 직접 전달하지 않고, 목적지 정보를 반환하여 요청한 쪽에서 직접 처리하게 함
- 네트워크 라우팅 구조를 중앙 집중화할 때 유용(구성 변경 시 전체 업데이트 불필요)
- 세션 상태, 트랜잭션 상태 유지 안함
- Supported-Application-Id : Relay(0xffffffff)
- Translation Agent
- 서로 다른 AAA 프로토콜(RADIUS, TACACS 등)와 Diameter 간 변환 담당
- 세션 상태와 트랜잭션 둥다 관리해야함(오랜 세션 추적 필요)
- Supported-Application-Id : 해당 노드에서 지원하는 것만
Diameter Path Authorization(권한 확인 절차)
- 네트워트 통신 중 보안 통신으로 보호할 수 있지만 그것으로는 부족하다
- 각 노드가 해당 역할을 수행할 권한이 있는지도 반드시 검증해야한다.
- 모든 노드 해당 Application을 지원하고 지원하고 주변에 알린 인가 노드여야하며, 연결 협상 과정에서 확인해야한다.
- 릴레이 프록시 에이전트는 Route-Record AVP에 경로 정보를 기록하여 최종 서버가 요청을 거친 경로를 확인할 수 있어야한다.
- 홈서버(최종 인증 서버)는 경로가 신뢰할 수 없는 영역을 거쳤다면 요청을 거부할 수 있다.
- 과금 또한 반드시 인가된(권한이 있는) 세션
- 에 기반해야해며, 허가받지 않은 서비스나 경로의 요청은 추가 검증 또는 거부된다.
- 인가 응답을 전달한다는 것은 세션에 대한 신뢰 및 과금 책임을 진다는 것이며, 각 영역은 필요시 신용 한도 등으로 위험을 제한 할 수 있다.