ARP地址解析协议

来源:互联网 发布:php在线投稿系统 源码 编辑:程序博客网 时间:2024/05/05 10:26

原文地址http://blog.csdn.net/windeal3203/article/details/50672643

概述

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

MAC 地址 与 IP地址

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

ARP协议工作原理

  1. 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
  2. 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文。免费ARP报文会将自己IP地址与Mac地址的映射关系广播给其他主机
  3. 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
  4. 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
  5. 当本网络的所有主机收到该 ARP 数据包时,首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖,然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
  6. 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

ARP缓存

  ARP高速缓存(即ARP表)是 ARP地址解析协议能够高效运行的关键。
  我们可以通过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等特殊以太帧)。
这里写图片描述

ARP Request or Reply Message 是ARP帧的核心部分。
首先前面四个字段描述了本ARP帧涉及的硬件类型和协议类型。
Hard Type:指定硬件地址类型, 如值为1表示为以太网地址。
Prot Type :指定协议地址类型,如0x0800 表示协议地址类型为IPv4地址。该值与以太帧首部的类型字段相同。
Hard Size: 表示硬件地址的大小(单位:字节),如以太网地址为6,
Prot Size : 表示协议地址的大小(单位:字节), 如IPv4地址大小为4.

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.

免费ARP 和 地址冲突检测

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

0 0
原创粉丝点击