【网络协议】ARP地址解析协议
地址解析协议ARP
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
对于TCP/IP网络,地址解析协议ARP提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射。这里的ARP仅用于IPv4,IPv6使用邻居发现协议,被合并入ICMPv6中。
ARP是一个通用协议,被设计为支持多种地址之间的映射。但是,实际中ARP总是被用于32位IPv4地址和48位MAC地址之间的映射。
参考自维基百科
一个例子介绍ARP运行过程
仅在到达同一子网的主机,ARP才能工作。这里,主机A (IP地址192.168.38.10 MAC地址 00-AA-00-62-D2-02)使用Web浏览器访问位于同一子网中的服务器(IP地址192.168.38.11 MAC地址00-BB-00-62-C2-02)使用直接交付的过程。
IPv4直接交付基本步骤
应用程序要求TCP协议建立一条到192.168.38.11的连接。
向192.168.38.11发送一个IPv4数据报,TCP尝试向远程主机发送一个连接请求。
位于同一子网,则数据报交付不经过任何路由器。
在将数据报封装进以太网帧之前需要将32位的IPv4目的主机转换为48位的以太网地址。
主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。
否则,就需要ARP。
ARP工作在正常模式下,仅适用于广播网络,链路层能将一个消息交付到它所链接的所有设备。
在非广播网络中,可能需要更复杂的映射协议[RFC 2332]。在一个共享的链路层网段上,ARP向所有主机发送一个ARP请求的以太网帧(目标MAC地址是“FF.FF.FF.FF.FF.FF”),即进行链路层广播。
ARP请求包含的内容包括发送请求主机的MAC地址和IP地址,并寻找答案:“如果你的IPv4地址为192.168.38.11,请向我回应你的MAC地址”。同一广播域中的所有系统都可接收该ARP请求,收到以太网帧的系统可能包括并不运行IPv4或IPv6协议的系统,但不包括位于不同VLAN中的系统。
如果某个系统所使用的IPv4地址是ARP请求中指定的地址,该系统将向发送请求的主机以单播方式响应一个ARP应答。其余主机不响应这个请求。
同时,接收ARP请求的主机学习IPv4到MAC地址的映射,并记录在内存中供以后使用。ARP应答被原始请求的发送方接收,现在就可以发送引起这次ARP请求/应答交换过程的数据报了。
将数据报封装在以太网帧中,以ARP交换学习到的以太网地址作为目的地址,将帧发送给目的主机。这是直接交付,所以不需要使用路由器。并且也会将这次映射更新在ARP缓存,以便下次查表就行。
ARP用于运行IPv4的多接入链路层网络,每个主机都有自己的首选硬件地址。
在点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址,因为在此类网络中分别已经获取了对端的IP地址。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。
ARP缓存
ARP能够高效运行是因为ARP维护着每个主机个路由器上的ARP缓存(或表)。该缓存使用地址解析为每个接口维护从网络层地址到硬件地址的最新映射。当一个映射条目被创建时,其正常到期时间是条目创建开始后的20分钟。
在Linux或Windows中可使用arp命令(百度百科)查看arp缓存。
ARP帧格式
了解了ARP运行的基本过程,下面继续深入了解ARP帧的具体格式。
上图为IPv4地址映射到48位的MAC地址时使用的ARP请求和应答分组的格式。
在ARP帧的以太网头部中,DST和SRC分别代表目的和源的以太网地址。
对于ARP请求,DST为ff:ff:ff:ff:ff:ff,即广播地址。在以太网帧中,对于ARP(请求或应答),2字节长度的长度或类型字段的值必须为0x0806。
固定大小的前四个字段指出了可变大小的四个字段的类型和大小。
硬件类型指出硬件地址类型。对于以太网该值为1。
协议类型字段指出映射的协议地址类型。对于IPv4地址,该值为0x0800。硬件大小和协议大小分别指出硬件地址和协议地址的字节数。
对于以太网中使用IPv4地址的ARP请求或应答,它们的值分别为6和4。Op字段指出该操作是ARP请求(值为1),ARP应答(值为2),RARP请求(值为3)或RAPR应答(值为4)(RAAP是ARP的反向映射协议)。
此字段用于区分ARP分组是请求还是应答分组。这后面的四个字段如图上描述。这里也会出现一些重复信息:以太网头部和ARP消息都包含发送方的硬件地址。
在ARP请求中,除目的硬件地址(设为0)外,其他字段都要填充。
在ARP应答中,接收主机收到请求填上自己的硬件地址,并置换源和目的地址,Op设为2。
与ARP相关的一些补充
ARP缓存超时
在大多数实现中,完整条目的超时时间为20分钟,不完整条目(如强迫执行一次到不存在主机的ARP请求)为3分钟。[RFC 1122]中规定条目即使在使用时也启动超时,但是很多实现是在每次使用条目后启动超时。
这是关于软状态的一个重要例子。软状态是指在超时到达前没有更新而被丢弃的信息。
如果网络条件发生变化,软状态有助于启动自动重新配置,因此很多Internet协议使用软状态。
软状态的成本是协议必须刷新状态以免过期。
在一些协议设计中,经常包含“软状态”刷新,以保持软状态活跃。
代理ARP
代理ARP使一个系统(通常为一个专门配置的路由器)可回答不同主机的ARP请求。
它使ARP请求发送者认为做出响应的系统就是目的主机(目的主机在其他地方)。
代理ARP也被称为混杂ARP或者ARP黑客。这两个名词源于代理ARP的用途:两个物理网络互相隐蔽自己。
从前,一个网络使用代理响应其他网络对于自己的请求,有两个常见原因:①有些系统无法进行子网划分②有些系统使用比较久的广播地址
免费ARP
ARP还有一个功能被称为免费ARP。通常发生在启动,接口被配置为“上行”,一台主机发送ARP请求寻址自己的地址时。
免费ARP需要达到两个目标:
允许一台主机确定另一台主机是否配置相同的IPv4地址。
发送免费ARP的主机并不期望收到应答。但是,若收到一个应答,通常显示的就是错误消息:“从以太网地址······发送的重复IP地址”。如果发送免费ARP的主机以已改变硬件地址(关闭主机或替换接口卡,然后重新启动主机),
该帧导致任何接收广播并其缓存中有该条目的其他主机,将该条目中地旧硬件地址更新为与该帧一致。
免费ARP提供的一些迹象显示,多个站可以尝试使用相同的IPv4地址,但是没有对产生IP地址冲突有解决机制。为解决这个问题,[RFC 5227]描述了IPv4地址冲突检测(ACD),采用一种持续的类似于免费ARP的交换,来避免在同一广播域中地址重复。
推荐使用DHCP分配地址。
《TCP/IP详解 卷1》学习笔记
【网络协议】ARP地址解析协议的更多相关文章
- ARP地址解析协议
ARP地址解析协议:为IP地址到相应的硬件地址之间提供动态映射. 下面图为例说明地址解析协议的详细工作流程. 结合图中的序号进行说明. client通过FTP协议连接server时,首先解析器会把主机 ...
- ARP地址解析协议原理
概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...
- 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议
4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...
- 【网络基础】ARP地址解析协议
ARP(Address Rssolution Protocol) 地址解析协议 用于将IP地址解析为MAC地址. MAC地址是设备的物理地址,是被分配给每一个网络接口卡的全球唯一序号. 全球唯一:理论 ...
- ARP:地址解析协议
ARP是地址解析协议,简单语言解释一下工作原理.1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系.2:当源主机要发送数据时,首先检查ARP列表中 ...
- arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...
- 网络协议抓包分析——ARP地址解析协议
前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...
- 第二章ARP——地址解析协议
本章我们要讨论的问题是只对 T C P / I P协议簇有意义的I P地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为 48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络 ...
- IP地址、MAC地址、ARP地址解析协议
互联网中一台主机要和另一台主机实现通信首先需要知道彼此在互联网中的位置,主机在互联网中的位置是通过ip地址标记的,当找到ip地址后,再通过端口号标识运行在主机中的进程从而实现通信. IP地址: IP地 ...
随机推荐
- unity2d教程
https://segmentfault.com/a/1190000003965359
- CodeForces 1251B --- Binary Palindromes
[CodeForces 1251B --- Binary Palindromes] Description A palindrome is a string t which reads the sam ...
- 教你如何在Ubuntu上安装最新的Python版本
参考链接:https://cloud.tencent.com/developer/news/343104
- 贪心学院 scrapy爬虫
生成爬虫 scrapy genspider 爬虫名 网址 打开调试用shell scrapy shell 网址 主体 stock.py # -*- coding: utf-8 -*- import r ...
- SqlException 服务器主体无法在当前安全上下文下访问数据库
遇到一个错误如下 System.Data.SqlClient.SqlException HResult=0x80131904 Message=服务器主体 "用户名" 无法在当前 ...
- spring boot 项目开发常用目录结构
在spring boot开发中一些常用的目录划分 转载自https://blog.csdn.net/Auntvt/article/details/80381756: 一.代码层结构 根目录:net.c ...
- 「java.util.concurrent并发包」之 ReentrantReadWriteLock
一 引言 在多线程的环境下,对同一份数据进行读写,会涉及到线程安全的问题.比如在一个线程读取数据的时候,另外一个线程在写数据,而导致前后数据的不一致性:一个线程在写数据的时候,另一个线程也在写,同样也 ...
- php 一些常用函数
1.var_export() var_export — 输出或返回一个变量的字符串表示此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP ...
- LeetCode 142——环形链表II(JAVA)
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- 怎样终止(杀掉) Linux 中的进程?
使用 kill -9 进程号 命令, 可是强行终止该进程. 如果使用直接使用 kill 进程号 命令, 则会让进程 "自行了断" . 因此, 一般是 kill -9 进程号 用得较 ...