The Internet Protocol
1. Introduction
IP 提供 best-effort,connectionless 的 datagram 递交服务。best-effort 的意思是不保证所有的 IP datagram 成功到达目的地。如果发生了一些错误,比如 router 暂时耗尽了所有的缓存空间,到达的 datagram 被简单的丢弃。可靠性需要由上层协议提供 (e.g.,TCP)。
术语 connectionless 意味着 IP 不维护任何关于网络元素内部 (比如,router 内部) 的相关 datagrams 的连接状态信息;每个 datagram 都独立于其他所有的 datagrams 进行处理。这也意味着 IP datagrams 能被无序递交。如果源向相同的目的地连续发送两个 datagrams (第一个是 A,然后是 B),每个都被独立路由,且可能使用不同的 paths,使 B 先于 A 到达。IP datagram 也可能发生其他的事:它们可能在传输过程中被复制,它们可能改变了自己的数据而使结果出错。再一次,一些在 IP 之上的协议 (通常是 TCP) 必须处理这些潜在的问题以为应用提供一个无错的递交抽象。
2. IPv4 and IPv6 Headers
TCP/IP headers 在网络中的传输二进制整数的字节序为 big endian 字节序,高位优先传输,即顺序为:位 0-7,位 8-15,位 16-23, 位 24-31。它也被称为 network byte order。计算机 CPUs 存储二进制整数可能使用其他格式。例如大部分 PC 使用小端格式,必须 header 值传输到网络前和接收时进行字节序转换。
在计算机中,endianness,也被称为 byte sex,是计算机内存中数字数据中一个 word 的顺序或序列。字节序主要表示为 big-endian(BE) 或 little-endian(LE)。一个大端系统在最小内存地址上存储 word 的最高有效字节 (most significant byte),在最大内存地址上存储最低有效字节 (least significant byte)。小端系统中则相反,在最小地址上存储最低有效字节。
2.1 IP Header Fields
Version 字段包含 IP datagram 的版本号:IPv4 为 4,IPv6 为 6。
Internet Header Length (IHL) 表示 IPv4 header 中 32-bit words 的数量,包含任何可选项。
Differentiated Services Field (DS Field)
Explicit Congestion Notification (ECN)
Total Length 是 IPv4 datagram 的总长度,以字节为单位,为 16-bit 字段,所以 IPv4 datagram (包含 header) 的最大大小为 65536 字节。
虽然能够发送 65535 字节的 IP datagram,大部分链接层 (例如 Ethernet) 不能携带这样大的 packet,除非将其分割成更小的块。进一步说,host 不需要能接收超过 576 字节的 IPv4 datagram。(在 IPv6 中,host 必须能处理至少和其所关联的链接的 MTU 一样大小的 datagram,最小的链接 MTU 是 1280 字节。) 许多使用 UDP 进行传输的应用 (e.g.,DNS,DHCP,etc.) 限制数据的大小为 512 字节以避免 576-byte 的 IPv4 限制。TCP 依据一些额外信息选择它的 datagram 大小。
Identification 用于标识 fragments 属于同一个 datagram。host 维护一个自增计数器,每发生一个 IP datagram,计数器加一。
Time-to-Live 字段,或 TTL,设置 IP datagram 能经由路由器传递的最大次数。IP datagram 每经过一个路由器, TTL 减一,当 TTL 减至 0 时,该 IP datagram 被丢弃,并向发送方发送一个 ICMP 消息通知该情况。TTL 避免了 IP datagram 一直被困于网络中。
Protocol 字段包含表示 payload 部分数据的协议类型的数字,最常见的值是 17 (UDP) 和 6 (TCP)。
Header Checksum 字段仅计算 IPv4 header。IP 协议不保证 IPv4 datagram 携带的 payload 数据的完整性。
3. IPv6 Extension Headers
在 IPv6 中,特殊功能,诸如 IPv4 中作为可选项提供的功能,能通过添加 extension header 启用。时间戳,路由,fragmentation 和 extr-large packets 等功能就是如此提供的。
4. IP Forwarding
如果 host 的目的地与 host 直接相连 (e.g. point-to-point link) 或者在同一共享网络上 (e.g. Ethernet),IP datagram 的传输不需要路由器的转发,能直接递交到目的地。如果源主机和目的主机在不同的网络上,则 IP datagram 先递交给default 的路由器,然后由 default 路由器转发该 IP datagram 到目的主机。
当 IP 收到来自 network interface 的 IP datagram,它首先检测自己是否持有 IP datagram 的目的地址 IP 或者自己应该接收该 IP datagram,因为它是 IP broadcast 或 IP 加入了 Multicast address,如果是,向上递交 datagram 到 Protocol (IPv4) 或 Next header (IPv6) 指定的协议模块 (e.g. TCP 或 UDP);否则,(1) 如果 IP layer 被配置为路由器,它检查 routing table,或称为 forwarding table,转发该 IP datagram,(2) 如果 IP layer 没有被配置为路由器,则 datagram 被默默丢弃。在一些情况下 (e.g. (1) 情况下没有能转发下一跳路由器) ,会发送一个 ICMP 消息到IP datagram 的源地址以表示有错误发生。
4.1 Forwarding Table
通常 forwarding table 或 routing table 中的条目都包含以下信息字段,至少概念上是这样:
- Destination:32位字段 (IPv6 为128位字段)。IP datagram 转发的最终目的地址,它可能是一个网络,也可能是一个主机 (全长 IP 地址)。全 0 表示 default route。
- Mask:对 IP datagram 中目的 IP 地址进行逐位 AND 操作,结果与 forwarding table 中条目的 Destination 进行比较以查找到正确条目。
- Next-hop:32位 IPv4 地址或128位 IPv6 地址。表示下一跳的 IP 地址。
- Interface:标识发送 IP datagram 到下一跳所使用的 network interface。
forwarding table 或 routing table 仅包含下一跳的 IP 地址。
4.2 IP Forwarding Actions
当主机或路由器的 IP layer 需要发送 IP datagram 到下一跳的路由器或主机时,它检查 IP datagram 中的目的 IP 地址,并采用 longest prefix match 算法选出最佳匹配。
- 使用 forwarding table 条目中 Mask 对 IP 目的地址进行逐位与操作;
- 将与操作的结果与该条目中的 Destination 进行比较,如果相同,则成功匹配;
- 在所有匹配成功的条目中选择 Mask 中 1 最多的条目,如果出现多个条目,由实现决定使用哪个;
- 如果没有找到匹配条目,则不会递交 datagram。如果 datagram 是本地生成的,则向应用返回一个 “host unreachable” 错误;在路由器上,则返回一个 ICMP 消息向源主机报告错误。
4.3 Example
5. Mobile IP
6 Host Processing of IP Datagrams
Strong host model:仅当包含在Destination IP Address 字段中的 IP 地址与 datagram 到达的 interface 上配置的 IP 地址之一匹配,datagram 被递交到本地协议栈。
Weak host model:在任意 interface 上到达的 datagram 携带的目的地址与任一本地的 IP 地址匹配,则 datagram 被递交到本地协议栈。
7. Attacks Involving IP
在 IP 协议上的攻击主要给予选项操作,或着利用专用代码的 bugs (例如 fragment 组装)。简单的攻击比如通过使 IP header 字段的一个或多个字段非法 (e.g. header 长度或版本号不正确),尝试让路由器崩溃或性能低下。通常,当今互联网的路由器忽略或去除 IP 选项,基础 packet 处理中的 bugs 已被修复。因此这类简单的攻击问题并不大。涉及 fragmentation 的攻击可以使用其他方法引起。
没有身份验证和加密,IP 欺骗攻击可能会发生。一些早期的攻击涉及伪造源 IP 地址。因为早期的访问控制机制依赖源 IP 地址,很多这样的系统被绕过了。欺骗有时和很多源路由选项结合。在一些情况下,远程攻击者的电脑好像是本地网络的主机 (甚至是相同的计算机) 请求某种服务。虽然 IP 地址欺骗当今依然是一个问题,也有几种方法来限制它造成的伤害,包括入口过滤,ISP 检查客户流量的源地址以确保 datagram 包含来自指定 IP 前缀的源地址。
8. Summary
本章先描述了 IPv4 和 IPv6 headers,讨论了一些相关功能例如 Internet checksum 和 fragmentation。IPv6 增加了地址的大小,通过使用拓展 header,提升了 IP 在 packets 中包含选项的方法,并移除了几个 IPv4 header 中不重要的字段。IPv4 和 IPv6 headers 不是直接兼容的,通常它们只共享一个 4-bit 的 Version 字段。因此,一些互联的 IPv4 和 IPv6 节点中需要某种等级的翻译。Dual-stack 主机实现了 IPv4 和 IPv6,但是使用时必须选择某个协议。
自创建以来,IP 就包含一个 header 字段来表示相关 datagram 的流量类型或服务分类。这一机制在这些年被重新定义以期望支持 Internet 中异化的服务。
IP 转发描述了 IP datagram 在单跳或多跳网络中传输的方法。IP 转发逐跳执行,除非有特殊情况。在 datagram 通过所有跳时,目的 IP 地址从不改变,但是链接层的封装和目的链接层地址在每一跳都会改变。主机和路由器使用 forwarding table 和 longest prefix match 算法来决定最佳匹配的转发条目,和沿转发路径的下一跳。在很多情况下,仅有默认路由组成的极简表就足够了,它们能平等地匹配所有可能的目的地。
使用一套特殊的安全和信号协议,Mobile IP 在移动节点 home address 和 care-of address 间建立安全的绑定。这些节点被用于和移动节点通讯,即使它不在家。基本功能包括通过合作的 home agent 进行隧道传输,但是这可能导致效率低下的路由。大量额外的特性用于支持一个路由优化特性–允许移动节点直接与其他远程节点进行交流,反过来也是如此。这需要移动节点对应的主机支持 MIPv6 和一个可选的特性,路由优化。正在进行工作致力于减少路由优化绑定更新过程中的时延。
主机模型,强或弱,影响 IP datagram 如何被处理。在强模型中,每个接口仅被允许接收和发送使用的地址与该接口相关联的 datagrams,相较而言,weak 模型约束更少。弱主机模型在一些不可能的情况下允许通讯,但这会导致更容易受到某种类型的攻击。主机模型也与主机如何选择通讯时使用的地址相关。早些时候,大部分主机仅有一个 IP 地址,所以决定相当直接。使用 IPv6 时,主机可能有好几个地址,且对于有好几个 network interface 的多宿主机,决定就不那么直接了,可能对路由产生重要的影响。对于源地址和目的地址,出现了一系列的地址选择算法。这些算法倾向于选择范围受限的永久的地址。
我们讨论了一些对 IP 协议的攻击。这些攻击总是涉及地址欺骗,包含改变路由行为的选项,尝试利用 IP 实现的 bug,尤其是在 fragmentation 方面。协议实现的 bugs 在现代操作系统中已经被修复了,大部分情况下企业的边界路由器是不启用选项。虽然欺骗仍然是一个问题,处理比如入口过滤有助于排除这个问题。