美文网首页
TCP-IP详解卷1:协议读书笔记_7

TCP-IP详解卷1:协议读书笔记_7

作者: MR_Model | 来源:发表于2019-08-26 09:57 被阅读0次

    Ping程序

    "Ping"这个名字源于声呐定位操作,目的是为了测试一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。
    一般来说,如果不能Ping到某台主机,那么就不能Telnet或者FTP到那台主句。反过来,如果不能Telnet到某台主机,那么通常可以用Ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的往返时间,以表明该主机离我们有"多远"。

    Ping程序

    我们称发送回显请求的ping程序为客户,而称被ping的主机为服务器。大多数TCP/IP实现都在内核中直接支持Ping服务器----这种服务器不是一个用户进程。
    ICMP回显请求和回显应答报文如下图。

    ICMP回显请求和回显应答结构

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

    LAN输出

    当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间(TTL位于IP首部中的生存时间字段。)

    ping程序通过ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在ICMP报文中的时间值,即是往返时间。

    输出的第一行包括目的主机的IP地址,尽管指定的是它的名字(svr4)。这说明名字已经经过解析器被转换成IP地址了。

    通常,第一个往返时间值要比其他的大。这是由于目的端的硬件地址不在ARP告诉缓存中的缘故。在发送第一个回显请求之前要发送一个ARP请求并接收ARP应答,这需要花费几毫秒的时间。

    WAN输出

    在一个广域网上,结果会有不同。在广域网中可能看到重复的分组(即相同序列号的分组被打印两次或更多次),失序的分组(序列号位N+1的分组在序列号位N的分组之前被打印)。

    线路SLIP链接

    下面我们来估计SLIP链路上的往返时间。首先,默认情况下发送的ICMP报文有56个字节。再加上20个字节的IP首部和8个字节的ICMP首部,IP数据报的总长度为84字节。同时,需要增加两个额外的字节:在数据报的开始和结尾加上END字符。对于1200b/s这个速率来说,由于每个字节含有8bit数据、1bit起始位和1bit结束位,因此传输速率是每秒120个字节,或者说每个字节8.33ms。所以我们估算往返时间
    86 x 8.33 x 2 = 1433ms

    往返时间大约是1.5秒,但是程序仍然每间隔 1秒钟发送一次ICMP回显请求。这说明在第1个回显应答返回之前(1.480秒时刻)就已经发送了两次回显请求(分别在0秒和1秒时刻)。

    拨号SLIP链路

    对于拔号SLIP链路来说,情况有些变化,因为在链路的两端增加了调制解调器。用在sun和netb系统之间的调制解调器提供的是V.32调制方式(9600b/s)、V.42错误控制方式(也称作LAP-M)以及V.42bis数据压缩方式。这表明我们针对线路链路参数进行的简单计算不再准确了。

    很多因素都有可能影响。调制解调器带来了时延。随着数据的压缩,分组长度可能会减小,但是由于使用了错误控制协议,分组长度又可能会增加。另外,接收端的调制解调器只能在验证了循环检验字符(检验和)后才能释放收到的数据。最后,我们还要处理每一端的计算机异步串行接口,许多操作系统只能在固定的时间间隔内,或者收到若干字符后才去读这些接口。

    IP记录路由选项

    ping程序为我们提供了查看IP路由选项的机会。它使得ping程序在发送出去的数据报设置IP的RR选项。这样,每个处理该数据报的路由器就把它的IP地址放在选项字段中。当数据报到达目的端时,IP地址清淡应该复制到ICMP回显应大众,这样返回途中所经过的路由器地址也被加入清淡中。当ping程序收到回显应答时,它就打印这份IP地址清单。

    这个过程中,有一些缺陷。源端地址生成RR选项,中间路由器对RR选项的处理,以及把ICMP回显请求中的RR清单复制到ICMP回显应答中,所有这些都是选项功能,可能有一些系统不把ICMP请求中的IP清单复制到ICMP应答中。


    ICMP地址请求结构

    还有一个最大的问题,IP首部中只有有限的空间存放IP地址。首先IP首部最多包含15个32bit的字(即60个字节)。由于IP首部固定长度为20字节,RR选项用去3个字节,还有37个字节存放IP地址清单,也就是说只能存放9个IP地址。

    code是一个字节,指明IP选项的类型。对于RR选项来说,它的值为7。len是RR选项总字节长度,这种情况下为39。

    ptr称作指针字段。它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值是4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12,16,最大到36.当记录下9个IP地址后,ptr的值为40,表示清单已满。

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

    通常的例子

    我们举一个R选项进行运行的ping程序,在主机svr4上运行ping程序到主机slip一个中间路由器将处理这个数据报。下面是svr4输出的结果:


    PING输出结果

    分组所经过的四站如下图所示,每一站将自己的IP地址加入返回IP数据报的清单中。


    Ping过程示意

    路由器bsdi在不同方向上分别加入了不同的IP地址。它始终是把出口的IP地址加入清单。我们还可以看到,当ICMP回显应答到达原始系统(svr4)时,它把自己的入口IP地址也加入清单中。

    IP的时间戳选项

    IP的时间戳选项和记录路由选型类似。IP时间戳选项的格式如图:


    IP时间戳选项结构

    时间戳选项的代码为0x44。其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和执行下一个可用空间的指针。
    接下来的两个字段是4bit的值:OF表示溢出字段,FL表示标志字段。

    IP标志位描述

    如果路由器没有空间而不能增加时间戳选项,它将增加溢出字段的值。

    小结

    ping程序是对两个TCP/IP系统连通性进行测试的基本工具。它只利用 ICMP回显请求和回显应答报文,而不用经过传输层(TCP/UDP)。Ping服务器一般在内核中实现ICMP的功能。

    相关文章

      网友评论

          本文标题:TCP-IP详解卷1:协议读书笔记_7

          本文链接:https://www.haomeiwen.com/subject/bnzlectx.html