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

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

相关文章:

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

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

Dify 离线升级操作手册(适用于无外网企业内网环境)

一、准备工作 准备一台能访问互联网的外网机器 用于拉取最新的 Dify 镜像和代码建议使用 Linux 或 Windows Docker 环境 准备传输介质 U盘、移动硬盘,或企业内部网络共享路径 确认当前内网 Dify 版本和配置 确认版本号,备份配置文件和数据库 二、外…...

Windows下运行Redis并设置为开机自启的服务

下载Redis-Windows 点击redis-windows-7.4.0下载链接下载Redis 解压之后得到如下文件 右键install_redis.cmd文件,选择在记事本中编辑。 将这里改为redis.windows.conf后保存,退出记事本,右键后选择以管理员身份运行。 在任务管理器中能够…...

网络编程之网络基础

基础理论:IP、子网掩码、端口号、字节序、网络基础模型、传输协议 socket:TCP、UDP、广播、组播、抓包工具的使用、协议头、并发服务器 Modbus协议 、HTTP协议、HTML、 分析服务器 源码、数据库 一、认识网络 网络:实现多设备通信 二、IP地址…...

Spring AI(11)——SSE传输的MCP服务端

WebMVC的服务器传输 支持SSE&#xff08;Server-Sent Events&#xff09; 基于 Spring MVC 的服务器传输和可选的STDIO运输 导入jar <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</a…...

计算机网络备忘录

计算机网络 - 网络互联与互联网 计算机网络重点学习本章&#xff0c;属于核心知识 包含网络层和传输层 的 相关协议 计算机网络层次重点掌握网络层与传输层。其中网络层主要是IP协议&#xff0c;解决主机-主机通信&#xff0c;传输层主要是TCP/UDP 协议&#xff0c;解决应用-…...

Spring Boot论文翻译防丢失 From船长cap

本文内容 微服务 微服务风格的特性组件化&#xff08;Componentization &#xff09;与服务&#xff08;Services&#xff09;围绕业务功能的组织产品不是项目强化终端及弱化通道分散治理分散数据管理基础设施自动化容错性设计设计改进 微服务是未来吗其它 微服务系统多大微…...

[蓝桥杯]最优包含

最优包含 题目描述 我们称一个字符串 SS 包含字符串 TT 是指 TT 是 SS 的一个子序列&#xff0c;即可以从字符串 SS 中抽出若干个字符&#xff0c;它们按原来的顺序组合成一个新的字符串与 TT 完全一样。 给定两个字符串 SS 和 TT&#xff0c;请问最少修改 SS 中的多少个字符…...

NuxtJS入门指南:环境安装及报错解决

在学习NuxtJS的过程中&#xff0c;正确的安装环境是非常重要的一步。然而&#xff0c;有时候在安装过程中会遇到一些问题&#xff0c;比如使用corepack安装pnpm时出现的错误。本文将详细介绍如何安装NuxtJS以及解决上述安装过程中遇到的问题。 Nuxt.js简介 Nuxt.js是一个强大的…...

在java 项目 springboot3.3 中 调用第三方接口(乙方),如何做到幂等操作(调用方为甲方,被调用方为乙方)? 以及啥是幂等操作?

什么是幂等操作&#xff1f; 幂等性&#xff08;Idempotence&#xff09; 是指一个操作无论执行一次还是多次&#xff0c;对系统状态产生的影响都是相同的。在分布式系统中&#xff0c;由于网络不稳定、超时重试等因素&#xff0c;接口可能被重复调用&#xff0c;幂等设计能确…...

贪心算法应用:集合划分问题详解

贪心算法与集合划分问题详解 集合划分问题是组合优化中的经典问题&#xff0c;其核心目标是将元素集合划分为若干满足特定条件的子集。本文将深入探讨贪心算法在集合划分中的应用&#xff0c;涵盖算法原理、适用场景、Java实现细节及优化策略。 一、集合划分问题定义 1.1 基础…...

electron下载文件

const http require(http); const https require(https); const fs require(fs); const { URL } require(url); const path require(path);// 下载文件函数 function downloadFile(url, savePath) {return new Promise((resolve, reject) > {try {console.log(开始下载…...

Neo4j 数据导入:原理、技术、技巧与最佳实践

在构建知识图谱、社交网络分析或复杂关系系统时,高效准确地将数据导入Neo4j图数据库至关重要。本文基于官方文档,深入探讨Neo4j数据导入的核心原理、主流技术、实用技巧及行业最佳实践。 Neo4j的数据导入不仅是技术操作,更是图模型设计的延续。深入理解存储原理、灵活运用C…...

数论~~~

质数 质数Miller-Rabin算法质因子分解质数筛埃氏筛欧拉筛如果只是计数&#xff0c;埃氏筛改进 快速幂乘法快速幂矩阵快速幂1维k阶实战(提醒&#xff1a;最好在mul函数中作乘法时加上&#xff08;long long&#xff09;的强制类型转换 &#xff0c;或者全部数组换成long long&am…...

web第十次课后作业--Mybatis的增删改查

&#xff08;一&#xff09;删除操作 功能&#xff1a;根据主键删除数据 SQL 语句 -- 删除id17的数据 delete from emp where id 17;Mybatis 框架让程序员更关注于 SQL 语句 接口方法 Mapper public interface EmpMapper {//Delete("delete from emp where id 17&qu…...

贪心算法应用:集合覆盖问题详解

贪心算法与集合覆盖问题详解 贪心算法在组合优化问题中展现出独特优势&#xff0c;集合覆盖问题&#xff08;Set Cover Problem&#xff09;是其中的经典案例。本文将用2万字全面解析贪心算法在集合覆盖/划分中的应用&#xff0c;涵盖算法原理、正确性分析、Java实现、复杂度证…...

BLOB 是用来存“二进制大文件”的字段类型

BLOB 是用来存“二进制大文件”的字段类型&#xff0c;可以存 0 到 65535 字节的数据&#xff0c;常用来存图片、音频、PDF、Word 等“非文本”内容。 BLOB 0-65535 bytes 二进制形式的长文本数据✅ 关键词 1&#xff1a;BLOB 全称&#xff1a;Binary Large Object中文&…...

5.Declare_Query_Checking.ipynb

这个教程 5.Declare_Query_Checking.ipynb 主要讲解了如何使用 DECLARE 查询检查器来分析事件日志中的约束关系。 1. 主要功能 这个教程展示了如何使用 DeclareQueryChecker 来&#xff1a; 发现事件日志中满足特定支持度的约束模式查询不同类型的约束关系分析活动之间的关联…...

【知识点】第7章:文件和数据格式化

文章目录 知识点整理文件概述文件的打开和关闭文件的读操作文件的写操作 练习题填空题选择题​​ 知识点整理 文件概述 文件是一个存储在辅助存储器上的数据序列&#xff0c;可以包含任何数据内容。概念上&#xff0c;文件是数据的集合和抽象&#xff0c;类似地&#xff0c;函…...

NetSuite Bundle - Dashboard Refresh

儿童节快乐&#xff01; 今朝发一个Bundle&#xff0c;解决一个NetSuite Dashboard的老问题。出于性能上的考虑&#xff0c;NetSuite的Dashboard中的Portlet&#xff0c;只能逐一手工刷新。有人基于浏览器做了插件&#xff0c;可以进行自动刷新。但是在我们做项目部署时&#…...

AI+3D 视觉重塑塑料袋拆垛新范式:迁移科技解锁工业自动化新高度

在工业自动化浪潮席卷全球的当下&#xff0c;仓储物流环节的效率与精准度成为企业降本增效的关键战场。其中&#xff0c;塑料袋拆垛作为高频、高重复性的作业场景&#xff0c;传统人工或机械臂操作面临着诸多挑战。迁移科技&#xff0c;作为行业领先的 3D 工业相机和 3D 视觉系…...

智慧赋能:移动充电桩的能源供给革命与便捷服务升级

在城市化进程加速与新能源汽车普及的双重推动下&#xff0c;移动充电桩正成为能源供给领域的一场革命。传统固定充电设施受限于布局与效率&#xff0c;难以满足用户即时、灵活的充电需求&#xff0c;而移动充电桩通过技术创新与服务升级&#xff0c;打破了时空壁垒&#xff0c;…...

【项目实践】SMBMS(Javaweb版)(三)登出、注册、注销、修改

文章目录 登出、注册、注销、修改登出操作的实现逻辑及方式防止用户登出后可以继续访问修改密码功能实现导入jsp实现Dao层数据接口实现Service层业务接口注册Servlet 注册和注销 用户的方式导入jsp实现Dao层的数据逻辑实现Service逻辑注册Servlet 登出、注册、注销、修改 登出…...

斐波那契数列------矩阵幂法

斐波那契数列 斐波拉楔数是我们在学递归的使用看到的题目&#xff0c;但递归法是比较慢的&#xff0c;后面我们用循环递进来写的&#xff0c;但今天我有遇到了新的方法—— 矩阵幂法&#xff08;线性代数的知识点&#xff09;。 矩阵幂法&#xff1a; F11*F10*F2; F20*F11*…...

【Go语言基础【四】】局部变量、全局变量、形式参数

文章目录 一、一句话总结二、作用域分类1. 局部变量&#xff08;函数内/块内变量&#xff09;1.1、语法说明1.2、示例 2. 全局变量&#xff08;包级变量&#xff09;2.1、语法说明2.2、示例&#xff1a;全局变量的访问 3. 形式参数&#xff08;函数参数&#xff09; 三、作用域…...

DeepSeek 赋能车路协同:智能交通的破局与重构

目录 一、引言二、智能交通车路协同系统概述2.1 系统定义与原理2.2 系统构成2.3 发展现状与挑战 三、DeepSeek 技术剖析3.1 DeepSeek 简介3.2 核心技术原理3.2.1 Transformer 架构3.2.2 混合专家架构&#xff08;MoE&#xff09;3.2.3 多头潜在注意力&#xff08;MLA&#xff0…...

RabbitMQ 的异步化、解耦和流量削峰三大核心机制

RabbitMQ 的异步化、解耦和流量削峰三大核心机制 RabbitMQ 是解决数据库高并发问题的利器&#xff0c;通过异步化、解耦和流量削峰三大核心机制保护数据库。下面从设计思想到具体实现&#xff0c;深入剖析 RabbitMQ 应对高并发的完整方案&#xff1a; 一、数据库高并发核心痛点…...

Ubuntu 25.10 将默认使用 sudo-rs

非盈利组织 Trifecta Tech Foundation 报告&#xff0c;Ubuntu 25.10 将默认使用它开发的 sudo-rs——用内存安全语言 Rust 开发的 sudo 实现。 Ubuntu 25.10 代号 Questing Quokka&#xff0c;预计将于 2025 年 10 月释出&#xff0c;是一个短期支持版本。Sudo-rs 是 Trifect…...

Maven​​ 和 ​​Gradle​​ 依赖管理的详细说明及示例,涵盖核心概念、配置方法、常见问题解决和工具对比。

一、Maven 依赖管理 1. 核心概念 ​​依赖声明​​&#xff1a;在 pom.xml 中通过 <dependency> 标签定义依赖项&#xff0c;包含 groupId、artifactId、version。​​仓库​​&#xff1a;依赖下载的来源&#xff0c;包括中央仓库&#xff08;Maven Central&#xff0…...

【Web应用】若依框架:基础篇21二次开发-页面调整

文章目录 ⭐前言⭐一、课程讲解⭐二、怎样选择设计模式&#xff1f;&#x1f31f;1、寻找合适的对象✨1) ⭐三、怎样使用设计模式&#xff1f;&#x1f31f;1、寻找合适的对象✨1) ⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内…...