跳到主要内容

4.3.1. Common Derived AVP Data Formats

以下是常用的派生 AVP 数据格式.

Address​

Address 格式派生自 OctetString 基本 AVP 格式.它是一个有区别的联合体,例如,表示 32 位 (IPv4) [RFC0791] 或 128 位 (IPv6) [RFC4291] 地址,最高有效八位字节在前.Address AVP 的前两个八位字节表示 AddressType,其中包含 [IANAADFAM] 中定义的地址族 (Address Family).AddressType 用于区分剩余八位字节的内容和格式.

Time​

Time 格式派生自 OctetString 基本 AVP 格式.字符串必须 (MUST) 包含四个八位字节,格式与 NTP 时间戳格式中的前四个字节相同.NTP 时间戳格式在 [RFC5905] 的第 3 节中定义.

这表示自 1900 年 1 月 1 日 0 时起相对于协调世界时 (UTC) 的秒数.

在 2036 年 2 月 7 日 6 时 28 分 16 秒 UTC 时,时间值将溢出.简单网络时间协议 (SNTP) [RFC5905] 描述了将时间延长到 2104 年的过程.所有 Diameter 节点必须 (MUST) 支持此过程.

UTF8String​

UTF8String 格式派生自 OctetString 基本 AVP 格式.这是一个人类可读的字符串,使用 ISO/IEC IS 10646-1 字符集表示,使用 UTF-8 转换格式 [RFC3629] 编码为 OctetString.

由于 10646 标准不时通过修正案添加额外的代码点,因此实现必须 (MUST) 准备好遇到从 0x00000001 到 0x7fffffff 的任何代码点.不对应于将代码点有效编码为 UTF-8 字符集的字节序列或超出此范围的字节序列是被禁止的.

应当 (SHOULD) 避免使用控制代码.当需要表示换行时,应当 (SHOULD) 使用控制代码序列 CR LF.

应当 (SHOULD) 避免使用前导或尾随空格.

对于用户界面硬件或软件不直接支持的代码点,可以 (MAY) 提供替代的输入和显示方式,例如十六进制.

对于以 7 位 US-ASCII 编码的信息,UTF-8 字符集与 US-ASCII 字符集相同.

UTF-8 可能需要多个字节来表示单个字符/代码点;因此,UTF8String 的八位字节长度可能与编码的字符数不同.

请注意,UTF8String 的 AVP Length 字段以八位字节而非字符来衡量.

DiameterIdentity​

DiameterIdentity 格式派生自 OctetString 基本 AVP 格式.

DiameterIdentity  = FQDN/Realm

DiameterIdentity 值用于唯一标识:

  • 用于重复连接和路由环路检测目的的 Diameter 节点.

  • 用于确定消息是否可以在本地满足或是否必须路由或重定向的 Realm.

当 DiameterIdentity 值用于标识 Diameter 节点时,字符串的内容必须 (MUST) 是 Diameter 节点的完全限定域名 (FQDN).如果多个 Diameter 节点在同一主机上运行,则每个 Diameter 节点必须 (MUST) 分配唯一的 DiameterIdentity.如果一个 Diameter 节点可以由多个 FQDN 标识,则应在启动时选择单个 FQDN 并将其用作该节点的唯一 DiameterIdentity,无论在哪个连接上发送.在本文档中,请注意 DiameterIdentity 采用 ASCII 形式,以便与现有 DNS 基础设施兼容.有关 Diameter 协议与国际化域名 (IDN) 之间的交互,请参见附录 D.

DiameterURI​

DiameterURI 必须 (MUST) 遵循统一资源标识符 (RFC3986) 语法 [RFC3986] 中指定的以下规则:

"aaa://" FQDN [ port ] [ transport ] [ protocol ]
; 无传输安全

"aaas://" FQDN [ port ] [ transport ] [ protocol ]
; 使用传输安全

FQDN = < 完全限定域名 >

port = ":" 1*DIGIT
; 用于侦听传入连接的端口之一.
; 如果不存在,则如果未使用传输安全,
; 则假定为默认 Diameter 端口 (3868),
; 当使用传输安全 (TLS/TCP 和 DTLS/SCTP)
; 时为端口 5658.

transport = ";transport=" transport-protocol
; 用于侦听传入连接的传输之一.
; 如果不存在,则假定默认协议为 TCP.
; 当 aaa-protocol 字段设置为 diameter 时,
; 不得使用 UDP.

transport-protocol = ( "tcp" / "sctp" / "udp" )

protocol = ";protocol=" aaa-protocol
; 如果不存在,则默认 AAA 协议为 Diameter.

aaa-protocol = ( "diameter" / "radius" / "tacacs+" )

以下是有效 Diameter 主机标识的示例:

aaa://host.example.com;transport=tcp
aaa://host.example.com:6666;transport=tcp
aaa://host.example.com;protocol=diameter
aaa://host.example.com:6666;protocol=diameter
aaa://host.example.com:6666;transport=tcp;protocol=diameter
aaa://host.example.com:1813;transport=udp;protocol=radius

Enumerated​

Enumerated 格式派生自 Integer32 基本 AVP 格式.定义包含有效值及其解释的列表,并在引入 AVP 的 Diameter 应用中进行描述.

IPFilterRule​

IPFilterRule 格式派生自 OctetString 基本 AVP 格式并使用 ASCII 字符集.规则语法是 FreeBSD 的 ipfw(8) 的修改子集.数据包可以基于与之关联的以下信息进行过滤:

Direction                          (入或出)
Source and destination IP address (可能被掩码)
Protocol
Source and destination port (列表或范围)
TCP flags
IP fragment flag
IP options
ICMP types

相应方向的规则按顺序评估,第一个匹配的规则终止评估.每个数据包评估一次.如果没有规则匹配,如果最后评估的规则是 permit,则丢弃数据包,如果最后规则是 deny,则通过数据包.

IPFilterRule 过滤器必须 (MUST) 遵循以下格式:

action dir proto from src to dst [options]

action       permit - 允许匹配规则的数据包.
             deny   - 丢弃匹配规则的数据包.

dir          "in" 来自终端,"out" 到终端.

proto        由数字指定的 IP 协议."ip" 关键字表示
             任何协议都将匹配.

src and dst  <address/mask> [ports]

             <address/mask> 可以指定为:
             ipno       点分四组或规范 IPv6 形式的 IPv4
                        或 IPv6 号码.只有这个确切的 IP
                        号码将匹配规则.

             ipno/bits  如上所述的 IP 号码,带有形式为
                        192.0.2.10/24 的掩码宽度.在这种
                        情况下,从 192.0.2.0 到 192.0.2.255
                        的所有 IP 号码都将匹配.位宽度
                        必须对 IP 版本有效,并且 IP 号码
                        不得在掩码之外设置位.要发生匹配,
                        数据包中必须存在与描述 IP 地址时
                        使用的相同 IP 版本.要测试特定
                        IP 版本,可以将位部分设置为零.
                        关键字 "any" 是 0.0.0.0/0 或
                        IPv6 等效项.关键字 "assigned"
                        是分配给终端的地址或地址集.
                        对于 IPv4,典型的第一个规则通常
                        是 "deny in ip! assigned".

             可以通过在地址前加上 not 修饰符 (!)
             来反转匹配的意义,从而使所有其他地址
             匹配.这不会影响端口号的选择.

             对于 TCP、UDP 和 SCTP 协议,可以指定
             可选端口为:

                {port/port-port}[,ports[,...]]

              '-' 表示法指定端口范围 (包括边界).

             具有非零偏移量的分段数据包 (即,不是
             第一个分段) 将永远不会匹配具有一个或
             多个端口规范的规则.有关匹配分段数据包
             的详细信息,请参见 frag 选项.

options:
   frag    如果数据包是分段并且这不是数据报的
           第一个分段,则匹配.frag 不能与
           tcpflags 或 TCP/UDP 端口规范结合使用.

   ipoptions spec
           如果 IP 头部包含 spec 中指定的逗号
           分隔的选项列表,则匹配.支持的 IP
           选项包括:

           ssrr (严格源路由), lsrr (宽松源路由),
           rr (记录数据包路由), 和 ts (时间戳).
           可以用 '!' 表示缺少特定选项.

   tcpoptions spec
           如果 TCP 头部包含 spec 中指定的逗号
           分隔的选项列表,则匹配.支持的 TCP
           选项包括:

           mss (最大段大小), window (tcp 窗口
           广告), sack (选择性确认), ts (rfc1323
           时间戳), 和 cc (rfc1644 t/tcp 连接
           计数).可以用 '!' 表示缺少特定选项.

   established
           仅限 TCP 数据包.匹配设置了 RST 或
           ACK 位的数据包.

   setup   仅限 TCP 数据包.匹配设置了 SYN 位
           但没有 ACK 位的数据包.

   tcpflags spec
           仅限 TCP 数据包.如果 TCP 头部包含
           spec 中指定的逗号分隔的标志列表,
           则匹配.支持的 TCP 标志包括:

           fin, syn, rst, psh, ack, 和 urg.
           可以用 '!' 表示缺少特定标志.包含
           tcpflags 规范的规则永远不能匹配具有
           非零偏移量的分段数据包.有关匹配分段
           数据包的详细信息,请参见 frag 选项.

   icmptypes types
           仅限 ICMP 数据包.如果 ICMP 类型在
           types 列表中,则匹配.该列表可以指定
           为范围或单个类型的任意组合,用逗号
           分隔.可以使用数值和下面列出的符号值.
           支持的 ICMP 类型包括:

           echo reply (0), destination unreachable (3),
           source quench (4), redirect (5), echo request
           (8), router advertisement (9), router
           solicitation (10), time-to-live exceeded (11), IP
           header bad (12), timestamp request (13),
           timestamp reply (14), information request (15),
           information reply (16), address mask request (17),
           和 address mask reply (18).

有一种数据包是访问设备必须 (MUST) 始终丢弃的,那就是分段偏移量为 1 的 IP 分段.这是一个有效的数据包,但它只有一个用途,即试图规避防火墙.

无法解释或应用 deny 规则的访问设备必须 (MUST) 终止会话.无法解释或应用 permit 规则的访问设备可以 (MAY) 应用更严格的规则.访问设备可以 (MAY) 在提供的规则之前应用自己的 deny 规则,例如保护访问设备所有者的基础设施.