网络层协议 -- 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 消息类型。
相关推荐
爱和冰阔落21 分钟前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall2 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
ö Constancy3 小时前
一台电脑的硬件组成与作用:按功能分类详解(Windows 与 Linux 视角)
linux·windows·电脑
江湖有缘3 小时前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork
无奈笑天下12 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
我不会插花弄玉14 小时前
6.传输层协议UDP【由浅入深-网络】
网络·网络协议·udp
Rabitebla15 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理15 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州15 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
xbzb18 小时前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定