ICMP端口号的深思
朋友面试的时候回来问我:小温,说一下ICMP的端口号是多少呢?
当时我也懵了,我是这样回答的:ICMP是Internet控制报文协议,没有端口号吧?这个不太清楚啊。
呵呵,一个常见的协议问题,很纠结:所以稍作总结:
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报文格式(其中代码为15 信息请求;16 信息应答,的信息报文已经作废),具体如下:
类型代码 类型描述
0 响应应答(ECHO-REPLY)
3 不可到达
4 源抑制
5 重定向
8 响应请求(ECHO-REQUEST)
11 超时
12 参数失灵
13 时间戳请求
14 时间戳应答
17 地址掩码请求
18 地址掩码应答
ICMP报文格式就分析到这里了(后续我会通过抓包的形式截图分析的)。
最后补充一点:
ICMP是网络层协议;
Ping使用的是ICMP协议,ICMP不像http,FTP应用层有传输层的端口号,(它们使用TCP的端口号80和20/21)。ICMP直接封装在IP包内,所使用IP协议号为1。
总结:Ping用到的是ICMP协议。不是端口。ICMP没有端口号可言。