Linux网络协议ARP IGMP ICMP的理解

概念理解:

把这三种关键的协议想象成一个公司的不同部门:

ARP: 像是公司的内部电话薄,负责查询内部同事(同一个网络的设备)的分机号(MAC地址)。

ICMP:像是公司的后勤和运维部门,负责测试网络连通性(ping)报告错误(目标不可达)等,保证网络基础设备的健康。

IGMP:像是公司的内部广播小组,负责管理谁想接收公司的群组广播(组播流量)。

1、ARP - 地址解析协议

  • 工作层次:数据链路层(第二层)网络层(第三层)之间。
  • 核心功能:根据IP地址查询对应的MAC地址(物理地址)。

为什么要使用ARP?

局域网(LAN)中,数据包的最终传输是靠MAC地址而不是IP地址。当一台设备想要和同网段的另一台设备通讯的时候,他只知道目标地址的IP地址,但是不知道目标地址的MAC地址,数据帧就无法被正常组装和发送。
为什么在第二层

  • ARP报文是直接封装在数据链路层的帧中传输的(如:以太网帧)。他不使用IP协议。
  • 工作范围被限制在了一个局域网中,这是典型的数据链路层特征。
    **数据帧结构示意
test 复制代码
[ 以太网帧头 | ARP请求/应答报文 | 帧校验 ]

其中以太网帧头包含了源和目标的MAC地址。

工作原理:

ARP使用广播 的方式来查询:
1.1、ARP请求(广播) :你的设备会向整个局域网广播一个消息:"大家好,我是 192.168.1.10 ,我的mac地址是A1:A2:A3:A4:A5:A6 。请问IP地址是 192.168.1.20 的设备,你的mac地址是什么?"
1.2、ARP回复(单播) :局域网中的所以设备都会收到这个广播,但是只有IP地址是 192.168.1.20 的设备会回应:"你好,我是 192.168.1.20 我的mac地址是:B1:B2:B3:B4:B5:B6。"

然后地址就被记录在了ARP表里。

Linux中的相关命令

  • arp 和 ip neigh: 查看本地的ARP缓存,这个表记录了IP地址和MAC地址的的对应关系,由一定的有效期。
c 复制代码
$ ip neigh
192.168.1.1 dev eth0 lladdr cc:cc:cc:cc:cc:cc REACHABLE
192.168.1.20 dev eth0 lladdr b1:b2:b3:b4:b5:b6 STALE
  • arping :用于手动发送ARP请求包,常用语检测IP冲突或者测试网络连通性。

2、ICMP - 互联网控制消息协议

  • 工作层次:网络层(第三层)
  • 核心功能: 用于在IP主机、路由器之间传递控制消息,如网络不通,主机是否可达,路由是否可用等。通常被认作是IP协议的一个组成部分。

为什么要使用ICMP?

IP协议本身就是"尽力而为"的,不提供差错报告和诊断机制。ICMP就是为了弥补这个缺陷而生的,负责网络的诊断。
常见应用:

  • Ping命令: 最著名的ICMP应用。ping 发送一个 ICMP Echo Request 消息到目标主机,如果目标主机在线且通畅,它会回复一个 ICMP Echo Reply。
  • Traceroute命令: 用于追踪数据包到达目标主机所经过的路由路径。它通过巧妙设置IP包的TTL(生存时间)值,并捕获路由器返回的 ICMP Time Exceeded 消息来实现。
  • 错误报告: 当路由器无法将数据包发送到目的地时,它会向源IP发送一个 ICMP Destination Unreachable 消息。

linux中的向命令

  • ping <IP地址>:测试网络连通性。
  • traceroute <IP地址> 或 tracepath <IP地址>:追踪路由路径。

3、IGMP - 互联网组管理协议

  • 工作层次:网络层(第三层)
  • 核心功能:在IPv4中管理组播组成员。它允许主机告诉本地路由器:"我想加入某个组播组"或者"我不想在接收某个组播组的流量了"。

为什么需要IGMP?

想象一下网络电视,如果服务器为每个请求者都发送一份独立的视频流(单播),网络带宽就会迅速的耗尽。组播解决了这个问题:服务器只发送一份视频流,由网络路由器负责复制并转发给所以声明要接受该流量的主机。

工作原理

1、一个组播源开始向另一个特定的组播IP发送数据。

2、局域网中的设备如果对这个组播内的内容感兴趣,会通过IGMP想本地路由器发送一个 Membership Reprot (成员报告)消息,说"我要加入这个组"。

3、路由器在接收到报告之后,就知道需要将发往该组播地址的数据流转发到这个设备所在的网段。

4、路由器会定期的发送 Membership Query (成员查询)消息,询问是否还有主机对组播流量感兴趣,如果摸个组中没有设备回应,路由器就会停止想该网段转发该组播流量。
在Linux中的相关命令:

  • netstat -g:显示当前主机加入了哪些组播组。
  • ss -g:同样可以显示组播组成员信息。
相关推荐
DeeplyMind3 小时前
第10章:中断处理-6:Implementing a Handler
linux·驱动开发
jerryinwuhan3 小时前
Linux常用命令练习题
linux·运维·服务器
傻啦嘿哟3 小时前
实战:用Elasticsearch构建爬虫数据搜索引擎
运维·jenkins
tang777893 小时前
对抗高级反爬:基于动态代理 IP 的浏览器指纹模拟与轮换策略
网络·网络协议·tcp/ip
Ryan ZX3 小时前
CentOS 7.x 升级 OpenSSH 10.1 与 OpenSSL 3.5.4版本(2025)
linux·运维·centos
好记忆不如烂笔头abc3 小时前
Configuration of TCP/IP with SSL and TLS for Database Connections
数据库·网络协议·ssl
鸠摩智首席音效师3 小时前
如何在 Linux 中创建自签名 SSL 证书 ?
linux·ssl
qing222222223 小时前
Ubuntu设置程序开机自启动:基于.service文件实现
linux·运维·ubuntu
CtrlZ学习录3 小时前
笔记:现代操作系统:原理与实现(8)
linux·笔记·架构·开源