网络层协议 -- ICMP协议

目录

ICMP协议

ICMP功能

ICMP协议格式

ping命令

一个值得注意的坑

traceroute命令

[CMP 的优缺点](#CMP 的优缺点)

[ICMP 的安全性](#ICMP 的安全性)


ICMP协议

ICMP(Internet Control Message Protocol,互联网控制消息协议)是 TCP/IP 协议族中的一种网络层协议,但IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因,因此ICMP协议就用于在 IP 网络中传递控制消息和错误报告。

  • ICMP 主要用于诊断网络问题、检测网络可达性和报告错误条件。
  • ICMP 是网络管理和故障排除的重要工具,常见的工具如 ping 和 traceroute 都依赖于 ICMP。

ICMP功能

ICMP主要的功能包括

  • 确认IP包是否成功到达目的地址
  • 通知再发送过程中IP包被丢包的原因
  • ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们依旧把它归结为网络层协议。
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6协议。

举个例子

当主机A向主机B发送数据时,但是主机B已经离线或者关机时

当数据包抵达主机B所在局域网的入口路由器时,路由器为了获取主机B的MAC地址,会向其发送ARP请求。然而,由于主机B已离线,路由器在多次尝试且未收到任何响应后,便会向主机A返回一个ICMP Destination Unreachable(目标不可达)报文。此时,主机A即可得知发送至主机B的数据无法送达。

ICMP协议格式

关于报文格式如下:

仅作了解

ICMP 消息分为两大类:

  1. 错误报告消息
    • 用于报告网络中的错误条件,如目的地不可达、超时等。
  2. 查询消息
    • 用于网络诊断,如回显请求(Echo Request)和回显应答(Echo Reply)。

其中报文中第一个字段类型,填充不同内容,会指定不同的类型,其ICMP包常见类型如下:

ping命令

ping命令就是ICMP的最常应用场景之一,其主要作用便是用于网络连通信测试。

使用 ping 工具检测目标设备是否可达。在此ping以下百度试试

  • 注意,此处ping的是百度的域名,该域名会由DNS解析成IP地址
  • ping命令不仅能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存时间)。
  • ping命令会先发送一个ICMP Echo Request给对端。
  • 对端接收到之后,会返回一个ICMP Echo Reply。

一个值得注意的坑

如果问你:telnet是23端口,ssh是22端口,那么ping是什么端口?

答案:ping命令是基于ICMP协议的,ICMP协议在网络层,并非传输层。而端口号是传输层的内容。所以ICMP根本就不关心端口号,所以ping并不在什么端口上。

traceroute命令

除了ping命令,traceroute命令也是ICMP另一个最常应用场景之一,其主要作用是检测数据包的传输路径。

在使用该命令之前,还是要先下载

复制代码
sudo apt install traceroute

之后,我们可以尝试检测向百度发送数据包的传输路径。

CMP 的优缺点

优点:

  • 简单高效:ICMP 消息结构简单,开销小。
  • 广泛支持:几乎所有支持 IP 协议的设备都支持 ICMP。
  • 诊断功能强大:提供丰富的网络诊断和错误报告功能。

缺点:

  • 安全性问题:ICMP 可能被用于网络攻击(如 Ping Flood、Smurf Attack)。
  • 不可靠性:ICMP 不提供可靠性保证,消息可能丢失或被忽略。

ICMP 的安全性

为了提高 ICMP 的安全性,可以采取以下措施:

  • 防火墙过滤:配置防火墙规则,限制 ICMP 消息的传输。
  • 速率限制:限制 ICMP 消息的发送速率,防止网络攻击。
  • 禁用不必要的 ICMP 功能:在网络设备上禁用不必要的 ICMP 消息类型。
相关推荐
milo.qu5 分钟前
RockyLinux9.7 docker部署Jisti Meet
linux·docker·容器
GanGanGanGan_9 分钟前
CentOS 7.9 glibc 2.17 源码编译升级到 glibc 2.31
linux·运维·centos·glibc
一袋米扛几楼9812 分钟前
【高级网络】虚拟化与云计算 (Virtualization & Cloud) 深度解析
网络·网络工程
charlie11451419126 分钟前
嵌入式Linux驱动开发——class 和 device 模型 - 自动创建设备节点的幕后机制
linux·运维·驱动开发
杨云龙UP2 小时前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
枳实-叶2 小时前
【Linux驱动开发】第四天:dmesg日志全解+驱动加载失败极速排查
linux·运维·驱动开发
wdfk_prog3 小时前
正常关闭虚拟机时,不要点“关机”,而要点“关闭客户机”
linux·c语言·网络·ide·vscode
fish_xk4 小时前
Linux开方工具
linux·运维·服务器
bzmK1DTbd4 小时前
Servlet 4.0新特性:HTTP/2与异步处理支持
网络协议·http·servlet
@insist1235 小时前
信息安全工程师-网络安全审计产品图谱与实战应用全解
网络·安全·软考·信息安全工程师·软件水平考试