ICMP的应用举例:PING和TraceRoute的原理

来源:互联网 发布:呼叫中心 与 人工智能 编辑:程序博客网 时间:2024/05/29 12:50

1、PING


在学习计算机软件的过程中,我们可能经常会打开DOS窗口使用ping这个指令,今天我们就了解一下ping的原理。

PING(Packet InterNet Groper)分组网间探测,用于测试两个主机之间的连通性。ping使用了ICMP回送请求与回送回答报文。
如下图如所示,win+R,输入cmd打开DOS窗口,输入“ping hostname”(这里的hostname是要测试连通性的主机名或者它的IP地址):

ping

可以看到,PC机一连发出四个ICMP回送请求报文,如果127.0.0.1正常工作而且响应这个ICMP回送请求报文,那么它就发回ICMP回送回答报文,由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间。

最后显示出的是统计结果:发送到哪个IP地址,发送的、收到的和丢失的分组数。往返时间的最小值、最大值和平均值。


2、TraceRoute


TraceRoute用来跟踪一个分组从源点到终点的路径。在windows操作系统中这个命令是tracert。

TraceRoute从源主机向目的主机发送一连串的IP数据包,数据报中封装的是无法交付的UDP用户数据报。第一个P1的生存时间TTL设置为1。当P1达到路径上的第一个路由器R1时,R1先收下它,接着把TTL的值减1。由于TTL的值等于零了,R1就把P1丢弃了,并向源主机发送一个**ICMP时间超过差错报告报文**。源主机接着发送第二个数据报P2,并把TTL设置为2。P2先到达路由器R1,R1收下,把TTL减1再转发给路由器R2。R2收到P2时TTL为1,但减1后TTL变为零了。R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文......TraceRoute每次将送出的报文的TTL加1来发现另一个路由器,这样一直继续下去,当最后一个数据报刚刚到达目的主机的时候,数据报的TTL是1。主机不转发数据包也不把TTL值减1。目的主机要向主机发送**ICMP终点不可达差错报告报文**。这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的ICMP报文正好给出了源主机想知道的路由信息——到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。

下图是PC机向新浪网的邮件服务器mail.sina.com.cn发出的tracert命令后所获得的结果。每一行有三个时间出现,是因为对应于每一个TTL值,源主机要发送三次同样的IP数据报。

这里写图片描述


注释:
ICMP终点不可达差错报告报文
当路由器或者主机不能交付数据报时就向源点发送终点不可达报文。

ICMP时间超过差错报告报文
(1)当路由器收到生存时间(TTL)为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。
(2)当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。

1 0