跳到主要内容

3. 链路层

虽然 [INTRO:1] 涵盖 Link Layer 标准 (各种链路层上的 IP, ARP 等), 但本文档 预期 Link-Layer 材料将由单独的 Link Layer Requirements 文档覆盖. Link-Layer Requirements 文档将同时适用于主机和路由器. 因此, 本文档不会废止 [INTRO:1] 中处理链路层问题的部分.

3.1 简介

路由器与其他类型的 Internet 系统具有本质上相同的 Link Layer 协议要求. 这些 要求见 Requirements for Internet Gateways [INTRO:1] 的第 3 章. 路由器必须 符合其中的要求, 并且应该符合其中的推荐. 由于该文档中的某些材料已经有些 过时, 下文纳入了一些额外要求和解释.

DISCUSSION 预期 Internet 社区将制定 Requirements for Internet Link Layer 标准, 该 标准将取代本章以及 [INTRO:1] 中题为 "INTERNET LAYER PROTOCOLS" 的章节.

3.2 链路/Internet 层接口

本文档不试图规定 Link Layer 与上层之间的接口. 但是, 请特别注意, 本文档的 其他部分, 尤其是第 5 章, 要求各种信息跨越这一层边界传递.

本节使用以下定义:

o Source physical address

源物理地址是接收该数据包的来源主机或路由器的 Link Layer 地址.

o Destination physical address

目标物理地址是该数据包被发送到的 Link Layer 地址.

对于每个接收的数据包, 必须从 Link Layer 传递到 Internetwork Layer 的信息为:

(1) IP 数据包 [5.2.2],

(2) Link Layer 帧中数据部分的长度 (即不包括 Link-Layer 成帧) [5.2.2],

(3) 接收该 IP 数据包的物理接口标识 [5.2.3], 以及

(4) 数据包目标物理地址的分类, 即 Link Layer 单播, 广播或组播 [4.3.2], [5.3.4].

此外, Link Layer 还应该提供:

(5) 源物理地址.

对于每个发送的数据包, 必须从 Internetwork Layer 传递到 Link Layer 的信息为:

(1) IP 数据包 [5.2.1]

(2) IP 数据包长度 [5.2.1]

(3) 目标物理接口 [5.2.1]

(4) 下一跳 IP 地址 [5.2.1]

此外, Internetwork Layer 还应该提供:

(5) Link Layer priority 值 [5.3.3.2]

如果要传输的数据包导致 Link Layer 中与 precedence 相关的错误, Link Layer 还必须通知 Internetwork Layer [5.3.3.3].

3.3 具体问题

3.3.1 Trailer 封装

能够连接到 10 megabit Ethernet 的路由器可以能够接收并转发使用 [LINK:1] 中 描述的 trailer encapsulation 封装的 Ethernet 数据包. 但是, 路由器不应该 发起 trailer encapsulated 数据包. 路由器不得在未先使用 [INTRO:2] 中描述的 机制确认数据包的直接目标愿意且能够接受 trailer-encapsulated 数据包之前, 发起 trailer encapsulated 数据包. 路由器不应该同意 (使用这些机制) 接受 trailer-encapsulated 数据包.

3.3.2 地址解析协议 - ARP

实现 ARP 的路由器必须符合 [INTRO:2] 中的要求, 并且应该无条件符合这些要求.

Link Layer 不得仅因为目标没有 ARP cache 条目就向 IP 报告 Destination Unreachable 错误; 它应该在执行 ARP request/reply 序列期间短暂排队少量 数据报, 只有在该过程证明无果时, 才对其中一个已排队数据报回复目标不可达.

路由器不得相信任何声称另一台主机或路由器的 Link Layer 地址是广播或组播地址 的 ARP reply.

3.3.3 Ethernet 和 802.3 共存

能够连接到 10 megabit Ethernet 的路由器必须符合 [INTRO:2] 的 Ethernet 要求, 并且应该无条件符合这些要求.

3.3.4 最大传输单元 - MTU

每个逻辑接口的 MTU 必须可在该接口合法 MTU 范围内配置.

许多 Link Layer 协议定义了可以发送的最大帧大小. 在这类情况下, 路由器不得 允许设置会导致发送大于 Link Layer 协议所允许帧大小的 MTU. 但是, 即使最大帧 大小大于 MTU, 路由器也应该愿意接收与最大帧大小一样大的数据包.

DISCUSSION 请注意, 这比 [INTRO:2] 对主机施加的要求更严格, 后者要求每个物理接口的 MTU 可配置.

如果某个网络使用小于 Link Layer 最大帧大小的 MTU, 路由器可能会从配置 错误或初始化不完整的主机接收到大于 MTU 的数据包. 健壮性原则表明, 如果 可能, 路由器应该成功接收这些数据包.

3.3.5 点到点协议 - PPP

与 [INTRO:1] 不同, Internet 确实有一个标准点到点线路协议: Point-to-Point Protocol (PPP), 定义见 [LINK:2], [LINK:3], [LINK:4] 和 [LINK:5].

点到点接口是任何被设计用于通过点到点线路发送数据的接口. 这类接口包括电话 线路, 租用线路, 专用线路或直连线路 (2 线或 4 线), 并且可以使用点到点信道 或复用接口 (例如 ISDN) 的虚电路. 它们通常使用标准化 modem 或 bit serial 接口 (例如 RS-232, RS-449 或 V.35), 使用同步或异步时钟. 复用接口通常具有 特殊的物理接口.

通用串行接口使用与点到点线路相同的物理介质, 但除点到点连接外, 还支持使用 链路层网络. 链路层网络 (例如 X.25 或 Frame Relay) 使用另一种 IP 链路层规范.

实现点到点接口或通用串行接口的路由器必须实现 PPP.

PPP 必须在路由器上的所有通用串行接口上受支持. 路由器可以允许将线路配置为 使用 PPP 以外的点到点线路协议. 点到点接口在启用时应该默认使用 PPP, 或者 要求在启用前配置链路层协议. 通用串行接口应该要求在启用前配置链路层协议.

3.3.5.1 简介

本节为路由器实现者提供指导, 使其能够确保通过同步或异步链路使用 PPP 时与 其他路由器互操作.

实现者理解选项协商机制的语义至关重要. 选项是一种手段, 用于让本地设备向 远程对等方指示本地设备会从远程对等方接受什么, 而不是它希望发送什么. 远程 对等方应在本地设备声明可接受的选项集合范围内, 决定发送什么最方便. 因此, 即使远程对等方不支持任何选项, 它 ACK LCP Configuration Request (CR) 中指示 的所有选项也是完全可接受且正常的. 再次说明, 选项只是任一设备向其对等方 指示自己会接受什么的机制, 并不一定表示它会发送什么.

PPP Link Control Protocol (LCP) 提供若干可以协商的选项. 这些选项包括 (除 其他之外) 地址和控制字段压缩, 协议字段压缩, 异步字符映射, Maximum Receive Unit (MRU), Link Quality Monitoring (LQM), magic number (用于环回检测), Password Authentication Protocol (PAP), Challenge Handshake Authentication Protocol (CHAP), 以及 32-bit Frame Check Sequence (FCS).

路由器可以在同步或异步链路上使用 address/control field compression. 路由器 可以在同步或异步链路上使用 protocol field compression. 指示自己可以接受 这些压缩的路由器, 也必须能够接受未压缩的 PPP 头部信息.

DISCUSSION 这些选项控制 PPP 头部的外观. 通常, PPP 头部由地址, 控制字段和协议字段 组成. 在点到点线路上, 地址为 0xFF, 表示 "broadcast". 控制字段为 0x03, 表示 "Unnumbered Information." Protocol Identifier 是一个 two byte 值, 指示帧数据区的内容. 如果系统协商地址和控制字段压缩, 它向其对等方指示 自己会接受头部前端带有或不带有这些字段的 PPP 帧. 它并不表示自己会发送 移除了这些字段的帧.

协商 protocol field compression 时, 表示系统愿意在合法情况下接收被压缩 为 one byte 的协议字段. 并不要求发送方这样做.

使用 address/control field compression 与使用 numbered mode (reliable) PPP 不一致.

IMPLEMENTATION 某些硬件不能很好地处理可变长度头部信息. 在这些情况下, 让远程对等方发送 完整 PPP 头部最合理. 实现可以通过不向远程对等方发送 address/control field 和 protocol field compression 选项来确保这一点. 即使远程对等方 已指示能够接收压缩头部, 本地路由器也不要求发送压缩头部.

路由器必须为异步 PPP 链路协商 Asynchronous Control Character Map (ACCM), 但不应该为同步链路协商 ACCM. 如果路由器收到在同步链路上协商 ACCM 的尝试, 它必须 ACKnowledge 该选项, 然后忽略它.

DISCUSSION 有些实现同时提供同步和异步运行模式, 并可能使用相同代码实现选项协商. 在这种情况下, 某一端可能会在同步链路上发送 ACCM 选项.

路由器应该正确协商 maximum receive unit (MRU). 即使系统协商了小于 1,500 字节的 MRU, 它也必须能够接收 1,500 字节帧.

路由器应该协商并启用 link quality monitoring (LQM) 选项.

DISCUSSION 本备忘录不规定用于判断链路质量是否足够的策略. 但是, 路由器禁用故障 链路很重要 (见 Section [3.3.6]).

路由器应该实现并协商用于环回检测的 magic number 选项.

路由器可以支持认证选项 (PAP - Password Authentication Protocol, 和/或 CHAP - Challenge Handshake Authentication Protocol).

路由器必须支持 16-bit CRC frame check sequence (FCS), 并可以支持 32-bit CRC.

3.3.5.3 IP Control Protocol (IPCP) 选项

路由器可以提议执行 IP 地址协商. 路由器必须接受对等方拒绝 (REJect) 执行 IP 地址协商.

以 19,200 BPS 或更低链路速率运行的路由器应该实现并提议执行 Van Jacobson 头部压缩. 实现 VJ compression 的路由器应该实现用于启用或禁用该功能的管理 控制.

3.3.6 接口测试

路由器必须具有一种机制, 允许路由软件判断某个物理接口是否可用于发送数据包; 在为有限邻居集合打开永久虚电路的复用接口上, 路由器还必须能够判断这些虚 电路是否可用. 路由器应该具有一种机制, 允许路由软件判断某个物理接口的质量. 路由器必须具有一种机制, 用于在物理接口因管理操作而变为可用于或不可用于 发送数据包时通知路由软件. 路由器必须具有一种机制, 用于在检测到 Link level 接口由于任何原因变为可用或不可用时通知路由软件.

DISCUSSION 路由器具有可行机制来判断其网络连接是否正常工作是至关重要的. 未能检测 链路丢失, 或在检测到问题时未能采取适当操作, 可能导致黑洞.

用于检测网络连接问题的机制会因所使用的 Link Layer 协议和接口硬件而有 很大差异. 其意图是在 Link-Layer 约束范围内最大化检测故障的能力.