一 概述:
(1)ICMP(Internet Control Message Protocol):Internet控制报文协议:
1.功能:ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
2. ICMP是IP层协议,ICMP报文作为IP数据报的数据,加上IP数据报的首部,组成IP数据报发送出去。
二 ICMP报文:
(一)格式:(首部数据8字节)
ICMP报文的前四个字节是统一的格式,共有三个字段:类型(15个不同值)、代码(进一步描述同一类型的不同情况)和检验和(用来检验整个ICMP报文)。接着四个字节的内容和ICMP类型有关,最后面的是数据字段,长度取决于ICMP的类型。如下图:
//ubuntu下/usr/include/netinet/ip_icmp.h
struct icmphdr
{
u_int8_t type; /* message type */
u_int8_t code; /* type sub-code */
u_int16_t checksum;
union
{
struct
{
u_int16_t id;
u_int16_t sequence;
} echo; /* echo datagram */
u_int32_t gateway;
/* gateway address */
struct
{
u_int16_t __unused;
u_int16_t mtu;
} frag; /* path mtu discovery */
} un;
};
#define ICMP_ECHOREPLY 0
/* Echo Reply */
#define ICMP_DEST_UNREACH 3
/* Destination Unreachable */
#define ICMP_SOURCE_QUENCH 4
/* Source Quench */
#define ICMP_REDIRECT 5
/* Redirect (change route) */
#define ICMP_ECHO 8
/* Echo Request */
#define ICMP_TIME_EXCEEDED 11
/* Time Exceeded */
#define ICMP_PARAMETERPROB 12
/* Parameter Problem */
#define ICMP_TIMESTAMP 13
/* Timestamp Request */
#define ICMP_TIMESTAMPREPLY 14
/* Timestamp Reply */
#define ICMP_INFO_REQUEST 15
/* Information Request */
#define ICMP_INFO_REPLY 16
/* Information Reply */
#define ICMP_ADDRESS 17
/* Address Mask Request */
#define ICMP_ADDRESSREPLY 18
/* Address Mask Reply */
#define NR_ICMP_TYPES 18
/* Codes for UNREACH. */
#define ICMP_NET_UNREACH 0
/* Network Unreachable */
#define ICMP_HOST_UNREACH 1
/* Host Unreachable */
#define ICMP_PROT_UNREACH 2
/* Protocol Unreachable */
#define ICMP_PORT_UNREACH 3
/* Port Unreachable */
#define ICMP_FRAG_NEEDED 4
/* Fragmentation Needed/DF set */
#define ICMP_SR_FAILED 5
/* Source Route failed */
#define ICMP_NET_UNKNOWN 6
#define ICMP_HOST_UNKNOWN 7
#define ICMP_HOST_ISOLATED 8
#define ICMP_NET_ANO 9
#define ICMP_HOST_ANO 10
#define ICMP_NET_UNR_TOS 11
#define ICMP_HOST_UNR_TOS 12
#define ICMP_PKT_FILTERED 13
/* Packet filtered */
#define ICMP_PREC_VIOLATION 14
/* Precedence violation */
#define ICMP_PREC_CUTOFF 15
/* Precedence cut off */
#define NR_ICMP_UNREACH 15
/* instead of hardcoding immediate value */
/* Codes for REDIRECT. */
#define ICMP_REDIR_NET 0
/* Redirect Net */
#define ICMP_REDIR_HOST 1
/* Redirect Host */
#define ICMP_REDIR_NETTOS 2
/* Redirect Net for TOS */
#define ICMP_REDIR_HOSTTOS 3
/* Redirect Host for TOS */
/* Codes for TIME_EXCEEDED. */
#define ICMP_EXC_TTL 0
/* TTL count exceeded */
#define ICMP_EXC_FRAGTIME 1
/* Fragment Reass time exceeded */
(二)种类:
ICMP报文由两种:ICMP差错报告报文和ICMP询问报文。
几种常见的ICMP报文类型,如下图:
(1)差错报告报文:
(2)ICMP询问报文:
三 ICMP应用举例(ping+traceroute)。
详见ping命令和traceroute命令。