ICMP:Internet 控制报文协议和Ping程序

1.ICMP的功能:ICMP经常被认为是IP层的一个组成部分,可以向用户进程发送差错报文,也可以被IP层,TCP或UDP使用。ICMP报文是在IP数据报内部传输的。图1 位ICMP封装IP数据报内部的图片,图2 是ICMP报文。

ICMP:Internet 控制报文协议和Ping程序

图 1


ICMP:Internet 控制报文协议和Ping程序

图2

2.类型码:类型字段由类型字段和代码字段来共同决定。

ICMP的报文类型如图3所示:

ICMP:Internet 控制报文协议和Ping程序

图 3 ICMP报文类型

由图可看出如果发送Ping指令(为了检测另一台主机是否可达)类型为0或8,代码为0。

3.下面各种情况不会导致产生ICMP差错报文:

(1)ICMP差错报文;

(2)目的地址是广播地址或多播地址的IP数据报;

(3)作为链路层广播的数据报;

(4)不是IP分片的第一片;

(5)源地址不是单个主机数据报,就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

4.ICMP地址掩码请求与应答

该请求用于无盘系统在引导过程中系统广播它的ICMP请求报文来获取自己的子网掩码。

由图3可知ICMP地址掩码请求与应答的类型是17或18,代码为0,图4位ICMP地址掩码请求与应答报文。

ICMP:Internet 控制报文协议和Ping程序

图 4

其中标识符与***是发送端任意设定的,这也值在应答中被返回,来作为应答与请求的匹配。

5.ICMP时间截请求与应答

图片如5所示:

ICMP:Internet 控制报文协议和Ping程序

图 5 ICMP时间截请求和应答报文

请求端填写发送时间截,然后发送报文。应答系统收到请求填写接受时间截,大所致情况下后面两个字段都设成相同的值。

Ping程序:目的是为了测试另一台主机是否可达。

一般来说,如果不能Ping到某一台主机,那么就不能Telnet 或者 FTP到那台主机。反过来,如果不能Telnet到某台主机那么通常可以用Ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的往返时间,以表明该主机离我们“多远”。

Ping程序可以作为诊断工具来深入剖析ICMP。Ping还给我提供了检测IP记录路由和时间截选项机会。(随着Internet安全意识的增强,出现了提供访问的控制清单的路由器和防火墙,那么这样的断言就不在成立了)

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

下面我们就以ICMP的回显请求和回显应答作为例子方便Ping的使用和理解(啥是回显请求呢?回显请求就是显示正在执行批处理命令或者执行的结果啦!):

ICMP回显请求或回显应答的格式如下:

ICMP:Internet 控制报文协议和Ping程序