返回目录

上一篇

下一篇

概述

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口。因此我们需要进行IP地址与物理地址之间的转化。对于IPv4来说,我们使用ARP地址解析协议来完成IP地址与物理地址的转化(IPv6使用邻居发现协议进行IP地址与物理地址的转化,它包含在ICMPv6中)。 ARP协议提供了网络层地址(IP地址)到物理地址(mac地址)之间的动态映射。ARP协议 是地址解析的通用协议

 请求的例子:

MAC 地址 与 IP地址

  Mac地址由设备制造商定义/分配,每一个硬件设备都有一个链路层主地址(MAC地址),保存在设备的永久内存中。设备的mac地址不会改变(现在可以进行mac地址伪装) 
  IP地址由用户配置给网络接口, 网络接口的IP地址是可以发生变化的(通过DHCP获取IP,变化速度比较快)

获取目的端的MAC地址(在一个以太网中)步骤如下: 

1.发送ARP请求的以太网数据帧给以太网上的每个主机,即广播(以太网源地址填全1)。ARP请求帧中包含了目的主机的IP地址。 
         2.目的主机收到了该ARP请求之后,会发送一个ARP应答,里面包含了目的主机的MAC地址。

ARP协议工作原理

  1. 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
  2. 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
  3. 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
  4. 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
  5. 当本网络的所有主机收到该 ARP 数据包时:

             (A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。

             (B如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。

             (C) 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。

6.源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

ARP工作实例

下面我们就来谈一谈ARP地址解析协议是如何把目的地址的IP地址转化成MAC地址的。

1. 首先,主机A想要向主机B发送消息,但它不知道主机B的MAC地址,只知道主机B的IP地址。这时,主机A会在当前局域网下以广播的形式发送ARP请求数据报,表示主机A想知道主机B的MAC地址(注:广播时,以太网首部的目的地址为全f)。

2. 由于是广播,所以在本局域网上的所有主机都会受到主机A发送的ARP数据报,然后所有主机会把以太网首部这个报头给去掉,向上面的网络层发送ARP数据报。在这里我们便可以回答上面的问题了,以太网首部和ARP数据报内的MAC地址都不能少,一个是在数据链路层使用的,一个是在网络层使用的,因为两个层都不能看到互相的数据。

3. 网络层首先会检查op字段,发现这时个ARP请求数据报,然后又会检查目的IP地址字段,检查完毕后,这时除了主机B外,在这个局域网内的其他主机都会把数据报丢弃,因为只有主机B的IP地址和目的IP地址是相同的。

ARP缓存

ARP高速缓存(即ARP表)是 ARP地址解析协议能够高效运行的关键, (如果有多次ARP响应时,以最后一次响应为准)

ARP给IP地址和MAC地址中间做了动态映射,也就是说缓存了一个ARP表,将得到的IP地址和MAC地址对应起来,如果在表中没有查到IP地址对应的MAC地址,就会发广播去找。随着用户的使用,ARP表如果不做任何措施,就会变得越来越臃肿缓慢,就降低了网络传输数据的效率,所以ARP缓存中每一项被设置了生存时间,一般是20分钟,从被创建时开始计算,到时则清除,如果在计时期间又被使用了,计时会重置。

我们可以通过arp命令查看arp表: 

ARP表中记录了一些IP地址与物理地址的映射,在arp表中,我们可以看到一个Flags字段,该字段有C、M、P三种取值: 

C: 表明arp条目为通过ARP请求动态获取,(一般存活时间为20min) 
      M:表明arp条目为手动设置。 
      P: 表示Publish,表示该ARP条目可以用于恢复其他主机的ARP请求。(用于ARP proxy)

报文格式(ARP 帧)

ARP帧以以太帧的形式存在,即ARP消息包含在以太帧中 ,因此包含以太帧的首部和尾部。(这里不考虑802.1p/q等特殊以太帧)。 

* 帧类型*:用来向收到数据报的主机表示该数据报的类型,常见类型如下: 
0800:IP数据报; 
0806:ARP请求/应答数据报; 
8035:RAPP请求/应答;

ARP Request or Reply Message 是ARP帧的核心部分。 

前14字节是以太网首部帧格式 ,然后后面四个字段描述了本ARP帧涉及的硬件类型和协议类型。 
Hard Type:该字段占2个字节,指定硬件地址类型, 如值为1表示为以太网地址。 
Prot Type :该字段占2个字节,指定协议地址类型,如0x0800 表示协议地址类型为IPv4地址。该值与以太帧首部的类型字段相同。 
Hard Size: 表示硬件地址的大小(单位:字节),如以太网地址为6。
Prot Size : 表示协议地址的大小(单位:字节), 如IPv4地址大小为4。(硬件地址长度和协议地址长度,分别占1个字节,指出硬件地址和协议地址的长度,以字节为单位。)

OP : 表示ARP的消息类型。 
    1:ARP Request; 
    2:ARP Reply 
    3:RARP Request 
    4:RARP Reply

后面四个字段写入的是一些物理地址和协议地址。不一定全部有值。 
对于ARP Request 而言,我们不知道目的MAC地址是什么,因此 Target’s Hardware Address 全部填充为0.

ARP帧的交互

当主机接收到一个针对其协议地址的ARP Request时,它会回应ARP Reply. 该Reply消息内容为:对调sender 和 Target 地址字段,然后将Sender’s Hardware Address(即原来的Target’s Hardware Address )修改为本机的Hardware Address。另外OP字段有1变为2.

局域网中一台主机获取已知一台IP地址的主机的硬件地址过程:

当主机A向本局域网上的主机B发送IP数据报时,先在ARP高速缓存中查找B主机IP所对应的硬件地址,要是找到了,就将此硬件地址写入到MAC帧首部的目的地址中,然后通过局域网发送;要是没有找到,那么主机A会运行ARP,将会按照以下步骤找出主机B的硬件地址。

①主机A想局域网中广播发送一个ARP请求分组,广播的主要内容是:“我的IP地址是IPA,我的硬件地址是MACA,我要知道IP地址为IPB的主机的硬件地址”。

此时局域网中的主机都会收到这样的一个数据帧。

②链路层在接收到这个数据帧之后将有效载荷和报头分离之后,将有效载荷交付给ARP协议进行处理(因为MAC帧首部的帧类型为ARP协议)。

③在所有局域网中的主机获得链路层交付的有效载荷后,它们会对其进行处理,发现其中的接收端IP地址与自己的IP地址不同,则会将该数据报丢弃,不做处理。只有B主机会发现接收端IP地址与自己的IP地址相同,此时B主机会向A主机单播一个响应分组(因为通过A的广播,B知道了A的IP地址和硬件地址),“我的IP是IPB,我的硬件地址是MACB”。

④在主机A收到主机B的ARP响应分组后,就在ARP的告诉缓存中写入B主机的IP地址到硬件地址的映射。

免费ARP 和 地址冲突检测

* 免费ARP* 指的是 主机发送一个ARP请求,求寻找自己的IP地址 。常用在系统引导时,对网络接口进行配置的时候。 
免费ARP有两个重要作用 
1. 检测网络上是否有其他主机的IP地址与本机相同,即地址冲突检测。 
2. 当主机向网络广播免费ARP时,其实她也将自己的IP地址与物理地址的映射关系广播给其他主机了。因此,如果本机的硬件地址发生了变化,其他主机也应该做出相应的更新。

ARP请求发送到了目的端之后,目的端填上了自己的硬件地址,然后把两个目的端地址和两个发送端地址交换,把op的值置为2,再把该ARP数据报发回去。

前面提到的获取目的端的MAC地址的步骤是在一个特殊的条件下完成了,即发送端和目的端都在同一个以太网中,那么当发送端和目的端不在同一个网络中呢。 
这种情况下有一个术语叫ARP代理。连接发送端和目的端网络的路由器就充当这样一个代理。举个简单的例子,当主机A发送ARP请求给主机B时,它们处于不同的网络,但是由路由器C相连,当C识别出主机B的IP地址属于它连接的一个主机,这时C就会欺骗主机A,让A误认C就是目的主机,然后C就将ARP数据报发给B,最后B再将ARP应答发回来。

还有最后一个ARP特性:免费ARP 
它是指主机发送ARP查找自己的IP地址。 
作用有两个: 
1.主机可以通过它来确定另一个主机有没有设置同样的IP地址。 
2.如果发送免费ARP的主机改变了硬件地址(换了网卡),那么这个分组就会更新其它主机高速缓存表中旧的硬件地址。

ARP报头定义如下:

在学习到这些知识之后我们可以做这样一些实验,编写一个脚本抓取和自己电脑处于同一局域网的其他主机的MAC地址。

原理很简单,一个C类的地址最多有254台主机,所以我们可以暴力的去ping每个IP,我们就可以获取到连接在本局域网中的其他主机的MAC地址。

#!/bin/bashnet='192.168.199.'
i=1count=0
while [ $i -le 254 ]
doif [ $count -eq 20 ];thencount=0sleep 1fiping -c1 $net$i &let i++let count++
donewait
echo '############################################'
arp -a | grep -v 'incomplete'
echo '############################################'

在我电脑上成功抓取到其他主机的硬件地址。

注意:如果是使用VM虚拟机,要将网络适配器改为桥接模式

3、以太网基础知识——ARP地址解析协议原理相关推荐

  1. ARP地址解析协议原理

    概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...

  2. ARP地址解析协议详解

    ARP地址解析协议详解 网络层的ARP协议完成IP地址与物理地址的映射.首先,每台主机都会在自己的ARP缓冲区中建立一个ARP缓存表,以表示IP地址和MAC地址的对应关系.当源主机需要将一个数据包发送 ...

  3. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  4. ARP地址解析协议与RARP逆地址解析协议

    这里写目录标题 区分ARP与RARP ARP:地址解析协议 ARP高速缓存 ARP高速缓存超时设置 用户输入命令时ARP操作流程 ARP的分组格式 ARP代理 免费ARP RARP逆地址解析协议 RA ...

  5. 【ARP地址解析协议(完整解析过程、ARP欺骗、免费ARP、ARP代理)】-20211125【下】

    目录 一.ARP地址解析协议 ARP地址解析协议:将IP地址解析为Mac地址 ARP地址解析过程 1)pc1首先会查询自身的ARP缓存表,是否存在目标ARP缓存条目. ARP请求报文(原理) 2)由于 ...

  6. 【计算机网络学习笔记09】ARP地址解析协议

    [计算机网络学习笔记09]ARP地址解析协议 ARP地址解析协议 在实际应用中,我们常会遇见这样的问题:已知一个机器(主机或路由器)的IP地址,需要找出其相应的硬件,这时就需要使用到地址地址解析协议( ...

  7. IT:银行类金融科技岗笔试习题集合—各大行(工商+建设+农业+浦发+招商+平安+人民+邮政银行)计算机信息科技岗笔试集合(包括计算机基础知识+网络+操作系统+数据库系统原理)

    IT:银行类金融科技岗笔试习题集合-各大行(工商+建设+农业+浦发+招商+平安+人民+邮政银行)计算机信息科技岗笔试集合(包括计算机基础知识+网络+操作系统+数据库系统原理) 导读:因为博主后台留言太 ...

  8. 【实施工程师】ARP——地址解析协议(高清版本)

    完整的[ARP--地址解析协议]图 希望对大家有所帮助

  9. 计算机网络基础知识--TCP/IP协议、IP分组、TCP传输

    转 计算机网络基础知识--TCP/IP协议.IP分组.TCP传输 2017年12月08日 08:35:09 孔维昊 阅读数 1820 查看全文 http://www.taodudu.cc/news/s ...

最新文章

  1. 工业大数据系统与应用北京市重点实验室给大家拜年啦!
  2. 新入行程序员考虑自己是否明白以下这8件事情
  3. 017 Android加固之APK混淆和保护方式
  4. Go 面向对象编程应用
  5. boost::errinfo_errno的用法测试程序
  6. c语言判断用户名重负,判定方阵的正定负定在C语言中写法.docx
  7. 浅谈PPM (Project Portfolio Management)
  8. python之异常处理_Python之异常处理
  9. d - 数据结构实验之查找四:二分查找_数据结构与算法笔记
  10. 有关于腾讯地图服务端IP定位接口的获取当前城市的处理
  11. [贪心+模拟] zoj 3829 Known Notation
  12. Android源码下载(包括最新8.0版本)
  13. 电缆桥架安装要求及规范指导
  14. sprintf函数的使用方法
  15. 合作博弈(coalitional game)——核仁(Nucleolus)初解
  16. AspNetPager常用属性及一些样式
  17. 怎么把php转成bt_php能不能转换成bt种子
  18. 计算机丢失deferrd.dll怎么解决,被Defer后怎么办?如何在RD调整策略绝地反击?!...
  19. 计算机软件主要有哪4中,系统软件通常包括哪四个部分
  20. 搭建Mysql双主双从报错The slave I/O thread stops because master and slave have equal MySQL server UUIDs(已解决)

热门文章

  1. OBJC依赖库管理利器cocoapods 安装及使用详细图解
  2. UA OPTI512R 傅立叶光学导论9 卷积基础
  3. UA MATH567 高维统计IV Lipschitz组合9 矩阵函数、半正定序与迹不等式
  4. Win32汇编获取和设置文本框的内容
  5. 在虚拟机中温习DOS
  6. 配置tomcat8数据源(采用局部数据源方式)
  7. HDU 2859 Phalanx
  8. javaweb数据库操作
  9. ora-14400插入的分区关键字未映射到任何分区---oracle数据库表过期问题
  10. WCF - Versus Web Service