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

news2024/11/16 17:47:55

网络网络层之(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.coloradmin.cn/o/1595279.html

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

相关文章

配置香橙派摄像头服务每次开机自动启动

目录 1.创建一个mjpg.sh脚本 2.在脚本中添加以下内容 3.增加可执行权限 4.在/etc/xdg/autostart/下创建mjpg.desktop 文件输入以下内容 1.创建一个mjpg.sh脚本 touch mjpg.sh 2.在脚本中添加以下内容 #!/bin/bash cd /home/orangepi/Myorangepi/zhinenglajitong/mjpg-stre…

分布式幂等性

1. 什么是幂等性? 幂等性是指在分布式系统中,一个操作多次执行的结果与其执行一次的结果相同。设计具有幂等性的分布式系统可以有效避免数据不一致和重复处理的问题。 幂等系统的应用场景 在微服务架构下,由于分布式天然特性的时序问题, 以…

解决动态规划问题

文章目录 动态规划的定义动态规划的核心思想青蛙跳阶问题解法一:暴力递归解法二:带备忘录的递归解法(自顶向下)解法三:动态规划(自底向上) 动态规划的解题套路什么样的问题考虑使用动态规划&…

英语新概念2-回译法-lesson6

我刚刚搬家去柏林大街的房子里。昨天一个流浪汉敲我的门,他想我寻求一顿饭和一杯啤酒。未拒绝了这个请求之后,这个流浪汉倒立着唱歌,我给他了一顿饭,他吃了食物并且喝了啤酒,然后他把一片奶酪放到他的口袋里然后走开了。过了一会儿,一个领居告诉我关于这个流浪汉的事情。…

GAN:对抗生成网络【通俗易懂】

一、概述 对抗生成网络(GAN)是一种深度学习模型,由两个神经网络组成:生成器G和判别器D。这两个网络被训练来协同工作,以生成接近真实数据的新样本。 生成器的任务是接收一个随机噪声向量,并将其转换为与真…

java数据结构与算法刷题-----LeetCode371. 两整数之和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 位运算 位运算 解题思路:时间复杂度O( l o g 2 m a …

网络篇09 | 运输层 udp

网络篇09 | 运输层 udp 01 简介UDP 是面向报文的 02 报文协议 01 简介 UDP 只在 IP 的数据报服务之上增加了一些功能:复用和分用、差错检测 UDP 的主要特点:无连接。发送数据之前不需要建立连接。 使用尽最大努力交付。即不保证可靠交付。 面向报文。…

C# dynamic 数据类型

在C#中,dynamic是一种数据类型,它允许在运行时推迟类型检查和绑定。使用dynamic类型,可以编写更具灵活性的代码,因为它允许在编译时不指定变量的类型,而是在运行时根据实际情况进行解析。 dynamic类型的变量可以存储任…

Oracle 19c RAC 补丁升级 补丁回退

补丁升级流程 补丁升级 停止集群备份家目录 两节点分别操作 cd /u01/app/19.3.0/grid/bin/ crsctl stop crs tar -zcvf /u01/app.tar.gz /u01/app /u01/app/19.0.0/grid/bin/crsctl start crs 两节点OPatch替换 --- 表示 root 用户,$ 表示 Oracle 用户提示符&#…

list 简化版模拟实现

1ListNode template<class T>struct ListNode{public:ListNode(const T& x T()):_next(nullptr), _prev(nullptr), _data(x){}//private://共有可访问ListNode<T>* _next;ListNode<T>* _prev;T _data;}; 实现iterator对Node*的封装 实现运算符重载 vo…

双向链表的实现(详解)

目录 前言初始化双向链表的结构为双向链表的节点开辟空间头插尾插打印链表尾删头删查找指定位置之后的插入删除pos节点销毁双向链表 前言 链表的分类&#xff1a; 带头 不带头 单向 双向 循环 不循环 一共有 (2 * 2 * 2) 种链表 带头指的是&#xff1a;带有哨兵位节点 哨兵位&a…

基于SignalR视频聊天 一

环境 VS2022 WIN10 .NET8 VSCode VUE SignalR 1.安装SignalR客户端库 需要在Vue.js项目中安装SignalR客户端库。可以使用npm或者yarn来安装 npm install microsoft/signalr2.创建SignalR服务 创建SignalR服务&#xff0c;以便客户端&#xff08;Vue.js应用&#xff09;能…

Java实现短信发送并校验,华为云短信配合Redis实现发送与校验

Java实现短信发送并校验&#xff0c;华为云短信配合Redis实现发送与校验 安装sms4j和redis <dependency><groupId>org.dromara.sms4j</groupId><artifactId>sms4j-spring-boot-starter</artifactId><version>3.2.1</version> <…

每日算法之矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 示例 2&#xff1a; 输入&#x…

访问者模式类图与代码

某图书管理系统中管理着两种类型的文献&#xff1a;图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本540页的图书和两篇各25页的论文&#xff0c;那么馆藏文献的总页码就是590页)。采用Visitor(访问者)模式实现该要求&#xff0c;得到如图7.16所示的类图。 访…

JavaScript知识点 --javaweb学习笔记

什么是Javascript? JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互JavaScript 和Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似JavaScript在1995 年由 Brendan Eich 发明&#xff0c;并…

Go微服务: 链路追踪jaeger原理和环境搭建

微服务中链路追踪作用 1 ) 概述 著名的管理学大师彼得德鲁克曾说过“If you can’t measure it, you can’t improve it”意思是&#xff1a;如果你不能度量它&#xff0c;你就无法改进它在微服务开发后期&#xff0c;服务会越来越多&#xff0c;调用链过多&#xff0c;进行链…

简历上写熟悉Linux下常用命令?直接寄

大家写简历技术栈时&#xff0c;都觉得越多越好&#xff0c;其中一条&#xff0c;熟悉Linux下常用命令&#xff1f;其实开发中Linux不是必备考点&#xff0c;除了运维&#xff0c;真正用的多的仅仅cd ls mkdir等&#xff0c;但当面试官问到上面命令时&#xff0c;是不是就傻眼了…

Java开发从入门到精通(二十):Java的面向对象编程OOP:Stream流

Java大数据开发和安全开发 &#xff08;一&#xff09;Java的新特性&#xff1a;Stream流1.1 什么是Stream?1.2 Stream流的使用步骤1.3 获取Stream流1.4 Stream流常见的中间方法1.5 Stream流常见的终结方法 &#xff08;一&#xff09;Java的新特性&#xff1a;Stream流 1.1 …

【Vue】面试题

vue的组建通信方式 父子关系&#xff1a;props & $emit 、 $parent / $children 、 ref / $refs 、 插槽跨层级关系&#xff1a; provide & inject通用方案&#xff1a;Vuex 或 eventbus 插播&#xff1a;兄弟组建怎么通信&#xff1f; eventbusVuex通过中间件&…