网络:网络地址到虚拟地址的映射ARP

地址解析为这两种不同的地址形式提供映射: 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地址的绑定保存在高速缓存中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值