网络网络层之(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服务器时,受限于广播报文形式,会存在多个回复应答,增加以太网发生冲突的概率。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于RT-Thread(RTT)的BMP280气压计驱动(I2C通信)

前言 本文基于RTT操作系统使用STM32F401RET6驱动BMP280气压计模块,使用I2C协议通信 一、新建工程 二、添加软件包 三、添加这个包 四、打开CubeMX 五、配置时钟源,使用外部晶振 六、配置串行下载口 七、打开I2C,我这里使用的是I2C2&#x…

Abstract Factory抽象工厂模式详解

模式定义 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。 代码示例 public class AbstractFactoryTest {public static void main(String[] args) {IDatabaseUtils iDatabaseUtils new OracleDataBaseUtils();IConnection connection …

【OpenGL开发】PyQt在关闭应用程序时没有运行析构函数的问题

PyQt在关闭应用程序时没有运行析构函数的问题 目录 一、说明二、python的析构函数三、QT5 存在一些问题四、PyQt5 存在一些问题五、OpenGL的析构问题 一、说明 应用QT做程序界面,在程序退出的时候,需要调用析构函数释放资源,这个操作在Pytho…

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念: 位(Bit) 计算机中最小的数据单位,一位有0、1两状态。Bit是计算机中最小…

论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents

iclr 2024 reviewer评分 5688 引入了 SmartPlay,一种从 6 种不同游戏中提取的基准 衡量LLM作为智能体的能力 1 智能代理所需的能力 论文借鉴游戏设计的概念,确定了智能LLM代理的九项关键能力,并为每项能力确定了多个等级: 长文…

LLM-大模型演化分支树、GPT派发展阶段及训练流程图、Infini-Transformer说明

大模型是怎么演进的? Encoder Only: 对应粉色分支,即BERT派,典型模型: BERT 自编码模型(Autoencoder Model):通过重建句子来进行预训练,通常用于理解任务,如文本分类和阅…

<计算机网络自顶向下> TCPUDP套接字编程

应用实现:源端的应用进程交换报文实现应用协议,来实现各种各样的网络应用(dash,email, etc) 而应用层通信不可以直接通信,需要借助下层的服务才可以进行,通过层间接口交给下层,通过…

面试八股——Spring——AOP与事务

AOP的定义 事务的实现 事务的失效场景 异常捕获处理 下图中由于②导致异常: 原因: 解决办法:自己抛出一个非检查异常(具体原因看“抛出检查异常”)。 抛出检查异常 由于①出错,导致抛出了检查异常 原因&…

【Linux】CentOS 7安装后没有图形界面

专栏文章索引:Linux 有问题可私聊:QQ:3375119339 目录 一、项目场景 二、问题描述 三、原因分析 四、解决方案 1.当前处于命令行界面,可以切换为图形界面 2.安装时没有安装图形界面,选择了Minimal Install 3.下…

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

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