arp协议属于哪一层_网络工程师(3):详解ARP协议

3fbba6f23ed1a5b238bec37c02a2929d.png

提起“协议”,我们并不陌生,比如实习协议、租赁协议,等等。

所以,协议,其实就是双方或几方协商一致,需要共同遵守的约定。

网络中各种各样的协议,就是人们为了让电脑或网络设备(比如交换机)更好地协同工作,实现各种网络功能而制定的一些约定。

我们在讨论ARP协议前,先简单了解一下IP地址,以后再详细讨论。

前面我们曾经提到过,电脑有两个地址,一个是MAC地址,像电脑的“身份证号”;一个是IP地址,像电脑的“名字”。

通常,我们会通过IP地址来使用网络。MAC地址我们一般不会直接使用,但是电脑发送数据时要用它来封装,所以电脑需要,但这跟我们使用电脑的操作人员关系不大。

一台电脑要接入并使用网络,必须要有IP地址。打开电脑的网络属性,可以看到:

3ea0531124b62d0fc91dfe82c10f87b8.png

IP地址,就是你的电脑在网络中的名字,别人用它来找你;

子网掩码,可以通过它和IP地址,知道你的电脑属于哪个子网(如果把网络看成一幢大楼,子网就是每个楼层或者每个房间,可大可小。去楼层或房间找你,比在整个大楼找要容易得多);

网关,你所在子网通往其他子网的出入口。

比如,你的电脑IP地址是192.168.1.20,子网掩码是255.255.255.0,通过“按位与”,可以计算出你的子网号。

什么是“按位与”?

“按位与”也叫“按位乘”,是一种逻辑运算:把参与运算的两个二进制数各对应位相乘,两个数都是1时,结果才是1。

比如,二进制数10110100和110010,先把它们右对齐,位数不够的前面补“0”,使它们对齐:

fc3018573f6705e66b7548bee0a58f97.png

然后,对应的位相乘,并得到结果:

e4564b4a8b1bdbfb08e2cd26d36d1f16.png

00110000就是二进制数10110100和110010 “按位与”的结果。

我们把IP地址和子网掩码换算成二进制(用电脑上的计算器,当然你也可以通过除2取余法手工算),然后“按位与”,再把结果换成十进制,就是你的子网号。如:

0e82a58a1703f8a1331bd1bb5c77d480.png

计算出的192.168.1.0就是你的电脑所在的子网号。

Windows10的计算器有“按位AND”操作,就是“按位与”,计算子网号很方便。

5f00a7c4b3cabd3c7891144f4efea4ff.png

通常情况下,子网掩码也可以用它二进制中“1”的个数来表示。如子网掩码255.255.255.0换算成二进制后从左向右共有24个“1”,我们可以称为“24位掩码”。IP地址和子网掩码可以简写为:192.168.1.20/24。

当两台电脑的子网号相同,我们可以认为它俩在同一个网络,可以理解为同一个房间,直接互访就行,不用出门;如果子网号不相同,那它们要互访就需要通过网关这个出入口了。网关,就好像房间的门。

网关一般是一台有路由功能的设备,这个以后再讨论。

现在,我们来看看ARP这个协议。

我们假设电脑A的IP地址和子网掩码是192.168.1.20/24,网关是192.168.1.254。要访问的电脑B的IP地址是192.168.1.25。

如果是一般电脑操作人员,直接通过某个软件访问192.168.1.25就可以了,不必关心访问的细节。

但我们学网络的人,就需要知道电脑是怎么处理的。

电脑A在进行数据封装时(可以理解为寄快递,把要寄的东西打包,并填写快递单),计算自己的子网号和电脑B的子网号是否相同。

等等,我们要访问的电脑B只提供了IP地址,并没有告诉我们子网掩码呀?

是的,我们在网络中访问别人,只通过对方的IP地址就可以了。

那怎么计算它的子网号呢?

谁要访问别人,就用谁的掩码!也就是说,电脑A不管访问谁,都用自己的掩码计算双方的子网号!

你以为呢?不然用谁的,别人的我也不知道啊!

通过“噼里啪啦”一阵计算,我们得到电脑A和电脑B的子网号都是192.168.1.0。

既然大家都在一个子网,就好像都在一间屋子里一样,电脑A虽然不知道电脑B是谁,但它会大声问,保证房间里所有人都能听到:“请问,192.168.1.25,你的MAC地址是多少?”

这就是ARP协议的Request报文:

ac15005c41c3bffbbd7a5541a6bbc328.png

这个报文简单点说,就是ARP的“快递单”,我们只看后面4行:

Sender MAC address:这是“发件人”的MAC地址,也就是电脑A的;

Sender IP address:这是“发件人”的IP地址;

Target MAC address:这是“收件人”的MAC地址,电脑A正在问,还不知道,填全0;

Target IP address:这是“收件人”的IP地址。

要把这个ARP Request询问报文发出去,还要用以太网格式把这个Request报文打包封装一下,填写以太网的“快递单”。因为电脑的网卡、交换机在传输数据时只认识以太网的“快递单”格式,不认识其他的东西,包括ARP。

1c398922afe28aaa05898ee10c7817f5.png

上面的EthernetII就是以太网的一种“快递单”格式,我们在前面曾经提到过以太网的封装格式:

a07c1ab107d63df6b099592ccfac2815.png

对照看一下:

DMAC:对应Destination,收件人地址。由于Request报文是“大声问”,需要房间里的所有人都听到,因此填写“广播地址”;

SMAC:对应Source,发件人地址,就是电脑A的MAC地址;

Type:收件人收到后把以太网包装拆除,要把里面封装的东西交给ARP协议处理;

Data:发送的数据,这里是Address Resolution Protocol(request),就是ARP Request请求报文;

CRC:校验数据没有列出,我们不必关心,知道作用就行了。

电脑A把ARP Request报文封装好后,广播发送出去。

其他电脑收到(非电脑B)后,发现收件人是广播地址,需要接收,于是“拆快递”,把以太网包装拆除后根据Type交给ARP协议,ARP协议发现Target IP address填写的并不是自己的IP地址,把报文丢弃。

为什么其他电脑的IP地址不会是192.168.1.25呢?

在一个子网中,IP地址不能重复!

一个房间里有多个“马冬梅”,你叫一声“马冬梅”,谁知道你叫谁呢!

IP地址是否重复有个检测机制,一会再说。

电脑B收到后,同样需要接收广播报文,拆除以太网包装并根据Type交给ARP协议处理。ARP发现Target IP address填写的正是自己的尊姓大名,需要进一步处理。仔细一看,发现是一个ARP Request请求报文,明白了这是电脑A在问自己的MAC地址呢,于是,写封回信:

8229925afabef2d4699a0518b7b0738b.png

这是电脑B给电脑A的回复(Reply)报文,应该能看懂了。

需要注意的是,ARP Reply在以太网封装时,“收件人”不再是广播,而是单播,Destination填写的是电脑A的MAC地址,交换机只会把这个报文从连接电脑A的端口发出去,其他电脑收不到这个报文。

电脑A收到电脑B的MAC地址后,就可以把要发给电脑B的数据用以太网格式封装好发出去了(前面说过,必须要包装成以太网格式才能发出去)。

难道电脑A每次访问电脑B都要先用ARP问一下?

当然不是!电脑A收到Reply后,会把电脑B的IP地址和MAC地址对应关系写进自己的ARP表中,老化时间是20分钟。我们在电脑上打开“命令提示符”,用命令arp -a可以看自己电脑的ARP表。

6d317fa150c0390b132e1e12728fcdbd.png

Internet地址就是IP地址,物理地址就是MAC地址,类型静态表示由系统或手工指定,动态表示由ARP Reply收到并记录。

如果,我们计算出来电脑A和电脑B的子网号不同怎么办?

那就是说,俩电脑不在同一个房间。

还能怎么办,走出门呗。对,就是找网关!

如果俩电脑的子网号不同,ARP就不会再去大声问电脑B的MAC地址了。为什么?因为人家跟你不在同一个房间,你并不知道它在哪,所以你喊破喉咙它也听不见!

这时,ARP会去大声问网关(192.168.1.254)的MAC地址,得到回复后把数据封装成以太网格式发给网关(收件人destination是网关的MAC地址)。后面的事情电脑就不管了,由网关去完成。

每台电脑要访问任意一个IP地址,都会先计算对方跟自己是不是在同一个子网:

如果是,则在ARP表中查找对方IP地址所对应的MAC地址;如果不是,则在ARP表中查找网关IP地址所对应的MAC地址。

不管是查找谁,如果能找到,就直接用以太网格式封装数据发走;如果没有找到,再用ARP去问,收到Reply后写进ARP表,再用以太网封装。

ARP就是这么工作的。它是由电脑自动完成,一般操作人员并不感知它的存在。

ARP其实就是一问一答:大声问,小声答;广播问,单播答。

我们注意到,电脑A收到ARP Reply后,并没有检查到底是不是电脑B回复的。当然,像我们这样单纯的人,不会怀疑:192.168.1.25不就是电脑B吗?难道还会是别人?

有可能!这就是ARP的漏洞:假如电脑X仿冒电脑B给你回复,这样,你得到的MAC地址就是电脑X而不是电脑B的,而你依然很天真地相信这个MAC地址是电脑B的,结果,把数据都发给了电脑X!

这就是以前很常见的ARP攻击手段!现在,由于人们安全意识增强,电脑上一般都会有安全软件,ARP攻击已经比较少见了。另外,小小透露一点,IPv6会检查,不存在这个漏洞了。

还有一种特殊的ARP,如下:

ab340d136dd74cdef1a52e328f548d5c.png

细心的你已经发现了,Sender IP address和Target IP address是一样的!

这个意思是指,我要广播问一下房间里所有人,有没有人的IP地址跟我一样,也是192.168.1.20?如果没有,就不会有人理我;如果有,我就会收到Reply,那我就会提示“IP地址冲突”!

这个ARP,也叫“免费ARP”。一般当电脑的IP地址发生变化时,由电脑自动发出询问。

到现在为止,我们知道,电脑要发数据,封装成以太网格式就行了。但我们发现,以太网格式中,并没有填写IP地址的地方!

难道不需要吗?

小Q:一个广播域内电脑的数量多少对网络会有什么影响?

欢迎大家留言讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值