网络层协议 -- 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 消息类型。
相关推荐
安科士andxe2 小时前
深入解析|安科士1.25G CWDM SFP光模块核心技术,破解中长距离传输痛点
服务器·网络·5g
YJlio5 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
CTRA王大大5 小时前
【网络】FRP实战之frpc全套配置 - fnos飞牛os内网穿透(全网最通俗易懂)
网络
小白同学_C5 小时前
Lab4-Lab: traps && MIT6.1810操作系统工程【持续更新】 _
linux·c/c++·操作系统os
今天只学一颗糖5 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
儒雅的晴天6 小时前
大模型幻觉问题
运维·服务器
testpassportcn6 小时前
AWS DOP-C02 認證完整解析|AWS DevOps Engineer Professional 考試
网络·学习·改行学it
通信大师7 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
不做无法实现的梦~7 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
Tony Bai8 小时前
告别 Flaky Tests:Go 官方拟引入 testing/nettest,重塑内存网络测试标准
开发语言·网络·后端·golang·php