zzzzy09

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。ARP最初在1982年的RFC 826(征求意见稿)[1]中提出并纳入互联网标准STD 37。ARP也可能指是在多数操作系统中管理其相关地址的一个进程。

ARP是通过网络地址来定位MAC地址。 ARP已经在很多网路层和数据链接层之间得以实现,包括IPv4、ChaosnetDECnet和Xerox PARC Universal Packet(PUP)使用IEEE 802标准, 光纤分布式数据接口, X.25帧中继异步传输模式(ATM),IEEE 802.3IEEE 802.11标准上IPv4占了多数流量。

IPv6邻居发现协议(NDP)用于代替地址解析协议(ARP)。

基本功能

OSI 七层模型中tcp/ip 协议簇解决应用层、传输层、网络层问题,以太网

TCP/IP协议中,传输层只关心目标主机的IP地址+端口地址(因为这两元素唯一的确定一个传输层的包要交互的目的地,也即目标主机上的哪个应用程序,比如udp包或者tcp包)。网络层会对传输层的包进行封装形成ip包,网络层只关心目标机器的IP地址,并根据这个ip地址寻址到网络上的目的机器。在以太网中,ip数据包又是被封装在以太网帧中,经过物理层(也就是网卡)发送到网络上,以太网帧又是根据MAC地址来寻址到目的机器的网卡的(局域网中的所有机器的网卡都会接收到这个帧,而只有该帧头部中的目的MAC地址与自己网卡的MAC地址匹配时,才会向网络协议栈交付该帧中的数据包,否则网卡就会丢弃该帧)。因此,同一局域网中的一台主机要和另一台主机或者交换机,路由器等进行网络通信时,必须要知道与本机用网线连接上的,目标设备那边的那个网络接口的MAC地址(也就是网卡的地址)。这就导致在以太网中使用IP协议向下传递IP包时,IP包被包含在以太网帧中,以太网帧是有自己的格式的,在帧头部就需要填充目的机器MAC地址,而此时从ARP表里面没有查询到目的ip地址对应的MAC地址,因此主机会暂存这个ip数据包,由于主机刚连接到这个局域网时或者重启之后,是不知道目的方的MAC地址的,如果要向目的机器发送一个ip包,就需要先知道目的机器的MAC地址,于是需要一种方法,根据目的主机的IP地址,获得其MAC地址,这个方法就是通过发送一个叫做arp请求的数据包(arp数据包也是被包含在以太网帧中的,发送时,帧头部中的目的mac地址填写为0xffffffff,表示在本地局域网上广播,这样属于该局域网的所有机器接收到一个广播帧的时候都会向协议栈递交这个帧中的数据包,这里是arp数据包)广播到该局域网中,而仅当某台机器的IP地址与该arp请求中的要询问的ip地址相同时,那台机器就才会向发送方返回一个arp回应数据包,这个回应包中就包含了先前要询问的机器的IP地址 + MAC地址,本地主机接收到这个回应的arp数据包后,会提取ip地址和mac地址,记录到一个叫做arp的表的表项中,这样就把目的主机的ip地址和mac地址对应关系记录下来了,随即找到先前由于缺少目的mac地址而暂存的数据包,并用以太网帧封装它,用该arp表项中的mac地址来填充帧头部中的MAC地址域,当这个帧被发送到局域网中之后,目标机器网卡接收到这个帧之后,判断该MAC地址和自己的MAC地址相同,就会向上层协议栈递交这个帧中的数据包,从而数据得以交付,而其他主机检测到MAC地址与本机不同,会把这个帧丢弃。这就是ARP协议要做的事情。

另外,当发送主机和目的主机不在同一个局域网中时,即便知道对方的MAC地址,两者也不能直接通信,必须经过路由器进行ip层的转发才可以,因为路由器把这个局域网进行了链路层上的隔离(除非进行网络层次的显示转发,否则路由器不会把一个局域网中的以太网帧自动的转发到另一个局域网或者外网中去,如果可以自动转发,可以想象有多可怕,无效的广播帧可能像洪水一样淹没整个网络,使得网络瘫痪,这也就是路由器的基本功能之一,隔离网络),所以此时,发送主机会把一个网关ip地址作为目的ip地址(这个是ip层决定的),那么通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)

点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址,因为在此类网络中分别已经获取了对端的IP地址。

posted on 2022-10-05 17:26  zzzzy09  阅读(227)  评论(0编辑  收藏  举报