关于ARP协议在数据链路层和网络层上工作的具体过程

前言

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

对于理解ARP协议实际工作过程

  • 首先要理解ip数据报实质传输过程是在链路层上的(忽略物理层),发送接收的地址其实实质也是mac地址,ip地址只相当于mac地址在网络层映射的地址,因为你即使有了ip地址也要通过arp协议转换为mac地址,在封装为mac帧进行链路层上的传输。

    例题

  • [2016统考真题]如下图所示,假设H1与H2的默认网关和子网掩码均分别配置为192. 168.3.1和255.255.255.128,H3和H4的默认网关和子网掩码均分别配置为192.168.3.254 和255.255.255.128,则下列现象中可能发生的是()

       ef097f778e29473291dd89103278ab12.webp

       A.H1和H2不能进行正常通信

       B.H2和H4均不能访问Internet

       C.H1不能和H3进行正常通信

       D.H3不能和H4进行正常通信

  • 答案:C

   解析:

  • 对于选项A,主机H1与主机H2处于一个网段之中显然能通信;
  • 对于选项B,由于H4的默认网关配置了了路由器R2的E1端口,显然H4发送的数据报能被路由器R2接收并转发,从而与Internet进行通信;
  • 对于选项D,由于H3和H4处于一个网段之中,显然能正常进行通信
  • 对于选项C,可以看到H1与H3处于不同网段之中,当然不能进行正常通信。故选c

 


但我认为其实本题不止是可以聚焦在这个地方。

例如对于选项C,H1和H3不能通信的最直观原因是因为此两个主机并不处于一个网段之中。但深层次来说,H1和H3不能通信的直接原因并不是因为不同网段,因为H1和H3之间有路由器R2作为中继,他们为什么不能由R2中继进行转发来进行通信?

所以最直接的原因是,H1的默认网关并没有配置192.168.3.254,从而导致H1的数据无法经由路由器R2进行接收,因此也就导致H1和H2无法进行通信。

倘若我将H1的默认网关配置为路由器R2的E1端口的ip,具体的通信过程又会是怎样?这是C选项给我们更多的思考。


下述内容将对配置了正确默认网关的H1主机和H3主机的通信过程进行详细叙述,具体到建立arp表项的映射以及链路层mac帧的封装传输。

首先阐述交换机的一些概念:

  • 交换机是看不见ip的,网络层对交换机而言完全透明。它只看得见mac地址,并根据mac地址进行对应的转发。之所以不同的ip网段并不能通过交换机进行联系,就是因为交换机并不清楚ip网段是什么,不同的ip网段其实在交换机的层面上对应的就是不同的mac地址(或抽象为以太网),它只处理ip数据报所封装成的数据帧,并且对数据帧中的mac地址进行查看并转发至相应的物理地址。
  • 并且以太网交换机无法分隔广播域,只能由端口分隔出不同的冲突域。

接下来就对H1与H3的通信过程进行详细描述:

  1. 假设h1内arp表为空,h1首先发送arp请求报文(广播的形式),报文中的源ip为h1的ip,目的ip为h3的ip(即使此处填了目的ip,但由于实际上还是在链路层上由mac帧进行发送,而mac帧为广播地址,所以此刻目的ip不影响广播);并在arp报文的头部封装目的mac地址和源mac地址,目的mac地址为ff-ff-ff-ff-ff-ff,源mac地址为h1的mac
  2. arp请求报文封装的mac帧在链路层上,经过交换机转发,由于交换机并不隔离广播域,所以h1和h3是在一个广播域中,因此h3接受到这个arp请求报文并发送arp响应报文(为单播,由于目的与源地址不在一个网段从而要经过路由器),此响应报文中目的ip是h1的ip,源ip是自己主机ip(h3的ip),并且封装成mac帧后,在头部添加的mac目的地址为路由器R2的E1端口的mac地址(因为交换机隔离了冲突域,此刻由于目的ip和源ip不在一个网段,需要路由来进行中继),而源mac地址为自己主机mac地址。
  3. arp响应报文封装成的mac帧经过交换机之后被路由器R2接收,路由器对mac帧进行解封装,并且查路由表得知,h1所在的网段需要从R2的E1端口进行转发,并且转发时重新对解封装的数据报(arp响应报文)进行封装,此刻封装在头部的mac目的地址已经填写为了h1主机mac地址,而源mac地址填写为R2的E1端口的mac地址(ip头部不修改),之后便将arp响应数据报封装完成后对应的mac帧发向h1主机。
  4. 此mac帧经由交换机,交换机查看目的mac地址时,发现存在交换表中对应h1的mac地址的端口的表项,并从这个端口转发mac帧。
  5. h1接受到到mac数据帧,发现此mac帧中的源mac地址是R2的E1端口的mac地址,从而得到了h3的ip地址对应的mac地址就是路由器R2的mac地址,即在arp中建立了h3的ip地址与R2的E1端口物理地址的映射
  6. 此后h1向h3发送信息时,就可以通过arp查表发现h3的ip对应的mac映射为R2端口E1的mac地址,从而发送的数据报封装成的mac帧中,目的mac地址为E1端口mac地址(注意并非是h3的mac),源mac地址为h1的mac地址(被封装的ip数据报中的目的ip仍然还是h3的ip,源ip是h1的ip)
  7. mac帧经由交换机,交换机发现目的mac地址为E1端口mac地址,便讲mac帧转发至R2路由器的E1端口,由于h1配置了路由器R2的E1端口的网关,从而R2对mac帧进行接受,并解封装为ip数据报 ,并查看路由表,发现数据报中目的ip(即h3的ip)所在网段要由端口E1转发,从而将ip数据报封装为mac帧,填写mac目的地址为h3的mac地址(获取h3的mac一样要通过查询自身路由器R2的arp表,通过h3的ip找到对应的mac映射),并填写源mac地址为E1端口mac地址。
  8. 数据报对应的mac帧经链路传输之后到达主机h3,h3对数据帧进行接收以及解封装,过程结束。

 


在2016年统考例题中,H1与H3之间由交换器隔开,并且两个主机所连路由器端口一致。下考虑如下图这种情况,上述arp服务的过程在多网段中主机由多个路由器中继的情况下也可以良好体现:

 bbc58fa01e544e149f79690c9593186f.jpg

 

在此例中,若是主机A与主机B通信的过程又是如何?(默认主机A还未建立对应的arp映射且其他所有路由器和主机都以配置好arp映射表,默认已经配置好了默认网关,省略了网2中的诸多路由器)

  1. 首先主机A发出arp请求报文,目的ip是主机C的ip,但目的mac地址为广播mac地址,从而被路由器R1接收。
  2. R1拆除包含了mac目的地址为广播地址的mac首部(解封装),根据arp报文的目的ip地址检索路由表获取下一跳ip,并根据ip地址在arp表中检索到对应的mac地址(为网2中某个路由器端口mac地址),重新封装arp数据报,填写目的mac字段为网2中某个路由器端口的mac地址,源mac地址字段为R1的E1端口mac地址,发送数据帧。
  3. arp请求报文对应的数据帧的网2的诸多路由器中持续转发,转发过程类似,都是查询下一跳ip,检索arp表对应mac地址,并封装mac数据帧,填写对应的目的mac地址字段和源mac地址字段。
  4. 直到转发至路由器R2,进行类似的上述过程,并最终封装mac帧,填写mac目的地址为主机C的mac地址,源mac地址为R2的E1端口mac地址。发送数据帧。
  5. 主机C对封装arp请求数据报的数据帧进行接收,并作出arp响应(响应报文的目的ip为主机A的ip地址,源ip地址为主机C的ip地址,两个ip地址字段在传输过程中不会有任何变化,而封装的mac目的地址和源地址在不同网段的传输过程中会不断变化!变化过程不再赘述),此处与统考例题类似,arp响应为单播通信(即点对点),并非arp请求的广播。经历一系列上述类似过程,最终arp响应报文又被路由器R1接收(此处省略多个类似的解封装,封装过程)。
  6. R1对arp响应报文进行再封装,填写mac目的地址字段为主机A的mac字段,填写mac源地址字段为R1的E0端口mac地址,进行发送。
  7. 主机A对arp响应报文进行接收,从而建立主机C的ip地址到R1路由器E0端口的arp映射。
  8. 此后A与C进行通信,只需查arp表即可知需要转发的mac目的地址,通信过程也与arp映射建立方式类似,不再赘述。

总结

  • 综上,ARP协议工作的过程具体到路由器则是根据路由器下一跳的ip检索到对应的mac目的地址,封装mac数据帧并转发;具体到不同主机则是根据目的ip检索到默认网关(若主机ip与目的ip不处于同一网段)所对应的mac地址,并以此为目的mac地址进行封装并传输。

 

 

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白小邹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值