探索集线器、交换机和路由器——路由器的包转发操作

1、路由器的基本知识:

路由器的工作原理和交换机类似,都是通过查表判断包转发的目标,但是在具体的操作过程上还是有区别的。因为路由器是基于IP设计的,而交换机是基于以太网设计的。路由器的内部结构如下图所示:

通过更换网卡,计算机不仅可以支持以太网,也可以支持无线局域网,路由器也是一样,只要端口模块安装了支持这些技术的硬件即可(从原理上说,计算机只要安装相应的适配器,也可以支持各种通信技术)。

路由器在转发包的时候,首先会通过端口将发过来的包接收进来,这一步的工作过程取决于端口对应的通信技术,总之就是委托端口的硬件将包接收进来。接下来,转发模块会根据接收到的包的IP头部中记录的接收方IP地址,在路由表中进行查询。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去,也就是转发模块委托端口模块将包发送出去的意思。

从上面可以看出,端口模块是以实际的发送方或者接收方的身份来收发网络包的。以以太网端口为例,路由器的端口则具有MAC地址。当然端口同时还具有IP地址,当转发包时,首先路由器端口会接收发给自己的以太网包(但是端口并不会成为IP的发送方和接收方),然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

2、路由表中的信息:

在“查表判断转发目标”这一点上,路由器和交换机的大体思路是类似的,不过具体的工作过程有所不同。交换机是通过MAC头部中的接收方MAC地址来判断转发目标的,而路由器则是根据IP头部中的IP地址来判断的。路由表的内容大致如下表:

目标地址

(Destination)

子网掩码

(Netmask)

网关

(Gateway)

接口

(Interface)

跃点数

(Metric)

10.10.1.0 255.255.255.0 —— e2 1
10.10.1.101 255.255.255.255 —— e2 1
192.168.1.0 255.255.255.0 —— e3 1
192.168.1.10 255.255.255.255 —— e3 1
0.0.0.0 0.0.0.0 192.0.2.1 e1 1

路由器会将接收到的网络包的接收方IP地址与路由表中的目标地址进行比较,并找到相应的记录。在之前的交换机MAC地址表中,只会匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分(目标地址的子网掩码中对应位置为0,则表示主机号)。

有时地址本身的子网掩码和路由表中的子网掩码是不一致的,这是路由聚合的结果。路由聚合会将几个子网合并成一个子网,并在路由表中产生一条记录。例如,现在有三个子网,分别为10.10.1.0/24、10.10.2.0/24、10.10.3.0/24,路由器B需要通过路由器A才能将包发送到这三个子网中(也就是路由器A与三个子网连接,而路由器B只与路由器A连接),本来路由表B中应该有三条记录,但是无论发送到任何一个子网,都需要通过路由器A来进行转发,因此可以在路由表中将这三个子网合并成10.10.0.0/16,这样也可以正确地进行转发。

根据目标地址和子网掩码匹配到某条记录后,路由器就会将网络包交给接口列中指定的网络接口,并转发到网关列中指定的IP地址。剩下最后一列的跃点计数则表示距离目标IP地址的距离是远还是近,数字越小距离越近。

路由器维护路由表的方式与交换机维护MAC地址表的方式也所有不同。交换机对MAC地址表的维护是包转发操作中的一个步骤,而路由器对路由表的维护是与包转发操作相互独立的。维护路由表的方式主要有两种,一是人工手动维护,二是根据路由协议机制(一般的路由协议有RIP、OSPF、BGP等),通过路由器之间交换路由信息自行维护。

3、查询路由表确定输出端口:

路由器在完成包收发操作之后,就会丢弃包开头的MAC头部。其中的接收方MAC地址就是路由器端口的MAC地址。因此,当包到达路由器之后,MAC头部的任务就完成了。

接下来,路由器会根据MAC头部后方的IP头部中的内容进行包的转发操作。首先,查询路由表判断转发目标,判断转发目标的第一步,就是根据包的接收方IP地址查询路由表中的目标地址栏,以找到相匹配的记录。当然匹配的并不是所有的32个比特,而是根据子网掩码列中的值判断网络号的比特数,并匹配相应数量的比特。

按照上面的匹配规则可能会匹配到多条候选记录,路由器会首先寻找网络号比特数最长的一条记录。这是因为网络号比特数越长,主机号比特数越短,也就意味着该子网内可分配的主机数量越少,即子网中可能存在的主机数量越少,这样就尽量缩小了范围。该种形式的匹配规则,我们称之为“最长匹配”原则。

然而,有时候路由表中会存在网络号比特数长度相同的多条记录,例如考虑到路由器或网线的故障而设置的备用路由就属于这种情况。这时候就需要根据跃点计数的值来判断,跃点计数越小说明该路由越近,因此应选择跃点计数较小的记录。

如果路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过ICMP(Internet Control Message Protocol,Internet控制报文协议。当包传输过程中发生错误时,用来发送控制消息)消息告知发送方。与路由器不同的是,当交换机遇到不知道应该转发到哪里的包时,会将包发送到所有的端口上。这是因为交换机连接的设备最多也就几千台,并不会引发什么问题,而路由器连接的是整个互联网,如果将不知道应该转发的包发送到整个网络上,那就会产生大量的网络包,造成网络拥塞。

4、找不到匹配路由时选择默认路由:

之前路由表中最后一行的作用就相当于把所有目标都配置好了。这一行的子网掩码为0.0.0.0,关键就在这里,子网掩码0.0.0.0的意思是网络包接收方IP地址和路由表目标地址的匹配中需要匹配的比特数为0,也就是根本不需要匹配,无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了。

只要在这一条记录的网关列中填写接入互联网的路由器地址,当匹配不到其他路由时,网络包就会被转发到互联网接入路由器。这条记录被称为默认路由,这一行配置的网关地址被称为默认网关。

5、包的有效期:

从路由表中查找到转发目标之后,第一个工作是更新IP头部中的TTL(Time To Live,生存时间)字段,包每经过一个路由器的转发,这个值就会减1,当这个值变成0时,就表示超过了有效期,这个包就会被丢弃。这个机制是为了防止包在一个地方陷入死循环。正常情况下,发送方在发送包时会将TTL设为64或128,这就已经足够了,因为现在的互联网即便访问一台位于地球另一侧的服务器,最多也只要经过几十个路由器。

6、通过分片功能拆分大网络包:

路由器的端口并不只有以太网一种,也可以支持其他局域网或专线通信技术。不同的线路和局域网类型各自能传输的最大包长度也不同,因此输出端口最大包长度与输入端口的很可能不一样。即便两个端口的最大包长度相同,也有可能会因为添加了一些头部数据而导致包的实际长度发生变化。

遇到这种情况,可以使用IP协议中定义的分片功能对包进行拆分,缩小每个包的长度。具体拆分过程如下图所示:

这里需要注意,在拆分之前还需要看一下IP头部中的标志字段,确认是否可以分片。一般来说都是可以分片的,但如果发送方应用程序等设置了不允许分片或者这个包已经是经过分片后的包,那么是不允许进行分片操作了的。如果分片操作无法进行,那么就只能丢弃这个包,并通过ICMP消息通知发送方。

7、路由器的发送操作和计算机相同:

以以太网为例,路由器发送网络包的基本过程和协议栈中的IP模块发送包的过程是相同的。首先,为了判断MAC头部中的MAC地址应该填写什么值,我们需要根据路由表的网关列判断对方的地址。如果网关是一个IP地址,则这个IP地址就是我们要转发的目标地址;如果网关为空(网关的IP地址与接口的IP地址相同时,表示IP头部中的接收方IP地址就是我们要转发的直接目标,但这段内容是针对Windows计算机的。路由器和Windows不一样,当包可以直接发送到最终接收方时,一般网关列是留空的),则IP头部中的接收方IP地址就是要转发到的目标地址。知道对方的IP地址之后,接下来需要通过ARP根据IP地址查询MAC地址,并将查询的结果作为接收方MAC地址。路由器也有ARP缓存,因此首先会在ARP缓存中查询,如果找不到则发送ARP查询请求。

接下来是发送方MAC地址字段,这里填写输出端口的MAC地址。还有一个以太类型字段,填写0800(十六进制)。

网络包完成后,接下来就会将其转换成电信号并通过端口发送出去。

8、路由器与交换机的关系:

简单来说,IP(路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。

IP本身不负责包的传输,而是委托各种通信技术将包传输到下一个路由器,这样的设计是有重大意义的,即可以根据需要灵活运用各种通信技术,这也是IP的最大特点。

Guess you like

Origin blog.csdn.net/qq_38386085/article/details/98089104