网络协议---ARP:地址解析协议

由于网络层的IP协议调用了ARP协议,因此通常将 ARP 协议归为网络层协议。

其消息由数据链路层协议封装,它是在同一局域网内部通信的,从不跨网络节点路由。
因此,也可以认为 ARP 协议是数据链路层协议。

ARP协议:从网络层IP地址中解析出在数据链路层的硬件地址

建立TCP连接与ARP的关系
应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表:

如果目的IP和自己在同一个网段:→直接发送给目标(MAC)
{
当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,
网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;
  
当IP层的ARP高速缓存表中不存在目的IP对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求目的IP的MAC,收到ARP应答之后,
将应答之中的<IP地址,对应的MAC>对缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,
网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;。
}
如果目的IP地址和自己不在同一个网段,就需要将包发送给默认网关,这需要知道默认网关的MAC地址:
{
  当IP层的ARP高速缓存表中存在默认网关对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,
网络接口完成Ethernet Header + IP + CRC

当IP层的ARP高速缓存表中不存在默认网关对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求默认网关的MAC,收到ARP应答之后,
将应答之中的<默认网关地址,对应的MAC>对缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给
网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去。
}

ARP的位置
  OSI模型有七层,TCP在第4层传输层,IP在第3层网络层,而ARP在第2层数据链路层。高层对低层是有强依赖的,所以TCP的建立前要进行ARP的请求和应答。

ARP高速缓存表在IP层使用。如果每次建立TCP连接都发送ARP请求,会降低效率,因此在主机、交换机、路由器上都会有ARP缓存表。建立TCP连接时先查询ARP缓存表,
如果有效,直接读取ARP表项的内容进行第二层数据包的发送;只有表失效时才进行ARP请求和应答进行MAC地址的获取,以建立TCP连接。

ARP的作用
  要了解ARP的作用,首先要分清两个“地址”:

(1)TCP/IP的32bit IP地址。仅知道主机的IP地址不能让内核发送数据帧给主机。

(2)网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口。在硬件层次上,进行数据交换必须有正确的接口地址,
内核必须知道目的端的硬件地址才能发送数据。

简言之,就是在以太网中,一台主机要把数据帧发送到同一局域网上的另一台主机时,设备驱动程序必须知道以太网地址才能发送数据。
而我们只知道IP地址,这时就需要采用ARP协议将IP地址映射为以太网地址。

要注意一点,一般认为ARP协议只使适用于局域网。

ARP协议是“Address Resolution Protocol”(地址解析协议)
{
ARP协议只适用于局域网 它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。但是主流认为ARP还是工作在数据链路层的
ARP/RARP协议是介于链路层和IP层的https://blog.csdn.net/yuqilin520/article/details/82915269
所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
ARP协议的基本功能就是通过目标设备的IP地址(逻辑地址,现在常用的版本是IPv4,长度是32位),查询目标设备的MAC地址(48位物理地址),以保证通信的顺利进行。

注意: ARP 协议是局域网内部的协议。它解决的是同一局域网内部的主机或路由器的 IP 地址和其对应的硬件地址的映射问题。根据 ARP 协议 , 主机 A 无法解析其他网络中的主机的硬件地址。
实际上,也不需要主机 A 解析其他网络的主机地址。因为跨网络的数据传输一般是由上层协议来完成的。

}
【逆地址解析协议RARP】
ARP原理及流程
{
在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。
这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。
而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
}
存在意义:在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。

帧是在数据链路层传输的数据格式

IP&MAC映射方式(ARP所处的境地)
{
①静态映射:手动创建一张ARP表,把逻辑(IP)地址和物理地址关联起来。这个ARP表储存在网络中的每一台机器上。
{
局限性:物理地址可能发生变化:
(1)机器可能更换NIC(网络适配器),结果变成一个新的物理地址。
(2)在某些局域网中,每当计算机加电时,他的物理地址都要改变一次。
(3)移动电脑可以从一个物理网络转移到另一个物理网络,这样会时物理地址改变。
要避免这些问题出现,必须定期维护更新ARP表,此类比较麻烦而且会影响网络性能。
}
②动态映射:
{
每次只要机器知道另一台机器的逻辑(IP)地址,就可以使用协议找出相对应的物理地址。
已经设计出的实现了动态映射协议的有ARP和RARP两种。
ARP:把逻辑(IP)地址映射为物理地址。
RARP:把物理地址映射为逻辑(IP)地址。
}
}

ARP表(ARP高速缓存):
{
ARP缓存是一个缓冲区,用来储存IP地址和MAC地址,本质就是<IP地址,MAC地址>的对应表。表中一个条目记录了网络上一个主机的IP地址和其对应的MAC地址。
设备通过ARP解析到目的MAC地址后,将会在自己的ARP表中增加IP地址到MAC地址的映射表项,以用于后续到同一目的地报文的转发。
Internet地址 物理地址 类型
219.223.164.1 00-81-f4-96-29-07 动态
。。。。。。。。。。。。。。。。。。。。。。

①动态ARP表【自动学习得到】:动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。
			当到达老化时间、接口down时会删除相应的动态ARP表项。
			每个动态ARP缓存项都有都设置了TTL(生存时间),TTL为0时此项目就从表中删除,Windows下TTL一般不超过10分钟。

②静态ARP表【手动添加】:静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。 
配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,
此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。

评价: 优点:从ARP高速缓存的使用中可以看到,ARP高速缓存可以减小广播量,进而减小网络通信量,提高计算机之间的通信效率。

缺点:造成安全隐患(参考下面免费ARP的作用)。

③免费ARP:
{
	免费ARP指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置时。与标准ARP的区别就是免费ARP分组的目的IP地址字段封装的是自己的IP地址,即向所在网络请求自己的MAC地址。 
	免费ARP的作用有: 
  1 一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。

   正常情况下发送免费ARP请求不会收到ARP应答,如果收到了一个ARP应答,则说明网络中存在与本机相同的IP地址的主机,发生了地址冲突。

  2更新其他主机高速缓存中旧的硬件地址信息。

   如果发送免费ARP的主机正好改变了硬件地址,如更换了接口卡。

   其他主机接收到这个ARP请求的时候,发现自己的ARP高速缓存表中存在对应的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP请求来更新本地的ARP高速缓存表表项。

  3网关利用免费ARP防止ARP攻击

  有些网关设备在一定的时间间隔内向网络主动发送免费ARP报文,让网络内的其他主机更新ARP表项中的网关MAC地址信息,以达到防止或缓解ARP攻击的效果。

  4利用免费ARP进行ARP攻击

  ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使用应答中的IP和MAC地址对本地的ARP缓存进行更新。

  主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到网络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报文就会被转发到错误的MAC地址,从而实现了ARP欺骗的攻击。

}

④代理ARP:
{
	定义:
	  代理ARP就是通过使用一个主机(通常为router),来作为指定的设备使用自己的 MAC 地址来对另一设备的ARP请求作出应答。

	为什么需要代理ARP?
	  先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。
	  ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答。但是如果询问的对象不在同一个局域网该如何处理?路由器就提供的代理ARP为这个问题提供了解决方案。

	工作过程
	  两台主机A和B处于同一网段但不同的广播段时,主机A发送ARP请求主机B的MAC地址时,因为路由器不转发广播包的原因,ARP请求只能到达路由器。如果路由器启用了代理ARP功能,并知道主机B属于它连接的网络,那么路由器就用自己接口的MAC地址代替主机B的MAC地址来对主机A进行ARP应答。主机A接收ARP应答,但并不知道代理ARP的存在。

	代理ARP的优缺点
	  优点:代理ARP能在不影响路由表的情况下添加一个新的Router,使子网对该主机变得透明化。一般代理ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上。
	  缺点:从工作工程可以看到,这其实是一种ARP欺骗。而且,通过两个物理网络之间的路由器的代理ARP功能其实互相隐藏了物理网络,这导致无法对网络拓扑进行网络概括。此外,代理ARP增加了使用它的那段网络的ARP流量,主机需要更大的ARP缓存空间,也不会为不使用ARP进行地址解析的网络工作。
}

⑤ARP攻击:
{
	ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。 
	基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,
	由于简单的地址重复错误而导致不能进行正常的网络通信。

	一般情况下,受到ARP攻击的计算机会出现两种现象: 
	1不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。 
	2计算机不能正常上网,出现网络中断的症状。

	因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。

}

}

ARP实现过成:
{
情况一、主机A和B在同一个网段,主机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表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。 


ARP请求
{
	任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。
	因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。
	-------目的端的硬件地址字段无须填充(全部写0?),其他字段都需要填充,因为就是想要知道这个地址
}

ARP响应
{
	局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,
	这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方
	-------所有字段都需要填充。
	对于一个ARP请求来说,除目的地址外的所有其他字段都有填充值,当系统收到一份目的为本机的ARP请求报文后,它就把硬件地址填进去,
	然后用两个发送端地址分别替换两个目的地址,并把操作字段改为2,最后把它发送回去。
}

情况二、z主机A和B不在同一个局域网  主机A--路由器H--路由器J--主机B
{
	主机A要和主机B进行通信,且A和B不在同一个局域网内。 
	✈ 主机A需要路由器H来转发,所以A要知道H的arp映射关系; 
	✈ 路由器H从转发表找到了下一跳路由器J,此时H需要知道J的arp映射关系; 
	✈ 路由器J可以找到主机B,此时J也需要知道主机B的映射关系; 
	✈ 主机B将arp请求分组中主机A的arp映射关系维护到自己的arp缓存表中; 
	✈ 主机B将自己mac地址放入到arp响应分组中,并按照来时的路原路返回; 
	✈ 主机A收到arp响应分组后,将主机B的arp映射关系维护到自己的缓存表中,即可开始通信,下次再通信直接查缓存表,如果没有超时被删除的话;

	使用arp的四种典型情况 
	1.发送方是主机: 
	✈ 目标主机和发送主机 在 同一局域网,用arp可以找到目标主机的mac地址; 
	✈ 目标主机和发送主机 不在 同一局域网,用arp找到本网的一个路由器mac地址,剩下的有路由器来完成;

	2.发送方是路由器: 
	✈ 目标主机和发送路由器 在 同一局域网,用arp可以找到目标主机的mac地址; 
	✈ 目标主机和发送路由器 不在 同一局域网,用arp找到本网的衣蛾路由器mac地址,剩下的有路由器来完成;
}


点对点链路不使用ARP协议。

}

ARP报文格式:固定28字节
{
ARP报文格式:固定28字节=8byte(前面5部分)+6+4+6+4(2个逻辑地址4+2个物理地址6)

|硬件类型16         			(例如1表示以太网,还支持其他链路层协议)	   	  |  协议类型16 			(对IP协议这个字段是0x0800)			 	    |  	32位=4字节
|硬件长度8bit(用来定义物理地址的长度byte)|协议长度8bit(用来定义逻辑地址的长度)|  操作码16 	   ARP请求(1),ARP响应(2),RARP请求3,应答4 			|  	32位=4字节
|源硬件地址(物理地址=MAC地址)		?(可变长度,对于以太网这个字段的长度是6字节)																	|  	?
|源逻辑地址(逻辑地址=IP地址)			?(可变长度,例如IPv4是4字节)																				|   ?
|目的硬件地址(物理地址=MAC地址)		?(可变长度,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。)	|	?
|目的逻辑地址(逻辑地址=IP地址)		?(可变长度,例如IPv4是4字节)																					|	?

}

数据链路层的帧格式:
{
ARP报文直接封装在数据链路帧中,帧=前同步码(8byte)|目的地址(6byte)|原地址(6byte)|类型(2byte)|ARP报文|FCS校验(4byte)|

根据以太网协议规定,以太网数据报最小长度是64字节(14字节的以太网头,包含4字节的CRC),,而ARP报文数据长度为28字节,这样总长度为46字节,
需要在以太网帧结构中的PAD字段填充18个字节,达到以太网数据报最小长度64字节,可填充0。
帧总长度 = 帧头 + ARP包头 = 14(6+6+2) + 28 = 42 bytes;(真正发包的时为了保证以太网帧的最小帧长为64 bytes,会在报文里添加一个padding字段,用来填充数据包大小,填充至64byte)

前同步码(8byte):为了能够同步以太网数据,在目的地址之前有7个字节的前导码和1个字节的帧起始标志。【不在帧最短64byte内】
{
	串行发送时二进制表示为:10101010_10101010_10101010_10101010_10101010_10101010_10101010(前导码),10101011(帧起始标志)。
	但是一定要注意,由于以太网发送数据时先发高字节,同时每个字节的低位先发,所以最终收的的数据应该是0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xd5。
}


当PC1发送的ARP请求报文,以广播报的形式发送到局域网后,当pc2检测到IP地址与自己的IP相同,就会发送给PC1响应报文。

类型(2byte):802.3中表示数据长度,ETHERNET II中表示帧类型。
				比如0x0800表示后面的报文是IP协议报文,0x0806表示后面的报文是ARP协议报文。
				通常小于0x0800表示数据长度。
				
FCS字段是为了校验以太网帧的正确性。在数据包填充完成后,回去通过算法计算一个值放到数据包的FCS字段中。当接受端收到数据包后,会同样使用算法计算一个值,
然后和CRC字段的值进行对比,查看是否相同。如果不同则证明数据包被更改,如果相同则证明数据包并未被更改。

(使用wireshark抓包时,抓到的包为60 bytes。比以太网帧的最小帧长扫了4 bytes,原因是因为wireshark抓包时不能抓到数据包最后的CRC字段。)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值