ARP(Adress Resolution Protocol): 地址解析协议
地址解析协议(Address Resolution Protoclol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利。它是IPV4中网络层必不可少的协议。不过在IPV6中已经不再适用,并被邻居发现协议(NDP)所代替。
当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动器从不检查IP数据报中的目的IP地址。从逻辑Internet地址到对应的物理硬件地址需要进行翻译。这就是ARP的功能.
在ARP背后有这样一个基本概念,那就是网络接口都有一个硬件地址(一个48bit的值,标识不同的以太网或令牌环网络地址)。在硬件层次上进行的数据帧交换必须有正确的接口地址。但是TCP/IP有自己的地址:32bit的IP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端地址的硬件地址才能发送数据。ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。
点对点(PPP)链路不使用ARP地址。当设置这些链路时(一般在引导过程中)必须告知内核链路每一端的IP地址。向以太网这样的硬件地址并不涉及。
一、 基本原理
在硬件层次上进行的数据帧交换必须有正确的接口地址。但是,TCP/IP有自己的地址:32bit的IP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。
如果请求时从一个网络的主机发往另一个网络上的主机。那么连接两个网络路由器就可以回答该请求,这个过程称为委托ARP或ARP代理(proxy ARP)。
二、工作过程
每台安装有TCP/IP的电脑或路由器都有一个ARP缓存表,表里的IP地址与MAC地址是相对应的。
主机地址 | IP地址 | MAC地址 |
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
C | 192.168.38.12 | 00-CC-00-62-C2-02 |
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询 问:“192.168.38.11的MAC是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。 同时B也会把A的这条记录添加到ARP缓存中。这样,主机A主机收到来自B的ARP回答,知道了B的硬件地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内(一般20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
我们还知道,ARP请求是广播的,但是ARP应答的目的地址却是发出请求的主机地址。ARP应答是直接发送到请求端主机的,而非广播的。
一般情况下,当系统收到ARP请求或发送ARP应答时,都要把请求端的硬件地址和IP地址存入存入ARP告诉缓存。
ARP查询与回复的例子: 1 0:0:0c:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60
arp who-has 192.168.1.2 tell 192.168.1.1
2 0:0:c0:c2:9b:26 0:0:0c:6f:2d:40 arp 60
arp reply 192.168.1.2 is-at 0:0:c0:c2:9b:26
发送广播ARP报文的IP地址为:192.168.1.1,MAC地址为:0:0:0c:6f:2d:40,发送的目的地址为ff:ff:ff:ff:ff:ff (广播地址),询问的IP是192.168.1.2。IP地址是192.168.1.2的主机收到这条报文后,更新自己的arp缓存,并把自己的mac地址(0:0:c0:c2:9b:26)和IP地址(192.168.1.2)组成的报文发送给询问方0:0:0c:6f:2d:40。
四、免费ARP
免费ARP(gratuitous ARP),它是指主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。
1 0.0 0:0:0c:6f:2d:40 ff:ff:ff:ff:ff:ff arp 60
arp who-has 140.252.13.35(询问的IP) tell 140.252.13.35(发送询问的IP)
源mac地址:0:0:0c:6f:2d:40 目的mac地址:ff:ff:ff:ff:ff:ff(广播地址)
询问140.252.13.35的硬件地址,如果有主机应答,那么arp回答的报文发送给140.252.13.35。
免费ARP有两方面的作用:
1. 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。发送端的主机并不希望对此请求有一个回答。但是如果接到一个回答,那么就会在终端日志上产生一个错误消息。
2.如果发送免费ARP的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机告诉缓存中旧的硬件地址进行相应的更新。一个比较著名的ARP事实是,如果主机收到某个IP地址的ARP请求,而且它已经在接收者的高速缓存中,那么就要用ARP请求中的发送端硬件地址(如以太网地址)对高速缓存中的相应的内容进行更新。主机接收到任何ARP请求都要完成这个操作(ARP请求是在网上广播的,因此每次发送ARP请求时网络上的所有主机都要这样做)
参考资料:
1.《TCP/IP详解 卷1:协议》
2. 《计算机网络-自顶向下方法》(第四版)5.4
ARP(Adress Resolution Protocol): 地址解析协议的更多相关文章
- 网络协议抓包分析——ARP地址解析协议
前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...
- arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...
- ARP(Address Resolution Protocol)地址解析协议初识
ARP址解析协议是根据IP地址获取物理地址的一个TCP/IP协议.它工作在OSI七层模型的中第二层——数据链路层. 使用ARP地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址 ...
- ARP (地址解析协议)
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机, ...
- 【RL-TCPnet网络教程】第23章 RL-TCPnet之地址解析协议ARP
第23章 RL-TCPnet之地址解析协议ARP 本章节为大家讲解ARP(Address Resolution Protocol,地址解析协议),通过前面章节对TCP和UDP的学习,需要大家 ...
- TCP/IP的排头兵――地址解析协议(ARP) (转载)
转自:http://blog.csdn.net/wangxg_7520/article/details/2488442 一.引言 古人行军打仗,都要有一个可以引领队伍前进方向的排头兵,在TCP/IP网 ...
- ARP(地址解析协议)
目录 1. ARP 概述 2. ARP 协议工作原理 3. ARP 缓存 4. ARP 报文格式 5. 抓包分析 5.1. ARP 请求报文 5.2. ARP 应答报文 6. 免费 ARP 7. AR ...
- 地址解析协议(ARP) 分析
什么是ARP协议 ARP(A ddress R esolution P rotocol)- 地址解析协议 ,用于将IP地址解析为MAC地址.复杂来说,ARP用于32位IPv4地址和以太网的48位MAC ...
- 【网络协议】ARP地址解析协议
地址解析协议ARP 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址.这就导致在以太 ...
随机推荐
- Oracle入门第三天(下)——子查询
一.子查询 1.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 示例: ...
- ubuntu下刻录优盘的命令
fdisk -l 找到优盘为/dev/sdb4 sudo dd if=/home/alex/Desktop/kali-linux-2016.1-amd64.iso of=/dev/sdb4
- spring_cloud多个微服务访问时偶发forward_error问题
1.问题: 最近在做SpringBoot项目的时候,有多个分开的微服务,偶发forward error 问题 2.猜想: 个人理解为服务跳转错误,可能本身没找到目标服务,或者目标服务损坏 3.解决: ...
- 问题:python2.7 安装包失败,提示错误:Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat)
问题描述: 使用pip安装包时报错,error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat) 环境: pyt ...
- C# 远程图片下载到本地
下载方法 using System; using System.Net; using System.IO; using System.Text; namespace Common { /// < ...
- Ubuntu系统python3版本设置问题
参照:https://blog.csdn.net/wangguchao/article/details/82151372
- Jenkins配置 管理
Jenkins配置 你可能已经看了前面几次练习了,其中我们不得不在Jenkins配置选项.下表列出了Jenkins 的各种配置选项. 因此,可以通过点击左侧菜单侧的 “Manage Jenkins”选 ...
- spring JDBC 事务管理
spring JDBC 事务管理 一.Spring 中的JDBC Spring中封装了JDBC的ORM框架,可以用它来操作数据,不需要再使用外部的OEM框架(MyBatis),一些小的项目用它. 步骤 ...
- 如何更改Arcmap里经纬度小数点后面的位数?
customize>arcmap option>data view >round coordinate to 改成想要显示的小数位数
- JavaScript/Jquery:Validform 验证表单的相关属性解释
当我们写提交表单的时候往往需要验证表单是否填写了内容,是否正确,这个插件可以很方便的完成我们需要的验证! 使用方法: 1.先引用js <script type="text/javasc ...