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 规则,例如保护访问设备所有者的基础设施。