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

《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地址。
  • 数据先到路由器,由其再转发给目标主机。

相关文章:

  • 题山采玉: Day1
  • Windows版PostgreSQL 安装 vector 扩展
  • 调用.net DLL让CANoe自动识别串口号
  • 数据库完整性
  • 【吾爱】逆向实战crackme160破解记录(二)
  • 从“remote rejected”看git角色区别,Maintainer和Devoloper
  • GaLore:基于梯度低秩投影的大语言模型高效训练方法详解一
  • 开发体育比分平台,有哪些坑需要注意的
  • 深入对比主流Java Web服务器与框架
  • 前端​​HTML contenteditable 属性使用指南
  • 黑马Java面试笔记之 消息中间件篇(RabbitMQ)
  • 【办公类-48-04】202506每月电子屏台账汇总成docx-5(问卷星下载5月范围内容,自动获取excel文件名,并转移处理)
  • MybatisPlus--核心功能--service接口
  • PHP+mysql 美容美发预约小程序源码 支持DIY装修+完整图文搭建教程
  • 对 `llamafactory-cli api -h` 输出的详细解读
  • 【python与生活】用 Python 从视频中提取音轨:一个实用脚本的开发与应用
  • 【前端后端环境】
  • 燃尽图和甘特图
  • 【结构型模式】装饰器模式
  • 如何轻松地将数据从 iPhone传输到iPhone 16
  • 企业邮箱是哪个/360排名优化工具
  • 那个网站做图片好看的/想学管理方面的培训班
  • 网站模版上线需要什么意思/天津seo排名公司
  • 中国建设网建设通官方网站/各网站收录
  • pyhton做网站/培训心得体会总结
  • 深圳市顺建建设工程有限公司网站/搜索引擎优化简历