关于网络MAC地址
关于网络MAC地址
一个MAC地址问题
经常会遇到客户反馈这样的问题:在进行以太网MAC地址设置测试(随便写的MAC地址),发现有时候MAC地址会变成随机的MAC地址。
原因: MAC地址的第一个字节的最后一位是用来区分是多播还是单播的,0为单播,1为多播,我们的电脑或是设备的网卡都是单播的,所以不能为1。
一般网卡驱动都会去校验,如果校验为多播地址则认为是不符合规范的地址,就会生成一个随机MAC。
相关代码如下(include/linux/etherdevice.h
):
static inline bool is_multicast_ether_addr(const u8 *addr)
{
#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
u32 a = *(const u32 *)addr;
#else
u16 a = *(const u16 *)addr;
#endif
#ifdef __BIG_ENDIAN
return 0x01 & (a >> ((sizeof(a) * 8) - 8));
#else
return 0x01 & a;
#endif
}
/**
* is_valid_ether_addr - Determine if the given Ethernet address is valid
* @addr: Pointer to a six-byte array containing the Ethernet address
*
* Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
* a multicast address, and is not FF:FF:FF:FF:FF:FF.
*
* Return true if the address is valid.
*
* Please note: addr must be aligned to u16.
*/
static inline bool is_valid_ether_addr(const u8 *addr)
{
/* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
* explicitly check for it here. */
return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
}
MAC地址说明
MAC 地址(Media Access Control Address,媒体访问控制地址)是网络设备的唯一硬件标识符,用于在局域网(LAN)中识别设备。它是一个 48 位的地址,通常表示为 12 个十六进制字符,格式为 XX:XX:XX:YY:YY:YY
或 XX-XX-XX-YY-YY-YY
。
MAC 地址的结构
MAC 地址由两部分组成:
前 24 位(XX:XX:XX ):
- 称为 OUI(Organizationally Unique Identifier,组织唯一标识符),用于标识设备制造商。
- 由 IEEE 分配,每个制造商有唯一的 OUI。
后 24 位(YY:YY:YY ):
- 由制造商分配,用于标识具体的设备。
- 确保同一制造商生产的设备具有唯一的 MAC 地址。
MAC 地址的类型
MAC 地址分为三种类型:
单播地址(Unicast Address):
- 用于标识唯一的网络设备。
- 第一个字节的最低有效位(LSB)为 0。
多播地址(Multicast Address):
- 用于标识一组设备。
- 第一个字节的最低有效位(LSB)为 1。
广播地址(Broadcast Address):
- 用于向局域网中的所有设备发送数据。
- 固定为
FF:FF:FF:FF:FF:FF
。
MAC 地址的作用
- 设备识别: 在局域网中唯一标识设备。
- 数据帧传输: 用于以太网帧的源地址和目的地址。
- 网络管理: 用于设备分类、策略配置和故障排查。
- 安全审计: 检测未知设备或潜在威胁。
MAC 地址的应用场景
- ARP 协议: 将 IP 地址映射到 MAC 地址。
- 交换机转发: 交换机根据 MAC 地址表转发数据帧。
- 网络安全: 通过 MAC 地址过滤设备。
- 设备管理: 识别和管理网络中的设备。
常见问题
Q1:MAC 地址会重复吗?
- 理论上,每个 MAC 地址是唯一的。但由于某些原因(如伪造或配置错误),可能会出现重复。
Q2:MAC 地址可以被追踪吗?
- 在局域网中,MAC 地址可以被追踪。但在互联网中,MAC 地址不会跨路由器传输。
Q3:如何保护 MAC 地址隐私?
- 使用随机化 MAC 地址功能(如 iOS 和 Android 提供的功能)。
- 在公共 Wi-Fi 中禁用 MAC 地址广播。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论