【网络】广播地址工作原理(arp不受广播地址影响)

文章目录

概述

首先广播地址分为二层广播地址和三层广播地址

二层广播地址是固定的,三层是需要设置的,即我们常说的广播地址是三层,例如 一个网卡的有如下设置:

网络:192.168.1.0/24

ip: 192.168.1.10

广播地址:192.168.1.255

二、二层广播地址工作原理详细示例

场景设定

plaintext 复制代码
网络:192.168.1.0/24
广播地址:192.168.1.255 (所有主机网卡都设置这个广播地址)
主机A:IP=192.168.1.100,MAC=aa:aa:aa:aa:aa:aa
主机B:IP=192.168.1.200,MAC=bb:bb:bb:bb:bb:bb
主机C:IP=192.168.1.150,MAC=cc:cc:cc:cc:cc:cc
所有主机都连接到同一个交换机

第一步:主机A想ping主机B (192.168.1.200)

1.1 主机A的思考过程

plaintext 复制代码
"我想和 192.168.1.200 通信,但我不知道它的 MAC 地址。
我需要先通过 ARP 请求获取它的 MAC 地址。"

1.2 ARP 请求包构造(主机A → 广播地址)

plaintext 复制代码
以太网帧头部:
  目标MAC:ff:ff:ff:ff:ff:ff (广播MAC地址)
  源MAC:aa:aa:aa:aa:aa:aa (主机A)
  类型:0x0806 (ARP协议)

ARP数据部分:
  硬件类型:以太网 (0x0001)
  协议类型:IPv4 (0x0800)
  硬件地址长度:6
  协议地址长度:4
  操作码:1 (ARP请求)
  发送方MAC:aa:aa:aa:aa:aa:aa
  发送方IP:192.168.1.100
  目标MAC:00:00:00:00:00:00 (未知,填充为全0)
  目标IP:192.168.1.200

备注:

二层广播MAC(ff:ff:ff:ff:ff:ff):

  • 硬件固定,不可配置
  • 所有广播包的二层目标都是这个
  • 确保物理层所有设备都能收到

1.3 交换机如何处理这个帧

plaintext 复制代码
交换机收到从端口1来的帧:
1. 查看目标MAC:ff:ff:ff:ff:ff:ff (广播地址)
2. 决定:泛洪(flood)到所有其他端口(除了收到端口)
3. 主机B(端口2)和主机C(端口3)都会收到这个帧

第二步:主机B和主机C的处理

2.1 主机B的处理

plaintext 复制代码
1. 网卡收到帧,检查目标MAC:
   ff:ff:ff:ff:ff:ff → 这是广播地址!
   → 所有网卡都必须接收广播帧

2. 解析ARP请求:
   "有人在问:谁有 192.168.1.200?"
   → 咦,这就是我的IP地址!

3. 主机B发送ARP回复(单播):
   以太网帧头部:
     目标MAC:aa:aa:aa:aa:aa:aa (主机A)
     源MAC:bb:bb:bb:bb:bb:bb (主机B)
   
   ARP数据部分:
     操作码:2 (ARP回复)
     发送方MAC:bb:bb:bb:bb:bb:bb
     发送方IP:192.168.1.200
     目标MAC:aa:aa:aa:aa:aa:aa
     目标IP:192.168.1.100

2.2 主机C的处理

plaintext 复制代码
1. 网卡收到帧,检查目标MAC:
   ff:ff:ff:ff:ff:ff → 这是广播地址,必须接收

2. 解析ARP请求:
   "有人在问:谁有 192.168.1.200?"
   → 这不是我的IP地址(我是192.168.1.150)

3. 主机C的操作:
   a) 默默丢弃这个ARP请求
   b) 但会学习:192.168.1.100 → aa:aa:aa:aa:aa:aa
   c) 更新自己的ARP缓存表

第三步:ARP缓存表的变化

3.1 主机A的ARP缓存表

plaintext 复制代码
通信前:
  空表

收到ARP回复后:
  192.168.1.200 → bb:bb:bb:bb:bb:bb
  (状态:可达,缓存时间通常2分钟)

3.2 主机B的ARP缓存表

plaintext 复制代码
回复后自动添加:
  192.168.1.100 → aa:aa:aa:aa:aa:aa

3.3 主机C的ARP缓存表

plaintext 复制代码
被动学习:
  192.168.1.100 → aa:aa:aa:aa:aa:aa

二 、 3层广播地址

如果设置了非标准广播地址

假设主机A设置了:

bash 复制代码
sudo ip addr add 192.168.1.100/24 brd 192.168.1.200 dev eth0

问题1:ARP请求发到哪里?

plaintext 复制代码
主机A构造ARP请求时:
  目标MAC还是:ff:ff:ff:ff:ff:ff (二层广播,不变)
  但目标IP广播地址被错误地理解为:192.168.1.200

实际上,对于ARP来说:
  二层广播地址(ff:ff:ff:ff:ff:ff)才是关键
  但一些网络栈可能会混乱

问题2:主机B能收到吗?

plaintext 复制代码
能收到!因为:
1. 二层MAC地址仍然是广播地址
2. 交换机仍然会泛洪
3. 主机B的网卡仍然会接收广播帧

也就是说此时对于A的发送是没有任何影响的,及时设置一个非标准的3层掩码,因为此时压根没用到这个掩码

但问题在于:

  1. 主机A可能不会接收别人广播到192.168.1.255的包
  2. 某些网络栈实现可能行为异常
  3. 路由选择或其他网络功能可能出错

错误广播地址的实际影响案例(必现场景)

前提条件

  • 主机A配置:sudo ip addr add 192.168.1.100/24 brd 192.168.1.200 dev eth0(错误广播地址 192.168.1.200,标准应为 192.168.1.255/24
  • 同网段其他主机:B(192.168.1.50)、C(192.168.1.150)、D(192.168.1.200)

场景1:局域网广播扫描工具完全失效(最直观)

操作步骤

  1. 在主机A执行标准网段扫描命令:ping -b 192.168.1.255
  2. 或执行 ARP 扫描命令:arp-scan -l

现象

  • ping -b 192.168.1.255 无任何主机回复(仅主机D可能回复)
  • arp-scan -l 只能扫描到主机D(192.168.1.200),B、C完全无法识别

根本原因

  • ping -barp-scan 等工具会读取本机配置的广播地址作为目标IP
  • 主机A实际发送的是单播包(目标IP=192.168.1.200),而非标准广播包(目标IP=192.168.1.255)
  • 只有IP为 192.168.1.200 的主机D能接收,其他主机收不到扫描请求

场景2:无法接收局域网标准广播服务通知

操作步骤

  1. 主机B(正常配置广播地址 192.168.1.255)开启 Windows 共享文件夹 / 局域网联机游戏房间
  2. 主机B会定时发送标准广播包(目标IP=192.168.1.255)宣告服务存在
  3. 在主机A上搜索局域网共享 / 游戏房间

现象

  • 主机A的「网络邻居」看不到主机B的共享文件夹
  • 主机A的游戏客户端搜不到主机B创建的房间
  • 其他正常配置的主机可以正常发现主机B的服务

根本原因

  • 主机A的网络栈会校验收到的广播包:只有目标IP与本机配置的广播地址一致,才会交给上层应用
  • 主机B发送的广播包目标IP=192.168.1.255,与主机A配置的 192.168.1.200 不匹配
  • 主机A的网络栈直接丢弃该广播包,应用层无法感知服务存在

核心共性结论

错误广播地址的影响仅作用于三层广播通信,分为两类:

  1. 发送侧:本机广播工具的目标IP被错误地址带偏,从「一对多」变成「一对一」
  2. 接收侧:丢弃所有目标IP为标准广播地址的包,无法感知局域网广播服务
相关推荐
数字芯片实验室2 小时前
IP验证最终回归到时序级建模
网络·网络协议·tcp/ip·fpga开发
kida_yuan3 小时前
【Linux】文件系统与 fsck.ext4 修复 - 我踩过的坑与总结
linux·运维·网络
tobias.b3 小时前
408真题解析-2009-33-网络-OSI模型
网络·计算机考研·408真题·408真题解析
米高梅狮子3 小时前
01. 配置DHCP服务器
服务器·网络·php
这儿有一堆花4 小时前
CDN 工作原理:空间换取时间的网络架构
网络·架构·php
徐子元竟然被占了!!4 小时前
常用端口学习
运维·网络·学习
轻造科技4 小时前
设备点检系统+移动端APP:替代纸质点检表,漏检率降为0
网络·安全·web安全
Godspeed Zhao5 小时前
现代智能汽车中的无线技术26——Wi-Fi(14)
网络·汽车·智能路由器
在路上看风景5 小时前
01. 通信前置知识
网络