IP是 T C P / I P 协 议 族 中 最 为 核 心 的 协 议 。 所 有 的 T C P 、 U D P 、 I C M P 及 I G M P 数据都以 I P 数据报格式传输。iP 提 供 不 可 靠 、 无 连 接 的 数 据 报 传 送服务 。
不可靠( u n r e l i a b l e)的意思是它不能保证 I P 数据报能成功地到达目的地。 I P 仅 提 供 最 好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P 有 一 个 简 单 的 错 误处理算法:丢弃该数据报,然后发送 I C M P 消 息 报 给 信 源 端 。 任 何 要 求 的 可 靠 性 必 须 由 上 层 来提供(如 T C P )。
无连接( c o n n e c t i o n l e s s ) 这 个 术 语 的 意 思 是 I P 并 不 维 护 任 何 关 于 后 续 数 据 报 的 状 态 信 息 。每个数据报的处理是相互独立的。这也说明, I P数 据 报 可 以 不 按 发 送 顺 序 接 收 。 如 果 一 信 源向相同的信宿发送两个连续的数据报(先是 A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此 B可能在 A到达之前先到达。
IP首部最 高 位 在 左 边 , 记 为 0 bit ; 最 低 位 在 右 边 , 记 为 3 1 b i t 。
4 个字节的 3 2 b i t 值 以 下 面 的 次 序 传 输 : 首 先 是 0 ~ 7 b i t ,其次 8 ~ 1 5 b i t ,然后 1 6 ~ 2 3 b i t ,最后是 2 4 ~ 3 1 b i t 。 这 种 传 输 次 序 称 作 b i g e n d i a n 字 节 序 。 由 于 T C P / I P 首 部 中 所 有 的 二 进 制 整 数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序。
目 前 的 协 议 版 本 号 是 4 ,因此 I P 有时也称作 I P v 4 。
首部长度指的是首部占 32 bit字的数目,包括任何选项。由于它是一个 4比特字段,因此首部最长为 6 0 个字节。
服 务 类 型 ( T O S ) 字 段 包 括 一 个 3 b i t 的 优 先 权 子 字 段 ( 现 在 已 被 忽 略 ), 4 b i t 的 T O S 子字段和 1 b i t 未 用 位 但 必 须 置 0 。 4 b i t 的 T O S 分 别 代 表 : 最 小 时 延 、 最 大 吞 吐 量 、 最 高 可 靠 性 和 最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。
图3 - 2列出了对不同应用建议的 T O S值 。 在 最 后 一 列 中 给 出 的 是 十 六 进 制 值 , 因 为 这 就 是在后面将要看到的 t c p d u m p 命令输出。
总长度字段是指整个 I P 数 据 报 的 长 度 , 以 字 节 为 单 位 。 利 用 首 部 长 度 字 段 和 总 长 度 字 段 ,就可以知道 I P 数据报中数据内容的起始位置和长度。由于该字段长 1 6 比特,所以 I P 数据报最长可达 6 5 5 3 5 字节。 当 数 据 报 被 分 片 时 , 该 字 段 的 值 也 随 着 变 化 。尽 管 可 以 传 送 一 个 长 达 6 5 5 3 5 字节的 I P数 据 报 , 但 是 大 多 数 的 链 路 层 都 会 对 它 进 行 分 片 。而且,主机也要求不能接收超过 5 7 6 字节的数据报。由于 T C P 把 用 户 数 据 分 成 若 干 片 , 因 此 一般来说这个限制不会影响 T C P 。在后面的章节中将遇到大量使用 U D P 的应用( R I P , T F T P ,B O O T P , D N S ,以及 S N M P ), 它 们 都 限 制 用 户 数 据 报 长 度 为5 1 2 字 节 , 小 于 5 7 6 字 节 。 但 是 ,事实上现在大多数的实现(特别是那些支持网络文件系统 N F S 的实现)允许超过 8 1 9 2字节的I P 数据报。 总长度字段是I P 首 部 中 必 要 的 内 容 , 因 为 一 些 数 据 链 路 ( 如 以 太 网 ) 需 要 填 充 一 些 数 据以 达 到 最 小 长 度 。 尽 管 以 太 网 的 最 小 帧 长 为 4 6 字 节,但是 I P 数 据 可 能 会 更 短 。 如果 没 有 总 长 度 字 段 , 那 么 I P 层就不知道 4 6 字 节 中 有 多 少 是 I P 数 据 报 的 内 容 。
T T L( t i m e - t o - l i v e ) 生 存 时 间 字 段 设 置 了 数 据 报 可 以 经 过 的 最 多 路 由 器 数 。 它 指 定 了 数 据报 的 生 存 时 间 。 T T L 的 初 始 值 由 源 主 机 设 置 ( 通 常 为 3 2 或 6 4 ), 一 旦 经 过 一 个 处 理 它 的 路 由 器 ,它的值就减去 1。当该字段的值为 0 时,数据报就被丢弃,并发送 I C M P 报文通知源主机。
首部检验和字段是根据 I P 首部计算的检验和码。它不对首部后面的数据进行计算。 I C M P 、I G M P 、 U D P 和 T C P 在它们各自的首部中均含有同时覆盖首部和数据检验和码。
最后一个字段是任选项,是数据报中的一个可变长的可选信息。目前,这些任选项定义 如下:
安全和处理限制(用于军事领域)
记录路径(让每个路由器都记下它的 I P 地址)
时 间 戳 ( 让 每 个 路 由 器 都 记 下 它 的 I P 地 址 和 时 间 )
宽 松 的 源 站 选 路 ( 为 数 据 报 指 定 一 系 列 必 须 经 过 的 I P 地址)
严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。
这些选项很少被使用,并非所有的主机和路由器都支持这些选项。选项字段一直都是以 32 bit作为界限,在必要的时候插入值为 0的填充字节。这样就保证I P 首部始终是 32 bit 的 整 数 倍 ( 这 是 首 部 长 度 字 段 所 要 求 的 )。
IP路由选择
I P 路 由 选 择 是 简 单 的 , 特 别 对 于 主 机 来 说 。 如 果 目 的 主 机 与 源 主 机 直 接 相连 ( 如 点 对 点 链 路 ) 或 都 在 一 个 共 享 网 络 上 ( 以 太 网 或 令 牌 环 网 ),那么 I P 数 据 报 就 直 接 送 到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。大多数的主机都是采用这种简单机制。
在 一 般 的 体 制 中 , I P 可以从 T C P 、 U D P 、 I C M P 和 I G M P 接 收 数 据 报 ( 即 在 本 地 生 成 的 数 据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。 I P 层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时, I P 首先检查目的 I P 地址是否为本机的 I P 地址之一或者 I P 广 播 地 址 。 如 果确实是这样,数据报就被送到由 I P 首 部 协 议 字 段 所 指 定 的 协 议 模 块 进 行 处 理 。 如 果 数据目 的不是这些地址,那么( 1 )如果 I P 层 被 设 置 为 路 由 器 的 功 能 , 那 么 就 对 数 据 报 进 行 转 发(也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。
路由表中的每一项都包含下面这些信息:
• 目的I P 地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标志字段来指定(如下所述)。主机地址有一个非 0的主机号(见图 1 - 5),以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。
• 下一站(或下一跳)路由器( n e x t - h o p r o u t e r )的 I P 地址,或者有直接连接的网络 I P 地址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。
• 标志。其中一个标志指明目的 I P 地 址 是 网 络 地 址 还 是 主 机 地 址 , 另 一 个 标 志 指 明 下 一站 路 由 器 是 否 为 真 正 的 下 一 站 路 由 器 , 还 是 一 个 直 接 相 连 的 接 口
• 为数据报的传输指定一个网络接口。
I P 路 由 选 择 是 逐 跳 地 ( h o p - b y - h o p ) 进 行 的 。 从 这 个 路 由 表 信 息 可 以 看 出 , I P 并不知道到达 任 何 目 的 的 完 整 路 径 ( 当 然 , 除 了 那 些 与 主 机 直 接 相 连 的 目 的 )。所有的 I P 路 由 选 择 只 为 数据报传输提供下一站路由器的 I P 地 址 。 它 假 定 下 一 站 路 由 器 比 发 送 数 据 报 的 主 机 更 接 近 目 的 ,而且下一站路由器与该主机是直接相连的。
I P 路由选择主要完成以下这些功能:
1) 搜索路由表,寻找能与目的 I P 地 址 完 全 匹 配 的 表 目 ( 网 络 号 和 主 机 号 都 要 匹 配 )。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
2) 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行讨论。
3) 搜 索 路 由 表 , 寻 找 标 为 “ 默 认 ( d e f a u l t )” 的 表 目 。 如 果 找 到 , 则 把 报 文 发 送 给 该 表 目指定的下一站路由器。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。默认路 由 , 以 及 下 一 站 路 由 器 发 送 的 I C M P 间 接 报 文 ( 如 果 我 们 为 数 据 报 选 择 了 错 误 的 默 认 路 由 ),是 I P 路由选择机制中功能强大的特性。