当前位置: 首页 > news >正文

ARP基本原理

相关概念
  • ARP报文

    ARP报文分为ARP请求报文和ARP应答报文,报文格式如图1所示。

    图1 ARP报文格式

Ethernet Address of destination(0–31)和Ethernet Address of destination(32–47)分别表示Ethernet Address of destination字段的前32个比特和后16个比特,Ethernet Address of destination字段的总长度是48比特

ARP报文的长度是42字节。前14字节的内容表示以太网首部,后28字节的内容表示ARP请求或应答报文的内容。ARP报文中相关字段的解释如表1所示。

  • 表1 ARP报文各字段的含义

    字段

    长度

    含义

    Ethernet Address of destination

    48比特

    以太网目的MAC地址。发送ARP请求报文时,为广播的MAC地址:0xFF-FF-FF-FF-FF-FF。

    Ethernet Address of sender

    48比特

    以太网源MAC地址。

    Frame Type

    16比特

    数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。

    Hardware Type

    16比特

    硬件地址的类型。对于以太网,该类型的值为“1”。

    Protocol Type

    16比特

    发送方要映射的协议地址类型。对于IP地址,该值为0x0800。

    Hardware Length

    8比特

    硬件地址的长度。对于ARP请求或应答来说,该值为6。

    Protocol Length

    8比特

    协议地址的长度。对于ARP请求或应答来说,该值为4。

    OP

    16比特

    操作类型。OP的值与操作类型的关系如下:
    • 1表示ARP请求
    • 2表示ARP应答
    • 3表示RARP请求
    • 4表示RARP应答

    Ethernet Address of sender

    48比特

    源MAC地址。这个字段和ARP报文首部的以太网源MAC地址字段是相同的信息。

    IP Address of sender

    32比特

    源IP地址。

    Ethernet Address of destination

    48比特

    目的MAC地址。发送ARP请求报文时,该处填充值为0x00-00-00-00-00-00。

    IP Address of destination

    32比特

    目的IP地址。

  • ARP表

    如果每次主机在向外发送数据报文前都要先发送ARP请求报文,会大幅增加网络的通信量。而且网络上的所有设备都必须接收和处理该ARP请求报文,极大地影响了网络的运行效率。为了解决上述问题,每台主机上都维护着一个ARP表,这是ARP高效运行的关键。在这个ARP表中,存放着最近获得的IP地址和MAC地址之间的映射关系,这种映射关系称为ARP表项。

    根据ARP表项的生成方式不同,可以将ARP表项分为动态ARP表项和静态ARP表项。两者的区别仅在于:

    • 动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的动态ARP表项更新,也可以被静态ARP表项覆盖。
    • 静态ARP表项由网络管理员通过手工配置生成和维护,不会被老化,也不会被动态ARP表项覆盖。
    主机在每次发送数据报文前,都会先在ARP表中查找目的IP地址所对应的MAC地址。
    • ARP表中有对应的MAC地址时,主机就不会再发送ARP请求报文,而是直接将数据报文发至这个MAC地址。

    • ARP表中没有对应的MAC地址时,主机才会发送ARP请求报文,请求目的主机的MAC地址。

  • 逆地址解析协议RARP(Reverse Address Resolution Protocol)

    当一台主机只知道自己的MAC地址时,可以通过发送和接收RARP报文,找出本设备的IP地址。

    网络管理员先在网络中的网关路由设备上创建一个MAC地址和与其对应的IP地址的映射关系。当用户需要对一台新的主机进行配置时,该设备的RARP客户机程序就会向网关路由设备上的RARP服务器请求相应的IP地址。

实现过程

  1. HostA查看自己的ARP表,发现没有目的主机HostB的IP地址和MAC地址的映射关系。于是,HostA对外发送ARP请求报文,请求HostB的MAC地址。该ARP请求报文中的源IP地址和源MAC地址为HostA的IP地址和MAC地址,目的IP地址和目的MAC地址分别为HostB的IP地址和全0的MAC地址,以太网源MAC地址和目的MAC地址分别为HostA的MAC地址和广播MAC地址。

  2. CE1收到ARP请求报文后,将该报文在本网段内广播。

  3. HostB收到ARP请求报文后,更新自己的ARP表,将HostA的MAC地址添加到ARP表,同时向该ARP请求报文的发送方HostA发送ARP响应报文。该ARP响应报文中的源IP地址和源MAC地址为HostB的IP地址和MAC地址,目的IP地址和目的MAC地址为HostA的IP地址和MAC地址,以太网源MAC地址和目的MAC地址分别为HostB的MAC地址和HostA的MAC地址。

    由于ARP请求报文的目的IP地址不是设备PE的IP地址,所以PE在收到ARP请求报文后,直接将其丢弃。

  4. CE1收到该ARP响应报文后,将该报文转发给目的主机HostA。

  5. HostA收到ARP响应报文后,更新自己的ARP表,将HostB的MAC地址添加到ARP表中,同时将数据报文发送给HostB。

以HostA向HostC发送数据报文为例,结合图3和图4详细介绍不同网段间ARP是如何实现的。

图3描述了同网段的HostA和PE之间ARP的实现过程。通过这个网段内ARP的实现,HostA可以将数据报文发送到PE。

图3 同网段内HostA和PE之间地址解析的实现过程

  1. HostA查看自己的ARP表,发现没有到达目的主机HostC的默认网关PE的接口Interface1的IP地址和MAC地址的映射关系。于是,HostA对外发送ARP请求报文,请求PE的接口Interface1的MAC地址。该ARP请求报文中的源IP地址和源MAC地址为HostA的IP地址和MAC地址,目的IP地址和目的MAC地址分别为PE的接口Interface1的IP地址和全0的MAC地址,以太网源MAC地址和目的MAC地址分别为HostA的MAC地址和广播MAC地址。

  2. CE1收到ARP请求报文后,将该报文在本网段内广播。

  3. 网关PE收到ARP请求报文后,更新自己的ARP表,将HostA的MAC地址添加到ARP表,同时向该ARP请求报文的发送方HostA发送ARP响应报文。该ARP响应报文中的源IP地址和源MAC地址为PE的接口Interface1的IP地址和MAC地址,目的IP地址和目的MAC地址为HostA的IP地址和MAC地址,以太网源MAC地址和目的MAC地址分别为PE的接口Interface1的MAC地址和HostA的MAC地址。

    由于ARP请求报文的目的IP地址不是HostB的IP地址,所以HostB在收到ARP请求报文后,直接将其丢弃。

  4. CE1收到该ARP响应报文后,将该报文转发给目的主机HostA。

  5. HostA收到ARP响应报文后,更新自己的ARP表,将PE的接口Interface1的MAC地址添加到ARP表中,同时将数据报文发送给PE。

图4描述了同网段的PE和HostC之间ARP的实现过程。通过这个网段内ARP的实现,PE可以将数据报文发送给HostC。

图4 同网段内PE和HostC之间地址解析的实现过程

首先,PE通过查询路由表,将数据报文从Interface1发送到Interface2。

  1. PE查看自己的ARP表,发现没有目的主机HostC的IP地址和MAC地址的映射关系。于是,PE发送ARP请求报文,请求HostC的MAC地址。该ARP请求报文中的源IP地址和源MAC地址为PE的接口Interface2的IP地址和MAC地址,目的IP地址和MAC地址分别为HostC的IP地址和全0的MAC地址,以太网源MAC地址和目的MAC地址分别为PE的接口Interface2的MAC地址和广播MAC地址。

  2. CE2收到ARP请求报文后,将该报文在本网段内广播。

  3. HostC收到ARP请求报文后,更新自己的ARP表,将PE的接口Interface2的MAC地址添加到ARP表,同时向该ARP请求报文的发送方PE发送ARP响应报文。该ARP响应报文中的源IP地址和源MAC地址为HostC的IP地址和MAC地址,目的IP地址和目的MAC地址为PE的接口Interface2的IP地址和MAC地址,以太网源MAC地址和目的MAC地址分别为HostC的MAC地址和PE的接口Interface2的MAC地址。

    由于ARP请求报文的目的IP地址不是HostD的IP地址,所以HostD在收到ARP请求报文后,直接将其丢弃。

  4. CE2收到该ARP响应报文后,将该报文发送给目的设备PE。

  5. PE收到ARP响应报文后,更新自己的ARP表,将HostC的MAC地址添加到ARP表中,同时将数据报文发送给HostC。

通过以上两个同网段内ARP的实现,不同网段间的主机HostA和HostC可以进行数据报文的传送。

相关文章:

  • 【Python设计模式14】状态模式
  • 决策树最优属性选择
  • 2024最新 Jenkins + Docker 实战教程(四) - 编写自己的Springboot项目实现自动化部署
  • Apache JMeter操作
  • linux使用dockerCompose脚本化部署镜像
  • 简单采用windows批处理命令批量合并命名安卓B站缓存视频
  • jenkins自动化部署详解
  • Tina-Linux -- 4. LVGL 8.3移植
  • 【全国青少年信息素养大赛算法创意初中组押题卷】
  • 防火墙最新技术汇总
  • 【学习笔记】后端(Ⅰ)—— NodeJS(Ⅱ)
  • Centos7.9上安装Oracle 11gR2 RAC 三节点(ASMlib管理asm磁盘)
  • Vue学习穿梭框Transfer组件
  • 贪心算法:划分字母区间
  • 包装类..
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • ECMAScript入门(七)--Module语法
  • ECS应用管理最佳实践
  • Java,console输出实时的转向GUI textbox
  • java8 Stream Pipelines 浅析
  • Javascript Math对象和Date对象常用方法详解
  • laravel with 查询列表限制条数
  • mysql外键的使用
  • October CMS - 快速入门 9 Images And Galleries
  • PHP 小技巧
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redis在Web项目中的应用与实践
  • swift基础之_对象 实例方法 对象方法。
  • vue脚手架vue-cli
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 不上全站https的网站你们就等着被恶心死吧
  • 初识 beanstalkd
  • 代理模式
  • 读懂package.json -- 依赖管理
  • 分享几个不错的工具
  • 聊聊redis的数据结构的应用
  • 前端面试题总结
  • 前端自动化解决方案
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 微服务核心架构梳理
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​比特币大跌的 2 个原因
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (2)空速传感器
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (70min)字节暑假实习二面(已挂)
  • (day6) 319. 灯泡开关
  • (LeetCode) T14. Longest Common Prefix
  • (二)c52学习之旅-简单了解单片机