ICMP协议是一个网络层的协议
它的功能主要下面几点:
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
- 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通(也就是通过ICMP协议类似于ping)。
- ICMP也是基于IP协议工作的。但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;
- ICMP只能搭配IPv4使用。如果是IPv6的情况下, 需要是用ICMPv6;
大概工作流程如下:
ICMP的报文格式
其中就是通过类型来返回错误信息
类型:
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的在网络层。而端口号,是用于传输层的。在ICMP中根本就不关注端口号这样的信息,也不会交给一般的上层应用,仅在双方网络层相互交互。