一文给你讲透 ARP 协议原理!

我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star
https://github.com/crisxuan/bestJavaer

公众号连载计算机网络文章如下

ARP,这个隐匿在计网背后的男人

我画了 40 张图就是为了让你搞懂计算机网络层

40 张图带你搞懂 TCP 和 UDP

拿下计网协议后,我就是公园里最靓的仔

TCP/IP 基础知识总结

计算机网络基础知识总结

那么开始我们本篇文章

只要确定了 IP 地址后,就能够向这个 IP 地址所在的主机发送数据报,这是我们所熟知的事情。但是再往深了想,IP 地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC 地址

认识 MAC 地址

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

MAC 地址也称为物理地址,硬件地址和老化地址。

MAC 地址主要用于识别数据链路中互联的节点,如下图所示

MAC 地址长 48 bit,在使用网卡(NIC) 的情况下,MAC 地址一般都会烧入 ROM 中。因此,任何一个网卡的 MAC 地址都是唯一的。MAC 地址的结构如下

MAC 地址中的 3 - 24 位表示厂商识别码,每个 NIC 厂商都有特定唯一的识别数字。25 - 48 位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同 MAC 地址的网卡。

MAC 地址也有例外情况,即 MAC 地址也会有重复的时候,但是问题不大,只要两个 MAC 地址是属于不同的数据链路层就不会出现问题。

ARP 是什么

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

注意:ARP 只用于 IPv4 协议中,IPv6 协议使用的是 Neighbor Discovery Protocol,译为邻居发现协议,它被纳入 ICMPv6 中。

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

ARP 的工作机制

下面我们探讨一下 ARP 的工作机制是怎样的。假设 A 和 B 位于同一链路,不需要经过路由器的转换,主机 A 向主机 B 发送一个 IP 分组,主机 A 的地址是 192.168.1.2 ,主机 B 的地址是 192.168.1.3,它们都不知道对方的 MAC 地址是啥,主机 C 和 主机 D 是同一链路的其他主机。

主机 A 想要获取主机 B 的 MAC 地址,通过主机 A 会通过广播 的方式向以太网上的所有主机发送一个 ARP 请求包,这个 ARP 请求包中包含了主机 A 想要知道的主机 B 的 IP 地址的 MAC 地址。

主机 A 发送的 ARP 请求包会被同一链路上的所有主机/路由器接收并进行解析。每个主机/路由器都会检查 ARP 请求包中的信息,如果 ARP 请求包中的目标 IP 地址 和自己的相同,就会将自己主机的 MAC 地址写入响应包返回主机 A

由此,可以通过 ARP 从 IP 地址获取 MAC 地址,实现同一链路内的通信。

如果是不同链路怎么办呢?

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

ARP 缓存

现在你知道了发送一次 IP 分组前通过发送一次 ARP 请求就能够确定 MAC 地址。那么是不是每发送一次都得经过广播 -> 封装 ARP 响应 -> 返回给主机这一系列流程呢?

想想看,浏览器是如何做的呢?浏览器内置了缓存能够缓存你最近经常使用的地址,那么 ARP 也是一样的。ARP 高效运行的关键就是维护每个主机和路由器上的 ARP 缓存(或表)。这个缓存维护着每个 IP 到 MAC 地址的映射关系。通过把第一次 ARP 获取到的 MAC 地址作为 IP 对 MAC 的映射关系到一个 ARP 缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送 ARP 请求了,而是直接使用这个缓存表中的 MAC 地址进行数据报的发送。每发送一次 ARP 请求,缓存表中对应的映射关系都会被清除。

通过 ARP 缓存,降低了网络流量的使用,在一定程度上防止了 ARP 的大量广播。

一般来说,发送过一次 ARP 请求后,再次发送相同请求的几率比较大,因此使用 ARP 缓存能够减少 ARP 包的发送,除此之外,不仅仅 ARP 请求的发送方能够缓存 ARP 接收方的 MAC 地址,接收方也能够缓存 ARP 请求方的 IP 和 MAC 地址,如下所示

不过,MAC 地址的缓存有一定期限,超过这个期限后,缓存的内容会被清除

我们可以在 Linux 或者 Windows 中使用 arp 命令查看 ARP 缓存。选项 -a 用于显示两个系统缓存中所有的缓存项。

在 Linux 中使用 arp 查询缓存

主要包含五项

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

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

比如我们在 Windows 中进行 ARP 缓存查询

Windows 中的 ARP 程序显示了 IPv4 的地址,它的接口是十六进制数,Windows 版本还指出地址是手动输入还是 ARP 动态学习的。在上面的例子中,既有静态的也有动态的。48 位的 MAC 地址被显示为 6 个十六进制数,在 Linux 中使用 : 号,在 Windows 中使用 - 进行分隔。

ARP 结构

我们上面说到,ARP 对想要知道 MAC 地址的目标主机会首先发送 ARP 请求,那么这个请求中都携带哪些信息呢?下面 cxuan 就来和你聊一下。下面是在以太网中转换一个 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 地址)目的硬件地址目的协议地址

ARP 抓包实战

我们分别演示在 Mac 和 Linux 下的 ARP 报文的截获

在 Mac 环境下,我这边使用的是 WireShark 进行抓包,你可以从官网下载,地址如下

https://www.wireshark.org/download.html

下载完成后阅读安装说明的手册,阅读后会发现需要安装两个插件,根据提示安装即可,然后我们打开 WireShark ,开始报文拦截,下面是我解惑的 ARP 数据包

这款软件很好的一个地方是对不同的数据包会有不同的颜色标识,这点非常好。

然后我们查看 ARP 请求

可以看到,这就是一个完整的 ARP 请求包,我们使用的硬件类型是以太网,协议类型是 IPv4 ,默认值是 0x0800,然后硬件大小是 6 个字节,协议大小占用 2 个字节,Op 的全称是 Opcode ,Op = 1 表示这是一个 ARP 请求,然后是发送方的硬件地址和协议地址,接收方的硬件地址和协议地址。

ARP 响应如下

可以看到 Op = 2,表示这是 ARP 响应。

在 Linux 环境下,你可以使用 tcpdump 截获 ARP 数据包,如果 tcpdump not found 的话,你可以使用 yum install -y tcpdump 安装。

使用 tcpdump -i ens33 可以打印出在 ens33 地址下的数据包,下面是我截取的 ARP 数据包。

更多关于 tcpdump 的用法,你可以参考这篇博客

https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

大佬写的很详细,这里就不再说明了。

ARP 缓存超时

缓存超时通常与 ARP 缓存中的项有关系,arp 命令可以允许管理员设置永不超时。ARP 把保存在高速缓存中的每一映射地址都设置生存时间,一般为 20 分钟。如果是不完整的映射,那么缓存超时时间为 3 分钟,不完整的映射通常会强制发送一条不存在主机的 ARP 请求。

RARP

与 ARP 相对的,RARP(Reverse Address Resolution Protocol) 是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议,将打印机服务器等小型嵌入式设备接入网络时会使用到。

平常我们设置 IP 地址一般会有两种方式,手动设置DHCP 动态获取

但是对于嵌入式设备来说,它没有任何输入接口,也无法通过 DHCP 获取动态地址。

在这种情况下,就要使用到 RARP 了,你需要准备一个 RARP 服务器,在这个服务器上注册设备的 MAC 地址和 IP 地址,然后将设备接入网络,设备会发出一条 IP 和 MAC 地址的查询请求给服务器,服务器会告诉设备其 IP 地址和 MAC 地址。

ARP 攻击

ARP 是一种非常不安全的协议,目前已经有很多涉及 ARP 的攻击,最主要的就是使用代理 ARP 功能假扮主机,对 ARP 请求作出应答,通过伪造 ARP 数据包来窃取合法用户的通信数据,造成影响网络传输速率和盗取用户隐私信息等严重危害。

ARP 攻击分类

ARP 主要攻击方式分为下面这几种

  • ARP 泛洪攻击:通过向网关发送大量 ARP 报文,导致网关无法正常响应。首先发送大量的 ARP 请求报文,然后又发送大量虚假的 ARP 响应报文,从而造成网关部分的 CPU 利用率上升难以响应正常服务请求,而且网关还会被错误的 ARP 缓存表充满导致无法更新维护正常 ARP 缓存表,消耗网络带宽资源。
  • ARP 欺骗主机攻击:ARP 欺骗主机的攻击也是 ARP 众多攻击类型中很常见的一种。攻击者通过 ARP 欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的 ARP 使得在自己的ARP 缓存表中对应的 MAC 为攻击者的 MAC,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄。
  • 欺骗网关的攻击: 欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户韵数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。
  • 中间人攻击: 中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。
  • IP地址冲突攻击: 通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的 MAC 地址,然后根据物理主机的 MAC 进行攻击,导致局域网内的主机产生 IP 地址冲突,影响用户的网络正常使用。

总结

ARP 是 TCP/IP 实现中的一个基本协议,它通常在应用程序或用户没有察觉到的情况下运行。ARP 可以用于映射 IP 地址为 MAC 地址。

这篇文章我们主要讲了 ARP 的基本原理,ARP 的帧结构,ARP 的工作机制,以及 ARP 代理、ARP 攻击、RARP 和 ARP 的区别等。

如果这篇文章读者们觉得还不错,跪求点赞、留言,你的支持将是我继续肝文的动力!

另外,添加我的微信 becomecxuan,加入每日一题群,每天一道面试题分享,更多内容请参见我的 Github,成为最好的 bestJavaer

我自己肝了六本 PDF,微信搜索「程序员cxuan」关注公众号后,在后台回复 cxuan ,领取全部 PDF,这些 PDF 如下

六本 PDF 链接

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

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

相关文章

万万没想到,“红孩儿”竟然做了程序员,还是CTO!

点击上方“码农突围”,马上关注 这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看”作者 | 年素清来源 | 码农故事汇 01 说起老版《西游记》,大家肯定都不陌生,毕竟这…

马化腾回忆创业:曾假扮女孩子陪聊

http://comment.tech.163.com/tech_bbs/AR0O2L7200094OE0.html 昨天,香港大学举办以创新创业为主题的Dream Catchers论坛。其中腾讯董事局主席马化腾在下午两点四十五分在李兆基会议中心做了专题演讲,分享了自己的创业经历并回答了媒体人张力奋有关产品、…

石油公司高管假扮马斯克窃取机密 被特斯拉提起控诉

马斯克 北京时间9月15日消息,据《福布斯》网络版报道,电动汽车厂商特斯拉近日起诉一名石油公司高管,控告其假扮特斯拉CEO埃隆马斯克(Elon Musk),意图窃取该公司机密财务信息。 这起周三提交至圣克拉拉县高等…

巨头王炸不断,硬核解读芯片技术路线

上周我在博客发布了一篇《龙芯自主指令集到底强在何处》的文章,虽然这只是一篇临时起意之作,信息有限的拙作,不过最近整个半导体行业实在风起云涌,上周四IBM推出了2nm的芯片,苹果春季发布会上这次苹果发布会上搭建M1的…

AI一分钟 | MIT研发盲眼机器人;卫报披露“假AI”,不少是人假扮的

▌桥水达里奥:AI造成贫富差距美应宣布紧急状态 据美国CNBC报道,桥水基金(Bridgewater Associates)创始人雷达里奥(Ray Dalio)表示,人工智能和自动化正在提高生产效率,但也造成明显的…

【Web技术】1101- 深入浅出前端本地储存

作者:星尘 https://www.yuque.com/starx/fe/oehz1m 引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高…

女研究生做“思维导图”与男友吵架!网友:吵架届的“内卷之王”....

本文募格学术撰写。参考资料:抖音、女教授跟生活的死磕、极目新闻(记者:丁伟) 、亚辉、麦穗视频、潇湘晨报、知乎、微博等。 研究生吵起架来的“职业病”有哪些? 近日,湖南长沙一女研究生因为“画思维导图与…

真正的程序员职场高手,都是怎么沟通的?

这些场景,你一定不会陌生:准备了好久的提案,讲了半天,老板不置可否,只让你回去再想想;跟同事交接工作,明明讲了好多遍,做的时候又出了差错;跟客户沟通过的事情&#xff0…

【Web技术】1295- 总结一下前端本地储存方案

作者:星尘starx https://juejin.cn/post/6925311938419408904 引言 2022 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器…

从一个月2500没人要到大厂技术主管的编程之路|我的十年

我们程序员,即便做到CTO,也远没有到拼才华的时候,即使吹上天,也不过是普通人,一些看起来比我们牛逼的人物,只不过在别人选择安逸的时候,他选择了拼搏而已。 我也一样,曾几何时&…

最新钓鱼网站假扮Office 365 信箱 恐会盗取用户密码

网站 Bleeping Computer 先前报导,近日网络出现新钓鱼邮件,不法分子发送假扮 Office 365 无法送出邮件的提示信,尝试盗取用户的密码。最先由 ISC Handler 的 Xavier Mertens 发现,最妙的是钓鱼邮件会伪装成多封邮件未能送达的通知…

假扮90后骗900万,这个骗局的背后隐藏一个赚钱的行业

今天分享的赚钱项目还是跟腾讯新闻有关,我平时已经养成了看新闻和看广告的习惯,尤其是广告,我会花更多的心思来琢磨和分析。 付费广告说明是用钱买流量,用钱砸出来的项目我一向都比较在意,比如你经常看到的医疗美容、…

不准机器人假扮人类?这是哪门子法律?

作者:栗子量子位(ID:QbitAI) “机器人不得伪装成人类。” 7月1日,加州的一项新法生效了。 从此,任何用作商业 (或正攵氵台) 用途的聊天机器人,都必须说明自己是机器人。不论是打电话、发短信、还…

新版 Microsoft Edge 有时会假扮成不同浏览器

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> Chromium 版 Microsoft Edge 近日被发现会根据所访问的站点模拟其他浏览器。这可能是出于兼容性原因。 随着新版 Edge 的发布,微软现在使用 Chromium Blink 引擎而不是…

微软新 Edge 有时会假扮成不同浏览器

(给前端大全加星标,提升前端技能) 转自:开源中国 Chromium 版 Microsoft Edge 近日被发现会根据所访问的站点模拟其他浏览器。这可能是出于兼容性原因。 随着新版 Edge 的发布,微软现在使用 Chromium Blink 引擎而不是…

win10VS2019无法登录微软账号的问题

vs打开以后,当打开账户设置登录微软账户时,会卡在界面不动。导致vs20190天过期无法使用。 解决方法: 打开设置,更新与安全; 在windowsd安全中心——防火墙与网络保护中 将防火墙关闭; 我是将三个都关闭&…

解决无法登录微软(Microsoft)账号的设置

解决无法登录微软账号 通过手动设置dns可以快速解决,dns设置为4.2.2.2 我以连接WiFi时怎么设置为例 1.找到WiFi的标志,右键打开“网络和Internet设置” 2.高级网络设置中的“更改适配器选项” 3.找到连接的WiFi,这时双击打开再点击属性&a…

VS2017无法登录微软账户的问题

VS2017打开之后,提示要登录微软账户,但是点击“登录”按钮之后,弹出的框一直没有内容,看上去像是网络出了问题。 网上在微软社区找到了类似的问题,也尝试了VPN和指定DNS,也无效。倒是有一条建议起了作用&am…

k8s学习-CKS真题-Trivy扫描镜像安全漏洞

目录 题目环境搭建解题模拟题参考 对应b站视频: CKS题目-Trivy扫描镜像漏洞 题目 Task 使用 Trivy 开源容器扫描器检测 namespace kamino 中 Pod 使用的具有严重漏洞的镜像。 查找具有 High 或 Critical 严重性漏洞的镜像,并删除使用这些镜像的 Pod。 注意&#xf…

值得重点推荐的BI软件有哪些?全在这里了

在数字化程度越来越高的趋势下,发挥着推动企业数字化转型重要作用的商业智能BI也在不断提升市场份额,也催生出不少的BI软件新星。那么,BI软件有哪些?哪些BI软件更普遍适用于不同行业?针对这些问题,我们做了…