摘要
- RFC 2390 的新增图例让同一条虚电路出现了两个都正确的号码:A 端用 DLCI 50 发送,B 端以 DLCI 70 接收,因为 DLCI 通常只在各自接口具有意义。
- 因为网络会改写外层 DLCI,InARP 报文体里的硬件地址在抵达时全部无效;接收接口要把帧头中的 Q.922 地址重建到源硬件地址字段。
- 重建后的值只证明这帧在本接口以哪个本地坐标到达,并不证明对端是谁、是否获授权、其协议地址是否真实,也不证明端到端结果。
同一条电路,两个本地号码
Inverse ARP 的基本问题并不是 RFC 2390 才提出的。1992 年的 RFC 1293 已经处理了这种情况:一台设备知道某条既有虚电路及其链路层标识,却不知道电路另一端的协议地址。RFC 2390 在 1998 年取代前文时,自己也把改动称为轻微调整:规范用语更正式,新增分组图、7.2 节实例以及安全章节。
真正值得单独书写的是那个实例揭开的命名边界。RFC 2427 同月重申,每条虚电路在每个帧中继接口上由 DLCI 唯一标识;在多数情况下,DLCI 严格只具有本地意义。
所以,A 看见通往 B 的电路是 50,B 看见来自 A 的同一条电路却是 70。A 发帧时把 50 放进帧头,网络穿越途中改写它,B 收到时帧头已经变成 70。电路没有换,观察位置换了。把 50 和 70 看成互相矛盾的“真值”,反而是误解了标识符的作用域。
发送者不能预先知道接收者的坐标
ARP 的报文形状包含源硬件地址、源协议地址、目标硬件地址和目标协议地址。在以太网上,发送者通常知道自己的硬件地址,可以直接填写。但帧中继端点没有一个对所有观察者通用的 DLCI。A 只知道自己接口上通往 B 的号码,不知道 B 的接口会用什么号码表示来自 A 的帧。
RFC 2390 的请求实例因此显得反常:A 通过 DLCI 50 发出 InARP 请求时,ar$sha 源硬件地址是 unknown;目标硬件地址则使用 A 本地已知的 Q.922 形式 0x0C21。报文抵达 B 后,外层帧头显示 DLCI 70。按照文中对 C/R、FECN、BECN 与 DE 位归零的处理,这个本地坐标对应 0x1061。
规范没有把问题说成“字段可能过时”,而是明确说:InARP 报文到达目的地时,其中所有硬件地址都无效;但帧头中的地址是正确的。外层网络为了正确交付而更新了坐标,内层报文却仍保留发送端视角,两层现实由此分叉。
接收接口只修复它亲眼看见的事实
B 从外层帧头取出 0x1061,写入内层的源硬件地址字段。这样,B 的 InARP 处理逻辑看到的不再是 unknown,而是对 B 有意义的本地来源坐标。B 回应 A 时也不能提前填写 A 的到达侧号码;响应中的源硬件地址仍为 unknown,直到 A 收到帧,再从自己的外层帧头取出 DLCI 50 的 Q.922 形式 0x0C21。
RFC 2390 坦率承认,这种处理破坏了分层的“纯洁性”。但有效事实恰好只存在于下层。若为了图示整洁而禁止接口把观察结果投射给上层,留下的只会是格式正确、语义无效的字段。
这个例外被限定得很窄。接口只在入站分组上介入,因为发送端无权替接收端命名。目标硬件地址也不会因为字段对称而被“修好”:它在请求与响应里同样无效,InARP 不依赖它,实现可以填零或忽略。规范只重建有观测依据的那一个字段,没有为其余空格编造意义。
干净的字段仍然只是一份有限证据
重建之后,抓包工具会显示一个完整的 Q.922 源地址。视觉上的完整容易诱使系统把它当作更强的事实。其实它只表达:这帧在这个接收接口上,以这个本地地址到达。
RFC 2390 新增的安全章节把上限写得很清楚。ARP 家族没有认证,主机冒充是已知问题,本文也没有加入额外安全机制。从帧头复制地址不会给报文签名,不会验证回应中的协议地址,更不会授予任何权限。
因此必须保留证据链的层次。外层帧头是入站坐标证据;InARP 回应是对端给出的协议地址陈述;本地软件决定是否把映射写入缓存;老化和失效规则决定它还能用多久;后续转发说明可达性是否仍存在;应用层结果则要由应用自己确认。任何一个记录都不能冒充整条链。
号码注册表只协调语法
今天的 IANA ARP Parameters 注册表仍把 15 记录为 Frame Relay 硬件类型,把 8 与 9 记录为 InARP 请求和回应操作码。注册表的价值是避免共享号码冲突,让实现知道字段如何解释。它不证明某张网络正在部署 InARP,不证明某个回应真实,也不让 DLCI 变成全球名称。
控制权由此被分散在不同层面。标准规定转换规则;IANA 维护代码点唯一性;帧中继网络决定各边界看到的标签;接收接口执行本地重建;对端决定是否回应以及陈述哪个协议地址;本地策略决定是否采用这份陈述。
两个相反方向的越界都危险。若相信未经修复的内层字段,就是把发送端局部视角误作接收端现实。若相信修复后的地址就是对端身份,则又把接收端局部视角升级成全球权威。
一张图拆开了四种记录
RFC 2390 的 A、B、C 图把四样东西分开了:作为关系存在的虚电路、A 端的 50、B 端的 70,以及 B 依据实际入站帧重建出的内层字段。它们相关,但不可互换。
这种纪律并没有随帧中继退出主流而过时。现代系统也充满接口号、隧道标签、会话句柄与缓存键。它们往往只对某个观察者有效。可靠架构不会把局部号码包装成普遍身份,也不会因为分层教科书画得整齐,就拒绝来自真实运行层的纠正。
RFC 2390 选择了很薄的公共规则:规定从哪里取值、修复哪个字段、何时介入。身份、信任和后续使用仍由各自机制决定。最重要的事实来自实际收到的帧,而不是来自一个看起来已经填写、却属于错误命名空间的格子。
来源
- RFC 2390 — Inverse Address Resolution Protocol
- RFC Editor 的 RFC 2390 记录
- IETF Datatracker 的 RFC 2390 历史
- RFC 2390 勘误
- RFC 1293 — Inverse Address Resolution Protocol
- RFC 1490 — Multiprotocol Interconnect over Frame Relay
- RFC 2427 — Multiprotocol Interconnect over Frame Relay
- RFC 826 — An Ethernet Address Resolution Protocol
- RFC 903 — A Reverse Address Resolution Protocol
- RFC 5494 — IANA Allocation Guidelines for ARP
- IANA — ARP 参数
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- Heng Lu — Reality Layers, Symbolic Power, and Clarity
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
