다이어미터 (프로토콜)

'''다이어미터 프로토콜'''()은 컴퓨터 네트워크에서 사용되는 인증(authentication), 인가(authorization) 및 과금(accounting) 프로토콜이다. 다이어미터 프로토콜 보다 앞서 사용된 RADIUS 프로토콜에서 훨씬 더 유용하게 진화되었고 RADIUS 프로토콜을 대체하고 있다.
''다이어미터 애플리케이션''은 새로운 명령어나 확장 가능 인증 프로토콜(Extensible Authentication Protocol, EAP)과 함께 사용하기 위한 속성 등을 추가하여 확장할 수 있다.
다이어미터라는 이름은 이전에 사용된 RADIUS 프로토콜을 빗댄 말장난에서 유래되었다.(RADIUS를 반지름으로 생각했을 때, 다이어미터 즉 직경은 RADIUS의 두 배라는 의미) 다이어미터는 RADIUS의 이전 호환성을 뿐만 아니라 업그레이드 경로를 제공한다. RADIUS에서 지원하지 않는 다이어미터의 주요 기능은 다음과 같다.
* 신뢰성 있는 전송 프로토콜 (TCP 또는 SCTP, UDP 제외)
** 국제 인터넷 표준화 기구에서 RADIUS용 TCP 전송 규격을 만들고 있다.
* 네트워크 또는 전송 계층 보안 (IPsec or TLS)
** 국제 인터넷 표준화 기구에서 RADIUS용 전송 계층 보안 규격을 만들고 있다.
* 완벽하게 호환되지는 않지만 RADIUS에서 Diameter로의 전환을 지원
* 속성값 쌍(Attribute-value pairs, AVPS)과 식별자를 위한 대용량 주소 공간(8 비트 대신 32 비트)
* 또한, 서버에서 시작되는 몇몇 메시지의 지원을 제외한 Client–server 프로토콜
* 상태 기반 모델 및 상태 없는 모델 모두 사용가능
* 피어(peer)의 동적 검색(DNS SRV 및 NAPTR 사용)
* 지원 가능 범위 조정
* 응용 계층(Application layer) 응답 지원, 장애 처리 방법 및 상태 관리 정의 (RFC 3539)
* 오류 인지
* 더 나은 로밍 지원
* 보다 쉬운 확장; 새로운 명령과 속성이 정의될 수 있음
* 32-bit 영역에 맞춰짐
* 사용자 세션과 과금을 위한 기본적인 지원
''다이어미터 애플리케이션''은 응용 소프트웨어가 아니라 RFC 6733 (구 RFC 3588)에 정해진 다이어미터 기반 프로토콜에 근거한 프로토콜이다. 각각의 애플리케이션은 애플리케이션 구별자를 통해 정의되고 새로운 명령 부호 그리고/또는 새로운 필수 AVP를 추가할 수 있다. 새로운 선택적 AVP를 추가하는 데에 새로운 애플리케이션이 필요하지 않다.
다이어미터 애플리케이션의 예:
* 다이어미터 모바일 IPv4 애플리케이션 (모바일 IP, RFC 4004)
* 다이어미터 네트워크 접속 서버 애플리케이션 (Network Access Server Requirement, NASREQ, RFC 4005)
* 다이어미터 확장 인증 프로토콜(Extensible Authentication Protocol) 애플리케이션 (RFC 4072)
* 다이어미터 신용-제어 애플리케이션 (Diameter Credit-Control Application, DCCA, RFC 4006)
* 다이어미터 세션 개시 프로토콜 애플리케이션 (RFC 4740)
* 3GPP IP Multimedia Subsystem에서의 다양한 애플리케이션
:: HSS(Home Subscriber Server)와 SLF(Subscriber Location Function) 모두 다이어미터를 사용하여 통신한다.
(일반적인 부트스트래핑 설계): 부트스트래핑 서버 기능
다이어미터 프로토콜은 1998년 RADIUS의 한계를 극복할 수 있는 인증, 인가 및 과금(Authentication, Authorization and Accounting, AAA) 용 프래임 웍을 제공할 목적으로 팻 R. 칼호운, 글렌 존 그리고 핑팬에 의해 처음 개발되었다. RADIUS는 신뢰성, 확장성, 보완 및 유연성에 문제를 가지고 있었다. RADIUS는 원격 접속, IP 이동성과 정책 제어를 효과적으로 처리할 수 없다. 다이어미터 프로토콜은 정책, AAA 및 자원 제어를 수행하기 위해 클라이언트에 의해 사용되는 정책 프로토콜을 정의한다. 다이어미터 프로토콜은 정책, AAA 및 자원 제어를 수행하기 위해 클라이언트에 의해 사용되는 정책 프로토콜을 정의한다. 이것은 하나의 서버가 다양한 서비스를 위한 정책들의 처리가 가능하도록 했다.
RADIUS와 마찬가지로 다이어미터는 AAA 기능을 제공하지만 UDP 대신 TCP와 SCTP를 사용한다. 그러므로 통신 장애의 감지를 위한 논리 구조가 다이어미터 자체에 포함되어 있지 않다. 다이어미터 프로토콜은 3세대 파트너쉽 프로젝트(3rd Generation Partnership Project, 3GPP)의 일부인 IP Multimedia Subsystem (IMS)의 발전으로 더 강화되었다. 다이어미터 애플리케이션은 Cx, Dh, Dx, Rf, Ro와 Sh 인터페이스를 지원한다. 다이어미터 프로토콜은 확장 사용을 통해 프록시, 매개자, 강력한 보안, 모바일 IP, 네트워크 접속 서버(Network-Access Server Requirement, NASREQ), 과금 및 자원 관리를 지원할 수 있게 확장되도록 고안되었다.
다이어미터 기본 프로토콜은 RFC 6733 (오래된 버전: RFC 3588)에 정의되어 있고 AAA protocol에 대한 최소 요구사항을 정의한다. ''Diameter Applications''은 새로운 명령, 속성 또는 두 개 모두를 추가함으로써 기본 프로토콜을 확장할 수 있다. 다이어미터의 보안은 IPsec 또는 TLS 통해 이루어진다. IANA는 다이어미터에 TCP와 SCTP 포트 3868을 할당했다.
=== 패킷 형식 ===
패킷은 다이어미터 헤더와 다이어미터 메시지와 관련된 정보를 캡슐화하기 위한 다양한 개수의 속성값 쌍(Attribute-Value Pairs, or AVPs)으로 이루어져 있다.
+다이어미터 헤더
 비트 offset 
 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 '''0''' 
 버전 
 메시지 길이
 '''32''' 
 T 
   
   
   
   
 명령어 부호
 '''64''' 
 애플리케이션 ID
 '''96''' 
 hop-by-hop ID
 '''128''' 
 end-to-end ID
 '''160'''... 
 AVPs...
=== 버전 ===
이 필드는 다이어미터를 기초로한 프로토콜의 버전을 나타낸다. 2014년부터 지원되는 값은 1 하나 뿐이다.
=== 메시지 길이 ===
메시지 길이 필드는 헤더 필드와 패딩된 AVP를 포함한 다이어미터 메시지의 길이를 나타낸다.
=== 명령 부호 ===
"'''R'''" (Request) 비트 – 설정되면, 그 메시지는 요청이다. 해제되면, 그 메시지는 응답이다.
"'''P'''" (Proxiable) 비트 – 설정되면, 그 메시지는 프록시, 전달 또는 리다이렉트 될 수 있다. 해제되면, 그 메시지는 로컬로 처리되어야 한다.
"'''E'''" (Error) – 설정되면, 메시지는 프로토콜 오류를 포함하고 이 명령을 위해 설명된 ABNF를 따르지 않는다. "E" 비트 집합을 가진 메시지는 일반적으로 에러메시지로 간주된다. 이 비트는 요청 메시지에 설정되어서는 안 된다.
"'''T'''" (잠재적 재전송 메시지) 비트 – 이 플래그는 중복 요청을 제거하는데 도움을 주기 위해 연결 복구 과정 이후에 설정된다. 이것은 재전송 요청이 연결 장애 때문에 일어날 수 있는 중복 표시로써 아직 확인되지 않았을 때 설정된다.
=== 명령 ===
각각의 명령 요청/응답 쌍은 할당된 명령 부호이고, 요청 또는 응답은 헤더의 명령 플래그 필드에 'R' 비트로 구분된다.
0부터 255는 RADIUS와 호환성을 위해 남겨두었고 256부터 16777213은 IANA에서 할당한 영구적 표준 명령어에 쓰인다.
16777214와 16777215 (16진수 0xFFFFFE and 0xFFFFFF)는 실험과 시험 목적으로 남겨두었다.
명령 부호는 특정 메시지에 취해질 행동을 결정하는데 사용된다. 기본 프로토콜에서 정해진 몇몇 공통된 다이어미터 명령은 아래와 같다 :
Command-Name
Abbr.
Code
 AA-Request
AAR
265
 AA-Answer
AAA
265
 Diameter-EAP-Request
DER
268
 Diameter-EAP-Answer
DEA
268
 Abort-Session-Request
ASR
274
 Abort-Session-Answer
ASA
274
 Accounting-Request
ACR
271
 Accounting-Answer
ACA
271
 Credit-Control-Request
CCR
272
 Credit-Control-Answer
CCA
272
 Capabilities-Exchange-Request
CER
257
 Capabilities-Exchange-Answer
CEA
257
 Device-Watchdog-Request
DWR
280
 Device-Watchdog-Answer
DWA
280
 Disconnect-Peer-Request
DPR
282
 Disconnect-Peer-Answer
DPA
282
 Re-Auth-Request
RAR
258
 Re-Auth-Answer
RAA
258
 Session-Termination-Request
STR
275
 Session-Termination-Answer
STA
275
 User-Authorization-Request
UAR
300
 User-Authorization-Answer
UAA
300
 Server-Assignment-Request
SAR
301
 Server-Assignment-Answer
SAA
301
 Location-Info-Request
LIR
302
 Location-Info-Answer
LIA
302
 Multimedia-Auth-Request
MAR
303
 Multimedia-Auth-Answer
MAA
303
 Registration-Termination-Request
RTR
304
 Registration-Termination-Answer
RTA
304
 Push-Profile-Request
PPR
305
 Push-Profile-Answer
PPA
305
 User-Data-Request
UDR
306
 User-Data-Answer
UDA
306
 Profile-Update-Request
PUR
307
 Profile-Update-Answer
PUA
307
 Subscribe-Notifications-Request
SNR
308
 Subscribe-Notifications-Answer
SNA
308
 Push-Notification-Request
PNR
309
 Push-Notification-Answer
PNA
309
 Bootstrapping-Info-Request
BIR
310
 Bootstrapping-Info-Answer
BIA
310
 Message-Process-Request
MPR
311
 Message-Process-Answer
MPA
311
 Update-Location-Request
ULR
316
 Update-Location-Answer
ULA
316
 Authentication-Information-Request
AIR
318
 Authentication-Information-Answer
AIA
318
 Notify-Request
NR
323
 Notify-Answer
NA
323
=== 애플리케이션-ID ===
애플리케이션-ID는 메시지가 어떤 다이어미터 애플리케이션에 적용가능한지 구별하는데 사용된다. 그 애플리케이션은 인증 애플리케이션이 될 수도 있고 과금 또는 벤더 특화 애플리케이션이 될 수도 있다.
어떤 다이어미터 확장을 따르는 다이어미터 에이전트는 Capabilities-Exchange-Request (CER)와 Capabilities-Exchange-Answer (CEA) 명령의 Auth-Application-Id Attribute에 특정값을 포함함으로써 지원을 공식화한다.
헤더 안에 있는 애플리케이션-ID의 값은 관련된 애플리케이션-ID APV와 같다. 예를 들어, 다이어미터 신용-제어 애플리케이션 용 Credit-Control-Request (CCR) 와 Credit-Control-Answer (CCA) 명령의 애플리케이션-ID 값와 인증-애플리케이션-ID 속성값은 4이다.
=== Hop-by-Hop 식별자 ===
요청에 대한 응답에 존재하는 Hop-by-Hop 식별자는 같은 값이어야 하기 때문에 이 식별자는 응답과 요청을 일치시키는데 사용되며 부호가 없는 32-비트 정수 필드로 구성된다.(네크워크 바이트 순서)
다이어미터 프로토콜은 장애 조치를 위해 사용되는 트랜잭션 상태를 릴레이와 프록시 에이전트가 유지할 것을 요구한다. 트랜잭션 상태는 요청을 전달할 때, 그 Hop-by-Hop 식별자가 저장된다는 의미를 내포하고 있다; 필드는 대응하는 응답을 수신 할 때 원래의 값으로 복원되는 로컬 고유 식별자로 대체된다. 요청 상태는 응답의 수신시에 해제된다. 수신된 응답이 알고있는 Hop-by-Hop 식별자와 일치하지 않을 때 다이어미터 에이전트는 이 응답을 무시한다.
리다이렉팅 에이전트의 경우에 Hop-by-Hop 식별자는 다이어미터 에이전트가 응답 메시지로 반응을 하기 때문에 헤더에서 관리된다.
=== End-to-End 식별자 ===
End-to-End 식별자는 Origin-Host AVP 조합과 함께 중복된 메시지를 감지하는데 사용되는 부호없는 32-bit 정수 필드이다.(네트워크 바이트 순서)
요청을 생성했을 때, End-to-End 식별자는 로컬 고유 식별자로 설정된다. End-to-End 식별자는 어떤 종류의 다이어미터 에이전트도 수정할 수 없고, 대응하는 요청에 있는 같은 값이 응답에 사용된다.
=== 속성값 쌍 (Attribute-Value Pairs AVP) ===
+AVP 헤더
 비트 offset 
 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 '''0''' 
 AVP 부호
P
 
 
 
 
 
 AVP 길이
 '''64''' 
 벤더 ID (추가)
 '''96'''... 
 데이터...
단순하게, "'''V'''" 비트는 벤더 특정을 의미; "'''M'''" 비트는 '''필수적을 '''의미; "'''P'''" 비트는 '''보호됨을 '''의미.
벤더-특정 비트로 알려진 "'''V'''" 비트는, AVP 헤더에 추가적으로 벤더-ID 필드가 존재하는 지를 나타낸다. 설정 시에 AVP 코드는 특정 벤더 코드 주소 공간에 속하게 된다.
필수 비트로 알려진 "'''M'''" 비트는 AVP의 지원이 필요한지를 나타낸다. "'''M'''" 비트 집합을 가진 AVP가 다이어미터 클라이언트, 서버, 프록시 또는 트랜슬래이션 에이전트에 의해 수신되고 AVP 또는 그 값을 알 수 없다면, 그 메시지는 거부되어야 한다. 다이어미터 릴레이와 리다이렉트 에이전트는 알 수 없는 AVP를 가진 메시지를 거부하지 말아야 한다.
"'''P'''" 비트는 end-to-end 보안에 암호화가 필요한 지를 나타낸다.
Attribute-Name
Code
Data Type
 Acct-Interim-Interval
85
Unsigned32
 Accounting-Realtime-Required
483
Enumerated
 Acct-Multi-Session-Id
50
UTF8String
 Accounting-Record-Number
485
Unsigned32
 Accounting-Record-Type
480
Enumerated
 Accounting-Session-Id
44
OctetString
 Accounting-Sub-Session-Id
287
Unsigned64
 Acct-Application-Id
259
Unsigned32
 Auth-Application-Id
258
Unsigned32
 Auth-Request-Type
274
Enumerated
 Authorization-Lifetime
291
Unsigned32
 Auth-Grace-Period
276
Unsigned32
 Auth-Session-State
277
Enumerated
 Re-Auth-Request-Type
285
Enumerated
 Class
25
OctetString
 Destination-Host
293
DiamIdent
 Destination-Realm
283
DiamIdent
 Disconnect-Cause
273
Enumerated
 E2E-Sequence
300
Grouped
 Error-Message
281
UTF8String
 Error-Reporting-Host
294
DiamIdent
 Event-Timestamp
55
Time
 Experimental-Result
297
Grouped
 Experimental-Result-Code
298
Unsigned32
 Failed-AVP
279
Grouped
 Firmware-Revision
267
Unsigned32
 Host-IP-Address
257
Address
 Inband-Security-Id
299
Unsigned32
 Multi-Round-Time-Out
272
Unsigned32
 Origin-Host
264
DiamIdent
 Origin-Realm
296
DiamIdent
 Origin-State-Id
278
Unsigned32
 Product-Name
269
UTF8String
 Proxy-Host
280
DiamIdent
 Proxy-Info
284
Grouped
 Proxy-State
33
OctetString
 Redirect-Host
292
DiamURI
 Redirect-Host-Usage
261
Enumerated
 Redirect-Max-Cache-Time
262
Unsigned32
 Result-Code
268
Unsigned32
 Route-Record
282
DiamIdent
 Session-Id
263
UTF8String
 Session-Timeout
27
Unsigned32
 Session-Binding
270
Unsigned32
 Session-Server-Failover
271
Enumerated
 Supported-Vendor-Id
265
Unsigned32
 Termination-Cause
295
Enumerated
 User-Name
1
UTF8String
 Vendor-Id
266
Unsigned32
 Vendor-Specific-Application-Id
260
Grouped
=== 상태 관리 ===
RFC 3588은 피어(peer)와 처리중인 메시지 사이에 연결을 유지하기 위한 핵심 상태 관리를 정의한다. 이것은 기본적인 프로토콜 기능 중에 일부분이고 모든 스택은 이것과 그러한 연결 관련 동작 개념을 지원해야 한다.
파일:RFC3588_peer_state_machine_1.png|Peer State Machine Part 1
파일:RFC3588_peer_state_machine_2.png|Peer State Machine Part 2
추가적으로, 애플리케이션 특정 상태 관리는 이후 또는 더 높은 추상 계층에서 소계될 수 있다. RFC 3588은 인증 및 과금 상태 관리를 정의한다.
파일:RFC3588_auth_state_machine_client.png|Diameter Authorization State Machines (Client)
파일:RFC3588_auth_state_machine_server.png|Diameter Authorization State Machines (Server)
파일:RFC3588_acct_state_machine_client.png|Diameter Accounting State Machines (Client)
파일:RFC3588_acct_state_machine_server.png|Diameter Accounting State Machines (Server)
=== 메시지 흐름 ===
두 다이어미터 피어(peer) 간의 통신은 전송 연결(transport connection)이 이루어지면서 시작된다(TCP 또는 SCTP
이후 애플리케이션 메시지 교환을 위한 연결은 준비 완료된다.
이정 시간동안 메시지 교환이 없다면 둘 중에 한 쪽에서 Device-Watchdog-Request (DWR)을 보낼 수 있고 다른 쪽은 Device-Watchdog-Answer로 응답해야한다.
둘 중 한쪽에서 다른 쪽에서 Disconnect-Peer-Answer로 응답해야하는 Disconnect-Peer-Request (DPR)을 보내 통신을 종료할 수 있다. 이후 전송 연결은 종료된다.
가운데
다이어미터 프로토콜은 현재 아래의 IETF RFC에서 정의하고 있다: 오래된 RFC들은 취소선으로 표시되었다.
 #  
 제목 
 발행일 
 관련 문서 
 오래된 버전 
 비고
 RFC 3588 
 Diameter Base Protocol. 
 September 2003 
 
 RFC 6733
 RFC 3589
 Diameter Command Codes for Third Generation Partnership Project (3GPP) Release 5. 
 September 2003 
  
  
 RFC 4004
 Diameter Mobile IPv4 Application. 
 August 2005 
 
 
 RFC 4005 
 Diameter Network Access Server Application. 
 August 2005 
 
 RFC 7155
 RFC 4006
 Diameter Credit-Control Application. 
 August 2005 
 Diameter Credit-Control Application
 
 RFC 4072
 Diameter Extensible Authentication Protocol (EAP) Application. 
 August 2005 
 
 
 RFC 4740
 Diameter Session Initiation Protocol (SIP) Application. M. 
 November 2006 
 
 
 RFC 5224
 Diameter Policy Processing Application. 
 March 2008 
 
 
 RFC 5431
 Diameter ITU-T Rw Policy Enforcement Interface Application. 
 March 2009 
 
 
 RFC 5447
 Diameter Mobile IPv6: Support for Network Access Server to Diameter Server Interaction. 
 February 2009 
 
 
 RFC 5516
 Diameter Command Code Registration for the Third Generation Partnership Project (3GPP) Evolved Packet System (EPS). 
 April 2009 
 
 
 RFC 5624
 Quality of Service Parameters for Usage with Diameter. 
 August 2009 
 
 
 RFC 6733
 Diameter Base Protocol. 
 October 2012 
 
 
 RFC 6737
 The Diameter Capabilities Update Application. 
 October 2012 
 
 
 RFC 7155
 Diameter Network Access Server Application. 
 April 2014 
 
 
* List of authentication protocols
* Host Identity Protocol (HIP)
*  Introduction to Diameter - Get the next generation AAA protocol
*  Cisco page outlining differences between RADIUS and DIAMETER
*  Diameter: next generation’s AAA protocol Paper about Diameter by Håkan Ventura
*  The Open IMS Core JavaDiameterPeer The Open IMS Core JavaDiameterPeer
*  freeDiameter, open-source implementation of Diameter Base Protocol and Extensions
*  go-diameter, open-source implementation of Diameter Base Protocol for the Go programming language
*  Reference page listing vendors of Diameter Gateways, Diameter Signaling Controllers and Diameter Stacks
분류:인터넷 표준
분류:인터넷 프로토콜
분류:컴퓨터 접근 제어 프로토콜
분류:인증 프로토콜