【Linux】ICMP
一、ICMP协议
ICMP协议是一个网络层协议,基于IP协议;一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否通畅;但是IP协议并不提供可靠传输。如果进行丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
二、ICMP功能
ICMP的主要功能包括:
- 确认IP报是否成功到达了目标地址
- 通知在发送过程汇总IP报被丢失的原因
- ICMP也是基于IP协议工作的,但是他并不是传输层的功能,因此人们仍然把它归结为网络层协议
- ICMP只能搭配IPv4来使用,如果是IPv6的情况下,需要使用ICMPv6
三、ICMP的报文格式
关于报文格式,了解一下即可:
ICMP大概分为两类报文:
- 一类是通知出错原因
- 一类是用于诊断查询
类型(十进制数) | 内容 |
0 | 回送应答 |
3 | 目标不可达 |
4 | 原点抑制 |
5 | 重定向或者改变路由 |
8 | 回送请求 |
9 | 路由器公告 |
10 | 路由器请求 |
11 | 超时 |
17 | 地址子网请求 |
18 | 地址子网应答 |
四、两个命令
4.1 ping命令
- 在这里,ping的是域名。而不是url!!!一个域名可以通过DNS解析成IP地址。
- ping命令不光可以验证网络的联通性,同时也会统计响应时间和TTL(IP报中的Time To Live,生存周期)。
- ping命令会先发送一个ICMP Echo Request给对端
- 对端接收到之后,会返回一个ICMP Echo Reply
4.2 traceroute命令
这个命令也是基于ICMP协议实现的,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。
4.3 一个小坑
有些面试官可能会问:telnet是23号端口,ssh是22号端口,那么ping是什么端口??千万注意:这是面试官的圈套。
ping命令和traceroute命令都是基于ICMP协议的,是在网络层上的,但是端口号是传输层的内容,在ICMP中根本就不关注端口号这样的信息。