上帝视角

初识 ARP

从网络分层上看,我们知道二层网络中,使用 MAC 地址进行传输,MAC 地址做为数据链路层的设备标识符。

二层网络

三层网络中,使用 IP 地址进行传输,IP 地址做为网络层的设备标识符。

三层网络

我们还知道,容易记忆的域名,通过 DNS 解析成 IP 地址,有了 IP 地址就可以在网络上找到目的地。

DNS

IP 地址通过 ARP ,获得 MAC 地址,有了 MAC 地址才能在物理网络上传输数据。

ARP

ARP 是什么呢?

ARP ,是地址解析协议。根据设备的 IP 地址来查询对应 MAC 地址的协议。主机通过 ARP 查询到 MAC 地址后,将在 ARP 缓存表中增加映射表项,即 IP 地址和 MAC 地址的映射表项。

ARP表

举个栗子:我想去腾讯总部( IP 地址),但不知道具体位置( MAC 地址),这时我就可以通过导航软件( ARP )找到腾讯大厦。

腾讯大厦

ARP 原理

ARP 是如何知道 MAC 地址的呢?简单说,ARP 是通过 ARP 请求ARP 响应报文确定 MAC 地址的。

ARP报文

假如主机 A 向同一网段上的主机 B 发送数据。主机 A 的 IP 地址为 10.0.0.1 ,主机 B 的 IP 地址为 10.0.0.2 ,主机 C 的 IP 地址为 10.0.0.3 。它们都不知道对方的 MAC 地址。ARP 地址解析过程如下:

ARP解析过程
  1. 主机 A 首先查看自己的 ARP 表(即 ARP 缓存表),确定是否有主机 B 的 IP 地址对应表项。如果有,则直接使用表项中的 MAC 地址进行封装,封装成帧后发送给主机 B 。

主机A查看ARP表
  1. 如果主机 A 的 ARP 表没有对应的表项,就发送一个广播帧,源 IP 和源 MAC 地址是主机 A ,目的 IP 地址是主机 B ,目的 MAC 地址是广播 MAC 地址,即 FFFF-FFFF-FFFF 。这就是 ARP 请求报文

ARP请求
  1. ARP 请求是广播报文,同一个网段的所有主机都能收到。只有主机 B 发现报文中的目的 IP 地址是自己,于是主机 B 发送响应报文给主机 A ,源 MAC 地址和源 IP 地址是主机 B ,目的 MAC 地址和目的 IP 地址是主机 A ,这个报文就叫 ARP 响应报文。同时,主机 B 的 ARP 表记录主机 A 的映射关系,即主机 A 的 IP 地址和 MAC 地址的对应关系。

ARP响应
  1. 主机 C 也收到了 ARP 请求报文,但目的 IP 地址不是自己,所以不会进行响应。于是主机 C 添加主机 A 的映射关系到 ARP 表,并丢弃 ARP 请求报文。

ARP表
  1. 主机 A 收到 ARP 响应报文后,添加主机 B 的映射关系,同时用主机 B 的 MAC 地址做为目的地址封装成帧,并发送给主机 B 。

ARP获取MAC地址

如果每发送一个 IP 报文就要进行一次 ARP 请求,来确定 MAC 地址,那将会造成不必要的网络流量,通常的做法是用 ARP 表记录 IP 地址和 MAC 地址的映射关系。主机发送报文时,首先会查看它的 ARP 表,目的是为了确定是否是已知的设备 MAC 地址。如果有,就直接使用;如果没有,就发起 ARP 请求获取。不过,缓存是有一定期限的。ARP 表项在老化时间aging time )内是有效的,如果老化时间内未被使用,表项就会被删除。

ARP缓存

ARP 表项分为动态 ARP 表项静态 ARP 表项

  • 动态 ARP 表项由 ARP 动态获取,因此在网络通信中,无需事先知道 MAC 地址,只要有 IP 地址即可。如果老化时间内未被使用,表项就会被自动删除。

  • 静态 ARP 表项是手工配置,不会老化。静态 ARP 表项的优先级高于动态 ARP 表项,可以将相应的动态 ARP 表项覆盖。

ARP表项类型

代理 ARP

ARP 广播报文会被路由器隔离,没有默认网关、网段不同的主机相互通信时,连接这两个网络的路由器可以响应这个 ARP 请求,这个过程叫做代理 ARP( Proxy ARP )。

代理ARP

主机 A 与另一个网段的主机 B 通信,主机 A 直接发送 ARP 请求,解析主机 B 的 MAC 地址。运行了代理 ARP 的路由器收到 ARP 请求后,代替主机 A 在 20.0.0.0 网段发出 ARP 请求,解析主机 B 的地址。

代理ARP请求

主机 B 收到路由器发出的 ARP 请求,发出 ARP 响应报文,告知自己的 MAC 地址是 2222-2222-2222 。路由器收到 ARP 响应后,也向主机 A 发送 ARP 响应,但目的 MAC 地址是与 10.0.0.0 网段连接的端口 MAC 地址是 1010-1010-1010 。主机 A 收到报文后,在 ARP 表中添加 IP 地址是 20.0.0.1 和 MAC 地址是 1010-1010-1010 的映射表项。

代理ARP响应

因此主机 A 会将所有要发送给主机 B 的数据发送给路由器,路由器再将其转发给主机 B 。反之亦然。

代理 ARP 功能屏蔽了分离的网络,主机不用修改 IP地址和子网掩码就可以和现有的网络互通。让用户使用起来,跟在同一个网络上一样。代理 ARP 使用在主机没有默认网络,或没有任何路由的网络上,通常是那些不支持设定子网掩码的老设备。但代理 ARP 会转发 ARP 广播报文,造成网络效率低,不适合用于大规模网络。

代理ARP

RARP

RARP 是将 ARP 反过来,从设备 MAC 地址获取 IP 地址的一种协议。通常是打印机等小型嵌入式设备接入网络时会用得到。

RARP

RARP 原理

使用 RARP 需要搭建一台 RARP 服务器,在服务器上注册设备的 MAC 地址及 IP 地址。

  1. 设备插电启动后,广播发送一个请求报文,希望获得 IP 地址应答。目的 MAC 地址是广播地址,源 MAC 地址是自己的物理地址。

RARP请求
  1. RARP 服务器收到 IP 地址请求后,给设备分配一个 IP 地址,并通过响应报文发送给设备。设备收到响应报文后,把 RARP 服务器分配的 IP 地址设置成自己的 IP 地址。

RARP响应

免费 ARP

免费 ARP 是一种特殊的 ARP 请求,它并非通过 IP 找到对应的 MAC 地址,而是当主机启动的时候,发送一个免费 ARP 请求,即请求自己的 IP 地址的 MAC 地址。

免费ARP

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

广播免费ARP

免费 ARP 的作用:

  • 起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其它主机自己的 IP 地址和 MAC 地址。

  • 可用于检测 IP 地址冲突。当一台主机发送了免费 ARP 请求报文后,如果收到了 ARP 响应报文,则说明网络内已经存在使用该 IP 地址的主机。

  • 可用于更新其它主机的 ARP 缓存表。如果该主机更换了网卡,而其它主机的 ARP 缓存表仍然保留着原来的 MAC 地址。这时,通过免费的 ARP 数据包,更新其它主机的 ARP 缓存表。

ARP 报文

ARP 报文分为 ARP 请求报文ARP 应答报文,它们的报文格式相同,但是各个字段的取值不同。

ARP报文格式

ARP 报文中各个字段的含义如下。

ARP报文字段含义

网络实战

ARP 可以动态地进行地址解析,因此网络中的设备无需配置,只要有 IP 地址就可以自动获得 MAC 地址。但是静态 ARP 和代理 ARP 等是需要单独配置。下面我们代理 ARP 的实验。

代理 ARP

网络拓扑

网络拓扑
实验要求
  • PC1 和 PC2 只配置 IP 地址和子网掩码;

  • RT(路由器)配置代理 ARP 功能,PC1 可以 ping 通 PC2 。

操作步骤
  1. PC1 、PC2 分别配置 IP 地址。

PC配置
  1. RT 配置 IP 地址和代理 ARP 功能。

RT配置
功能验证

配置完成后,下面就要进行验证,检查功能是否生效、配置是否正确。在 PC1 上 ping PC2 的 IP 地址,进行连通性测试。

ping测试验证

还可以抓包查看完整的报文交互过程,同时验证下理论知识是否正确。

抓包

饮水思源:

图解TCP/IP - 竹下隆史

网络基础 - 田果

路由交换技术 - 杭州华三通信技术有限公司

HCNA网络技术学习指南 - 华为技术有限公司

TCP/IP详解 卷1:协议 - Kevin R.Fall

PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

36 张图详解 ARP :网络世界没有我,你哪也别想去相关推荐

  1. 36 张图详解应用层协议:网络世界的最强王者

    上帝视角 应用层 我们前面介绍过 TCP/IP 模型的下三层,分别是网络接入层.网络层和传输层.它们都是为应用层服务的,传输应用层的各种数据,现在我们就来看看最高层的应用层. 应用层 在 TCP/IP ...

  2. 36 张图详解 DNS :网络世界的导航

    上帝视角 我们平时在访问网站时,不使用 IP 地址,而是网站域名.但是抓包发现:交互报文是以 IP 地址进行的.那么 IP 地址是从哪来的呢?这是因为 DNS 把网站域名自动转换为 IP 地址. 报文 ...

  3. 36张图详解网络基础知识

    前言 网络协议 我们用手机连接上网的时候,会用到许多网络协议.从手机连接 WiFi 开始,使用的是 802.11 (即 WLAN )协议,通过 WLAN 接入网络:手机自动获取网络配置,使用的是 DH ...

  4. 71张图详解IP地址、IP 路由、三层转发、ARP、ICMP

    71张图详解IP地址.IP 路由.三层转发.ARP.ICMP 架构师之道2021-04-07 13:51:24 https://www.toutiao.com/i6948285918986027531 ...

  5. 123 张图详解 177 个计算机网络名词

    大家好,我是小弗.上篇<60 张图详解 98 个常见网络概念>有一段时间了,现在重新汇总整理,把最近提到的网络名词也加上.同时为了方便阅读,增加了大量的配图,让网络小白也能轻松理解.考虑到 ...

  6. 一张图详解项目经理PMO应用波士顿矩阵的步骤和流程

    一张图详解项目经理&PMO应用波士顿矩阵的步骤和流程

  7. 71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP

    目录 有小伙伴问:为什么没有配置 IP 地址就无法上网?IP 协议又是啥? 这要从 TCP/IP 协议说起,互联网使用的是 TCP/IP 协议,其中 IP 协议又是最重要的协议之一.IP 协议是基于  ...

  8. 37 张图详解 DHCP :给你 IP 地址的隐形人

    DHCP 出现 电脑或手机需要 IP 地址才能上网.大刘有两台电脑和两台手机,小美有一台笔记本电脑.一台平板电脑和两台手机,老王.阿丽.敏敏也有几台终端设备.如果为每台设备手动配置 IP 地址,那会非 ...

  9. 十二张图详解Redis的数据结构和对象系统

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Redis! 本文来自:张狗蛋的技术之路 Redis是一个开源的 key-value 存储系统,它使用六种底层数据结构构建了包含字符串对 ...

最新文章

  1. 知乎 高级操作系统_知乎高赞:Linux!为何他一人就写出这么强的系统,中国却做不出来?...
  2. 处理图片(updated)
  3. 英特尔nuc能代替主机吗_终于圆满了!最新款的Intel NUC迷你主机上线
  4. 英语中十二个月份的由来
  5. Python中几个有趣的函数
  6. java反射源码_java反射技术详解附源码
  7. Python稳基修炼的经典案例5(计算机二级、初学者必须掌握的例题)
  8. 亚马逊运营实用教程 上线前三个月如何做
  9. html自我介绍怎么弄,用html设计一个自我介绍的静态网页
  10. Python可视化:Pyecharts成长之路
  11. 力扣539题 最小时间差
  12. 中华万年历头条数据聚合优化之路
  13. python根据词向量计算相似度_如何使用gensim的word2vec模型和python计算句子相似度...
  14. 使用 Taro 快速开发京东小程序
  15. 开关电源拓扑结构详解
  16. Charles 使用总结
  17. 疫情反弹,传统企业如何做好线上营销获客?
  18. data block address
  19. mysql数据库中插入表信息_mysql数据库中插入表
  20. udec采场开挖教程_UDEC模拟采动覆岩突水通道

热门文章

  1. 厦大计算机学硕考研复试,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  2. Linux终端上如何将图像转换成 ASCII 艺术
  3. poj1064(二分查找)
  4. 2021湖北省普通高考成绩查询果,2021年湖北高考录取结果查询登录网址入口
  5. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)
  6. 解题报告:luogu P2423 [HEOI2012]朋友圈【最大团转最大点独立集(匈牙利算法+时间戳优化)】
  7. 【python】向上取整 向下取整
  8. ormlite android studio,OrmLite-android入门体验
  9. 创建存储器_Microchip推出首款低功耗数模转换器,集成非易失性存储器,简化手持设备设计...
  10. 使用Teams接收Azure服务运行状况通知