网络知识入门,路由器工作原理(十)

路由器工作原理

 
      路由器的转发的工作原理和交换机类似也是通过查表判断包转发的目标。不过在具体的操作过程上路由器和交换机是有区别的因为路由器是基于 IP 设计的,而交换机是基于以太网设计的IP 和以太网的区别在很多地方都会碰到,下面会讲到现在先来看看路由器的概况
 
   首先,路由器的内部结构如图所示这张图已经画得非常简略了, 大家只要看明白路由器包括转发模块和端口模块两部分就可以了。其中转发模块负责判断包的转发目的地,端口模块负责包的收发操作换句话说路由器转发模块和端口模块的关系,就相当于协议栈的 IP 模块和网卡之间的关系因此,大家可以将路由器的转发模块想象成 IP 模块,将端口模块想象成网卡。

 

网络知识入门,路由器工作原理(十)

 
      通过更换网卡,计算机不仅可以支持以太网,也可以支持无线局域网,路由器也是一样如果路由器的端口模块安装了支持无线局域网的硬件, 就可以支持无线局域网了。此外计算机的网卡除了以太网和无线局域网之外很少见到支持其他通信技术的品种,而路由器的端口模块则支持除局域网之外的多种通信技术,ADSLFTTH以及各种宽带专线等只要端口模块安装了支持这些技术的硬件即可
 
     看懂了内部结构之后,大家应该能大致理解路由器的工作原理了吧。 路由器在转发包时,首先会通过端口将发过来的包接收进来这一步的工作过程取决于端口对应的通信技术。对于以太网端口来说就是按照以太网规范进行工作,而无线局域网端口则按照无线局域网的规范工作总之就是委托端口的硬件将包接收进来接下来发模块会根据接收到的包的 IP 头部中记录的接收方 IP 地址,在路由表中进行查询,以此判断转发目标然后转发模块将包转移到转发目标对应的端口端口再按照硬件的规则将包发送出去,也就是转发模块委托端口模块将包发送出去的意思
 
     以上就是路由器的基本原理,下面再做一些补充刚才我们讲到端口模块会根据相应通信技术的规范来执行包收发的操作,这意味着端口模块是以实际的发送方或者接收方的身份来收发网络包的。以以太网端口为例, 路由器的端口具有 MAC 地址因此它就能够成为以太网的发送方和接收方端口还具有 IP 地址从这个意义上来说它和计算机的网卡是一样的。当转发包时,首先路由器端口会接收发给自己的以太网包,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去这一点和交换机是不同的,交换机只是将进来的包转发出去而已它自己并不会成为发送方或者接收方。
 
 

路由器中的路由表信息

 
 
        在查表判断转发目标这一点上路由器和交换机的大体思路是类似的,不过具体的工作过程有所不同
 
        交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的,而路由器则是根据 IP 头部中的 IP 地址来判断的由于使用的地址不同记录转发目标的表的内容也会不同。 关于细节我们留到后面再讲,现在先来大致介绍一下路由器中的表叫作路由表,其中包含的信息如图所示 。 路由器根据 “IP 地址” 判断转发目标。 最左侧的目标地址列记录的是接收方的信息。这里可能不是很容易理解,实际上这里的 IP 地址只包含表示子网的网络号部分的比特值,而表示主机号部分的比特值全部为 0路由器会将接收到的网络包的接收方 IP地址与路由表中的目标地址进行比较,并找到相应的记录交换机在地址表中只匹配完全一致的记录,而路由器则会忽略主机号部分只匹配网络号部分。打个比方路由器在转发包的时候只看接收方地址属于哪个区, ×× 区发往这一边,×× 区发往那一边。 在匹配地址的过程中,路由器需要知道网络号的比特数因此路由表中还有一列子网掩码。
 
路由器判断下一个转发目标的方法如下。
如果路由表的网关列内容为 IP 地址,则该地址就是下一个转
发目标。
如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址
就是下一个转发目标。

 

 

网络知识入门,路由器工作原理(十)

 

路由聚合

      路由器会忽略主机号,只匹配网络号。 上面这些介绍可以帮助大家大致理解路由器的工作方式,如果要进一步深入,还需要再思考一些问题刚才我们说过目标地址列中的 IP 地 址表示的是子网,但也有一些例外有时地址本身的子网掩码和路由表中的子网掩码是不一致的,这是路由聚合的结果路由聚合会将几个子网合并成一个子网,并在路由表中只产生一条记录
 
    要搞清楚这个问题,我们还是看一个例子如下图所示我们现在有 3 个子网分别为路由器会忽略主机号,只匹配网络号。
从网线到网络设备10.10.1.0/24、10.10.2.0/2410.10.3.0/24路由器 B 需要将包发往这 3 个子网。在这种情况下路由器 B 的路由表中原本应该有对应这 3 个子网的3条记录,但在这个例子中无论发往任何一个子网都是通过路由器 A 来 进行转发,因此我们可以在路由表中将这 3 个子网合并成 10.10.0.0/16这样也可以正确地进行转发,但我们减少了路由表中的记录数量这就是路由聚合。经过路由聚合多个子网会被合并成一个子网子网掩码会发生变化,同时目标地址列也会改成聚合后的地址
 
 

网络知识入门,路由器工作原理(十)

     相对地还有另外一些情况如将一个子网进行细分并注册在路由表中,然后拆分成多条记录从结果上看,路由表的子网掩码列只是用来在匹配目标地址时告诉路由器应该匹配多少个比特而且目标地址中的地址和实际子网的网络号可能并不完全相同,但即便如此路由器依然可以正常工作。 此外,通过上述方法我们也可以将某台具体计算机的地址写入路由表中,这时的子网掩码为 255.255.255.255,也就是说地址中的全部 32 个比特都为 1这样一来主机号部分比特全部为 0 可以表示一个子网主机号部分比特不全部为 0 可以表示某一台计算机两种情况可以用相同的规则来处理。路由表的子网掩码列只表示在匹配网络包目标地址时需要对比的比特数量。
 
     接下来在子网掩码的右边还有网关和接口两列,它们表示网络包的转发目标。根据目标地址和子网掩码匹配到某条记录后,路由器就会将网络包交给接口列中指定的网络接口(即端口)并转发到网关列中指定的 IP 地址。 最后一列是跃点计数,它表示距离目标 IP 地址的距离是远还是近这个数字越小,表示距离目的地越近数字越大表示距离目的地越远。 路由表记录维护的方式和交换机也有所不同。交换机中对 MAC 地址表的维护是包转发操作中的一个步骤,而路由器中对路由表的维护是与包转发操作相互独立的,也就是说,在转发包的过程中不需要对路由表的内容进行维护
 
对路由表进行维护的方法有几种大体上可分为以下两类
a由人手动维护路由记录
b)根据路由协议机制,通过路由器之间的信息交换由路由器自行维
护路由表的记录
 
其中(b中提到的路由协议有很多种例如 RIPOSPCBGP、OSPF 等都属
于路由协议
 

 

 路由器的包接受操作

 

      下面我们来看一看路由器的整个工作过程。

 1)路由器接受包并存入缓存

      首先路由器会接收网络包。路由器的端口有各种不同的类型这里我们只介绍以太网端口是如何接收包的。以太网端口的结构和计算机的网卡基本相同接收包并存放到缓冲区中的过程也和网卡几乎没有区别。 信号到达网线接口部分,其中的 PHYMAU模块和 MAC 模块将信号转换为数字信息,然后通过包末尾的 FCS 进行错误校验如果没问题则检查 MAC 头部中的接收方 MAC 地址看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包如果包的接收方 MAC地址不是自己,说明这个包是发给其他设备的如果接收这个包就违反了以太网的规则。

2)查询路由表确定输出端口

      完成包接收操作之后路由器就会丢弃包开头的 MAC 头部MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址因此当包到达路由器之后MAC 头部的任务就完成了于是 MAC 头部就会被丢弃接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。
 
    转发操作分为几个阶段首先是查询路由表判断转发目标路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包, 遇到不匹配的包则直接丢弃。 通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的具体的工作过程,我们还是来看一个实际的例子。
 

网络知识入门,路由器工作原理(十)

 
 
     如图 3.13 的情况假设地址为 10.10.1.101 的计算机要向地址为 192.168.1.10 的服务器发送一个包, 这个包先到达图中的路由器。判断转发目标的第一步就是根据包的接收方 IP 地址查询路由表中的目标地址栏以找到相匹配的记录就像前面讲过的一样,这个匹配并不是匹配全部 32 个比特,而是根据子网掩码列中的值判断网络号的比特数,并匹配相应数量的比特例如图中的第 3 行,子网掩码列为255.255.255.0就表示需要匹配从左起 24 个比特网络包的接收方 IP 地址和路由表中的目标地址左起 24 个比特的内容都是 192.168.1,因此两者是匹配的该行记录就是候选转发目标之一
 
    按照这样的规则,我们可能会匹配到多条候选记录在这个例子中, 第 345 行都可以匹配其中路由器首先寻找网络号比特数最长的一条记录 网络号比特数越长,说明主机号比特数越短,也就意味着该子网内可分配的主机数量越少,即子网中可能存在的主机数量越少,这一规则的目的是尽量缩小范围,所以根据这条记录判断的转发目标就会更加准确。 我们来看图 中的例子。 第 3 192.168.1.0/255.255.255.0 表示一个子网4 192.168.1.10/255.255.255.255 表示一台服务器相比服务器所属的子网来说直接指定服务器本身的地址时范围更小,因此这里应该选择第 4 行作为转发目标。 按照最长匹配原则筛选后,如果只剩一条候选记录则按照这条记录的内容进行转发。
 
    然而,有时候路由表中会存在网络号长度相同的多条记录例如考虑到路由器或网线的故障而设置的备用路由就属于这种情况。这时,需要根据跃点计数的值来进行判断。跃点计数越小说明该路由越近,因此应选择跃点计数较小的记录。
 
    如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过ICMP消息告知发送方这里的处理方式和交换机不同原因在于网络规模的大小。交换机连接的网络最多也就是几千台设备的规模这个规模并不大 如果只有几千台设备遇到不知道应该转发到哪里的包交换机可以将包发送到所有的端口上,虽然这个方法很简单粗暴但不会引发什么问题。然而路由器工作的网络环境就是互联网它的规模是远远大于以太网的,全世界所有的设备都连接在互联网上而且规模还在持续扩大, 未来的互联网里到底会有多少设备,我们谁都说不准在如此庞大的网络中,如果将不知道应该转发到哪里的包发送到整个网络上那就会产生大量的网络包,造成网络拥塞因此路由器遇到不知道该转发到哪里的包, 就会直接丢弃。
 
 

找不到匹配信息时选择默认路由

 
      既然如此那么是不是所有的转发目标都需要配置在路由表中才行呢?如果是公司或者家庭网络这样的做法也没什么问题但互联网中的转发目标可能超过 20 万个如果全部要配置在路由表中实在是不太现实。 其实,大家不必担心因为之前的图所示路由表中的最后一行的作用就相当于把所有目标都配置好了。这一行的子网掩码为 0.0.0.0关键就在这里,子网掩码 0.0.0.0 的意思是网络包接收方 IP 地址和路由表目标地址 的匹配中需要匹配的比特数为 0换句话说,就是根本不需要匹配。只要将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了
 
 
     只要在这一条记录的网关列中填写接入互联网的路由器地址当匹配不到其他路由时网络包就会被转发到互联网接入路由器因此这条记录被称为默认路由,这一行配置的网关地址被称为默认网关在计算机的TCP/IP 设置窗口中也有一个填写默认网关的框意思是一样的计算机上也有一张和路由器一样的路由表,其中默认网关的地址就是我们在设置窗口中填写的地址。
路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”。 这样一来,无论目标地址是表示一个子网还是表示某台设备都可以用相同的方法查找出转发目标,而且也避免了不知道转发到哪里的问题
 
 

包的有效期

 
     从路由表中查找到转发目标之后网络包就会被转交给输出端口并最终发送出去,但在此之前路由器还有一些工作要完成。 第一个工作是更新 IP 头部中的 TTLTime to Live生存时间字段TTL 字段表示包的有效期,包每经过一个路由器的转发,这个值就会减 1,当这个值变成 0 时,就表示超过了有效期,这个包就会被丢弃。 这个机制是为了防止包在一个地方陷入死循环。如果路由表中的转发目标都配置正确,应该不会出现这样的情况但如果其中的信息有问题, 或者由于设备故障等原因切换到备用路由时导致暂时性的路由混乱,就会出现这样的情况。 发送方在发送包时会将 TTL 设为 64 128也就是说包经过这么多路由器后就会“寿终正寝”。现在的互联网即便访问一台位于地球另一侧的服务器最多也只需要经过几十个路由器因此只要包被正确转发就可以在过期之前到达目的地。

 

 

拆分较大的网络包:分片

 
       路由器的端口并不只有以太网一种也可以支持其他局域网或专线通信技术。不同的线路和局域网类型各自能传输的最大包长度也不同,因此输出端口的最大包长度可能会小于输入端口 即便两个端口的最大包长度相同,也可能会因为添加了一些头部数据而导致包的实际长度发生变化, ADSL、FTTH 等宽带接入技术中使用的 PPPoEB 协议就属于这种情况无论哪种情况,一旦转发的包长度超过了输出端口能传输的最大长度就无法直接发送这个包了。
 
     遇到这种情况,可以使用 IP 协议中定义的分片功能对包进行拆分,缩短每个包的长度需要注意的是这里说的分片和 TCP 对数据进行拆分的机制是不同的。TCP 拆分数据的操作是在将数据装到包里之前进行的,换句话说拆分好的一个数据块正好装进一个包里IP 分片的角度来看,这样一个包其实是一个未拆分的整体也就是说,分片是对一个完整的包再进行拆分的过程
 
    分片操作的过程如图所示首先我们需要知道输出端口的MTUC看看这个包能不能不分片直接发送最大包长度是由端口类型决定的,用这个最大长度减掉头部的长度就是 MTUMTU 与要转发的包长度进行比较。如果输出端口的 MTU 足够大那么就可以不分片直接发送; 如果输出端口的 MTU 太小那么就需要将包按照这个 MTU 进行分片,但在此之前还需要看一下 IP 头部中的标志字段确认是否可以分片
 
 

网络知识入门,路由器工作原理(十)

 

 

      如果查询标志字段发现不能分片那么就只能丢弃这个包并通过ICMP 消息通知发送方否则就可以按照输出端口 MTU 对数据进行依次 拆分了。在分片中TCP 头部及其后面的部分都是可分片的数据尽管TCP 头部不属于用户数据但从 IP 来看也是 TCP 请求传输的数据的一部分。数据被拆分后,每一份数据前面会加上 IP 头部,其大部分内容都和原本的 IP 头部一模一样,但其中有部分字段需要更新,这些字段用于记录分片相关的信息。
 
 

 

路由器和交换机的关系

 
      要理解两者之间的关系关键点在于计算机在发送网络包时或者是路由器在转发网络包时,都需要在前面加上 MAC 头部之前的讲解都是说在开头加上 MAC 头部如果看图大家可以发现准确的说法应该 是将 IP 包装进以太网包的数据部分中也就是说给包加上 MAC 头部并发送,从本质上说是将 IP 包装进以太网包的数据部分中,委托以太网去传输这些数据
 
   IP 协议本身没有传输包的功能因此包的实际传输要委托以太网来进行。路由器是基于 IP 设计的,而交换机是基于以太网设计的,因此 IP 与以太网的关系也就是路由器与交换机的关系。换句话说路由器将包的传输工作委托给交换机来进行当然这里讲的内容只适用于原原本本实现 IP 和以太网机制的纯粹的路由器和交换机实际的路由器有内置交换机功能的,比如用于连接互联网的家用路由器就属于这一种对于这种路由器,上面内容可能就不适用了但是如果把这种不纯粹的路由器拆分成“纯粹的路由器和纯粹的交换机则它们各自都适用上面的内容。

 

网络知识入门,路由器工作原理(十)

 
      从包的转发目标也可以看出路由器和交换机之间的委托关系IP 并不是委托以太网将包传输到最终目的地,而是传输到下一个路由器在创建MAC 头部时也是从 IP 的路由表中查找出下一个路由器的 IP 地址并通ARP 查询出 MAC 地址然后将 MAC 地址写入 MAC 头部中的这表示 IP 对以太网的委托只是将包传输到下一个路由器就行了当包到达下一个路由器后,下一个路由器又会重新委托以太网将包传输到再下一个路由器。随着这一过程反复执行包就会最终到达 IP 的目的地也就是通信的对象。 到这里我们已经梳理了路由器与交换机之间的关系。简单来说,IP(路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。 当然,网络并非只有以太网一种还有无线局域网以及接入互联网的通信线路,它们和 IP 之间的关系又是什么样的呢其实只要将以太网替换成无线局域网、互联网线路等通信规格就可以了也就是说如果和下一个路由器之间是通过无线局域网连接的,那么就委托无线局域网将包传输过去;如果是通过互联网线路连接的那么就委托它将包传输过去除了这里列举的例子之外,世界上还有很多其他类型的通信技术它们之间的关系也是一样的,都是委托所使用的通信技术将包传输过去。 IP 本身不负责包的传输而是委托各种通信技术将包传输到下一个路由器,这样的设计是有重要意义的即可以根据需要灵活运用各种通信技术,这也是 IP 的最大特点正是有了这一特点我们才能够构建出互联网这一规模巨大的网络。