地址解析为这两种不同的地址形式提供映射: 32 bit的I P地址和数据链路层使用的任何类型的地址。

  • ARP为IP地址到对应的硬件地址之间提供动态映射。我们之所以用动态这个词是因为这个过程是自动完成的,一般应用程序用户或系统管理员不必关心。
  • RARP是被那些没有磁盘驱动器的系统使用(一般是无盘工作站或 X终端),它需要系统管理员进行手工设置。

实践

一般的例子

为了看清楚A R P的运作过程,我们执行t e l n e t命令与无效的服务器连接

tcpdump抓包:

在第1行中,

  • 源端主机(b s d i)的硬件地址是0 : 0 : c 0 : 6 f : 2 d : 4 0。
  • 目的端主机的硬件地址是ff : ff : ff : ff : ff : ff,这是一个以太网广播地址。电缆上的每个以太网接口都要接收这个数据帧并对它进行处理
  • 输出字段是 arp,表明帧类型字段的值是 0x0806,说明此数据帧是
    一个A R P请求或回答。
  • 在每行中,单词 arp或ip后面的值60指的是以太网数据帧的长度。
    第一行的下一个输出arp who-has …:
  • 表示作为A R P请求的这个数据帧中,目的 IP地址是svr4的地址,发送端的 I P地址是bsdi的地址。

第2行中:

  • ARP应答直接将应答发送到0:0:c0:6f :2d:4 0,而不是广播
  • arp reply…同时打印出响应者的主机名和硬件地址。

第3行的请求是建立连接的TCP字段。它的目的硬件地址是目的主机 (s v r 4)。

在每一行中,行号后面的数字表示tcpdump收到分组的时间(以秒为单位)。除第1行外,其他每行在括号中还包含了与上一行的时间差异(以秒为单位)。从这个图可以看出,发送ARP请求与收到A R P回答之间的延时是2.2 ms。而在0.7 ms之后发出第一段TCP报文。

对不存在的主机的ARP请求

如果查询的主机已经关机或者不存在会发生什么情况呢?看个例子

tcpdump命令的输出:

这一次,我们没有用-e选项,因为已经知道ARP请求是在网上广播的。

令人感兴趣的是看到多次进行ARP请求:第1次请求发生后5.5秒进行第2次请求,在24秒之后又进行第3次请求。tcpdump命令输出的超时限制为 29 . 5秒。但是,在telnet命令使用前后分别用 date命令检查时间,可以发现Telnet客户端的连接请求似乎在大约75秒后才放弃。事实上,我们在后面将看到,大多数的BSD实现把完成TCP连接请求的时间限制设置为75秒。

注意,在线路上将始终看不到TCP的报文段。必须ARP回答返回之后才能发送TCP报文段。因为硬件地址这时才可能知道

理论

ARP(Address Resolution Protocol)协议,地址解析协议。该协议的功能是将IP地址转化为物理地址。

  • 只有当某个网络上的两台机器互相知道对方的物理地址时,才能进行通信
  • 当主机或者路由器需要在一个mac网络上发送分组时,必须把IP地址映射到正确的物理地址
  • ARP能够在只知道同一物理网络上上一个目的站IP地址的情况下,找到目的主机的物理地址

ARP工作原理

运行命令:

$ ftp bsdi

会执行下面步骤:

  • 应用程序FTP客户端调用函数gethostbyname把主机名bsdi转换成IP地址。这个函数在域名系统DNS中称为解析器。这个转换过程或使用DSN,或在较小网络中使用一个静态的主机文件(/etc/hosts)
  • FTP客户端请求TCP,用得到的IP地址建立连接
  • TCP发送一个连接请求到远程主机。即用上述IP地址发送一个IP数据报
  • 如果目的主机在本地网络上,那么IP数据包可以直接发送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一跳路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被发送到位于本地网络上的一台主机或者路由器
  • 如果是一个以太网,那么发送端主机必须把IP地址变换成MAC地址。从逻辑internet地址到对应的物理硬件地址需要进行翻译。这就是ARP的功能

ARP本来是用于广播网络的,由许多主机或者路由器连在同一个网络上

  • ARP发送一份称为ARP请求的以太网数据帧给以太网上的每个主机。这个过程称为“广播”,如下图中虚线所示。ARP请求数据帧中包含目的主机(bsdi)的IP地址,其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”
  • 目的主机的ARP收到这份广播报文之后,识别出这是发送端在询问它的IP地址,于是发送一个ARP应答。这个ARP应答包含IP地址以及对应的硬件地址
  • 收到ARP应答之后,使用ARP请求—应答交换的IP数据报就可以传送了
  • 发送IP数据报到目的主机。

在ARP背后由一个基本概念,那就是网络接口有一个硬件地址,在硬件层次上进行的数据帧交换必须由正确的接口地址。ARP的功能就是在IP地址和采用不同网络技术的硬件地址之间提供动态映射。

点对点链路不使用ARP。当设置这些链路时,必须告知内核链路每一段的IP地址。

ARP高速缓存

  • ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近IP地址和MAC地址之间的映射。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。也就是说,当一台计算机发送一个ARP请求并接收到一个ARP应答时,就在高速缓存中保存IP地址以及对应的物理地址,便于以后查询
  • 当发送分组时,计算机在发送ARP请求之前总是先去缓存中寻找所需的绑定。如果找到了就不需要在网上广播。
  • ARP缓存提供了软状态(soft state)的一个例子,这种技术尝尝用于网络协议中。其名字描述了这样一种情况:信息可以在没有任何警告的情况下变得“失效”。
    • 假设有两台计算机A和B,都连接在一个以太网上。A发送了一个ARP请求,B做出了应答。再假设应答后B出现了故障,计算机A不会收到任何有关该故障的通道,而且,因为在A的ARP缓存中已经有了B的地址绑定信息,A将继续把分组发送给B。以太网硬件没有提供B不在线的指示,因为以太网并不为发送提供保证。这样,A没有办法知道自己的ARP缓冲中的信息什么时候变成错误的了
    • 为了适应软状态,更正错误的责任归于信息的拥有者。一般情况下,实现软状态的协议使用了计时器,当计时器超时后则删除状态信息。比如,当地址绑定信息放入ARP缓存时,协议需要设置一个计时器,典型的超时时间是20分钟,当世纪社区超时后,必须把信息删除

软状态的主要缺陷在于时延,如果计时器的间隔是N秒,发送方知道N秒之后才能检测到接收方已经出现了故障

我们可以用arp(8)命令来检查ARP高速缓存。参数-a的意思是显示高速缓存中所有的内容。

$ arp -a
? (192.168.0.17) at 4c:cc:6a:6b:21:3f [ether] on ens33
? (192.168.0.116) at <incomplete> on ens33
gateway (192.168.0.1) at f0:10:90:25:a3:e6 [ether] on ens33
? (192.168.0.21) at 30:9c:23:64:85:40 [ether] on ens33
? (192.168.0.3) at 18:c0:4d:43:a5:b8 [ether] on ens33
? (192.168.6.1) at 08:10:7b:a5:9c:d0 [ether] on ens33
? (192.168.0.63) at 00:0c:29:b7:bd:81 [ether] on ens33

48 bit的以太网地址用 6个十六进制的数来表示,中间以冒号隔开

ARP的改进

协议中已经对ARP进行了几处改进:

  • 第一:如果主机A因为要向主机B发送而正要使用ARP,那么,B也很可能即将向A发送。为了预计B的需要并必须额外的网络通信量,A在向B发出的请求中也包含了A的IP到物理地址的绑定。B从请求中提取出A的绑定,把它保存在自己的ARP缓冲中,然后向A发送应答
  • 第二:因为当A广播它的首次请求时,网络所有的机器都接收到该请求,并且可以从中提取出A的IP到物理地址的绑定,更新自己的ARP缓冲中的相应绑定内容
  • 第三:当一台计算机更换了自己的主机接口时,物理地址也就变了。此时,要通知网络上的在ARP中存有该机绑定的其他所有计算机,以便它们修改相应的项。系统可以在启动时发送一个ARP广播把它的新地址通知给主机。

总结:每个ARP广播中都包含发送方IP到物理地址的绑定,接收方在处理ARP分组之前,先更新缓冲中IP到物理地址的绑定信息

ARP和其他协议的关系

ARP提供一种把IP地址映射到物理地址的机制。如果网络硬件能识别IP地址,就完全不需要ARP。因此,ARP仅仅是在硬件所用的底层编制机制上强加了一个新的编制方法。

即:ARP是个隐藏底层网络MAC地址,允许给每台机器分配一个任意IP地址的底层协议。我们把ARP看做物理系统的一部分,而不是互联网协议的一部分

ARP实现

分为两部分:

  • 在发送分组时把IP地址映射到物理地址上
  • 应答其他机器的请求

发送分组地址转换:

  • 给定一个目的站的IP地址,软件查询它的ARP缓存,看是否有从该IP地址到物理地址的映射。如果有,则软件提取该物理地址,把数据放到使用该地址的帧中。如果没有,则软件必须广播一个ARP请求并等待应答
  • 但是目的地址可太忙不能以至于不能接收请求;ARP广播可能会丢失;机器A绑定了B然后B就出现了故障。。。。代码必须要处理这些情况

应答其他机器的请求:

  • 当ARP分组到达时,软件首先提供发送方的IP地址和物理地址映射,并检查本地的高速缓存,看是否已经保存有这个表项:如果有就更新,没有就加入。此后接收方才处理ARP分组的其他部分
  • 接收方要处理两种到达的ARP分组:
    • 如果到达的是ARP请求:

      • 检查它自己是否是请求的目标:如果是,则ARP软件用本机的物理地址形成应答,并把应答直接发给请求发;如果不是,则忽略
      • 检查ARP请求中提取到的IP地址是不是在自己的高速缓存中:如果在就更新,不再就加入
    • 另一种情况:
      • 根据实现方式的不同,处理程序可能需要创建一个高速缓存表项,也可能在生成请求时就生成了这个表项

ARP的分组格式

在以太网上解析 I P地址时,A R P请求和应答分组的格式下图所示

  • 以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全 1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
  • 两个字节长的以太网帧类型表示后面数据的类型。对于 A R P请求或应答来说,该字段的值为0 x 0 8 0 6。
  • 硬件/协议用来模式ARP分组中的各个字段。比如,一个ARP请求分组询问协议地址(这里是IP地址)对应硬件地址(这里是以太网地址)
    • 硬件类型字段表示硬件地址的类型。它的值为 1即表示以太网地址。
    • 协议类型字段表示要映射的协议地址类型。它的值为 0 x 0 8 0 0即表示I P地址
  • 硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为 6和4。
  • op指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、R ARP请求(值为3)和RARP应答(值为4)
  • 对于一个A R P请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的 A R P请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为 2,最后把它发送回去。

ARP的协议格式

与大多数协议不同,ARP分组中的数据没有固定格式的首部,为了使ARP适用于多种网络技术,其地址字段的长度取决于网络类型。在首部开通附近包含一个固定的字段,可以在后继字段中找到地址的长度。

下面是一个例子:

实战

https://blog.csdn.net/u011416247/article/details/80866725
https://blog.csdn.net/longwang155069/article/details/49990673

执行ARP -a 看看缓存的arp列表:

总结

IP地址的分配是独立于机器的物理硬件地址的。为了把互联网分组通过物理网络从一台计算机发送到另一台,网络软件必须把IP地址映射到一个物理硬件地址,并用这个硬件地址传输该帧

通过广播ARP请求,一台机器可以使用ARP找到另一台机器的硬件地址。这个请求中包含一台机器的IP地址,需要找到IP地址对应的硬件地址。这个网络上所有机器都会收到ARP请求。如果请求的IP地址与某台机器的IP地址匹配,那么这台机器就会包含所需硬件地址的应答。

为了提高ARP的效率,每台机器都把IP地址到MAC地址的绑定保存在高速缓存中。

网络:网络地址到虚拟地址的映射ARP相关推荐

  1. 网络基础链路层--eth协议arp协议mtu

    网络基础链路层--eth协议&arp协议&mtu 一.链路层 二.eth-以太网协议 (一)mac地址 三.arp-地址解析协议 (一)解析流程 (二)arp缓存为什么只有很短的一段时 ...

  2. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒 文章目录 黑帽python第二版(Bl ...

  3. Windows 映射网络驱动器后,一重新启动,映射就不见了的解决方法

    Windows 映射网络驱动器后,一重新启动,映射就不见了的解决方法 1.Windows建立了网络驱动器映射后在下次重启系统就没了,非常不方便,解决方法是映射的时候把"登录时重新连接&quo ...

  4. 网络转载:局域网安全:解决ARP攻击的方法和原理

    局域网安全:解决ARP攻击的方法和原理 IT世界网2006-01-26 10:17 [故障原因] 局域网内有人使用ARP欺骗的木马程序(比如:传奇盗号的软件,某些传奇外挂中也被恶意加载了此程序). [ ...

  5. 网络传输大数据——内存映射

    内存映射技术相关知识 内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页 ...

  6. Linux_网络_数据链路层协议 MAC帧/ARP协议 (以太网通信原理,MAC地址与IP地址的区分,MTU对IP/TCP/IP的影响,ARP协议及其通信过程)

    文章目录 1. 以太网(基于碰撞区与碰撞检测的局域网通信标准) 2. 以太网的帧格式(MAC帧) MAC地址,IP地址的区分 MTU MTU对IP协议的影响 MTU对TCP/UDP协议的影响 3.AR ...

  7. Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信

    大家好,本次我们需要完成的任务是: 完成两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完成两台主机的通信(Hello! I'm -) 声明:本文章的目的是为大家的 ...

  8. 网络 链路层 | 以太网协议与ARP协议

    数据链路层是计算机网络的底层,主要负责相邻设备之间的数据帧传输 链路层就是负责每一个相邻结点之间的数据传输,但是相邻设备之间也需要描述识别,主要是因为每一个设备都有可能有多个相邻的设备.这种识别在链路 ...

  9. 常见的几种网络命令 { ping、ipconfig、arp、tracert、route、nslookup、nbtstat、netstat、net }

    常见网络命令 1.ping 格式 检查网络故障的工作步骤 2.ipconfig 常用格式 3.arp 具体格式有一下几种: 4.tracert 5.route 常用选项 6.nslookup 格式 7 ...

  10. 几种网络命令 { ping、ipconfig、arp、tracert、route、nslookup、nbtstat、netstat、net }

    常见网络命令 1.ping 格式 检查网络故障的工作步骤 2.ipconfig 常用格式 3.arp 具体格式有一下几种: 4.tracert 5.route 常用选项 6.nslookup 格式 7 ...

最新文章

  1. MapInfo数据到ARCGIS数据Shapefile的转换
  2. bootstrap 点击加号 表格_bootstrap中的输入组按钮,点击加号加1,减1子
  3. C++中局部变量可以和全局变量重名吗?
  4. 马斯克脑机接口_如何看待“马斯克:脑机接口或一年内植入人脑,可修复任何大脑问题”?...
  5. 第七节:实战前必须掌握的10个指令(上)
  6. windows2003+SQL server2005群集-故障转移
  7. STM32 ADC模数转换
  8. CSS 的三个特性:层叠性、继承性、优先级
  9. 光子能变成正负电子,能不能变成其他正反物质?
  10. 社区发现研究报告——基于信息熵和局部相关性的多标签传播重叠社区发现算法
  11. allegro怎么修改文本_allegro user preferences常见设置及说明
  12. 光耦电流传输比(CTR)的理解
  13. music-dl - 利用Python下载全网最优音质歌曲的工具
  14. 程序员通病:小厂薪资低,想跳槽,又担心面试过不了!
  15. 模拟电子技术 三极管部分 个人笔记
  16. Lombok 新特性(idea插件)
  17. 快速有效率的批量查询快递物流并分析
  18. 计算机技术在中医药中的应用,计算机药物虚拟筛选技术在中医药领域中的应用前景...
  19. sql行转列的3种方法
  20. 【问题集锦】【Jmeter】打开jmeter脚本时报如下错:problem loading XML from: CannotResolveClassException

热门文章

  1. linux异常死机日志,Linux常见死机原因
  2. 黑苹果安装各种问题解决办法
  3. JTA transaction unexpectedly rolled back (maybe due to a timeout)
  4. 避免企业IT外包服务风险三大要素
  5. 关于云和网的未来,这位大佬讲了真话……
  6. python unpack_Python:struct模块的pack、unpack
  7. postgresql10中的pg_stat_statements
  8. DevExpress项目升级总结
  9. 如何将 Laravel 数据表里的数据导出成 Seeder 文件
  10. day002-2019-07-30