关于ICMP“端口号“问题


有被朋友问:ICMP的端口号是多少呢?
当时我也懵,记得ICMP是Internet貌似没有端口号吧?这个不太清楚啊。
然后Google了一圈,做一下总结。

ICMP简介:
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP功能:
从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:
侦测远端主机是否存在。
建立及维护路由资料。
重导资料传送路径。

ICMP报文格式:
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文。
IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式;代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。RFC定义了11种ICMP报文格式,具体如下:

类型代码 类型描述
0 响应应答(ECHO-REPLY)
3 不可到达
4 源抑制
5 重定向
8 响应请求(ECHO-REQUEST)
11 超时
12 参数失灵
13 时间戳请求
14 时间戳应答
17 地址掩码请求
18 地址掩码应答

补充:
ICMP是网络层协议;
Ping使用的是ICMP协议,ICMP不像http,FTP应用层有传输层的端口号,(它们使用TCP的端口号80和20/21)。ICMP直接封装在IP包内,所使用IP协议号为1。
总结:Ping用到的是ICMP协议。不是端口。ICMP没有端口号可言。