当前位置: 首页 > backend >正文

《TCP/IP 详解 卷1:协议》第4章:地址解析协议

ARP 协议

地址解析协议(ARP, Address Resolution Protocol)是IPv4协议栈中一个关键的组成部分,用于在网络层的IP地址与数据链路层的硬件地址(如MAC地址)之间建立映射关系。它的主要任务是:

  • 将32位的IPv4地址解析为对应的48位MAC地址,以便以太网等链路层协议能够正确封装并投递帧。
  • 提供动态映射机制,自动适应网络环境的变化,而无需手动配置。

直接交付过程

直接交付(Direct Delivery) 是指当发送方与目标主机在同一IP子网中时,IP数据报可以不经过路由器,直接通过链路层协议(如以太网)发送到目标主机。这一过程中,地址解析协议(ARP) 起到了关键作用 —— 将目标主机的IPv4地址解析为其对应的MAC地址。

  1. 应用程序启动连接

    • 应用程序(如 Web 浏览器)发起请求,目标地址是 IPv4 地址 10.0.0.1(非主机名,因此不需要DNS解析)。
  2. 请求建立连接

    • 应用层请求 TCP 建立连接至目标地址。
  3. TCP发送数据报

    • TCP 构造连接请求,并封装成 IP 数据报,目标地址为 10.0.0.1
  4. 检查是否直接交付

    • 网络层检测到 10.0.0.1 与本地主机在同一子网内,因此无需经由网关或路由器,执行直接交付。
  5. 发起地址解析请求(ARP 请求)

    • 发送方必须知道目标主机的 MAC 地址,但仅有其 IP 地址,因此需要执行地址解析。
    • 发送方构造一个 ARP 请求:广播一个以太网帧,询问 “谁是 10.0.0.1,请告诉我你的 MAC 地址”。
  6. 广播ARP请求

    • ARP 请求在链路层广播给本地网络上的所有主机。这要求底层网络必须是广播网络(如以太网),不能是非广播多路访问网络(NBMA,如 Frame Relay)。
  7. 接收与响应ARP请求

    • 所有在该广播域内的主机都能接收到 ARP 请求。
      • 只有配置了 IP 地址 10.0.0.1 的主机才会响应。
      • 响应为ARP应答(Unicast),包含其 MAC 地址。
      • 同时,所有接收到请求的主机都可以被动“学习”发送方的 IP-MAC 对,并缓存。
  8. 发送实际数据报

    • 一旦发送方接收到 ARP 应答,便获得目标主机的 MAC 地址。
    • 然后,发送方使用这个地址将实际的 IP 数据报封装为以太网帧进行投递。

ARP 缓存

为了避免在每次发送IP数据报时都重复进行地址解析操作(即重复发送ARP请求),操作系统会维护一个称为 ARP 缓存(ARP Cache)的数据结构,用于存储已解析的 IP 地址与其对应的 MAC 地址之间的映射关系。

该缓存显著提升了网络通信的效率,是ARP协议运行的关键组成部分。

ARP缓存的结构

ARP缓存通常包含以下内容:

字段说明
IP地址(逻辑地址)IPv4地址
MAC地址(物理地址)对应的硬件地址
接口信息本地用于通信的网络接口
状态静态或动态
TTL / 过期时间条目的剩余生命周期(通常几分钟)

缓存条目的两种类型

  1. 动态条目(Dynamic Entries)

    • 由ARP协议自动创建。
    • 在主机接收到ARP应答时添加。
    • 有时间限制,过期自动删除(典型值是 60 秒到几分钟)。
    • 接收ARP请求时也可被动学习(即非目标主机也可更新缓存)。
  2. 静态条目(Static Entries)

    • 由管理员手动配置(如通过 arp 命令)。
    • 永不过期,需手动删除或重启系统后清除。
    • 用于安全或关键通信链路,防止ARP欺骗。

缓存更新机制

  • 每当主机发送ARP请求并收到应答时,都会插入或更新缓存中的对应条目。
  • 接收到其他主机的ARP请求时,也会根据请求中包含的信息更新本地ARP缓存。
  • 动态条目在一段时间后过期,以适应网络拓扑或设备变更,也就是软状态刷新

ARP 帧格式

在以太网中,ARP请求和应答消息封装在以太网帧中,用于实现IPv4地址到以太网MAC地址的映射。ARP帧分为两部分:

  • 以太网帧头(14字节)
  • ARP消息体(28字节,用于IPv4 → MAC 映射)

在这里插入图片描述

  • 广播地址:ARP请求使用以太网广播地址 ff:ff:ff:ff:ff:ff 作为目的地址。
  • ARP应答是单播的:应答帧直接发给请求发送方,不使用广播。
  • 信息冗余:ARP帧和以太网头都包含源MAC地址,这是典型的协议重叠设计。
  • Op字段重要性:由于请求和应答的以太网类型字段相同(都为0x0806),必须通过 Op 字段区分。

代理 ARP

代理ARP(Proxy ARP)是一种 允许设备代表其他主机响应ARP请求 的机制。根据 [RFC 1027],代理ARP主要应用于以下场景:

🔁 一个系统(通常是路由器)收到一个针对某IP地址的ARP请求,并不是将请求转发给目标主机,而是自己代为应答,返回自己的MAC地址。

这使得请求主机误以为代理设备就是目标主机,从而将后续流量直接发送给代理设备,进而实现跨网络转发。

示例场景

假设有以下两个网络使用相同的IP前缀:

网络A:192.168.1.0/24
网络B:192.168.1.0/24

它们由一台中间路由器连接,出于某些遗留系统的限制,不能更改子网配置。这时路由器可配置为代理ARP:

  • 当网络A中的主机 192.168.1.10 发送ARP请求:“谁是192.168.1.20?”
  • 网络B中的主机实际拥有这个IP。
  • 路由器响应该请求,返回自己的MAC地址。
  • 数据先到路由器,由其再转发给目标主机。
http://www.xdnf.cn/news/10947.html

相关文章:

  • 2025.6.3总结
  • 【记录】Python|Python支持if 1<a<2、if not a、if a is None这三种写法
  • JavaScript 对象展开语法
  • java29
  • 信息过载时,如何筛选重要信息
  • 把两个标签内容显示在同一行
  • BSRR对比BRR对比ODR
  • MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动
  • Vue3 中使用 i18n
  • 【MATLAB去噪算法】基于CEEMD联合小波阈值去噪算法(第三期)
  • 离散数学_数理逻辑(二):命题逻辑的推理
  • CET6 仔细阅读 24年6月第三套-C2 可变性这一块
  • 代码随想录算法训练营第60期第五十六天打卡
  • 系统思考:短期利益与长期系统影响
  • 线程池RejectedExecutionException异常
  • ssh登录wsl2
  • C++ 17中的通用类型any
  • 从“Bucharest”谈起:词语翻译的音译与意译之路
  • Qt 事件传递的完整流程
  • 运维三剑客——awk
  • My Retro App项目开发指南
  • 对 `llamafactory-cli api -h` 输出的详细解读
  • MySQL备份与恢复实战指南
  • 社群营销的一些门道
  • 项目任务,修改svip用户的存储空间。
  • 网络攻防技术八:身份认证与口令攻击
  • 力扣刷题Day 69:搜索二维矩阵(74)
  • Python趣学篇:Pygame重现经典打砖块游戏
  • Axure形状类组件图标库(共8套)
  • 苹果ios系统ipa文件签名的圈外签名是什么稳定性怎么样