zoukankan      html  css  js  c++  java
  • TCP/IP详解,卷1:协议--第7章 Ping程序

    引言

    “p i n g”这个名字源于声纳定位操作。 P i n g程序由Mike Muuss编写,目的是为了测试另一
    台主机是否可达。该程序发送一份 I C M P回显请求报文给主机,并等待返回 I C M P回显应答
    (图6 - 3列出了所有的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号端口(邮件
    服务器)

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

    对于其他类型的I C M P查询报文,服务器必须响应标识符和序列号字段。另外,客户发送
    的选项数据必须回显,假设客户对这些信息都会感兴趣。

    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程序打印出返回的每个分组的序
    列号,允许我们查看是否有分组丢失、失序或重复。 I P是一种最好的数据报传递服务,因此
    这三个条件都有可能发生。
    旧版本的p i n g程序曾经以这种模式运行,即每秒发送一个回显请求,并打印出返回的每
    个回显应答。但是,新版本的实现需要加上- s选项才能以这种模式运行。默认情况下,新版
    本的p i n g程序只发送一个回显请求。如果收到回显应答,则输出“ host is alive”;否则,在
    2 0秒内没有收到应答就输出“no answer(没有回答)”。

    IP记录路由选项

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

    这个过程听起来简单,但存在一些缺陷。源端主机生成 R R选项,中间路由器对R R选项的
    处理,以及把I C M P回显请求中的R R清单复制到I C M P回显应答中,所有这些都是选项功能。
    幸运的是,现在的大多数系统都支持这些选项功能,只是有一些系统不把 I C M P请求中的I P清
    单复制到I C M P应答中。

    但是,最大的问题是 I P首部中只有有限的空间来存放 I P地址。我们从图3 - 1可以看到,I P
    首部中的首部长度字段只有 4 bit,因此整个I P首部最长只能包括1 5个32 bit长的字(即6 0个字
    节)。由于I P首部固定长度为 2 0字节,R R选项用去3个字节(下面我们再讨论),这样只剩下
    3 7个字节( 6 0- 2 0- 3)来存放 I P地址清单,也就是说只能存放 9个I P地址。对于早期的
    A R PA N E T来说,9个I P地址似乎是很多了,但是现在看来是非常有限的(在第 8章中,我们将
    用Tr a c e r o u t e工具来确定数据报的路由)。除了这些缺点,记录路由选项工作得很好,为详细
    查看如何处理I P选项提供了一个机会。

    I P数据报中的R R选项的一般格式如图7 - 3所示。

    c o d e是一个字节,指明I P选项的类型。对于R R选项来说,它的值为7。l e n是R R选项总字
    节长度,在这种情况下为 3 9(尽管可以为R R选项设置比最大长度小的长度,但是 p i n g程序
    总是提供3 9字节的选项字段,最多可以记录 9个I P地址。由于I P首部中留给选项的空间有限,
    它一般情况都设置成最大长度)。
    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,表示清单已满。

    当路由器(根据定义应该是多穴的)在清单中记录 I P地址时,它应该记录哪个地址呢?
    是入口地址还是出口地址?为此, RFC 791 [Postel 1981a]指定路由器记录出口 I P地址。我们
    在后面将看到,当原始主机(运行 p i n g程序的主机)收到带有 R R选项的I C M P回显应答时,
    它也要把它的入口I P地址放入清单中

    IP时间戳选项

    I P时间戳选项与记录路由选项类似。 I P时间戳选项的格式如图7 - 7所示(请与图7 - 3进行比
    较)。

    时间戳选项的代码为 0 x 4 4。其他两个字段 l e n和p t r与记录路由选项相同:选项的总长度
    (一般为3 6或4 0)和指向下一个可用空间的指针( 5,9,1 3等)。
    接下来的两个字段是4 bit的值:O F表示溢出字段,F L表示标志字段。时间戳选项的操作
    根据标志字段来进行,如图7 - 8所示

    如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值
    时间戳的取值一般为自U T C午夜开始计的毫秒数,与 I C M P时间戳请求和应答相类似。如
    果路由器不使用这种格式,它就可以插入任何它使用的时间表示格式,但是必须打开时间戳
    中的高位以表明为非标准值

    与我们遇到的记录路由选项所受到的限制相比,时间戳选项遇到情况要更坏一些。如果
    我们要同时记录 I P地址和时间戳(标志位为 1),那么就可以同时存入其中的四对值。只记录
    时间戳是没有用处的,因为我们没有标明时间戳与路由器之间的对应关系(除非有一个永远
    不变的拓扑结构)。标志值取3会更好一些,因为我们可以插入时间戳的路由器。一个更为基
    本的问题是,很可能无法控制任何给定路由器上时间戳的正确性。这使得试图用 I P选项来计
    算路由器之间的跳站数是徒劳的。我们将看到(第 8章)t r a c e r o u t e程序可以提供一种更好
    的方法来计算路由器之间的跳站数。

    小结

    p i n g程序是对两个T C P / I P系统连通性进行测试的基本工具。它只利用 I C M P回显请求和
    回显应答报文,而不用经过传输层( T C P / U D P)。P i n g服务器一般在内核中实现I C M P的功能。
    我们分析了在 L A N、WA N以及S L I P链路(拨号和线路)上运行 p i n g程序的输出结果,
    并对串行线路上的S L I P链路吞吐量进行了计算。我们还讨论并使用了 p i n g程序的I P记录路由
    选项。利用该I P选项,可以看到它是如何频繁使用默认路由的。在第 9章我们将再次回到这个
    讨论主题。另外,还讨论了IP 时间戳选项,但它在实际使用时有所限制。

  • 相关阅读:
    tzoj5855: 数据结构实验:最短路(SPFA)
    tzoj5779 最短路(SPFA模板)
    洛谷P3375 【模板】KMP字符串匹配(KMP)
    poj2533 The Bottom of a Graph(Tarjan+缩点)
    poj1236 Network of Schools(Tarjan+缩点)
    危险道路(Tarjan+割边/桥)
    前端开发中的浏览器兼容性问题总结
    递归应用示例
    统计单词数
    找素数的两种方法
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12219219.html
Copyright © 2011-2022 走看看