您的位置:首页 > 新闻 > 会展 > 网站源码完整_海外服务器购买_买淘宝店铺多少钱一个_西安网站托管

网站源码完整_海外服务器购买_买淘宝店铺多少钱一个_西安网站托管

2024/12/23 4:41:32 来源:https://blog.csdn.net/liyao1569/article/details/144635486  浏览:    关键词:网站源码完整_海外服务器购买_买淘宝店铺多少钱一个_西安网站托管
网站源码完整_海外服务器购买_买淘宝店铺多少钱一个_西安网站托管

ARP

0 前言

真正接触到现网才发现ARP十分重要,无论是排错还是S-MLAG都需要用到ARP这个协议,以前对于ARP的理解比较混乱;所以这次对其中的主要内容做个梳理;一定要学好ARP!!!

1 ARP的概念

Ardress resolution protocol,地址解析协议,通过IP层解析出MAC层,帮助数据包转发到下一跳的协议;

2 ARP表

2.1 ARP表内容

主要的内容有以下几个:IP MAC interface age;

着重说一下 :interfaceARP表的interface一定是物理接口,因为三层数据转发的出接口就是依赖ARP表项中的interface

什么意思?也就是我们根据ARP表封装完MAC层之后,转发是根据ARP表里的interface,而不是MAC表的interface;下面就来验证:
在这里插入图片描述

在正常情况下,PC1 ping通 PC2 后,也就是产生ARP表项后,我们做以下修改:

  • 修改MAC,不修改ARP

    将PC2对应的MAC的接口修改到G0/0/3,发现ICMP还是从G0/0/2走,则证明不是依靠MAC转发

  • 修改ARP,不修改MAC

    将PC2对应的ARP的接口修改到G0/0/3,发现ICMP是从G0/0/3走,则证明是依靠ARP转发

注:一定是物理口,像锐捷设备他的ARP表不全,可能出现interface是vlanif的情况,只需要输入show arp details就可以显示完整的ARP表,其中就有关联物理接口;

2.2 ARP表更新条件

报文类型更新ARP表条件更新内容
免费ARP①ARP表中已存在Sender IP对应的表项(可以是只有IP的临时表性)用Sender IP和Sender Mac更新表项信息
ARP_request①Target_IP为进接口IP用Sender IP和Sender Mac更新表项信息
ARP_reply①Target_IP为进接口IP ②ARP表中已经存在Sender IP表项(可以是只有IP的临时表项)用Sender IP和Sender Mac更新表项信息

注意,以上的更新条件仅限于普通的ARP流程,如果是代理ARP,那么上面的更新条件将被颠覆;

报文类型更新ARP表条件更新内
ARP_request①Target_IP可达用Sender IP和Sender Mac更新表项信息
ARP_reply①Target_IP可达 ②ARP表中已经存在Sender IP表项(可以是只有IP的临时表项)用Sender IP和Sender Mac更新表项信息

2.3 ARP表删除条件

  1. ARP表中的age超时

  2. ARP表中的interface接口down

    这点很关键,这就说明ARP能够对物理接口的状态动态感知,一旦物理接口DOWN,ARP表项消失
    这也是S-MALG联动ARP转32位路由的重要原因之一;

3 ARP的流程

  1. 本地产生数据包,封装数据层和IP层,根据IP层查询路由表

  2. 查询路由表的目的是为了将流量先转发到一个本地接口

  3. 转发到接口的目的是为了下一步MAC地址的封装判断

  4. 判断该转发接口的IP和报文的目的IP是否是一个网段
    如果同网段,则查看ARP表有无目的IP对应的MAC
    有,则直接根据ARP表项封装
    无,则该接口发送ARP请求,其中Target ip为包的目的IP

    如果异网段,看路由是否有下一跳
    有下一跳,则查看ARP表是否有路由下一跳的MAC地址
    有,则直接根据ARP表项封装
    无,则该接口发送ARP请求,其中Target ip为路由下一跳的IP
    没下一跳,则查看ARP表是否有无目的IP对应的MAC
    有,则直接根据ARP表项封装
    无,则该接口发送ARP请求,其中Target ip为包的目的IP

  5. 根据获取到的ARP表项,封装包的MAC层,然后根据ARP的interface项将报文转发出去;

这些上面的语言过于抽象,我们将从下面几个场景,对ARP的流程做一个验证和梳理,希望方便理解;以下场景默认ARP表都为初始状态(空),后面不再赘述;

3.1 普通网关

PC1的网关为192.168.1.254,PC2的网关为192.168.2.254,PC1试图ping PC2;
在这里插入图片描述
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.2.1;
②PC1查询自己的路由表,因为PC1设置了网关【网关本质就是一条默认路由 0.0.0.0 0.0.0.0 G0/0 192.168.1.254】,目的IP匹配了这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP不是一个网段,且存在下一跳,为192.168.1.254,由于ARP表没有这个IP的表项,所以本地生成一个ARP的临时表项【IP:192.168.1.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.254;
④网关收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC PC1 interface:G0/1】,并且回复ARP Reply包;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:R MAC:R interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达R;
⑧R先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.2.1,和本地路由表中的192.168.254.0/24 g0/1的直连路由匹配;所以将数据包送到G0/3接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.2.1的MAC,所以本地生成一个ARP的临时表项【IP:192.168.2.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.2.1;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:R MAC:R interface:G0/4】,并且回复ARP Reply包;
⑩R收到Reply后,发现其中的Targer IP为自己,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑪R根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑫PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;

3.2 VLANif网关

PC1的网关为192.168.1.254,PC2的网关为192.168.2.254,PC1试图ping PC2;
在此基础上,中间的由器换成三层交换机,PC1属于VLAN 1,PC2属于VLAN 2,他们的网关位置被移到VLANif口
在这里插入图片描述
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.2.1;
②PC1查询自己的路由表,因为PC1设置了网关【网关本质就是一条默认路由 0.0.0.0 0.0.0.0 G0/0 192.168.1.254】,目的IP匹配了这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP不是一个网段,且存在下一跳,为192.168.1.254,由于ARP表没有这个IP的表项,所以本地生成一个ARP的临时表项【IP:192.168.1.1 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.254;
④网关收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC PC1 interface:G0/1】,并且回复ARP Reply包;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:R MAC:R interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达R;
⑧R先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.2.1,和本地路由表中的192.168.254.0/24 vlanif2的直连路由匹配;所以将数据包送vlanif2逻辑接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.2.1的MAC,所以本地生成一个ARP的临时表项【IP:192.168.2.1 MAC:?】,并且该接口发送ARP请求(带VLAN 2的TAG,所以二层支持转发VLAN 2的接口都会发),其中的Target IP为192.168.2.1;
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:R MAC:R interface:G0/4】,并且回复ARP Reply包;
⑪R收到Reply后,发现其中的Target IP为自己,于是利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑫R根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑬PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;

4 ARP代理

4.1 作用

当本地接口收到一个目的MAC不为自身MAC的ARP请求时,开启了ARP代理的本地接口会尝试帮助发送方进行报文的转发;

4.2 ARP代理流程

  1. 开启ARP代理的本地接口收到一个目的MAC非自己的ARP请求
  2. 本地查看路由表,看ARP请求的Target ip是否可达
    如果可达,回复ARP_Reply进行ARP欺骗,将数据包引流到本地后进一步转发;
    如果不可达,不做回复;

下面讲几个实习中碰到的例子:

4.2.1 S-MLAG

PC1和PC2是同网段;S上存在一个VLANIF1,作为PC1和PC2的网关,并且开启了ARP代理;
G0/1和G0/4开启了端口隔离,不能直接通过二层互通;
在这里插入图片描述
①PC1产生icmp echo数据层,然后封装IP层,其中源IP为192.168.1.1,目的IP为192.168.1.3;
②PC1查询自己的路由表,目的IP匹配了【192.168.1.0 g0/0】这一条路由,所以将数据包先送到G0/0;
③判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.1.3的MAC,所以本地生成一个ARP的临时表项【IP:192.168.1.3 MAC:?】,并且该接口发送ARP请求,其中的Target IP为192.168.1.3;
④网关收到ARP Request后,发现Target IP不是自己,但是VLANIF 1它开启了ARP代理,所尝试进行数据包的转发:查看自身路由表发现存在【192.168.1.0/24 vlanif1】的路由,所以判断ARP中的Target ip 192.168.1.3可达,所以进行ARP欺骗:先根据Target IP中的【Sender IP和MAC更新本地ARP表】,并且回复给PC1 ARP_Reply【Sender IP: PC2 Sender MAC:VLANIF1 Target IP:PC1 Target MAC:PC1】进行ARP欺骗;
⑤PC1收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:VLANIF1 interface:G0/0】
⑥PC1根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑦icmp echo到达S的VLANIF1;
⑧VLANIF1先查看MAC层,发现目的MAC为自己,解封装二层;查看三层,发现目的IP为192.168.1.3,和本地路由表中的192.168.1.0/24 vlanif1的直连路由匹配;所以将数据包送到vlanif1接口;
⑨判断该转发接口的IP和报文的目的IP是一个网段,由于本地ARP表没有192.168.1.3的MAC,所以本地生成一个ARP的临时表项【IP:192.168.1.3 MAC:?】,并且该接口发送ARP请求(带VLAN 1的TAG,所以二层支持转发VLAN 2的接口都会发),其中的【Sender IP: PC1 Sender MAC: VLANIF1 Target IP:PC2】【ARP欺骗】
⑩PC2收到ARP Request后,发现Target IP为自己,所以用这个ARP请求的Sender ip和Sender MAC更新自己的ARP表项目【IP:PC1 MAC:VLANIF1 interface:G0/4】,并且回复ARP Reply包;
⑪S收到Reply后,利用其中的Sender IP和MAC以及自己产生的临时表项更新自己的ARP表【IP:PC2 MAC:PC2 interface:G0/3】
⑫S根据更新的表项,封装icmp echo的MAC层,并且根据ARP表中的interface将数据转发出去;
⑬PC2收到数据包,在回复echo reply时候,就顺利很多,因为沿途都有ARP表项,不再赘述;

4.2.2 路由

R1和R2互联,其中R1有一条静态路由【2.2.2.2 32 G0/0】,这条静态路由没有指定下一跳IP地址;
R2上面有一个环回接口,IP地址为2.2.2.2;
在这里插入图片描述
现:关闭R2的G0/1接口的arp代理功能;然后R1 ping 2.2.2.2;发现无法ping通;
再:开启R2的G0/1接口的arp代理功能;然后R1 ping 2.2.2.2;发现可以ping通;

简单解释一下:
R1上的2.2.2.2的路由没有配置下一跳IP,而且出接口的IP和目的IP不是一个网段;
所以R1发送的ARP请求中的Target IP为2.2.2.2;
如果R2的G0/1没开启ARP代理,因为Target IP不是自己,就不会回复,也就不可达;
如果R2的G0/1开启了ARP代理,那就可以帮忙转发,也就可达;

综上:
配置路由的时候,务必配上下一跳IP,因为出接口不配置也能迭代出来;
一方面,如果接收口没开启ARP代理功能,就无法可达;
另一方面,配置下一跳之后,对于本地来说,访问多个相同下一跳的网段,只会有一条ARP记录,节省表项;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com