摘要
- RFC 5277 允许服务器在请求起点早于现存日志时,从仍可取得的最早通知开始回放。因此,
replayComplete可以为真,而请求窗口的开头依然永久缺失。 - “完整”只覆盖该会话实际可见的交集:日志留存、通知流成员、过滤条件和访问控制。订阅获准、消息送达、时钟可信、客户端落盘与业务状态都要另立凭证。
先写出那个没有被回放的区间
RFC 5277 没有要求服务器制造已经老化出日志的通知。若客户端要求的 startTime 早于日志能够支持的时间,服务器从现存最早的通知开始。它发送所有适用于这次订阅的历史通知,然后发出不能被过滤掉的 replayComplete。
这套行为不是异常,而是标准明确容许的结果。错误发生在报告层:操作平台只保存“回放完成”,没有保存“请求从何时开始、实际从何时开始”。一个本来边界清楚的协议断言,被抬升为对整段历史的断言。
管理者首先要问的不是绿灯是否可信,而是绿灯关闭了哪个集合。最少要把请求起点、有效起点、结束点和缺失区间放进同一条收据。缺口不是脚注,也不是失败后才补写的解释;它本身就是调查结果。
RFC 8639 后来更新了订阅通知框架,RFC 8641 则把 RFC 5277 的通知管理模式转换为 YANG。这里讨论的是 RFC 5277 的回放边界,并不把 2008 年的模型描述成今天唯一的通知架构。
日志年龄不是日志生日
回放是可选能力,依赖服务器保留通知。RFC 5277 把保存多少、保存多久交给实现。服务器可以公布 replayLogCreationTime 与 replayLogAgedTime,但这两个时间不能被随意解释。
尤其容易误读的是 replayLogCreationTime。标准指出,日志创建时间可能早于当前仍可取得的最早通知。日志容器可以一直存在,内容却持续滚动老化。因此,“这个日志三个月前创建”不能推出“三个月历史仍在”。
更可靠的证据模型会保存日志代次或重置标识、创建时间、老化边界、实际第一条事件以及留存策略版本。只要实际起点晚于请求起点,系统就应把差值显示为未覆盖,而不是用一次成功状态把它归零。
通知流本来就是现实的投影
RFC 5277 把事件流定义为满足转发条件的一组通知。默认 NETCONF 流包含服务器支持的 NETCONF XML 事件通知;它不是设备内部发生过的一切。非默认来源怎样配置、内部变化怎样变成通知,都不由该标准包办。
这意味着“流中没有这条通知”与“系统中没有发生这件事”是两种不同判断。只有另一个可审计契约能证明某类状态变化必定生成通知、必定进入指定流,前者才有资格支撑后者。
在长期调查中,流定义还会变化。一次软件升级、功能开关或厂商策略调整,可能改变哪些事件属于流,而流名保持不变。收据若只有流名,没有定义版本,就把两个不同的观察面伪装成同一个来源。
过滤与权限塑造每个会话自己的过去
客户端创建订阅时可以提交过滤器。通知元素生成后,服务器还会依据会话的访问权限决定是否交付;无权查看的通知会被丢弃。因此,同一时间段、同一设备上的两个合法会话,可能得到两份不同且都合规的回放。
replayComplete 只结束该会话可见的那一份过去。它不能证明过滤器排除的事件不存在,也不能证明权限策略隐藏的事件不存在。审计材料应保留过滤器原文、认证身份、授权策略代次,以及条件允许时过滤前、过滤后、授权后的计数。
如果调查期间权限改变,再次回放可能出现新事件或少事件。这不一定是日志篡改;它可能只是观察者的权限面改变。没有策略版本,两个合法结果会被错误解释为源系统自相矛盾。
接受订阅不等于收到每条通知
服务器以肯定 RPC 回复接受 create-subscription,只说明请求被建立。之后的通知是单向消息,RFC 5277 没有为每条通知定义确认响应。能力声明也只证明机制受支持,不证明某个业务事件生成了通知,更不证明它穿过网络并被客户端持久保存。
会话中断、缓冲区溢出、解析失败、队列拒绝和落盘失败都位于接受之后。服务器可以正确发送回放及标记,而接收端仍丢失中间一段。因此,端到端结论需要客户端检查点、事件标识或序列证据,以及持久化结果。
标准还区分 replayComplete 与 notificationComplete。前者标记历史回放部分结束;后者在指定 stopTime 的订阅到点终止时出现。把两个标记都翻译成笼统的“完成”,会失去它们各自关闭的边界。
从回放切到实时是一处需要核对的接缝
没有停止时间的回放订阅会先结束历史部分,再交付自订阅建立以来产生的通知,随后进入自然实时流。replayComplete 帮助客户端定位这次切换,却不自动证明接缝处无丢失、无重复、无重排。
需要连续性的系统,应保存生产者代次、可用的序列或事件标识、服务器发送时间、客户端接收时间和持久化时间。eventTime 只是事件源生成事件的时间;它不是网络到达时间,也不证明源时钟同步。按它排出的漂亮时间线,仍可能建立在漂移时钟之上。
一张不会夸大结论的回放收据
对高后果调查,收据至少应包含:
- 服务器、NETCONF 会话与认证身份;
- 能力声明、流发现响应、流名及定义版本;
- 请求的开始和停止时间;
- 日志创建时间、老化边界、代次或重置标识;
- 实际观察到的第一条与最后一条历史通知;
- 过滤器原文和授权策略代次;
- 订阅 RPC 结果、服务器侧订阅标识;
replayComplete、notificationComplete及客户端接收时间;- 回放到实时的接缝、已知重复和缺口;
- 源
eventTime、发送、接收、解析与落盘结果; - 用来核验通知结论的权威状态或最终业务结果。
准确的结论应写成:“在 B 到 C 之间,对该流、过滤条件和授权会话可见且仍被保留的通知已经回放完毕。”删掉这些限定,不是让语言更简洁,而是改变了证据所能承受的含义。
Sources
- https://www.rfc-editor.org/rfc/rfc5277.html
- https://www.rfc-editor.org/rfc/rfc5277.txt
- https://www.rfc-editor.org/info/rfc5277/
- https://datatracker.ietf.org/doc/rfc5277/
- https://datatracker.ietf.org/doc/rfc5277/history/
- https://datatracker.ietf.org/doc/rfc5277/references/
- https://datatracker.ietf.org/doc/rfc5277/referencedby/
- https://www.rfc-editor.org/errata/rfc5277
- https://www.rfc-editor.org/rfc/rfc8639.html
- https://www.rfc-editor.org/rfc/rfc8641.html
- https://www.rfc-editor.org/rfc/rfc6470.html
- https://www.rfc-editor.org/rfc/rfc6241.html
- https://www.rfc-editor.org/rfc/rfc8341.html
- https://www.rfc-editor.org/rfc/rfc8342.html
- https://www.rfc-editor.org/rfc/rfc3339.html
- https://www.rfc-editor.org/rfc/rfc7950.html
- https://www.rfc-editor.org/rfc/rfc8640.html
- https://heng.lu/on-reality-layers-symbolic-power-and-why-clarity-feels-so-hostile/
- https://heng.lu/running-code-primary-the-patch-needed-to-preserve-the-internet-original-design/
- https://heng.lu/on-the-agency-problem-at-the-core-of-internet-governance/
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
