咱们知道在网络中通信,都是知道对方的IP地址后,才能发起链接,IP地址所在的层是网络层,而在网络层下面是数据链路层,这里IP数据包继续被封装成以太网数据帧,固然还有别的数据链路层格式,可是数据链路层也须要寻址机制,经常就是48bit的硬件地址,又叫MAC地址。 html
任什么时候候,当咱们发起一个网络接连时,无非有如下的过程:缓存
知道目标主机名,经过gethostname
函数将主机名转换为IP地址,这个函数在DNS(域名系统)中称为解析器,这里推荐看一下阮一峰老师的博文:DNS原理入门。网络
应用程序经过TCP或者UDP使用获得的IP创建链接。函数
若是目标主机在本地网络上,知道IP地址,咱们就能够找到对应的主机,若是目标主机在远程网络中,系统就会找位于本地网络的下一站路由地址,经过IP选路让路由器转发IP数据报,这些操做属于IP协议的核心,在此略过。oop
当主机知道IP地址,并把数据报发过去的过程以前,主机在链路层其实是要知道目标主机的物理地址的,每台主机的物理地址又称MAC地址是全球惟一的。在这一步,就须要咱们的ARP协议。命令行
ARP协议发送一个ARP请求,这个ARP请求是一个广播数据帧,意味着局域网内,每一台机器都能收到,ARP数据帧中包含着目的主机的IP地址,由于是广播发送,若是哪台主机拥有这个IP,则会反馈消息,发回本身的硬件地址。设计
获得了目的主机的硬件地址后,就包含着IP数据报的以太网数据帧就能够正常发送了。代理
在以太网中,ARP请求和应答都有着下面的分组格式。code
FF:FF:FF:FF:FF:FF
则为广播地址,在本地局域网内,全部的以太网接口都要接收这个数据帧。
帧类型:2个字节长的帧类型,告诉咱们这个以太网数据帧携带的是什么数据。对于ARP来讲这两个字节是0x0806
,对于IP数据报是0x0800
,还有RARP(逆地址解析协议)是0x8035
。cdn
硬件类型和协议类型:这两个字段就是用来描述ARP分组的,硬件类型用来指代须要什么样的物理地址,协议类型则是须要映射的协议地址类型。用来描述ARP时,表达的就是我有协议类型IP,我须要的硬件类型是以太网的物理地址。那么硬件地址就为1,表示以太网地址,协议类型是0x0800
,看这边与前面的帧类型中提到的IP数据报的帧类型是同样的,这是有意设计的。
硬件地址长度和协议地址长度:这里的值分别为6字节和4字节。表明48bit的以太网地址,32bit的IP地址。
操做码:1=>ARP请求, 2=>ARP应答,3=>RARP请求,4=>RARP应答。这些值用于区分具体操做类型,由于字段都相同,因此必须指明操做码,否则连请求仍是应答都分不清。
最后四个字段:
知道了ARP发送的原理后,咱们不由疑惑,若是每次发以前都要发送ARP请求硬件地址会不会太慢,可是实际上ARP的运行是很是高效的。那是由于每个主机上都有一个ARP高速缓存,咱们能够在命令行键入arp -a
获取本机ARP高速缓存的全部内容:
以上说的都是在一个本地网络内完成的,若是ARP请求是从一个网络主机发送到另外一个网络主机呢?下面介绍ARP代理的概念
若是ARP请求是从一个网络主机发送到另外一个网络主机,那么链接这两个主机的路由器就能够回答该请求,这个过程称为委托ARP或者ARP代理。咱们知道IP路由选择,若是主机不相连,咱们就把数据报发送到一默认路由上,由路由器来转发该数据报。在ARP协议中,咱们发往网络的请求主机物理地址也会由路由器回答,获得的就是路由器的物理地址,发送方就根据这个物理地址把数据报发送到路由器,由路由器转发,再下面的事情由路由器完成,那是属于IP协议的事了,固然在那个过程当中,也不断使用ARP协议获取每一步的物理地址。
这种状况须要将包发给默认网关,因此主要获取网关的MAC地址
ARP欺骗又叫ARP毒化,英文ARP spoofing
,是一种针对ARP的攻击方式,这里简略介绍一下。 运行机制 ARP欺骗主要是攻击者发送大量假的ARP数据包到网络上,尤为是网关上。假设你的网关的IP地址是192.168.0.2
,MAC地址为00-11-22-33-44-55
,你发送的数据都会从这个MAC地址通过,这时候我发送大量ARP数据包,然而个人包是构造出来的,IP是你的IP,可是MAC地址我替换成了个人MAC地址,这时候你更新你的ARP缓存时,就会把我机器的MAC地址当成192.168.0.2
的MAC地址,因而你的流量都到我这来了,我能够把你的数据改改再发给网关,或者什么都不作,你都上不了网了。 防治方法 最理想的用静态ARP,不过在大型网络不行,由于ARP常常须要更新,另一种方法,例如DHCP snooping
,网络设备可借由DHCP保留网络上各电脑的MAC地址,在伪造的ARP数据包发出时便可侦测到。此方式已在一些厂牌的网络设备产品所支持。
参考资料: