首页 > 地址解析协议ARP

地址解析协议ARP

设计需求

ARP协议解决的问题就是:在同一个局域网中,解决主机IP地址和硬件地址的映射问题

基本使用原理

当数据在网络中某一条链路传输的时候我们知道目的主机的IP地址,但是不知道硬件地址,ARP协议就是解决这个问题的一个协议,IP协议可以使用ARP协议找到相应的硬件地址

  • 因为IP地址和下面的硬件地址没有直接的联系,这个时候就通过一个中间的协议ARP协议进行从网络层到硬件层的一个转化
  • 在网络中可能有一些新的主机加入,或者是撤销一些主机,这个时候就硬件地址都可能会改变,所以ARP解决这个问题的方法就是在主机(包括普通主机和路由器)的ARP高速缓冲区中设置了一个从IP地址到硬件地址的一个映射表,映射表中存放的就是各个主机和路由器的IP地址到硬件地址的一个映射关系,局域网中的发送端可以通过这个映射表把报文发送至目标主机

下面的一个图简单看一下ARP协议的使用的位置

这里写图片描述

具体实现

两种情况

  1. 本局域网中,主机A要向主机B发送报文时,主机A先在自己的映射表中查找有没有主机B的IP地址,如果有,则获取它的B主机硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网,把该MAC帧发送至B的硬件地址
  2. 有可能主机A没有查到主机B的 IP地址,原因可能是主机A或者 是主机B刚刚接入局域网,也可能 是主机A刚刚通电,这个时候它的高速缓冲区的内容还是空的,这个时候通过下面的方式进行查找主机B

    • 主机A的ARP进程发送一个请求广播,广播的内容是“我的IP地址时aaaa,硬件地址时a0a0,我想知道IP地址时bbbb的硬件地址”。
    • 这个时候在该局域网里面的所有主机的ARP进程都能接受主机ARP的请求广播
    • 每个主机都检查广播中的IP地址是不是自己的,如果不是则直接忽略这则广播,只有主机B发现广播中的IP地址和自己的IP地址是一样的 ,这个时候主机B就通过单播的方式将自己的请求发送给主机A,单播的内容是“我是主机B,我的IP地址是bbbb,我的硬件地址是bb00”
    • 主机A接受到主机B发送的信息之后将主机B的信息放到自己的映射表中,然后向主机B发送报文

补充机制

ARP的高速缓存中为每个映射地址的项目都会设置一个生存时间(一般是10–20分钟),超过生存时间的映射就会被删除掉。原因是,假设一种情况是主机A中的ARP缓存中有主机B的映射,这个时候主机B可能 有一些故障之类的发生,就需要换各种硬件,这个时候主机B的硬件地址就改变了,那么刚刚的那个映射就没有意义了,所以这个时候需要重新发送 广播来获取主机B的IP地址和硬件地址的映射

ARP优点

设置ARP高速缓存的优点在于,如果不设置映射的话,每次发送数据时候都需要广播一次,这个时候在局域网中的数据通信就大大的增加了

ARP使用的4种基本的情况

  1. 发送方是主机,要把IP数据发送至本网络上面的另一台主机,这个时候使用ARP找到目的主机就好
  2. 发送方式主机,要把IP数据发送至另一个网络上面的一台主机,这个时候使用ARP找到本网络上面的一个路由器的硬件地址,将 数据发送过去,剩下的交给路由器去做
  3. 发送方式路由器,要把IP数据发送 给本网络上面的一台主机,这个时候通过ARP找到该主机的硬件地址即可发送 数据
  4. 发送方数路由器,要把IP数据发送给另一个网络上面的主机,这个时候通过ARP找到一个路由器,剩下的事情交给路由器去做

ARP数据报格式

在上文的基础之上,我们具体看看ARP数据的各个字段的内容都是什么,请看下图

这里写图片描述

- 第一个字段表示MAC目的地址,如果是全f,表示这是一条广播,所在局域网中的所有主机都可以收到这个消息

- 第二个地段表示源地址,即发送方的MAC地址

- 第三个地段是0806表示这个数据报是属于ARP的,如果是0800则表示IP数据报,因为我们这里讲的是ARP数据报,所以这里就是0806。

- 硬件类型:指链路层网络类型,这里为1,表示以太网

- 协议类型:指要转换的地址类型,这里为0x0800,表示IP地址

- 硬件地址长度和协议地址长度:就是使用的硬件的地址长度和使用的IP地址的长度,就是图中的op地段后面的那些地段的长度分别是6和4

- op:op字段为1表示ARP请求,op字段为2表示ARP应答

- 发送端MAC地址和发送端IP地址:根据实际内容填写

- 目标MAC地址和目标IP地址:此时的目标MAC地址是空白,因为我这里发送的一个广播,要寻找的就是目标MAC地址,所以此时为空,等待目标主机应答,但是目标IP地址是知道的

更多相关:

  • 51 三菱PLC可读不可写Q:MT8102IQ和三菱Q系列PLC通讯,屏无法写入PLC,但是可以读取PLC的状态和数值?A:PLC程序中"允许RUN中写入"打钩,程序下载重启后解决。52 控制不了输入点Q:触摸屏做了三菱PLC的X点的元件,但是控制不了X输出?A:是的,PLC端X点无法通过触摸屏控制输出,屏上只能做X点的显示。53 M...

  • 传统方法(仅适用于普通项目):   1、在vscode中安装 Live Server 插件: 2、安装成功后,vscode右下角会有 Go Live 标识点击: 3、cmd ipconfig 查询自己电脑的ip地址: 4、复制地址替换端口前的地址(http://127.0.0.1:8080修改为http://192.168....

  • ngx_http_geo_module模块,默认情况下,nginx会加载,除非人为的 --without-http_geo_module。 这个模块提供了一个非常好用的geo指令,可以用它来创建变量,诞生其值依赖于客户端IP地址。 ngx_http_geo_module 模块官网地址 http://nginx.org/en...

  • uboot启动Linux内核过程分为4大步骤: 问题2: uboot阶段DDR的分区的问题 上述步骤2和步骤4中,有将uboot/kernel拷贝纸DDR的步骤,具体要拷贝到DDR的什么位置呢? 分清楚这两个概念: 链接地址:链接时指定的地址(指定方式为:Makefile中用-Ttext,或者链接脚本) 运行地址:程序实际运行...

  • 在Linux系统中,以32bit x86系统来说,进程的4GB内存空间(虚拟地址空间)被划分成为两个部分 ------用户空间和内核空间,大小分别为0-3G,3-4G。        用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间。          每个进程的用户空间存放用户的程序和代码(堆栈,数据区,代码区等)...

  • 把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息。数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据信息。 1.IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是...

  • 原文链接 tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具。 tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Li...