ARP-地址解析协议
Posted kisun168
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARP-地址解析协议相关的知识,希望对你有一定的参考价值。
引言
IP协议的设计目标是为跨越不同类型的物理网络的分组交换提供互操作,这就需要网络层软件使用的地址(IP)和底层硬件使用的地址之间进行转换,网络接口硬件通常有一个主要的硬件地址(例如以太网的802.11无线接口的48位地址)。由硬件交换的数据帧必须通过正确的硬件接口,否则将无法进行数据传输。
此外,网络地址(IPv4 32bit | IPv6 128bit)和硬件地址(MAC地址 48位)由不同的管理部门分配,就硬件地址而言,其严格遵循设备硬件接口地址的唯一性,由设备制造商在ICANN(互联网名称与数字地址分配机构)的规定下分配,其存储在设备的永久性内存中,所以他不会改变。就网络地址而言,随着IPv4网络地址的有限性,更多的是网络服务商(ISP)从IEEE的注册管理机构RA得到IP网段,并按需分配,例如WIFI,其IP就是从网络连接点的网络池中动态租用的,具有一定的时效性,所以IP地址可能改变。
ARP仅用于IPv4,IPv6使用邻居发现协议,他被合并到ICMPv6协议中。
ARP便是发现两个地址之间映射关系的过程。并且总是用于32位IPv4地址和以太网的48位MAC地址之间的动态映射。
之所以说ARP是动态的,是因为它会自动执行和随时间变化,当一台主机改变了他的网络接口卡,从而改变了他的硬件地址(但保留着临时或永久分配的IP地址),ARP是可以在较短的时间内动态发现并作出修改的。
提供ARP的反向映射协议称为RARP,它用于缺少磁盘驱动器的系统,目前用处很少。
相关概念:
1. 以太网。以太网是当今现有局域网采用的最通用的通信协议标准,关注于OSI的末两层(数据链路层和物理层), 其次, 无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点,
2. 网段(链路)。用来区分网路上的主机是否在同一网路区段内,在局域网中,每台电脑只能和自己同一网段的电脑互相通讯,假设有一个IPv4地址为192.168.123.250, 说明它处於192.168.123.X(暂不考虑子网掩码)的网段(X代表1-255之间的任意值).若您的路由器的IP地址是192.168.1.X或是其他位址,说明二者不处於同一网段,则它们之间无法相互连接。
3. ARP协议规定ARP请求只能在同一网段(相同网络前缀)内传递,否则将转发给网段内的默认网关(或者其他路由),例如A(192.168.123.250)发出ARP请求,请求连接B(192.168.3.0),但不在同一网段(192.168.123.X)内则请求其默认网关C(如192.168.12,123 ) , 假设A网关恰好位于192.168.x.x网段内,A发现能够直连B,B收到A转发C的ARP请求并响应,C再将响应回传给A,即完成一次跨网段ARP请求过程
直接交付和ARP广播
假设主机A和B在同一个网段(相同IP网络前缀),主机A要向主机B发送信息,具体的地址解析过程如下:
(1) 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2) 如果主机A在ARP缓存表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP缓存表(到期时间20min)中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
ARP帧格式
字段1是ARP请求的目的以太网地址,全1时代表广播地址。
字段2是发送ARP请求的以太网地址。
字段3以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。
字段4表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。
字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。
字段8是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
字段9是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。
字段10是发送ARP请求或应答的IP地址。
字段11和12是目的端的硬件地址和协议地址
ARP请求帧
ARP应答帧
ARP缓存
ARP之所以能够高效运行,是因为在每个主机或者路由器上维护了一个ARP缓存,该缓存使用地址解析为每个接口维护网络层到硬件地址的最新映射,当产生一个ARP缓存条目时,其正常到期时间是20min
使用arp命令查看本机arp缓存(windows system)
arp -a
显示了硬件接口地址的ARP缓存条目。
动态条目随时间推移自动添加和删除(ARP学习)。
静态条目是不会更改的。
ARP超时缓存
超时通常与每一个ARP缓存条目相关,在大多数实现中,完整条目的超时为20min, 不完整条目的超时时间为3min(不完整条目,例如强迫主机请求一个不存在的主机地址),这些实现通常在每次使用一个条目后为他重新启动20min的超时。
代理ARP
代理ARP使一个系统可回答不同主机的ARP请求。它使ARP发送者认为作出响应的系统就是目的地址,这和HTTP反向代理的效果类似,但实际上目的主机不存在或在其他网段,通常应该尽量避免使用他。
代理ARP也称为ARP混杂ARP和ARP黑客。这些名称来自ARP代理的历史用途: 两个物理网络相互隐藏自己。在这种情况下,两个物理网络可使用相同的IP前缀,只要将中间的路由器配置为一个代理ARP,在一个网络中由代理响应对其他网络主机的ARP请求。这种技术可用不向一组主机隐藏另一组主机。从前,这样做有两个常见原因:有些系统无法进行子网划分,有些系统使用比较旧的广播地址(全0而不是全1)
linux支持一种自动代理ARP的功能。他可以通过在文件/proc/sys/net/ipv4/conf/*/proxy_arp中写入字符1,或使用sysctl命令来启动, 并且不需要手动输入ARP条目,而是选择一个代理地址范围。
以上是关于ARP-地址解析协议的主要内容,如果未能解决你的问题,请参考以下文章