ICMP协议

ICMP协议

  ICMP是Internet Control Message Protocol的缩写,即互联网控制报文协议。
  ICMP是IP协议的一个补充协议,IP和ICMP都位于网络层上。ICMP是为在IP网络上发送控制和测试报文而设计的。TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是传输层协议,工作在IP之上,而ICMP是和IP并列的。
  ICMP的报文格式参考:rfc792


  报文对应的功能是通过Type字段来表示的。从报文格式可以看出,Type字段占一个字节,最多可以表示256个type,实际使用的有30多个,常用的如下表所示(参考 IANA ICMP Type Numbers):


Type值意义
0回声应答
3目标不可达
4源抑制
5重定向
6交替的主机地址
8回声请求
9路由器广播
10路由器请求
11超时
12参数问题
13时间戳请求
14时间戳应答
15信息请求
16信息应答
17地址掩码请求
18地址掩码应答
30探索路由


  最重要也是最常用的两种报文是回声请求(Type为8)和回声应答(Type为0)。ping命令就是使用这两种报文来检测网络的连通性,以及网络延时。
  下面我们使用ping来检测本机与www.kernel.org的连通性和网络延时:

[root@localhost ~]# ping www.kernel.org
PING sin.git.kernel.org (147.75.46.191) 56(84) bytes of data.
64 bytes from 147.75.46.191 (147.75.46.191): icmp_seq=1 ttl=49 time=297 ms
64 bytes from 147.75.46.191 (147.75.46.191): icmp_seq=2 ttl=49 time=293 ms
64 bytes from 147.75.46.191 (147.75.46.191): icmp_seq=3 ttl=49 time=295 ms
64 bytes from 147.75.46.191 (147.75.46.191): icmp_seq=4 ttl=49 time=287 ms
^C
--- sin.git.kernel.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 287.690/293.470/297.320/3.681 ms
[root@localhost ~]#

  ping命令会向www.kernel.org发送回声请求报文,www.kernel.org收到请求后会返回回声应答报文,这样通过报文的发送和接收,就可以检测本机与www.kernel.org是否连通。输出的内容显示,本机与www.kernel.org是连通的。
  ping命令在解决网络故障时是非常有用的工具,详细使用方法参考ping命令
参考:RFC 792 Internet Control Message Protocol