摘要
- XDR 没有要求机器采用相同的内存布局,而是要求它们在边界上生成同一种大端、四字节倍数的外部表示。
- 可变数据先写长度,再写值,最后用零填充到边界;填充属于合法编码,却不属于值本身。
- 结构声明和联合判别值决定解析路径,但消息分帧、身份、安全与应用决策仍由其他层负责。
三个零,不能少,也不能算进去
RFC 4506 的完整示例先编码一个九字节文件名:四字节长度、九个名称字节,随后三个零,下一字段才开始。名称长度仍是九,不是十二。那三个零既不表达字符,也不能拿来夹带别的内容。
它们必须为零。若编码器把本机内存残留塞进空位,同一个值会因机器而得到不同字节串。解码后或许仍是同一个名称,但逐字节比较、缓存键或校验和已经分叉。XDR 把“空白也要确定”写进规范,正是为了让等值数据拥有等值表示。
这条小规则揭示了真正的互操作边界:机器内部可以各行其是,公开到边界外的形式必须服从共同契约。
外部形式不复制本机内存
1987 年的 RFC 1014 把 XDR 描述为异构计算机之间的数据描述与编码标准,并列出 Sun RPC 与 NFS 的使用。它的语言近似 C,是为了精确表达复杂类型;它不是程序,也不是把某台机器的结构体内存原封不动搬上网络。
XDR 有符号整数固定为 32 位二进制补码,最高有效字节在前。数组按自然顺序编码,结构按声明顺序编码。小端机器可以继续在内部使用小端,大端机器也不用改变内部实现;两者只有在编码和解码边界承担转换义务。
格式里没有“本对象使用哪种字节序”的前置开关。XDR 只选一种。这样做对某些架构并不平均,却省掉了更高层的协商;一个写入介质的 XDR 对象离开原会话后,仍不需要找回当时的字节序选择。
四字节单元同样是公开取舍。更小的单元节省部分空间,却照顾不了更多机器的对齐;更大的单元更易对齐,却扩大所有编码。四是效率与体积之间的折中,不是自然界替互联网作出的决定。
长度说明值在哪里结束
可变 opaque 数据先写一个 32 位无符号长度,再写恰好那么多任意字节,最后补零到四字节边界。字符串采用同一种计数结构;可变数组先写元素个数,再逐个编码。
接收方因而得到可验证的证据:长度是否超过协议声明上限,剩余记录是否足够,下一字段应从哪里开始。若规范声明了最大值,超长编码就是错误。若省略上限,也不意味着接收方必须按语言理论最大值分配资源;本地缓冲、递归和工作量限制仍由实际运行者掌握。
计数字符串也不等于本地语言的字符串。XDR 值里可以出现 NUL,而一些本地库把 NUL 当终止符。若分配按计数、比较或释放却按终止符,两个长度观念就会在同一对象上冲突。标准化外部字节不能替代安全的本地类型转换。
判别值只准一条分支出现
XDR 是隐式类型格式:普通字段不会把名称与通用类型标签反复写进数据。双方必须事先共享声明。因此,结构字段顺序就是协议的一部分;把两个字段互换,后续字节即使语法上像整数,也可能已经被赋予错误含义。
判别联合把分支选择显式化。编码先放整数、枚举或布尔判别值,再放其选择的那一支。若声明没有默认支,未列出的判别值就没有合法编码。可选数据是最简例子:真值后跟元素,假值选择占零字节的 void。缺席由判别值声明,不靠观察空载荷猜测。
判别值的权力到此为止。它能选择结构分支,不能认证发送者、批准远程操作,也不能证明分支内容符合现实。
能表示一个值,不等于能划出一条消息
1995 年的 RFC 1832 把已部署的 XDR 写成标准轨规范。2006 年 RFC 4506 成为 STD 67,并明确不改变 RFC 1832 的技术编码;它补强的是 IANA、引用与安全说明。后来文本要求实现者重视长度、缓冲、嵌入 NUL、应用字符规则与递归耗尽,说明“规范形式”从未等于“安全实现”。
RFC 5531 把层次分得更清楚:ONC RPC 消息用 XDR 描述,但 RPC 走 TCP 时另有记录标记,片段头还被明确说明不属于 XDR 标准形式。于是,成功解出一个 XDR 值,并不能证明任意 TCP 流里的消息边界、所属调用或操作是否提交。
XDR 也不提供加密、鉴权、授权、完整性或防重放。它让某些语法断言可被本地检查;传输协议与应用仍要对剩余权力负责。
来源与结论边界
闭集来源为 RFC 1014、RFC 1832、RFC 4506 与 RFC 5531。它们证明编码、修订延续与 RPC 分层,不统计今天的部署量,不证明某产品合规,也不把格式正确提升为身份可信或动作获准。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
