【网络】ICMP消息与ARPing详解

文章目录

1、ICMP消息与ARPing详解

ICMP(Internet Control Message Protocol)

基本概念

ICMP是网络层协议,主要用于网络诊断和错误报告。

常见ICMP消息类型

  • Echo Request/Reply(ping命令使用)
  • Destination Unreachable(目标不可达)
  • Time Exceeded(超时,traceroute使用)
  • Redirect(重定向)
  • Source Quench(源抑制)

ARP(Address Resolution Protocol)

基本概念

ARP是链路层协议,用于将IP地址解析为MAC地址。

ARP工作原理

  1. 主机发送ARP广播询问"谁有这个IP地址?"
  2. 目标主机回复自己的MAC地址
  3. 发送方缓存此IP-MAC映射

ARPing工具

定义

ARPing是一个使用ARP协议而不是ICMP来检测主机存活的网络工具。

使用场景

使用ARPing的场景

bash 复制代码
# 1. 检测局域网主机是否存活(即使ICMP被禁用)
arping 192.168.1.100

# 2. 获取设备的MAC地址
arping -c 1 192.168.1.1

# 3. 检测IP地址冲突
arping -D 192.168.1.50
# 如果返回多个MAC地址,说明存在IP冲突

# 4. 定位网络中的设备
arping -c 2 -I wlan0 192.168.1.254

# 5. 检查ARP缓存是否有效
arping -U 192.168.1.1

使用ICMP Ping的场景

bash 复制代码
# 1. 测试端到端网络连通性
ping google.com

# 2. 跨网段网络测试
ping 8.8.8.8

# 3. 测量网络延迟和丢包率
ping -c 10 -i 0.2 192.168.1.1

# 4. 持续监控网络状态
ping -t 192.168.1.1

故障排查流程示例

场景:无法访问某局域网设备

bash 复制代码
# 步骤1:先用ARPing检查设备是否在本地网络
$ arping -c 2 192.168.1.100
ARPING 192.168.1.100 from 192.168.1.10 eth0
Unicast reply from 192.168.1.100 [00:11:22:33:44:55]  0.543ms
# ✅ 设备在线,获取到MAC地址

# 步骤2:再用ICMP Ping测试网络连通性
$ ping -c 2 192.168.1.100
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0.567ms
# ✅ ICMP也可达

# 步骤3:如果ICMP不通但ARPing通,可能是防火墙问题
$ ping 192.168.1.100
# 无响应 ❌
$ arping 192.168.1.100
# 有响应 ✅
# 结论:目标主机禁用了ICMP回应,但ARP正常工作

当ICMP不通但ARPing通时,通常是以下几种情况:
主要原因分析

bash 复制代码
1. 目标主机防火墙禁ping(最常见)
bash
# 检查目标主机的防火墙设置(如果可访问)

# Linux系统常见检查
# 查看iptables规则
sudo iptables -L -n | grep icmp
sudo iptables -L -n | grep INPUT | grep DROP

# 查看firewalld规则(CentOS/RHEL/Fedora)
sudo firewall-cmd --list-all | grep icmp

# Windows系统
# 通常Windows防火墙默认禁ping
# 可检查:控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则
2. 网络设备过滤ICMP
bash
# 可能是中间路由器/交换机/防火墙设备过滤了ICMP
# 检查方法:
traceroute -n 192.168.1.100
# 如果到某一跳后停止,可能是该设备过滤ICMP
3. 目标系统ICMP配置
bash
# Linux系统检查ICMP回应设置
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
# 0 = 允许回应(默认)
# 1 = 禁止回应

# 临时开启(如果可访问目标机)
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# 永久开启(需要root)
echo "net.ipv4.icmp_echo_ignore_all = 0" >> /etc/sysctl.conf
sysctl -p
相关推荐
珠***格1 天前
双碳目标下:四可装置如何助力光伏消纳与碳数据上报
网络·人工智能·分布式·安全·边缘计算
mounter6251 天前
绕过主机:通过 Devmem TCP 运行 RDMA 应用
网络·网络协议·tcp/ip·rdma·devmem
我星期八休息1 天前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
科力锐品牌君1 天前
行业龙头|科力锐全链路防勒索 + 多中心容灾方案,构筑河南翔宇医疗业务安全闭环!
网络·数据库·分布式·安全·数据安全·备份
2401_868534781 天前
C语言与C++在基础语法上的区别
网络·网络协议
黄俊懿1 天前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第三节:CDN扩展-多地址直连
网络·计算机网络·架构·系统架构·cdn·dns·架构设计
Dr.kangder1 天前
嵌入式总线设备解析——TTE总线应用与实践
开发语言·网络·算法·嵌入式·多任务·同步机制
数据知道1 天前
IDOR 不安全的直接对象引用:API 越权实战检测
java·开发语言·网络·安全·网络安全
WHS-_-20221 天前
基于网络感知自适应树与辅助路由加速地理分布式机器学习
网络·分布式·机器学习
果果燕1 天前
实习笔记(二)NFS 嵌套挂载问题完整复盘
linux·服务器·网络