地址解析协议ARP

来源:互联网 发布:html数据库添加div 编辑:程序博客网 时间:2024/06/06 03:34

设计需求

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地址是知道的