概述

我们都知道路由器作为Internet的骨架,连接了整个互联网,可以说是整个网络的基石。但为什么路由器这么牛呢?是因为路由器能够在不同的网段之间进行通信,可以根据一定的规则把报文一跳一跳的转到目的地。

关于路由器如何转发报文,网络已经很多的教程,我们今天就不详细说了。今天我们要分享的路由器在转发报文的过程中,是如何处理报文的。同时我们换一个视角,假设我们是报文,看看路由器如何处理我们。

PS:我们说的路由器不是家庭用的小网关,而是用来连接不同网段的三层路由器,两者之间区别还是比较大的。

假设你是一个报文,看路由器会如何处理你-编程知识网

家庭网关和三层路由器

路由器对报文的处理

为了阐述报文的处理流程,我们使用简化的拓扑来描述:只使用一台路由器和两台PC,这样不仅能说明路由器如何处理报文,还能学习一下PC对报文的处理流程。

拓扑图

假设你是一个报文,看路由器会如何处理你-编程知识网

2台PC和一台路由器

  1. PC1配置的IP为10.1.1.2/24,网关是10.1.1.1
  2. PC2配置的IP为20.1.1.2/24,网关是20.1.1.1
  3. PC1和PC2明显不在同一个网段
  4. 路由器E0/1接口配置为PC1的网关:10.1.1.1
  5. 路由器E0/2接口配置为 PC2的网关:20.1.1.1
  6. 测试PC1和PC2之间的报文交互

访问流程

步骤1:PC1想要给PC2发送数据,要先获取网关的MAC;

  • PC1已经知道PC2的IP地址(20.1.1.2),查看这个IP地址时,发现它和自己(10.1.1.2)不在同一个网段,会把报文转发给网关处理
  • PC1已经配置好网关(10.1.1.1),所以就会尝试把报文发送给网关。但是PC1查看自己的ARP表项,发现是空的,默认情况下没有ARP表项。

假设你是一个报文,看路由器会如何处理你-编程知识网

默认情况下,ARP表项是空的

  • PC1只有获取网关的MAC地址才能封装报文,所以它会发送ARP Request请求网关的MAC,ARP报文如下图所示:

假设你是一个报文,看路由器会如何处理你-编程知识网

PC1请求网关的MAC

  • 路由器收到这个ARP Request以后,发现Target IP是自己E0/1的IP地址,就会发送ARP Reply,把自己的MAC地址发送给PC1

假设你是一个报文,看路由器会如何处理你-编程知识网

路由器回复的MAC

  • PC1收到ARP Reply以后,就会创建一个ARP表项,以后发送给网关的MAC都会使用这个地址来填充;

假设你是一个报文,看路由器会如何处理你-编程知识网

ARP表项

步骤2:PC2使用网关的MAC封装报文,发送给路由器

  • PC1使用网关的MAC填充报文,然后发送出去

假设你是一个报文,看路由器会如何处理你-编程知识网

PC1发送的数据报文

  • 目的MAC填充的是aa:bb:cc:00:01:10,这是网关的MAC
  • 目的IP是20.1.1.2,这个是PC2的IP地址

步骤3:路由器对报文的处理:剥掉二层MAC,重新封装

  • 路由器收到PC1发送的报文以后,会检查目的MAC地址,如果和自己的接口一样,就处理,否则丢弃;

假设你是一个报文,看路由器会如何处理你-编程知识网

接口MAC和收到的报文MAC对比

  • 路由器会把报文的二层信息全部剥掉,只留下三层及以上的数据;

假设你是一个报文,看路由器会如何处理你-编程知识网

剥掉二层信息

  • 路由器然后根据报文的目的IP地址,查找路由表,发现下一跳是出接口是E0/2;

假设你是一个报文,看路由器会如何处理你-编程知识网

查找路由器

  • 路由器就会使用出接口E0/2的MAC地址对之前的三层报文进行封装;

假设你是一个报文,看路由器会如何处理你-编程知识网

路由器E0/2MAC地址

  • 封装完成的报文:源MAC是E0/2的MAC,目的IP地址不变,高层的ICMP内容也不变;

假设你是一个报文,看路由器会如何处理你-编程知识网

使用E0/2的MAC重新封装报文

  • 目的MAC是PC2的MAC:路由器在发送报文给PC2之前,会发送ARP请求PC2的MAC,过程和前面类似,这里就不说了;

步骤4:PC2收到路由器发送的报文

  • PC2会先检查目的MAC地址,是否和自己网卡MAC相同,如果不相同, 则丢弃报文;

假设你是一个报文,看路由器会如何处理你-编程知识网

MAC地址

  • 如果相同,则上送高层处理,然后回复ICMP,回复的ICMP的源MAC是PC2自己网卡的MAC;

假设你是一个报文,看路由器会如何处理你-编程知识网

PC2回复的ARP Reply

  • 路由器对收到的PC2的报文的处理和PC1类似,也会重新封装二层MAC信息,然后转发给PC1;

假设你是一个报文,看路由器会如何处理你-编程知识网

PC1收到的ARP Reply信息

总结

通过上面的描述,我们可以看出来有2个比较重要的知识点:

  1. 知识点一:对于不在同一网段的报文,PC会包报文发送给网关,由网关来处理;
  2. 知识点二:收到报文以后,路由器会先剥掉二层信息,保留三层及以上数据;在将数据发送出去时,还会对数据进行重新封装,加上新的二层信息。

这就是从报文角度看到网络设备的处理流程,各位看完有点感觉了吗?

如果还有疑问,欢迎留言讨论;同时也非常欢迎各位关注我的头条号,一起讨论网络知识!