ARP协议(地址解析协议)

文章目录

  • ARP协议(地址解析协议)
    • MAC地址
    • ARP协议
      • ARP具体实现
        • 同一链路
        • 不同链路
      • ARP 缓存
        • 缓存查询
      • APR请求/响应报文

ARP协议(地址解析协议)

MAC地址

MAC 地址的全称是 Media Access Control Address,即媒体访问控制地址,它是网络上以太网或网络适配器的唯一标识符。MAC 地址能够区分不同的网络接口,并用于多种网络技术,尤其是大多数 IEEE 802 网络。

MAC 地址也称为物理地址,硬件地址和老化地址。主要用于识别数据链路中互联的节点。

MAC 地址长 48 bit,MAC 地址中第1位确定单播地址(0)/多播地址(1),第2位确定全局地址(0)/本地地址(1),的 3 - 24 位表示厂商识别码,每个 NIC 厂商都有特定唯一的识别数字。25 - 48 位是厂商内部为识别每个网卡而用

ARP协议

ARP 协议的全称是Address Resolution Protocol(地址解析协议),它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址 的一种协议。ARP 协议在 IPv4 中极其重要。

ARP 就是一种解决地址问题的协议,它以 IP 地址为线索,定位下一个应该接收数据分包的主机 MAC 地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的 MAC 地址。

ARP具体实现

同一链路

  1. 主机 A 想要获取主机 B 的 MAC 地址,通过主机 A 会通过广播的方式向以太网上的所有主机发送一个ARP 请求包,这个 ARP 请求包中包含了主机 A 想要知道的主机 B 的 IP 地址的 MAC 地址。
  2. 主机 A 发送的 ARP 请求包会被同一链路上的所有主机/路由器接收并进行解析。
  3. 每个主机/路由器都会检查 ARP 请求包中的信息,如果 ARP 请求包中的目标 IP 地址 和自己的相同,就会将自己主机的 MAC 地址写入响应包返回主机 A

不同链路

通常 ARP 会被路由器隔离,但是采用**代理 ARP (ARP Proxy) **的路由器可以将 ARP 请求转发给临近的网段。使多个网段中的节点像是在同一网段内通信

ARP 缓存

ARP 高效运行的关键就是维护每个主机和路由器上的 ARP 缓存(或表)。这个缓存维护着每个 IP 到 MAC 地址的映射关系。通过把第一次 ARP 获取到的 MAC 地址作为 IP 对 MAC 的映射关系到一个 ARP 缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送 ARP 请求了,而是直接使用这个缓存表中的 MAC 地址进行数据报的发送。每发送一次 ARP 请求,缓存表中对应的映射关系都会被清除。通过 ARP 缓存,降低了网络流量的使用,在一定程度上防止了 ARP 的大量广播。MAC 地址的缓存有一定期限,超过这个期限后,缓存的内容会被清除。

缓存查询

在 Linux 中使用 arp 查询缓存

查询结果主要包含五项:

  • 主机名 — 对应一个 IP 地址
  • 硬件地址类型
  • 硬件地址
  • 标志
  • 本地网络接口

标志主要分为三类: C 、M 或 P,C 表示的是由 ARP 协议动态学习。M 类可以通过 arp -s 增加一条。P 类表示的是发布,对于任何 P 类项目,主机对输入的 ARP 请求都返回一个 ARP 响应。这个选项用于配置代理 ARP。

APR请求/响应报文

下面是在以太网中转换一个 IPv4 的地址常用的 ARP 请求或响应的报文格式。

前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示 以太网的目的地址以太网的源地址,以太网的目的地址如果是 ff:ff:ff:ff:ff:ff 全部为 1 表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP 请求的长度/类型,ARP 请求 和 ARP 应答这个值为 0x0806

  • 硬件类型表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,此值为 1。
  • 协议类型指出映射的协议地址类型,对于 IPv4 地址,这个值是0x0800
  • 硬件大小协议大小分别指出硬件地址和协议地址的字节数。对于以太网中使用 IPv4 的 ARP 请求或应答,它们的值分别是 6 和 4。
  • Op字段指出如果是 ARP 请求,Op = 1,ARP 应答 ,Op = 2,RARP 请求 Op = 3,RARP 应答,Op = 4。
  • 紧跟在 Op 之后的是发送方硬件地址(MAC 地址)发送方的协议地址(IPv4 地址)目的硬件地址目的协议地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/45225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask框架的请求处理逻辑

Django 和 Flask 是 Python 的两个非常流行的 Web 框架,它们对 HTTP 请求的处理方式有一些区别。 在 Django 中,当你的应用接收到一个 HTTP 请求时,Django 会将请求封装为一个 HttpRequest 对象,然后通过视图函数的参数传递这个对…

Kubernetes_核心组件_kubelet_kubelet服务全解析(二)

文章目录 前言kubelet 架构kubelet 职责Node管理(节点管理)Pod管理 kubelet管理Podkubelet如何管理当前节点上所有Podkubelet三个端口kubelet获取Pod清单kubelet通过CRI接口管理Pod以及里面的容器 PodWorker的工作细节PodWorker的工作细节PLEG组件PLEG报错 kubelet创建并启动Po…

kafka权威指南学习以及kafka生产配置

0、kafka常用命令 Kafka是一个分布式流处理平台,它具有高度可扩展性和容错性。以下是Kafka最新版本中常用的一些命令: 创建一个主题(topic): bin/kafka-topics.sh --create --topic my-topic --partitions 3 --replic…

【高危】Foxit 福昕PDF阅读器 Field Calculate 释放后使用漏洞(PoC)

漏洞描述 Foxit PDF阅读器是福昕软件公司推出的一款广泛使用的PDF文档阅读器。 在受影响版本中,由于其javascript引擎存在use-after-free漏洞,攻击者可以构造恶意的PDF文件,通过文件中包含的deletePages()等操作使福昕PDF阅读器过早删除与页…

若依分离版——解决配置双数据源oracle,mysql分页错误问题

1. 按照若依的手册配置双数据源mysql,oracle 2. 在service指定 数据源 DataSource(value DataSourceType.MASTER) 或者DataSource(value DataSourceType.SLAVE) Service public class SysPostServiceImpl implements ISysPostService {/*** 查询岗位信息集合* …

9.python设计模式【外观模式】

内容:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一个子系统更加容易使用。 角色: 外观(facade)子类系统(subsystem classes) UML图 举…

react实现页面动态表单设计器(自定义推拽表单)

react实现页面动态表单设计器(自定义推拽表单) 实现效果安装插件使用组件介绍基本设置,可设置控件标签,是否必填,校验规则校验规则有如下几种多选,下拉,单选可动态设置每个选择的label以及值 实…

实例025 带分隔栏的窗体

实例说明 在软件开发中,经常需要将界面分成几个部分,而且这几个部分又可以自由调整大小。运行本例,实例效果如图1.25所示。 技术要点 在.NET 2.0框架中可以非常轻松的实现这一功能,只要在窗体中加入SplitContainer控件即可。Sp…

(链表) 剑指 Offer 24. 反转链表 ——【Leetcode每日一题】

❓剑指 Offer 24. 反转链表 难度&#xff1a;简单 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制&#xff1a; 0 < …

Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)

一、前提准备 在Spring Boot中整合MyBatis时&#xff0c;你需要导入JDBC&#xff08;不需要手动添加&#xff09;和Druid的相关依赖。 JDBC依赖&#xff1a;在Spring Boot中整合MyBatis时&#xff0c;并不需要显式地添加JDBC的包依赖。这是因为&#xff0c;当你添加mybatis-sp…

LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程

编者按&#xff1a;在训练大语言模型的过程中,构建高质量的训练数据集是非常关键的一步&#xff0c;但关于构建大模型训练所需数据集的通用数据处理流程&#xff08;Data pipelines)的相关资料极为稀少。 本文主要介绍了基于Common Crawl数据集的数据处理流程。首先,文章概述了…

2022年圣诞节 | 用代码实现简单圣诞树

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 一、前言 本文我们用 Python 来画一棵带背景音乐效果的雪夜圣诞树以及使用 HTMLCSSJS 在页面渲染出动态圣诞树&#xff0c;所涉及到的源码均来自GitHub开源站点。 二、效果展示 Python HTMLCSSJS 三、编码实现 …

OpenTDF数据加密引擎

OpenTDF是Virtru公司的开源项目。 Virtru基于OpenTDF开发了用于google Workspace和Microsoft 365的相关数据安全产品。 简介 virtru公司基于opentdf开发挺多产品的,都是数据安全类产品。 能把opentdf开源,已经非常不容易了。 opentdf的代码看起来还是比较整齐和成熟的。…

aPaaS开发 VS 传统软件开发?

aPaaS开发 VS 传统软件开发&#xff1f;aPaaS的优势和平台选型&#xff1a; &#xff08;1&#xff09;aPaaS模式具备成本优势、开发速度快、多场景适用等特点&#xff0c;在资本市场备受关注&#xff1b; &#xff08;2&#xff09;aPaaS能够覆盖企业销售、项目管理、业务财…

微服务远程调用openFeign简单回顾

目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件&#xff0c;可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…

学习day52

1.关于 error Component name "School" should always be multi-word vue/multi-word-component-names 这里是因为脚手架的规范原因&#xff0c; 解决办法&#xff1a; 我是在vue.comfig.js文件中加入了一条配置&#xff0c;即 lintOnSave:false 整个文件的完整…

Java 实现提取富文本中包含特定字符串的图片 src 属性值

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

Nginx配置server_name讲解

文章目录 1.Nginx配置中没有server_name会怎样&#xff1f;2.Nginx配置server_name的匹配规则3.正则表达式规则 1.Nginx配置中没有server_name会怎样&#xff1f; 此时Nginx会自动设置成 server_name ""; 它不会匹配任何域名&#xff0c;导致Nginx会优先将HTTP请求交…

Cesium态势标绘专题-弓形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

3分钟,快速上手Postman接口测试

Postman是一个用于调试HTTP请求的工具&#xff0c;它提供了友好的界面帮助分析、构造HTTP请求&#xff0c;并分析响应数据。实际工作中&#xff0c;开发和测试基本上都有使用Postman来进行接口调试工作。有一些其他流程的工具&#xff0c;也是模仿的Postman的风格进行接口测试工…