【网络协议栈】TCP/IP协议栈中重要协议和技术(DNS、ICMP、NAT、代理服务器、以及内网穿透)-2. ICMP

时间:2024-12-11 07:02:44

ICMP协议是一个网络层的协议
它的功能主要下面几点:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因
  3. 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通(也就是通过ICMP协议类似于ping)。
  4. ICMP也是基于IP协议工作的。但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;
  5. ICMP只能搭配IPv4使用。如果是IPv6的情况下, 需要是用ICMPv6;

大概工作流程如下:
在这里插入图片描述
在这里插入图片描述

ICMP的报文格式

在这里插入图片描述
其中就是通过类型来返回错误信息

类型:
在这里插入图片描述

ping命令底层就是通过原始套接字调用ICMP实现的
在这里插入图片描述
注意:

  1. 此处 ping 的是域名,而不是url。 一个域名可以通过DNS解析成IP地址。
  2. ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期)。
  3. ping命令会先发送一个 ICMP Echo Request给对端,对端接收到之后, 会返回一个ICMP Echo Reply

在这里插入图片描述
一个值得注意的坑:
有些面试官可能会问: telnet是23端口, ssh是22端口, 那么ping是什么端口
ping是没有端口号的,它是基于ICMP的在网络层。而端口号,是用于传输层的。在ICMP中根本就不关注端口号这样的信息,也不会交给一般的上层应用,仅在双方网络层相互交互。