摘要
- RFC 938 规定:若
DATA包的序号处于确认窗口内、但目的端口未知,IRTP 接收方发送带有当前rcv_nxt的PORT NAK,并丢弃该数据。 - 该响应确认的是截至该序号边界的接收进展,拒绝的是端口号。它不能证明应用读到、解析、授权、保存或完成了这份负载。
今天,人们常把“已送达”当作一个无须拆解的结果。它可以出现在网络监控、产品日志、客服工单和事后报告中,仿佛一个词已经覆盖了数据包到达、服务接收、请求校验、权限判定和业务完成。1985 年的 RFC 938 却留下了一个很小、很克制的反例:PORT NAK。它让接收方承认包序列的接收,同时明确否认本地端口的归属。
这份 Internet Reliable Transaction Protocol 文档是实验性/提议性规范,RFC 信息页 清楚标明了这一点。因此,本文不能把规范写成部署史、流量史或成功率报告。它证明的是一项设计主张:一个共同的协议状态可以精确记录自己观察到的事实,却不替本地进程承担接收的责任。
IRTP 位于 IP 之上。RFC 791 说明,IP 的 Protocol 字段用于标识下一层协议;IANA 的 Internet Protocol Numbers 注册表 目前将编号 28 列为 IRTP,并引用 RFC 938。这是命名空间协调证据,不是某个系统安装、运行或仍在使用的证据。
八个八位组里放着两道问题
IRTP 的包头仅八个八位组,包含包类型、端口号、序号、长度和校验和。规范定义五种类型:SYNCH、SYNCH ACK、DATA、DATA ACK 和 PORT NAK。简短不等于含义单一。序号属于两个主机之间的可靠接收状态;端口则指向应当处理数据的上层协议或本地进程。
一个进程可以认领多个端口,但同一个端口号只能由一个进程认领。更关键的是,IRTP 的连接关系按远端 Internet 地址建立,是主机对主机的关系,而不是每一对“主机加端口”各有一条连接。模块的连接表保存 snd_nxt、rcv_nxt、snd_una 等变量;SYNCH 与 SYNCH ACK 用于建立或重新同步这份主机对主机的状态。
所以,端口不是可靠连接本身的名字。它是在一个已经存在的主机间状态中,数据试图寻找本地接收者时才出现的分派问题。把“序列进展”与“端口有人认领”写成同一个成功状态,正是 RFC 938 避开的偷换。
先判断序列,后查询端口
接收过程的顺序尤其重要。收到 DATA 包后,IRTP 模块先判断该包的序号是否落入确认窗口。对于落入窗口的包,它重新计算 rcv_nxt,然后才判定端口是否已知。
若端口已知,规范允许接收方在发送 DATA ACK 后把数据排入用户进程队列。若端口未知,则发送 PORT NAK,并丢弃数据。在这两类回应中,序号字段都带有当前的 rcv_nxt。同一份回应因此可以包含两项边界清晰的事实:主机间的接收累计到了哪里;本地端口查询的结果是什么。
RFC 938 并未把这件事留给读者猜测。它说,PORT NAK 确认接收到序号字段所列号码之前的所有包号;它 NAK 的是端口号,“不是包号”。这不是要求对端重发当前序号,也不是向某个应用授予处理该负载的资格。数据已经在分派边界被丢弃。
这句话允许我们作出一种有限却可靠的解释:接收模块可以报告连续接收的进度,却不承诺那个本地服务存在。它不能让“传输层看见了这个包”升级为“应用收到了这条消息”。
接收、分派与结果不是同一份证据
PORT NAK 的抓包记录最多支持两类结论。其一,IRTP 模块把传入 DATA 包视为处于相关的接收范围内,并报出了一个累计的 rcv_nxt 边界。其二,在那一刻,它不知道有进程认领了该端口。结论到此为止。
它不能证明应用读取字节、语法校验通过、远端身份可信、权限获得批准、记录被写入,或人员任务已经完成。它也不能证明服务永远不存在;端口认领是本地且可能随时间变化的状态,NAK 只记录了一次状态下的观察。
把证据拆成三层会更诚实。序号证据属于两个主机模块之间的传输关系。端口认领证据属于接收方的本地映射。若存在应用结论,它又属于另一个控制面:解析规则、身份、权限、事务与持久化各有自己的责任人。前两层都没有资格替最后一层说话。
这正契合 Heng Lu Note 64 所强调的界限:共同层可以采用最小、确定、可在本地验证的规则;后续选择仍是本地、自愿的选择。一个线上的确认可以说明该线自身的状态,却不能替未认领端口的进程作出承诺,也不能替组织决定一份负载的意义。
“可靠”没有规定一切运营策略
RFC 938 提供了校验、同步、确认和重传的框架,却没有规定唯一的计时器或重传策略。它要求实现必须有触发重传的机制,并重传 snd_una,但具体怎样计时、怎样评估性能,仍留给实现者。这是共同语法没有吞并本地操作决策的另一个例子。
该文还要求在获知远端地址时遵守两分钟静默期,并参照 RFC 793 的相关讨论。这是一项受限的设计参照;它不意味着 IRTP 就是 TCP,不意味着两者包语义相同,也不提供共同部署的证据。
因此,协议名中的 reliable 不等于应用端点必然存在,transaction 也不等于某项业务或人的事务已完成。规范所承诺的是受限的序列处理和受限的端口分派结果;它保留了两者之间的空隙。
让审计记录保留这条空隙
面对 PORT NAK,应记录远端地址、端口、收到的序号、返回的 rcv_nxt、适用窗口、连接状态世代、校验结果、包类型、同步往来和当时的端口认领状态。计时和重传策略也应单独保存,因为 RFC 938 有意没有把它们统一规定。
有了这些记录,调查才可区分:包是因为端口无人认领被拒,还是在端口查询之前已经因校验和或窗口条件失败;这是重新同步,还是服务缺席;对端的重传是协议反应,还是应用接受的迹象。把一切塞进“投递失败”计数器,会让不同控制面的线索一起消失。
来源与限制
RFC 938 支持本文关于包头、连接状态和 PORT NAK 的陈述;其信息页支持实验性/提议性状态;RFC 791 仅支持 IP Protocol 字段的角色;RFC 793 仅用于静默期的比较;IANA 支持编号 28 的注册事实。它们均不量化采用率、流量、性能或当今使用情况。
这些来源也不让 PORT NAK 成为安全结论或业务结论。一份确认可以在自己的层次完全真实,同时拒绝替下一层虚构一个接收者。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
