TCP/IP详解——ping程序

ping程序:目 的 是 为 了 测 试 另 一 台主机是否可达。该程序发送一份 I C M P 回显请求报文给主机,并等待返回 I C M P 回显应答

如 果 不 能 P i n g 到 某 台 主 机 , 那 么 就 不 能 Te l n e t 或者 F T P 到 那 台 主 机 。 反 过 来 ,
如果不能 Te l n e t 到 某 台 主 机 , 那 么 通 常 可 以 用 P i n g 程 序 来 确 定 问 题 出 在 哪 里 。
P i n g 程 序 还 能 测 出到这台主机的往返时间,以表明该主机离我们有“多远”。

在本章中,我们将使用 P i n g 程序作为诊断工具来深入剖析 I C M P 。 P i n g 还 给 我 们 提 供 了 检 测 I P 记录路由和时间戳选项的机会。

如 果 不 能 P i n g到 某 台 主 机 , 那 么 就 不能 Te l n e t或 F T P 到那台主机。随着 I n t e r n e t安 全 意 识 的 增 强 , 出 现 了 提 供 访 问 控 制 清 单 的路由器和防火墙,那么像这样没有限定的断言就不再成立了。一台主机的可达性可 能不只取决于I P 层是否可达,还取决于使用何种协议以及端口号。 P i n g程序的运行结果 可能显示某台主机不可达,但我们可以用 Te l n e t远程登录到该台主机的 2 5 号端口(邮件 服务器)。


7.2 Ping程序
我们称发送回显请求的 p i n g 程序为客户,而称被 p i n g 的 主 机 为 服 务 器 。 大 多 数 的 T C P / I P 实 现 都 在 内 核 中 直 接 支 持 P i n g 服务器 — 这 种 服 务 器 不 是 一 个 用 户 进 程 ( 在 第 6 章 中 描 述 的 两 种 I C M P 查 询 服 务 , 地 址 掩 码 和 时 间 戳 请 求 , 也 都 是 直 接 在 内 核 中 进 行 处 理 的 )


TCP/IP详解——ping程序_第1张图片

对于其他类型的ICMP查询报文,服务器必须响应标识符和序列号字段。
客户发送的选项数据必须回显,假设客户对这些信息都感兴趣。
U n i x 系统在实现 p i n g 程序时是把 I C M P 报 文 中 的 标 识 符 字 段 置 成 发 送 进 程 的 I D 号 。 这 样 即 使 在 同 一 台 主 机 上 同 时 运 行 了 多 个 p i n g 程序实例, p i n g 程 序 也 可 以 识 别 出 返 回 的 信 息 。
序列号从 0 开 始 , 每 发 送 一 次 新 的 回 显 请 求 就 加 1 。 p i n g 程 序 打 印 出 返 回 的 每 个 分 组 的 序 列号,允许我们查看是否有分组丢失、失序或重复。 IP是一种最好的数据报传递服务,因此这三个条件都有可能发生。

7.2.1 LAN输出


TCP/IP详解——ping程序_第2张图片
局域网上的ping

当返回 I C M P 回显应答时,要打印出序列号和 T T L ,并计算往返时间( T T L 位于 I P 首部中 的 生 存 时 间 字 段 。

当 应 答 返 回 时 , 用 当 前 时 间 减 去 存 放 在 I C M P 报 文 中 的 时 间 值 , 即 是 往 返 时 间 。 注 意 , 在 发 送 端 b s d i 上, 往返时间的计算结果都为 0 m s 。这是因为程序使用的计时器分辨率低的原因。

TCP/IP详解——ping程序_第3张图片

第 1 个 RT T 中多出的 3 ms 很可能就是因为发送 A R P 请求和接收 A R P 应 答 所 花 费 的 时 间 。

它提供的是具有微秒级分辨率的计时器,但是ping 程序只 能打印出毫秒级的往返时间。打印出来的往返时 间值为 0 ms , 这 是 因 为 计 时 器 只 能 提 供 1 0 m s 的 误 差 。


7.2.2 WAN输出
在一个广域网上,结果会有很大的不同。


TCP/IP详解——ping程序_第4张图片

序列号为 1 、 2 、 3 、 4 、 6 、 1 0、 11 、 1 2 和 1 3 的 回 显 请 求 或 回 显 应 答 在 某 个 地 方 丢 失 了。(像 5 2 % 这 样 高 的 分 组 丢 失 率 是 不 正 常 的 。 即 使 是 在 工 作 日 的 下 午 , 对 于 I n t e r n e t 来 说 也 是 不 正 常 的 )
通过广域网还有可能看到重复的分组(即相同序列号的分组被打印两次或更多次),失序 的分组(序列号为N + 1的分组在序列号为N的分组之前被打印)。


7.2.3 线路SLIP链接


TCP/IP详解——ping程序_第5张图片
估算来回时间

7.2.4 拨号SLIP链路
对于拔号SLIP链路来说,情况有些变化,因为在链路的两段增加了调制解调器。


TCP/IP详解——ping程序_第6张图片

7.3 IP记录路由选项
ping程序为我们提供了查看IP记录路由(RR)选项的机会。 -R选项,提供了记录路由的功能。—— > 使得ping程序发送出去的IP数据报中设置IP RR选项【该IP数据报包含ICMP回显请求报文】。每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据报到达目的端时, I P 地址清单应该复制到 I C M P 回 显 应 答 中 , 这样返回途中所经过的路由器地址也被加入清单中。当 p i n g 程 序 收 到 回 显 应 答 时 , 它 就 打 印 出这份 I P 地址清单。

也就是这个过程,将去的时候的路由器的IP地址加上去,然后回来也一样加进来; 并且,现在大多数系统都支持这些选项功能。

问题:所有的ip地址清单都是存放在ICMP应答的选项中。但是ip首部中的空间是有限的。

TCP/IP详解——ping程序_第7张图片
IP首部

空间有限 ——> IP 首部长度4bit【真个IP首部最长只能够包含15个31bit长的字(即为:60个字节)】,由于 I P 首 部 固 定 长 度 为 2 0 字节, R R 选 项 用 去 3 个 字 节 ( 下 面 我 们 再 讨 论 ), 这 样 只 剩 下 3 7 个字节( 6 0 - 2 0 - 3 )来存放 I P 地址清单,也就是说只能存放 9 个 I P 地址。

(1)c o d e 是一个字节,指明 I P 选项的类型。对于 R R 选项来说,它的值为 7
(2) len 是 R R 选 项 总 字 节 长 度 , 在 这 种 情 况 下 为 3 9 。
(3)p t r 称作指针字段。它是一个基于 1 的指针,指向存放下一个 I P 地址的位置。它的最小值为 4 , 指 向 存 放 第 一 个 I P 地 址 的 位 置 。 随 着 每 个 I P 地 址 存 入 清 单 , p t r 的 值 分 别 为 8 , 1 2 , 1 6 ,最 大到 3 6 。当记录下 9 个 I P 地址后, p t r的值为 4 0 , 表 示 清 单 已 满 。
(4)当路由器(根据定义应该是多穴的)在清单中记录 I P 地 址 时 , 它 应 该 记 录 哪 个 地 址 呢 ? 是入口地址还是出口地址?为此, RFC791指定路由器记录出口 I P 地址。我们 在 后 面 将 看 到 , 当 原 始 主 机 ( 运 行 p i n g 程 序 的 主 机 ) 收 到 带 有 R R 选项的 I C M P 回 显 应 答 时 , 它也要把它的入口 I P 地址放入清单中。

TCP/IP详解——ping程序_第8张图片
IP路由选路/重定向

问题是 a i x 不 知 道 要 把 目 的 地 为 子 网 1 4 0 . 2 5 2 . 1 3 的 I P 数 据 报 发 到 主 机 n e t b 上 。 相 反 , a i x 在它的路由表中有一个默认项,它指明当没有明确某个目的主机的路由时,就把所有的数据 报 发 往 默 认 项 指 定 的 路 由 器 g a t e w a y 。路由器 g a t e w a y 比子网 1 4 0 . 2 5 2 . 1 上 的 任 何 主 机 都 具 备 更强的选路能力(在这个以太网上有超过 1 5 0 台 主 机 , 每 台 主 机 的 路 由 表 中 都 有 一 个 默 认 项 指 向路由器 g a t e w a y , 这 样 就 不 用 在 每 台 主 机 上 都 运 行 一 个 选 路 守 护 程 序 )。


7.4 IP时间戳选项


TCP/IP详解——ping程序_第9张图片

时间戳选项的代码为 0 x 4 4 。其他两个字段 l e n 和 p t r 与 记 录 路 由 选 项 相 同 : 选 项 的 总 长 度 (一般为 3 6 或 4 0 )和指向下一个可用空间的指针( 5 , 9 , 1 3 等)。

接 下 来 的 两 个 字 段 是 4 b i t 的值: O F 表 示 溢 出 字 段 , F L 表 示 标 志 字 段 。 时 间 戳 选 项 的 操 作 根据标志字段来进行;如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值。

TCP/IP详解——ping程序_第10张图片

时间戳的设定:时间戳的取值一般为自 U T C 午夜开始计的毫秒数,与 I C M P 时 间 戳 请 求 和 应 答 相 类 似 。 如 果路由器不使用这种格式,它就可以插入任何它使用的时间表示格式,但是必须打开时间戳 中的高位以表明为非标准值。
与我们遇到的记录路由选项所受到的限制相比,时间戳选项遇到情况要更坏一些。如果 我 们 要 同 时 记 录 I P 地 址 和 时 间 戳 ( 标 志 位 为 1 ), 那 么 就 可 以 同 时 存 入 其 中 的 四 对 值 。 只 记 录 时间戳是没有用处的,因为我们没有标明时间戳与路由器之间的对应关系(除非有一个永远 不变的拓扑结构)。标志值取 3会更好一些,因为我们可以插入时间戳的路由器。一个更为基 本的问题是,很可能无法控制任何给定路由器上时间戳的正确性。这使得试图用 I P 选项来计 算 路 由 器 之 间 的 跳 站 数 是 徒 劳 的 。 —— traceroute 程序提供了一种更好的方法来计算路由器之间的跳帧数。

TCP/IP详解——ping程序_第11张图片

你可能感兴趣的:(TCP/IP详解——ping程序)