ARP协议详解(1)--初识arp

闲话

为什么会突然跑来说arp协议呢?怎么说呢,arp欺骗这个大家都听说过,工具也都用过,arp欺骗加上dns投毒也都知道,但可能很多人并不是真的了解arp这个协议,我也在网上找了很多资料,可最后还是没能解决我的疑惑,所以我就借这段时间对这个协议的学习来帮助更多的朋友解决疑惑

什么是arp

ARP(Address Resolution Protocol),地址解析协议,即是根据IP地址获取物理地址。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

关键词

IP地址:我们熟悉的类似 192.168.3.1的地址(IPv4)
MAC地址:网卡的物理地址,用来唯一区别每个网卡,类似于我们身份证,是厂家出厂时候配置好的,每个MAC地址对应着不同的网卡(当然可以通过工具修改MAC,这里先不谈),而我们通信的过程实际上就是网卡接受或发送数据包的过程,一旦知道了MAC地址,就相当于知道了网卡,就成功找到您啦

为什么会诞生arp协议

俗话说,每一个新生事物的产生都是为了解决一个需求,arp也不例外,那我们回到arp协议产生之前的世界
在现实社会中,有张三,李四,我们想跟张三李四通信,可以打电话,可以发微信,而在网络的社会,没有张三,李四,只有一个个憨憨的主机,那么他们怎么通信呢?
于是就先诞生了IP,192.168.43.1,20.123.23.1通过这些IP我们给主机们区分开来,大家都有不同的身份,进而不会出现我想打电话给张三,却打给了李四。
解决了如何通信的问题,那么另一个问题又出来了,我们寄快递,比如说寄给张三,我们会不会只在快递上写一个张三?那再厉害的快递员也送不到,于是乎古老的通信方式就开始了
ARP协议详解(1)--初识arp_第1张图片
这里有A,B,C三个电脑,中间的是交换机,再arp诞生之前,如果我们想上网,A把数据包发送到交换机上,(这里模拟的是有线的环境),交换机把包发到外界,外界得到相应之后,把请求的结果数据包又发给了交换机,这个时候由于没有arp,数据包里只有IP(比如说192.168.3.10),但是交换机并不知道谁是192.168.3.10,那怎么办呢,他只好把数据包发给连接在他身上的所有主机上,而主机接收到数据包之后,内部的网卡会处理数据包,如果上面对应的ip不是我,那么我就不回复,如果刚好是我,那么我就处理,这个情况看似不错,那么有什么问题吗?

我们可以看到,由于数据包会发给每个主机,所以说我们主机会收到并且下载很多并不属于我们的流量,这样我们在上网的时候,可能会出现堵塞,带宽不够,并且占据了本地电脑的资源,而且也不安全,随便一抓就是一大把的信息,那么怎么解决呢?

于是乎,就出现了类似收件地址的arp协议,把我们的IP解析成一个个具体的MAC地址,有了MAC就好办啦,我们就可以找到网卡了,然后就可以把数据包发送给网卡

随着交换机升级成HUB,arp协议也出现了,这个问题就迎刃而解了.C是刚入网的用户,什么都不知道,他只知道网关,子网掩码,dns解析, ip(我们入网时候分配的),这个时候他想上网,他应该怎么做呢?

C想访问百度,(这里就不谈dns解析了,假设C已经成功解析到了百度的ip),C要上网,就要通过网关把请求包发出去,但他不知道网关是谁,于是他就在局域网内广播,谁是网关,谁是192.168.3.1这个广播包会发送给周围的所有主机,B一看,不是我的IP,就不回复,网关一看,是在找我,于是网关就回复给C,我是192.168.3.1,我的MAC地址是00:00:00:00:00:00
由于C在请求包的时候内含了自己的MAC地址,那么网关会很顺利的把包发回给C,同时HUB上也有一小块内存,用来储存arp列表,这个时候网关也悄悄记下,原来C的IP是192.168.3.10,MAC地址是…,C也在自己空白的arp缓存里写下,网关192.168.3.1的MAC地址是…,请求完毕之后,C顺利的把包发给了网关,网关交给上级,然后逐级路由最后又回来,到达网关这里的时候,由于之前网关缓存了C的地址,网关就只会把包发给我们的C,其他人就收不到了,即安全,又节省了资源。

除了访问外网,如果C想和B通信,这里我们就拿ping为例吧,C要pingB,首先要知道B的MAC地址,于是C又在内网里大喊,谁知道B的MAC地址是什么?B和其他人收到包以后发现在找自己,于是B回复,我是B,我的MAC地址是 …,于是乎,C就愉快的ping了B

这个C还闲不住,还想访问和自己不在一个网段的D,192.168.4.1,C看了看他的IP,发现和自己不在一个网段,于是C自己无法解决,但C知道网关可以帮他解决,于是他把这个ping包发给网关,(如果之前没有缓存网关跟访问百度是一个效果),网关收到了之后一看,192.168.4.1,完犊子,我也不认识,于是他就在192.168.4.0/24里发arp请求包,问谁是192.168.4.1,同理收到了之后,把ping包转发给192.168.4.1,再路由回来

光说可能有点迷糊,我们来看看实际效果吧

实际演示

打开xp
命令行输入arp -a查看当前arp缓存,可以看到对应的ip,mac地址,这里是动态的,过一段时间就会消失,届时需要重新发送arp请求
ARP协议详解(1)--初识arp_第2张图片arp -d 清空arp缓存
ARP协议详解(1)--初识arp_第3张图片演示1,ping百度
在这里插入图片描述由于我们没有arp缓存,所以我们的xp并不知道网关具体的MAC地址,他首先发送了一个arp请求包,接着我们的网关给了回复,接着做了DNS域名解析,解析到IP后发送了ping包,并得到了回复(中间插入了一个HTTPS的包…不要管他)

演示2,ping同网段的机器
再清一遍arp缓存
在这里插入图片描述
由于xp网卡对比了对方和自己的网段,同一网段不需要网关转发路由,于是他就先发送arp请求确定对应MAC然后发送ping包
演示3,ping不同网段的机器
在这里插入图片描述
由于不在同一个网段,所以需要网关转发,于是乎xp先查询了网关的MAC,然后我们看这个ping包
ARP协议详解(1)--初识arp_第4张图片
2层里面表明了这个包发给的MAC地址是我们的网关,而在3层里面表明了目标IP,这由于涉及到封装,我们也不说太详细,这个包虽然在显示的时候没有让我们看到xp先发给网关再发给另一网段主机的效果,他实际上他先发给了网关,网关转发给了其他人,关于这个问题我会在下一节里解释

谢谢大家啦

你可能感兴趣的:(ARP协议详解)