网络网络层之(2)ARP协议

网络网络层之(2)ARP协议

Author:Once Day Date: 2024年4月1日

漫漫长路,有人对你笑过嘛…

全系列文档可参考专栏:通信网络技术_Once-Day的博客-CSDN博客。

参考文档:

  • 《TCP/IP详解卷一》
  • arp(8) - Linux manual page (man7.org)
  • 彻底搞懂系列之:ARP协议 - 知乎 (zhihu.com)
  • RFC 826: An Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware (rfc-editor.org)
  • Linux 命令(199)—— arp 命令 - 腾讯云开发者社区-腾讯云 (tencent.com)

文章目录

      • 网络网络层之(2)ARP协议
        • 1.概述
          • 1.1 介绍
          • 1.2 常见实现
          • 1.3 相关RFC文档
        • 2.ARP帧格式
          • 2.2 免费ARP
          • 2.3 ARP代理
          • 2.4 ARP欺骗和攻击
        • 3. RARP协议
          • 3.1 介绍
          • 3.2 分组格式
          • 3.3 RARP服务器

1.概述
1.1 介绍

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议,负责将IP地址映射为物理地址.

通常所说的以太网的网卡是不识别IP地址的,而是通过识别MAC地址来判断该帧是否是给本机的。因此就需要提供一个机制根据目的主机的IP翻译出它的MAC地址。

注意:像点对点链路(如PPP协议)是不需要MAC,也就不需要地址解析协议。

历史上还有一个RARP协议 ,即逆地址解析协议,根据MAC解析出IP地址,现在已有DHCP协议代替。

主要的关注的几点如下:

  • 每台主机都一个高速缓存ARP cache,里面有本局域网上各主机和路由的IP地址到硬件地址的映射表。

  • 如果在高速缓存里找不到对应IP,则发送ARP请求。

  • ARP是本地局域网广播分组,包含本机IP、MAC以及目的IP。

  • 接收者从该请求报文中提取出源主机的IP地址和物理地址的绑定,更新自己的ARP缓冲 。

  • 对应IP的接收者发回ARP应答报文给请求者,包含IP和MAC,是单播分组。

  • 高速缓存有一段生存时间,失效后将重新发送ARP请求。

ARP仅用于IPv4,IPv6使用邻居发现协议,被合并进了ICMPv6协议。

ARP在正常情况下,仅适用于广播网络,在非广播网络上,需要复杂的映射协议支持才行。

1.2 常见实现

主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;

网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。

如果缓存表中不存在相应的信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。

在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表现会被自动删除。如果目标设备位于其他网络则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。

ARP表项又分为动态ARP表项和静态ARP表项。

  • 动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。
  • 静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。

Unix系统一般使用冒号分割MAC地址,而IEEE标准和其他操作系统倾向于使用短杆分割,如下:

Unix风格 --> 00:11:22:33:44:55
IEEE风格 --> 00-11-22-33-44-55

RFC1122文档建议最大发送频率是每秒一次,不同IP层协议的值不一样,比如ICMP和UDP,通常为5秒,TCP协议为10秒。

1.3 相关RFC文档

(1) RFC 826: An Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware (rfc-editor.org)

RFC 826定义了地址解析协议(ARP),用于将网络层协议地址(如IP地址)动态转换为链路层地址(如以太网的MAC地址),以便在以太网硬件上进行数据传输。

(2) RFC 903: A Reverse Address Resolution Protocol (rfc-editor.org)

RFC 903描述了一种协议,允许网络主机在只知道其硬件地址(如物理网络地址)的情况下,动态发现其协议地址(如IP地址),特别适用于无盘工作站等设备在启动时获取其网络协议地址。

(3) RFC 1027: Using ARP to implement transparent subnet gateways (rfc-editor.org)

RFC 1027详细描述了如何使用以太网地址解析协议(ARP)来实现透明子网网关,允许连接的子网上的主机在不知情的情况下进行通信,主要采用了“代理ARP”技术。

(4) RFC 1122: Requirements for Internet Hosts - Communication Layers (rfc-editor.org)

RFC 1122是一份重要的文档,它详细定义了互联网主机在通信协议层的要求,特别是链路层、IP层和传输层。这份文档与其配套文档RFC 1123一起,为互联网主机软件的实现提供了全面的指导和要求。

(5) RFC 2332: NBMA Next Hop Resolution Protocol (NHRP) (rfc-editor.org)

RFC 2332定义了NHRP协议的标准实现,该协议用于在NBMA网络中进行有效的下一跳解析,以支持多协议互联网层通信。

(6) RFC 5227: IPv4 Address Conflict Detection (rfc-editor.org)

RFC 5227定义了IPv4地址冲突检测机制,通过发送ARP探测和通告数据包来预防和识别同一网络上的两个主机使用相同IP地址的情况,并提供了解决冲突的指导。

(7) RFC 5494: IANA Allocation Guidelines for the Address Resolution Protocol (ARP) (rfc-editor.org)

RFC 5494定义了用于地址解析协议(ARP)的IANA分配指南,包括硬件地址空间、协议地址空间和操作码的分配规则,并为实验目的预留了一些数值。

2.ARP帧格式

在这里插入图片描述

目的地址、源地址、长度/类型等字段是以太网头部,这部分和其他以太网帧保持一致。可参考以下文档:

  • 网络之以太网_ Once_day的博客-CSDN博客

下面看一个实际的ARP包(使用WireShark软件抓包):

在这里插入图片描述

可以看到,对于request请求,目的MAC地址是ff:ff:ff:ff:ff:ff,表示广播地址,在同一广播域的所有以太网口都可以接收这些帧。对于ARP请求和应答,长度/类型字段值必须为0x0806

数据部分存储的就是ARP请求或者应答消息了

  • 硬件类型:即硬件地址的类型,可参考Linux内核源码include/uapi/linux/if_arp.h.

  • 协议类型:指出映射的协议地址类型,可参考Linux内核源码include/uapi/linux/if_ether.h Line:41

  • 硬件/协议大小:指出硬件地址和协议地址的字节数。

  • 操作类型(Opcode):指出操作的类型,如下:

    #define	ARPOP_REQUEST	1		/* ARP request			*/
    #define	ARPOP_REPLY	2			/* ARP reply			*/
    #define	ARPOP_RREQUEST	3		/* RARP request			*/
    #define	ARPOP_RREPLY	4		/* RARP reply			*/
    #define	ARPOP_InREQUEST	8		/* InARP request		*/
    #define	ARPOP_InREPLY	9		/* InARP reply			*/
    #define	ARPOP_NAK	10			/* (ATM)ARP NAK			*/
    

后面紧跟着的就是发送方/接收方的硬件地址+协议地址。常见的以太网+IP协议,ARP包大小为42 Bytes

ARP请求最大频率最好不要超过1秒1个,并且根据不同协议可以进一步降低请求频率。

2.2 免费ARP

免费 ARP(Gratuitous ARP)包是一种特殊的ARP请求,一台主机发送ARP请求以获取自己的地址。

免费ARP报文与普通ARP请求报文的区别在于报文中的目标IP地址。普通ARP报文中的目标IP地址是其他主机的IP地址;而免费ARP的请求报文中,目标IP地址是自己的IP地址。

有两个作用:

  • 确定是否有其他主机配置了相同的IPv4地址。
  • 更新其他主机上的ARP缓存。

RFC中描述了一种**IPv4地址冲突检测(ACD)**机制,可用来检测IPv4地址冲突情况。

ACD定义了两种ARP分组:

  • ARP探测分组,是一个ARP请求,其中发送方协议地址被设置为0,目的协议地址为候选IPv4地址。
  • ARP通告分组,发送方协议地址和目的地址都为候选IPv4地址。
2.3 ARP代理

当局域网内部主机发起跨网段的ARP请求时,出口路由器/网关设备将自身MAC地址回复该请求时,这个过程称为代理ARP,也被称为混杂ARP(Promiscuous ARP)。

在这里插入图片描述

如上图所示,PC1和PC2位于两个网段,PC1发送ARP请求PC2的硬件地址,此时Router回复该ARP请求,并且将MAC地址填为自身地址,然后将PC1发给PC2的数据包再转发给PC2。

PC1和PC2看起来互相隐身,可以屏蔽复杂网络拓扑。

2.4 ARP欺骗和攻击

ARP的解析是依赖于主机内部的高速缓存,如果恶意主机发送ARP应答或者免费ARP等,那么就会返回一个错误的MAC地址,从而导致数据报文发送到错误主机上。

黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信,或者如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况。

3. RARP协议
3.1 介绍

在计算机网络的世界里,RARP(Reverse Address Resolution Protocol,反向地址解析协议)曾是一个重要的网络协议,它的主要作用是允许物理机在局域网内的网络活动开始时,通过其物理地址(MAC地址)来查询网络地址(比如IPv4地址)。这个过程有点像在一个大型的公司楼里寻找某个人的办公室,知道这个人的名字(物理地址),但是需要查找他的办公室号码(网络地址)。

RARP的工作机制比较简单:当一个网络设备(通常是无盘系统)启动时,它知道自己的物理地址,但不知道自己的IP地址。它会在局域网内广播一个RARP请求,请求中包含它的物理地址。网络中的RARP服务器收到请求后,会查找相应的表项,找到与物理地址对应的IP地址,并将这个信息发送回请求的设备。这样,设备就获得了自己的IP地址,可以进一步与网络中的其他设备进行通信。

然而,随着技术的发展,RARP协议逐渐被一个更加强大的协议取代了,这个协议就是DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。DHCP不仅可以提供IP地址,还能配置子网掩码、默认网关、DNS服务器地址等信息,使得网络设备的配置更加自动化和智能化。

尽管RARP现在已经不太常用了,但它在历史上的作用不容忽视。它是网络启动和自动配置过程中的一个关键步骤,是那个网络技术发展初期的一个重要创新。在一些特定的旧系统或者遗留设备中,可能还会遇到RARP协议的身影,但在现代网络架构中,它已经基本被更先进的技术所替代。在网络协议的长河中,RARP像是一块垫脚石,帮助我们跨向了自动化网络配置的新纪元。

3.2 分组格式

RARP分组的格式与ARP分组基本一致。它们之间主要的差别是RARP请求或应答的帧类型代码为0x8035,而且RARP请求的操作代码为3,应答操作代码为4。

和ARP一样,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)传送的。

3.3 RARP服务器

在过去,RARP服务器通常是网络中的一台计算机,它会运行RARP服务软件。这台服务器负责响应来自客户端的RARP请求,并为它们提供所需的网络地址信息。RARP服务器内部维护一个表格,这个表格将每个物理地址(MAC地址)映射到一个IP地址。当服务器接收到一个广播的RARP请求时,它会查询这个表,找到与请求中的物理地址对应的IP地址,然后将这个信息封装在RARP响应中返回给请求者。

通常,这个映射表是由网络管理员手动维护的。在网络规模较小,设备较少时,这种方法是可行的。但随着网络规模的增大,手动维护映射表变得越来越不现实,这也是RARP的一个局限性。这种方式要求网络管理员对网络中的每个设备都有详细的记录,并且每当有设备变动时,都需要更新映射表,这对于管理者来说是一项繁重的工作。

另外,RARP的一个局限性是它只能提供IP地址,而不能像DHCP那样提供其他网络配置信息,如子网掩码、默认网关和DNS服务器地址等。这意味着网络中的设备需要通过其他方式来获取这些额外的配置信息,这降低了网络配置的自动化程度。

还有,RARP协议本身不具备跨越不同网络的能力,这意味着每个局域网都需要单独的RARP服务器。在大规模网络中,这会导致大量的资源投入和管理复杂性。

和ARP协议不同,RARP无法集成到内核中(需要读取磁盘文件,通常都由用户空间实现),但ARP通常可以作为TCP/IP栈的一个组成部分。当每个网络有多个RARP服务器时,受限于广播报文形式,会存在多个回复应答,增加以太网发生冲突的概率。

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

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

相关文章

专业照片编辑软件ON1 Photo RAW 2024 mac/win

ON1 Photo RAW 2024 for Mac是一款集专业性与易用性于一体的照片编辑软件。它拥有简洁直观的用户界面,即便对于摄影新手,也能快速上手。软件支持RAW格式照片处理,能够完整保留照片原始信息,让后期调整更加灵活。 在功能方面&#…

利用Sentinel解决雪崩问题(一)流量控制

1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待;舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离;熔断降级:由断路器统计业务…

Textarea的常用属性thymeleaf

文章目录 textareathymeleaf1.基础使用2.代码块的切换3.链接表达式1)范例 4.前后端5.遍历1.th:each2.th:switch3.添加属性 组件替换 每周总结 textarea -webkit-scrollbar:width:0;让滚动条隐藏,宽度为0 resize&#x…

浦大喜奔APP8.0智能升级,发力数字金融深化五大金融篇章服务

1. 浦大喜奔立足科技赋能持续迭代升级,筑牢用户体验护城河 浦发信用卡中心坚持数字科技与客户体验双轮驱动,以科技赋能发展,优化整体系统性能,全方位支撑浦大喜奔 APP提高线上客户服务能力与体验,积极服务民生消费&a…

【MATLAB源码-第188期】基于matlab的64QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

大模型面试准备(十八):使用 Pytorch 从零实现 Transformer 模型

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

Kafka 架构深入探索

目录 一、Kafka 工作流程及文件存储机制 二、数据可靠性保证 三 、数据一致性问题 3.1follower 故障 3.2leader 故障 四、ack 应答机制 五、部署FilebeatKafkaELK 5.1环境准备 5.2部署ELK 5.2.1部署 Elasticsearch 软件 5.2.1.1修改elasticsearch主配置文件 5.2…

MacOS Docker 部署 Solr 搜索引擎

一、简介 Solr 是 Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等这些 Servlet 容器中。Solr 提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展&#x…

Kafka 简单介绍

目录 一 消息队列(MQ) 1,为什么需要消息队列(MQ 2,常见的 MQ 中间件 3,MQ 传统应用场景之异步处理 4,使用消息队列的好处 5,消息队列的两种模式 5.1点对点模式&#xf…

Spring Bean的生命周期总结(包含面试题)

目录 一、Bean的初始化过程 1. 加载Spring Bean 2. 解析Bean的定义 3. Bean属性定义 4. BeanFactoryPostProcessor 扩展接口 5. 实例化Bean对象 6. Aware感知 7. 初始化方法 8. 后置处理 9. destroy 销毁 二、Bean的单例与多例模式 2.1 单例模式(Sin…

Vue入门:天不生Vue,前端万古如长夜 - Vue从入门到放弃

👋 Vue环境搭建 首先,搭一个打代码的环境 1.安装node.js 在使用VS Code之前,需要安装Vue的开发环境。 安装Vue的最简单方法是使用npm包管理器,先安装Node.js和npm。 node官网 ​​ 2.配置环境变量 在nodejs安装目录下新建…

51单片机实验03-单片机定时/计数器实验

目录 一、实验目的 二、实验说明 1、51单片机有两个16位内部计数器/定时器(C/T, Counter/Timer)。 2、模式寄存器TMOD 1) M1M0工作模式控制位; 2) C/T定时器或计数器选择位: 3)GATE定时器/计数器运行…

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测(完整源码…

【算法】实验室2024年二面纳新题复盘

实验室2024年二面纳新题复盘 P1258 小车问题 原题链接: P1258 小车问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 小车问题 题目描述 甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。…

Spring Cloud学习笔记:Eureka集群搭建样例

这是本人学习的总结,主要学习资料如下 - 马士兵教育 1、项目架构2、Dependency3、项目启动类4、application.yml5、启动项目 1、项目架构 因为这是单机模拟集群搭建,为了方便管理就都放在了一个项目中。这次准备搭建三个项目server1, server2, server3 …

特征工程(V)--时间序列特征

有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 特征工程是数据分析…

计算机服务器中了rmallox勒索病毒怎么办,rmallox勒索病毒解密流程步骤

在企业的生产运营过程中网络发挥着巨大作用,利用网络可以拓宽市场,提高办公效率,网络为企业的生产运营提供了极大便利,但也为企业的数据安全带来隐患。近日,云天数据恢复中心接到多家企业的求助,企业的计算…

GNU Radio Radar Toolbox编译及安装

文章目录 前言一、GNU Radio Radar Toolbox 介绍二、gr-radar 安装三、具体使用四、OFDM 雷达仿真 前言 GNU Radio Radar Toolbox(gr-radar)是一个开放源码的工具箱,用于 GNU Radio 生态系统,主要目的是为雷达信号处理提供必要的…

Qt 中默认代码

目录 主函数 widget的声明 widget的定义 form file .pro 文件 主函数 #include "widget.h" ​ #include <QApplication> ​ int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 上面就是 Qt 刚创建的一…

黑马苍穹外卖--再来一单(stream流转换、赋值与收集映射)

1.首先明确一下业务规则: 业务规则&#xff1a; 再来一单就是将原订单中的商品重新加入到购物车中 2.产品页面原型和开发接口文档 3.业务层逻辑代码开发 3.1 查询方向 我们要明确的是: 再来一单就是将原订单中的商品重新加入到购物车中------直接把商品加入到购物车&#…