小白学网络之七_TCPIP协议之PING程序

              今天看到了老周写的一篇文章,写得蛮好的,一个人,在职场上,一定要目标明确,每做一件事情,都必须有自己的计划,不能无的放矢,意思就是一定要我自己的目标,千万不要碌碌无为,一定要记住,工作年限,一定不等于工作能力,你也许工作了十年,可能你达到的能力才3年左右。所以,心中一定要时刻的提醒自己。加油。
 
             今天我们来看一下大名鼎鼎的PING程序,这个工具,我们经常使用,一般上不了网的时候,一般都会妆模作样是的,来敲下PING这个命令,但是一直都不知道,从我们敲下PING这个命令以后的过程是怎样的,我们今天来看一下发生了什么。

            “PING”这个名字源于声呐定位操作。目的是为了测试另一台主机是否可以到达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。 上一章,我们知道,ICMP就是一个IP数据报。


            一般来说,如果不能PING到某台主机,那么就不能Telnet或者FTP到那台主机。后面我们知道,一台主机的可达性可能不只取决于IP层是否可达。还取决于使用哪种协议以及端口号。PING程序还能测试到这台主机的往返时间,以表明该主机离我们有多远。


             我们称发送回显请求的PING程序为客户,而称作PING的主机为服务器。大多数的TCP/IP实现都在内核中直接支持PING服务器。
         

             ICMP回显请求和回显应答报文如下:

             

             

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

            在局域网上运行PING程序的结果输出一般有如下的格式:


             

         
           当返回ICMP回显应答时,要打印出序列号和TTL,并计算往返时间(TTL位于IP首部中的生存时间字段,当前的BSD系统的PING程序每次收到回显应答时都打印出收到的TTL).
         
           PING程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在ICMP报文中的时间值,即是往返时间。
         
           注意,在发送端bsdi上,往返时间的计算结果都为0ms,这是因为程序使用的计时器分辨率低的原因。
         
           输出第一行包括目的主机的IP地址,尽管指定的是它的名字。这说明名字已经经过解析器被转换成IP地址了。我们将在后面介绍解析器和DNS。现在我们发现如果敲入PING命令,几秒钟过后就会在第一行打印出IP地址,DNS就是利用这段时间来确定主机名说对应的IP地址。

           本例中的TCMDUMP输出如图所示。


            

         
          从发送回显请求道收到回显应答,时间间隔始终未3.7ms,还可以看到,回显请求大约每隔1秒钟发送一次。
         
          通常,第1个往返时间值要比其他的大。这是由于目的端的硬件地址不在ARP高速缓存中的缘故。正如我们在前面看到的那样,在发送第一个回显请求之前要发送一个ARP请求并接收ARP应答,
这需要花费几毫秒的时间。下面的例子说明了这一点:

            

            


             WAN输出:
         
            在一个广域网上,结果会有很大的不同,下面的例子是在某个工作日的下午,即internet具有正常通信量时的运行结果:

            

           

            这里的序号1,2,3,4,6,10,11,12,13的回显请求或回显应答在某个地方丢失了。另外,我们注意到往返时间发生了很大的变化。
         
            通过广域网还有可能看到重复的分组(即相同序列号的分组被打印两次货更多次),失序的分组(序列号为N+1的分组在N的分组之前打印)。
         
            线路SLIP链接
         
           让我们再来看看SLIP链路上的往返时间,因为它们经常运行于低速的异步方式,如9600b/s或更低,针对这个例子,我们可把主机和slip之间的SLIP链路传输速率设置为1200b/s.


            默认情况下发送ICMP报文有56个字节。加上20个字节的IP首部和8个字节的ICMP首部,IP数据报的总长度为84字节(我们可以运行tcpdump -e命令查看以太网数据帧来验证这一点)。另外还要至少增加两个额外的字节,在数据报的开始和结尾加上END字符。此外,SLIP帧还有可能增加一些字节,但这取决于数据报中的每个字节的值。对于1200b/s这个速率来说,由于每个字节8bit数据,1bit起始位1bit结束位,因此传输速率是每秒120个字节,或者说每个字节8.33ms.


            


             拨号SLIP链路
         
            对于拨号SLIP链路来说,情况有些变化,因为在链路的两端增加了调制解调器。用在sun和netb系统之间的调制解调器提供的是V.32调制方式(9600b/s),V.42错误控制方式(也称作LAP-M)以及V.42bis数据压缩方式。很多因素都有可能影响。调试解调器带来了时延。随着数据的压缩,分组长度可能会减小,但是由于使用了错误控制协议,
分组长度又可能会增加。

             

              


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


             这个过程听起来简单,但存在一些缺陷。源端主机生成RR选项,中间路由器对RR选项的处理,以及把ICMP回显请求中的RR清单复制到ICMP回显应答中,所有这些都是选项功能。幸运的是,现在的大多数系统都支持这些选项功能,只是有一些系统不把ICMP请求中的IP地址复制到ICMP应答中。
 
             但是,最大的问题是IP首部中只有有限的空间来存放IP地址。IP首部中的首部长度字段只有4bit,因此整个IP首部最长只能包括15个32bit长的字(即60个字节)。由于IP首部固定长度为20字节,RR选项用去3个字节,这样只剩下37个字节来存放IP地址清单,也就是说只能存放9个IP地址。对于早期的ARPANET来说,9个IP地址似乎是很多了但是现在看来是非常有限。IP数据报中的RR选项的一般格式如图所示:


             


            code是一个字节,指明IP选项的类型。对于RR选项来说,它的值为7。len是RR选项总字节长度,在这种情况下为39.(尽管可以为RR选项设置比最大长度小的长度)
但是PING程序总是提供39字节的选项字段,最多可以记录9个IP地址。由于IP地址首部中留给选项的空间有限,它一般情况都设置成最大长度。


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


             RFC791指定路由器记录出口IP地址。
           
             IP时间戳选项
           

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


             

           
             时间戳选项的代码为0x44,其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和指向下一个可用空间的指针。
           

             接下来的两个字段是4bit的值:OF表示溢出字段,FL表示标志字段。时间戳选项的操作时根据标志字段来进行。如图所示:


            

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

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

           PING程序时对两个TCP/IP系统联通性进行测试的基本工具。它只利用ICMP回显请求和回显应答报文,而不用经过传输层(TCP/UDP).PING服务器一般在内核中实现ICMP的功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值