网络网络层之(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.mzph.cn/news/817210.shtml

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

相关文章

C语言中的数据结构--链表的应用2(3)

前言 上一节我们学习了链表的应用,那么这一节我们继续加深一下对链表的理解,我们继续通过Leetcode的经典题目来了解一下链表在实际应用中的功能,废话不多说,我们正式进入今天的学习 单链表相关经典算法OJ题4:合并两个…

pyppeteer和requests简单应用

pyppeteer和requests简单应用 本文章只是分享pyppeteer技术。有些反扒网站可以使用pyppeteer库,完整代码没有分享。 获取相关开发工具软件,可以关注公众号:爬虫探索者。 发送下面图片的关键字可以获取对应软件。sql指的是Navicat。 破解教程可…

Netty之ByteBuff

1、Jdk自带ByteBuffer 1.1、ByteBuffer简介 事实上,jdk自1.4版本,就已经提供了nio的ByteBuffer,用于在Java程序中操作原始数据。ByteBuffer可以用来读取和写入二进制数据,例如网络传输的数据、文件的内容等。 ByterBuffer的部分…

【大数据】Apache Knox 概述

Apache Knox 概述 1.概述1.1 Kerberos 封装1.2 简化客户端证书的管理1.3 Apache Ranger 集成1.4 Hadoop URLs VS Knox URLs 2.自定义 Apache Knox2.1 Topology2.2 Provider2.3 Services2.4 Personalized services 3.Tips3.1 Setting up SSL3.2 常见问题3.2.1 Bulky answer3.2.2…

财务软件行业背景-易舟云

财税是每个企业的基本基石之一。财务报告讲述了公司的故事——它的利润和亏损、收益和债务、税收支出以及可用于未来增长的资产。随着信息时代的飞速发展,财务信息化建设日益完善,大量基于计算机网络的应用系统已经逐步深入财务管理领域。传统的会计录入…

过冲、振铃、非单调性

1、过冲(Overshoot)和振铃(Ringing)是电路中常见的信号失真现象,主要出现在开关电源、数字信号传输、通信系统以及其他涉及快速开关动作的电子设备中。它们通常与电路的瞬态响应有关,尤其是当电路受到阶跃输…

【学习笔记十三】EWM常见上架策略介绍

一、手工维护上架策略 系统不确定Storage type 和 bin,需要在创建仓库任务时或者确认仓库任务时手工输入仓位 1.后台配置-定义存储类型的类型0010 ①存储行为:标准仓位 ②入库规则:空仓未或添加至现有库存/空仓位 ③通用仓库任务&#x…

postgresql 备份恢复相关知识点整理归纳 —— 筑梦之路

概述 PG一般有两种备份方式:逻辑备份和物理备份 逻辑备份对于数据量大的场景下耗时较长,恢复也会耗时较长 物理备份拷贝文件的方式相对来说耗时较短,跟磁盘读写性能和网络传输性能有关 逻辑备份 pg_dump pg_dump 将表结构及数据以SQL语句…

微信小程序实现预约生成二维码

业务需求&#xff1a;点击预约按钮即可生成二维码凭码入校参观~ 一.创建页面 如下是博主自己写的wxml&#xff1a; <swiper indicator-dots indicator-color"white" indicator-active-color"blue" autoplay interval"2000" circular > &…

SpringBoot - Logback 打印第三方 Jar 日志解决方案

问题描述 最近碰到一个很苦恼的问题&#xff0c;就是第三方的 Jar 在自己项目里日志可以正常输出&#xff0c;但是一旦被引用到其他项目里&#xff0c;就日志死活打不出来…… 解决方案 这是原来的配置 - logback.xml <?xml version"1.0" encoding"UTF-8…

LigaAI x 极狐GitLab,共探 AI 时代研发提效新范式

近日&#xff0c;LigaAI 和极狐GitLab 宣布合作&#xff0c;双方将一起探索 AI 时代的研发效能新范式&#xff0c;提供 AI 赋能的一站式研发效能解决方案&#xff0c;让 AI 成为中国程序员和企业发展的新质生产力。 软件研发是一个涉及人员多、流程多、系统多的复杂工程&#…

基于 Operator 部署 Prometheus 监控 k8s 集群

目录 一、环境准备 1.1 选择版本 1.2 过滤镜像 1.3 修改 yaml 镜像 1.4 移动 *networkPolicy*.yaml 1.5 修改 service 文件 1.6 提前下载镜像并推送到私有镜像仓库 1.7 修改镜像&#xff08;可选&#xff09; 二、执行创建 三、查看 pod 状态 四、访问 prometheus、…

Ceph [OSDI‘06]论文阅读笔记

原论文&#xff1a;Ceph: A Scalable, High-Performance Distributed File System (OSDI’06) Ceph简介及关键技术要点 Ceph是一个高性能、可扩展的分布式文件系统&#xff0c;旨在提供出色的性能、可靠性和可扩展性。为了最大化数据和元数据管理的分离&#xff0c;它使用了一…

2024年第十五届蓝桥杯C/C++B组复盘(持续更新)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 试题A&#xff1a;握手问题问题描述思路 试题B&#xff1a;小球反弹问题描述思路…

一个令人惊艳的图片高清化重绘神器:SUPIR来了!

今天给大家分享一个将模糊图片还原为照片级高清图像的AI项目&#xff1a;SUPIR。这个项目以尖端的大规模人工智能革新图像恢复技术&#xff0c;通过文本驱动、智能修复&#xff0c;将AI技术与创新思维相结合&#xff0c;赋予每张图像全新的生命力。这个项目的修复能力本质上是一…

AI的说服力如人类?Anthropic最新研究揭秘机器的辩论能力|TodayAI

人们常常对人工智能模型在对话中的说服力表现持怀疑态度。长久以来&#xff0c;社会上一直存在一个疑问&#xff1a;人工智能是否会达到人类那样&#xff0c;在对话中具有改变他人想法的能力&#xff1f; 直到最近&#xff0c;这一领域的实证研究相对有限&#xff0c;对于人工…

零基础使用FlexLua打造LoRa无线气体流量计,硬件轻松快速开发。

在工业领域&#xff0c;对气体流量进行准确监测和管理是保障生产安全和提高效率的重要环节。而LoRa&#xff08;长距离低功耗无线技术&#xff09;作为一种适用于远距离、低功耗的通信技术&#xff0c;为无线传感器网络的建设提供了可靠的解决方案。结合气体流量传感技术&#…

畅游网络:构建C++网络爬虫的指南

概述 随着信息时代的来临&#xff0c;网络爬虫技术成为数据采集和网络分析的重要工具。本文旨在探讨如何运用C语言及其强大的cpprestsdk库构建一个高效的网络爬虫&#xff0c;以便捕捉知乎等热点信息。为了应对IP限制的挑战&#xff0c;我们将引入亿牛云爬虫代理服务&#xff…

NPU流式输出-torch_npu和transformers框架-多线程Streamer-昇腾910B-EE1001

前情提要 torch_npu框架不支持多线程自动set_device 报错详情 直接使用transformers的TextIteratorStreamer进行流式推理&#xff0c;会报错 Exception in thread Thread-6: Traceback (most recent call last):File "/root/anaconda3/envs/AI/lib/python3.9/threadin…

《springcloud alibaba》 六 微服务链路跟踪skywalking

目录 准备调整配置接入多个微服务网关项目调整order-seata项目stock-seata项目测试 接入网关微服务 skywalking持续化到mysql自定义链路跟踪pom .xmlorderControllerOrderServiceOrderDaoOrderTblMapper.xml测试 性能剖析日志tid打印pom.xmllogback-spring.xml日志收集启动项目…