ARP(Address Resolution Protocol):提供逻辑地址(IP地址)到物理地址(MAC地址)的映射。简单的说就是用IP地找到对应主机或设备的物理地址。
1.那么问题来了,为什么有IP地址还要用物理地址(MAC地址)?
TCP/IP详解这本书上没有说具体原因,只是解释了什么是IP地址,什么是物理地址。我综合各种资料和大神的回答总结了以下原因。
(1)IP地址容易修改和变动,具有随意性,不能在网络上固定标识一台设备。
(2)MAC地址一般情况出厂由厂家烧录到设备里,不易修改在局域网内容易唯一定位一台设备。
(3)从拓扑结构和分层上分析,IP地址属于网络层部分,主要功能实在广域网范围内寻址,选择最佳路由,而MAC地址在网络接口层要形成适合于在网络媒体上传输的数据帧。
2.用一个简单的例子来说明ARP的工作过程。假设web浏览器访问http://10.0.0.1 ,并且假设目的主机和本地主机IP具有相同的网络前缀(就是在同一局域网内),后面会讲为什么。
(1)应用程序调用特殊的函数解析URL,检测是否包含主机名。
(2)应用程序要求TCP建立一条到10.0.0.1的连接(此时会发送IPV4数据报)。
(3)发送主机必须完成32位IP地址到物理地址的转换,发送主机查询本机的ARP缓存,若存在到目的主机物理地址的映射,则直接发送IP数据报。
(4)若不存在,这个时候就出现了ARP,发送主机向局域网发送一个ARP请求,注意这个请求是通过广播发送,内容大致是这样的,谁是10.0.0.1请告诉......(发送主机的IP)你的MAC地址。
(5)由于是广播,局域网内的所有主机会收到这个ARP请求,若请求中的目的IP地址是自己的IP地址,则向请求主机做出应答,这个应答是单播,同时学习到请求主机的IP地址和MAC地址,保存到自己的ARP缓存中。若IP地址不是自己的,则丢弃该请求消息。
(6)发送方接受到应答,将目的主机的IP和MAC地址保存到ARP缓存中,然后就能与目的主机进行通信了。
上面这个例子只是大致讲了以下在主机拥有IP地址的情况下与其他主机建立连接的大致过程(主要讲的是ARP,关于TCP连接后面会讲)。下面将一些细节一点的东西。
3.ARP缓存
ARP能够高效运行的关键就是维护每个主机和路由器的ARP缓存,ARP缓存主要存放了其他主机或设备的IP地址和MAC地址的映射,当然还有其他信息。Windows用户或者Linux用户可通过 arp命令查看本机缓存 arp -a命令显示所有条目。
4.ARP帧格式
图片摘自TCP/IP详解一书,大致解释一下阴影部分每个字段。
(1)硬件类型:该字段占2字节,指出硬件地址的类型,对于以太网该值通常为1。
(2)协议类型:指出协议地址(IP地址)的类型。
(3)硬件大小:指出硬件地址的大小,对于以太网该值通常为6,为啥为6啊,因为MAC地址就是由48位二进制构成的啊。
(4)发送方的硬件地址:指出发送方的物理地址,你不告诉对方人家凭什么给你啊。
(5)发送方的协议地址:就是发送方的IP地址,你不告诉人家你的IP地址,到时候人家怎么回复你。
(6)目的硬件地址:目的主机的硬件地址,对于ARP请求该字通常是0,对于ARP应答该字段就是目的主机的MAC地址。
(7)目的的协议地址:目的主机的IP地址,对于ARP请求,该地址是255.255.255.255这个地址大家都熟悉 ,对于ARP应答该字段为目的主机的IP地址。
其余字段涉及到链路层的帧,由于数据链路层我只看了个大概,没细看,先不讲。
5.代理ARP
严格的说ARP只能工作在同一子网,如果你要向其他子网主机通信怎么获得目的主机的MAC地址嘞,ARP请求只能在本地子网中广播。这个时候我们就要用到代理ARP了。
什么是代理ARP?
代理ARP就是一个设备(通常是路由器)回答不同主机的ARP请求,使请求主机认为做出响应的就是目的主机,其实目的主机根本不存在或者在很远的地方。当本地子网主机向其他子网主机通信时,路由器会对本地子网主机的ARP请求(广播)做出应答,注意路由器不会转发广播,ARP应答消息中,目的硬件地址不是目的主机的硬件地址而是路由器的硬件地址,目的协议地址是目的主机的IP地址,不是路由器的地址。说的通俗一点就是,你想和它通信,可以,你把你要发给他的数据发给我(路由器),我帮你转发给他,至于我怎么发你就不用管了,只要我给你转到就行。
代理ARP也称为混杂ARP或ARP黑客。用途:主要解决两个相互隐蔽物理网络的通信。
6.免费ARP
ARP除了上面讲的功能外还有一个功能,叫免费ARP。免费ARP?是不是感觉很奇怪,我也觉得很奇怪,我第一反应是难道发ARP请求还要钱?接下来我们讲讲什么是免费ARP。
免费ARP就发送主机发送ARP请求以寻求自己的地址。这种情况一般发生在主机刚启动,完成DHCP动态配置后(DHCP动态配置后面会讲到,只需要知道它是为主机分配IP地址的就行)。主机发送这个ARP有两个目的:
(1)检测本地网络中有没有其他主机和自己配置相同的IP地址。
(2)若发送主机的硬件地址改变,所有接受到这个ARP请求的主机会刷新自己的ARP缓存。就相当于告诉你,哎,我的升级了,麻烦记一下我现在的MAC地址。
免费ARP的第一个功能就是一个地址IP地址冲突检测(ACD)。
在地址冲突检测中有两种类型的消息:
(1)ARP探测分组:这是一个ARP请求分组,发送方将发送方IP地址设为0,这个分组用于查看发送主机选的这个候选IP地址是否被其他主机配置。将发送方IP地址设为0,是为了避免ARP缓存污染。就是其他主机把未确认IP和MAC地址映射存入自己的缓存中。
(2)ARP通告:发送方的协议地址为候选IP地址,它用于通告其他主机发送方正在使用候选IP地址。
主机建立新链路或者接入新网络时,通常先发送ARP探测分组,若主机没收到应答则发送ARP通告。
以上就是ARP地址解析协议。我也不知道讲明白没有,反正我是蒙了。
总结一下:
1.ARP的功能:请求MAC地址(主要),解决两个互相屏蔽的物理网络的通信,用于地址冲突检测。
2.注意:ARP只能用于IPV4,IPV6使用的是邻居发现协议。
ps:皮球专业不是计算机也不是网络,但是爱好计算机想自学计算机,最近学习计算机网络看了TCP/IP详解,学了记不住我把他放在里,一方面是为了做笔记,另一方面是希望大家帮我看看我理解的有没有问题,希望大家多多指点。