ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,属于网络层协议,用于在IP主机、路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等。
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通。但是IP协议并不提供可靠传输,如果包丢了,IP协议并不能通知传输层是否丢包以及丢包的原因。
- ICMP功能
ICMP是一种面向连接的协议,用于传输出错报告控制信息。它对于网络安全具有极其重要的意义。
ICMP主要功能包括:
(1)确认IP包是否成功到达目标地址;
(2)通知在发送过程中IP包被丢弃的原因;
(3)ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;
(4)ICMP只能搭配IPv4使用。如果是在IPv6的情况下,需要是用ICMPv6。
- ICMP的报文格式
ICMP大概分为两类报文:
(1)一类是通知出错原因
(2)一类是用于诊断查询
- ping命令
ping命令底层使用的是ICMP协议。
注意:这里ping的是域名,而不是URL。一个域名可以通过DNS协议解析成IP地址。
ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存周期)。
ping命令首先会发送一个ICMP Echo Request给对端,对端收到以后,会返回一个ICMP Echo Reply。
一个需要特别注意的问题:
Telnet是23号端口,ssh是22号端口,那么ping是什么端口呢?
正解:ping命令基于ICMP,是在网络层。而端口号是传输层的内容,在网络层无端口号这个概念!