1、各司其职
我们都知道,计算机网络世界里是分层次的,每个层次各司其职,这跟我们现实生活里方方面面很像,比如 人体器官形成的系统,每个器官也是各司其职,做好自己本分的工作。二层网络,是以MAC地址进行传输的,交换机基于源MAC地址学习,目的MAC地址转发。
二层网络
例如,上图,(双方都知道对方的MAC地址后)PC1要给PC2发消息“你好,妹纸”,发出去的时候,交换机会带上二层帧头,到了交换机就会查找一下PC2的MAC地址怎么走?然后正确转发给PC2,到了PC2会把这个二层帧头拆掉,看到里面的消息。
这个过程,就好比我们寄快递一样,我们要寄的物品(报文)放进纸盒里,纸盒会密封,贴上快递标签(帧头),送到站点。前面我们说过了,各司其职,那么到站点只会看快递标签,不会看纸盒里的东西(不会看帧头后面的报文内容)。然后站点根据自己的标签库(MAC表),就可以正确转发快件了。
如果需要跨网络通信(三层网络),计算机网络世界里则是使用IP地址进行传输。
三层网络
如上图,PC1发出报文,离开PC1时,会被打上IP报文头,然后再打上帧头标签,龙哥这里所说的“打上”,就说计算机网络术语常说的“封装”。到了二层只会查看二层帧头,发现二层帧头里的目的mac地址是本设备自己的,于是就拆开二层帧头,读取IP报头,根据目的IP地址查找路由,进行IP转发,找到正确出接口后,从上图可以发现,又进行封装二层帧头了(红色),源MAC地址为出接口的mac地址,目的mac地址为PC2的。
既然网络层是通过IP地址来转发数据包的,那我们要上网,岂不是都得通过IP地址来访问,那我们的大脑估计是第一个跳出来反对的,记不住呀! 让我记住女朋友的生日我都经常忘了,更何况记住IP地址呢? 哈哈,人类果然是很优秀,创造了DNS协议,让我们轻轻松松记住十几个网站都没问题。
例如上图,当我们在PC1上浏览器输入百度网址时,PC1就会根据输入这个域名,像DNS服务器(提前设置好的)询问,让DNS服务器告诉PC1,这个www.baidu.com的IP地址是多少?然后DNS服务器收到这个查询报文,就会进行查找,然后响应。PC1收到这个响应报文后,知道具体IP地址后,就会使用这个ip地址与百度服务器进行通信了。
现在,我们就明白了,域名通过DNS协议获取到真实的IP地址。那么,IP地址通过ARP协议可以获取到相应的MAC地址。
2、ARP为何物?
ARP定义
地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。
看过龙哥文章,都知道,龙哥喜欢问:为什么会有它? 肯定不会平白无故的产生?就像这世界上没有无缘无故的爱,也没有无缘无故的恨?那我们就了解一下为啥会产生ARP?
即作用:
在局域网中,当主机或其它三层网络设备有数据要发送给另一台主机或三层网络设备时,它需要知道对方的网络层地址(即IP地址)。但是仅有IP地址是不够的,因为IP报文必须封装成帧才能通过物理网络发送,因此发送方还需要知道接收方的物理地址(即MAC地址),这就需要一个从IP地址到MAC地址的映射。ARP即可以实现将IP地址解析为MAC地址。
这里提到映射,映射简单理解就是一一对应,主机或网络设备维护这个一一对应的关系会创建一个表,这个表记录着IP地址和MAC地址的对应关系。
其实关于ARP协议,我们也可以从生活中找类比,比如 某天,我要去华为总部J区-培训中心(类似IP地址)参加HCIE实验考试,但是我又不是在华为上班的,怎么知道具体地址呢?(类似MAC地址)
3、ARP原理
看到这来,相信很多小白已经迫不及待想知道:ARP到底是怎么知道MAC地址的呢?言简意赅,就是通过两种报文来确定MAC地址的,ARP请求报文和ARP响应报文。
ARP报文交互过程
例如这个场景,某公司新来了一个漂亮的妹子,叫小红。小明看上人家了,想发情书给人家。具体IP信息如下:小明的 IP 地址为 192.168.1.1 ,小李的 IP 地址为 192.168.1.2 ,小红 的 IP 地址为 192.168.1.3 。它们都不知道对方的 MAC 地址。ARP 地址解析过程如下:
01
查ARP表
小明的电脑,会将电子情书封装好,加上IP报头(如源IP地址、目IP地址),封装完后,就到了封装二层帧头了,封装二层帧头最关键的信息就是对方的MAC地址。 为了获取对方MAC地址,首先,小明这台电脑会先去查询一下ARP表,看看有没有?有的话,就直接使用表项里的MAC地址进行封装,然后发送出去。
02
发ARP请求
由于小明电脑上 的 ARP 表上没找到对应的表项,于是就会发送一个广播帧,这个广播帧的报文,也是ARP请求报文,二层帧头主要信息如下:源 IP :192.168.1.1源 MAC 地址:mac1目的 IP 地址:192.168.1.3目的 MAC 地址是广播 MAC 地址,即 FFFF-FFFF-FFFF 。
03
ARP响应报文
小明的电脑,发了ARP广播报文后,只要在同一个网段内的所有主机就都能收到。小红的电脑收到这个ARP广播报文后,发现目的IP地址就是我自己,即有人找我,于是就发送ARP响应报文给小明电脑 ,
源 IP :192.168.1.3源 MAC 地址:mac3目的 IP 地址:192.168.1.1目的 MAC 地址是:mac1 。这个报文就叫 ARP 响应报文。此时,小红电脑上的 ARP 表记录小明IP和mac地址的映射关系。
04
丢弃ARP请求报文
小李的电脑收到这个ARP报文后,发现目的ip地址不是我自己,即不是找我,于是丢弃,不做响应,同时,也会更新一下ARP表,将小明的IP和MAC地址映射关系记录起来。
05
开始正常通信
小明电脑收到 小红的ARP 响应报文后,添加小红IP和MAC的映射关系,同时用小红的MAC地址做为目的MAC地址,将情书封装成帧,单播发送给小红。
以上,就是ARP原理,相信看完应该有所收获了吧!
4、关于ARP表项
假如没有ARP表项,那如果每发送一次IP数据报文,就得 进行一次ARP 请求,来确定 MAC 地址,这样势必造成不必要的流量及时延。
所以,就需要一个ARP表项,说白了,就是一个数据库,这个数据库记录 IP 地址和 MAC 地址的映射关系。
这样主机在发送报文时,会先查找一下它的 ARP 表,看看是否有相应的 MAC 地址。如果有,就直接使用;如果没有,就发起 ARP 请求获取。
但是这个ARP表项里的条目,也不一定是一直存在着,比如通过动态学习的,有期限的,即老化时间(aging time),在这个时间内,这个条目是有效的。超过老化时间,表项就会被删除,这样也可以释放点缓存空间。
此外,ARP表项可分为:动态ARP表项和静态ARP表项。
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。
静态ARP表项是由网络管理员手工建立的IP地址和MAC地址之间固定的映射关系。静态ARP表项不会被老化,静态ARP表项的优先级高于动态ARP表项,所以不会被动态ARP表项覆盖。
,