跳到主要内容

3. 互联网层协议 (INTERNET LAYER PROTOCOLS)

3.1 简介 (INTRODUCTION)

健壮性原则: "在你接受的方面要宽容, 在你发送的方面要保守" 在互联网层尤为重要, 因为一台行为不当的主机可能会拒绝许多其他主机的互联网服务。

互联网层使用的协议标准有:

  • RFC-791 [IP:1] 定义了 IP 协议并介绍了互联网架构。
  • RFC-792 [IP:2] 定义了 ICMP, 为 IP 提供路由、诊断和错误功能。
  • RFC-950 [IP:3] 定义了对寻址架构的强制子网扩展。
  • RFC-1112 [IP:4] 定义了互联网组管理协议 (IGMP)。

主机的 IP 层必须 (MUST) 同时实现 IP 和 ICMP。

主机 IP 层有两个基本功能: (1) 为传出 IP 数据报选择"下一跳"网关或主机; (2) 重组传入 IP 数据报。IP 层还可以 (3) 实现传出数据报的有意分片。最后, IP 层必须 (4) 提供诊断和错误功能。

3.2 协议逐步分析 (PROTOCOL WALK-THROUGH)

3.2.1 互联网协议 -- IP (Internet Protocol)

3.2.1.1 版本号 (Version Number)

版本号不是 4 的数据报必须 (MUST) 被静默丢弃。

3.2.1.2 校验和 (Checksum)

主机必须 (MUST) 验证每个接收到的数据报的 IP 头部校验和, 并静默丢弃每个校验和错误的数据报。

3.2.1.3 寻址 (Addressing)

现在有五类 IP 地址: A 类到 E 类。D 类地址用于 IP 组播 [IP:4], 而 E 类地址保留供实验使用。

重要的特殊情况:

  • { 0, 0 } — 此网络上的此主机。不得 (MUST NOT) 发送, 除非作为主机学习自身 IP 地址的初始化过程中的源地址。
  • { -1, -1 } — 有限广播。不得 (MUST NOT) 用作源地址。
  • { 127, <any> } — 内部主机回环地址。此类地址不得 (MUST NOT) 出现在主机外部。

主机必须 (MUST) 支持 IP 的子网扩展 [IP:3]。

当主机发送任何数据报时, IP 源地址必须 (MUST) 是其自身的 IP 地址之一 (但不是广播或组播地址)。

主机必须 (MUST) 静默丢弃不是发往该主机的传入数据报。

3.2.1.6 服务类型 (Type-of-Service)

IP 层必须 (MUST) 为传输层提供一种方法来设置每个发送数据报的 TOS 字段; 默认值为全零位。IP 层应该 (SHOULD) 将接收到的 TOS 值传递给传输层。

3.2.1.7 生存时间 (Time-to-Live)

主机不得 (MUST NOT) 发送生存时间 (TTL) 值为零的数据报。

主机不得 (MUST NOT) 仅仅因为接收到的 TTL 小于 2 就丢弃数据报。

IP 层必须 (MUST) 为传输层提供一种方法来设置每个发送数据报的 TTL 字段。当使用固定 TTL 值时, 它必须 (MUST) 是可配置的。

3.2.1.8 选项 (Options)

传输层必须 (MUST) 有方法指定要包含在传输 IP 数据报中的 IP 选项。

在数据报中接收到的所有 IP 选项 (NOP 或 END-OF-LIST 除外) 必须 (MUST) 传递给传输层。IP 和传输层必须 (MUST) 各自解释它们理解的 IP 选项, 并静默忽略其他选项。

3.2.2 互联网控制消息协议 -- ICMP (Internet Control Message Protocol)

ICMP 消息分为两类:

ICMP 错误消息:

  • 目的地不可达 (Destination Unreachable)
  • 重定向 (Redirect)
  • 源抑制 (Source Quench)
  • 超时 (Time Exceeded)
  • 参数问题 (Parameter Problem)

ICMP 查询消息:

  • 回显 (Echo)
  • 信息 (Information)
  • 时间戳 (Timestamp)
  • 地址掩码 (Address Mask)

如果收到未知类型的 ICMP 消息, 必须 (MUST) 静默丢弃。

每条 ICMP 错误消息包括触发错误的数据报的互联网头部和至少前 8 个数据八位字节。

3.2.2.1 目的地不可达 (Destination Unreachable)

主机应该 (SHOULD) 生成以下代码的目的地不可达消息:

  • 代码 2 (协议不可达): 当指定的传输协议不受支持时
  • 代码 3 (端口不可达): 当指定的传输协议无法对数据报进行多路分解时

收到的目的地不可达消息必须 (MUST) 报告给传输层。

3.2.2.2 重定向 (Redirect)

主机不应 (SHOULD NOT) 发送 ICMP 重定向消息; 重定向只能由网关发送。

收到重定向消息的主机必须 (MUST) 相应地更新其路由信息。

3.2.2.3 源抑制 (Source Quench)

如果收到源抑制消息, IP 层必须 (MUST) 将其报告给传输层 (或 ICMP 处理)。

3.2.2.6 回显 (Echo)

每台主机必须 (MUST) 实现 ICMP 回显服务器功能, 并在收到 ICMP 回显请求时回复 ICMP 回显回复。

3.2.2.9 地址掩码 (Address Mask)

主机必须 (MUST) 支持非零地址掩码值。

3.2.3 互联网组管理协议 -- IGMP (Internet Group Management Protocol)

互联网组管理协议 (IGMP) [IP:4] 是 IP 组播的基础。

支持 IP 组播的主机必须 (MUST) 实现 IGMP 版本 1 [IP:4]。

3.3 具体问题 (SPECIFIC ISSUES)

3.3.1 路由出站数据报 (Routing Outbound Datagrams)

3.3.1.1 本地/远程决策

要将数据报发送到目的地 IP 地址, 主机需要确定目的地是否在本地连接的网络上, 或者是否必须通过网关路由数据报。

主机必须 (MUST) 支持多个逻辑地址 (即多个 IP 地址) 在单个物理接口上。

3.3.1.2 网关选择

主机必须 (MUST) 支持多个默认网关。

主机应该 (SHOULD) 实现一种机制来检测网关故障并切换到备用网关。

3.3.2 重组 (Reassembly)

主机必须 (MUST) 能够重组传入的 IP 数据报。

主机必须 (MUST) 能够接收大小至少为 576 字节的 IP 数据报 (无论是一整块还是要重组的片段)。

重组超时必须 (MUST) 是可配置的。推荐的默认值为 15 秒到 30 秒之间。

3.3.3 分片 (Fragmentation)

互联网主机必须 (MUST) 不对传出数据报进行分片, 除非数据报大于连接网络的 MTU。

主机应该 (SHOULD) 实现路径 MTU 发现 (Path MTU Discovery)。

3.3.4 本地多宿主 (Local Multihoming)

多宿主主机有多个 IP 地址, 通常对应于多个物理网络接口。

多宿主主机必须 (MUST) 在每个接口上独立处理传入数据报。

3.3.6 广播 (Broadcasts)

主机必须 (MUST) 识别并接受以下形式的 IP 广播地址:

  • 有限广播: 255.255.255.255
  • 定向广播: {网络号, -1}
  • 子网定向广播: {网络号, 子网号, -1}

主机不应 (SHOULD NOT) 发送以 0 作为主机部分的广播地址 (即旧式广播)。

3.3.7 IP 组播 (IP Multicasting)

主机应该 (SHOULD) 支持 IP 组播。

支持 IP 组播的主机必须 (MUST) 支持 IGMP。

3.4 互联网/传输层接口 (INTERNET/TRANSPORT LAYER INTERFACE)

IP 层和传输层之间的接口必须 (MUST) 支持以下功能:

  • 传输层能够指定 TOS 和 TTL 值
  • 传输层能够指定 IP 选项
  • IP 层向传输层报告 ICMP 错误消息
  • IP 层向传输层报告传递问题

3.5 互联网层要求摘要 (INTERNET LAYER REQUIREMENTS SUMMARY)

功能章节MUSTSHOULDMAYMUST NOT
实现 IP 和 ICMP3.1x
静默丢弃版本号非 4 的数据报3.2.1.1x
验证 IP 头部校验和3.2.1.2x
支持子网扩展3.2.1.3x
发送有效 IP 源地址3.2.1.3x
静默丢弃非本机数据报3.2.1.3x
传输层可设置 TOS3.2.1.6x
不发送 TTL=0 的数据报3.2.1.7x
TTL 可配置3.2.1.7x
实现 ICMP 回显服务器3.2.2.6x
支持 IP 组播3.3.7x
支持 IGMP (若支持组播)3.3.7x