路由器

概述

路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组
有两个功能:
image

  1. 路由选择
    根据所选定的路由选择协议 构造出路由表,同时经常或 定期地和相邻路由器交换路 由信息而不断地更新和维护 路由表
  2. 分组转发
    交换结构:根据转发表(路由表得来)对分组进行转发。

转发VS路由选择
分组若收到RIP/OSPF分组等,则转发把分组送往路由选择处理机: 若收到数据分组,则查找转 发表并输出。

image
输入端口中的查找和转发功能在路由器的交换功能中是最重要的。

image
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入 队列的分组由于没有存储空间而只能被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因

集线器,网桥,路由表几层设备比较

  • 路由器 :可以互联两个不同网络层协议的网段。
  • 网桥 :可以互联两个物理层和链路层不同的网段。
  • 集线器不能互联两个物理层不同的网段。

image

IP层转发分组的过程

需要掌握的知识:

  1. 计算 查表
  2. 会描述转发算法
  3. 几种路由的特点,用途。

匹配算法

逐跳转发
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)

每个路由器只知道下一跳。

根据目的网络地址就能确定下一跳路由器,这样做的结果是:
IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
只有到达最后一个路由器时,才试图向目的主机进行直接交付。

匹配算法

  1. 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
  2. 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行 (3)。

如何判断是不是在一个子网
计算网络地址,核算网络地址
\(网络地址= 目的主机 IP 地址 \and 子网掩码\)(二进制运算AND)
如果网络地址=本网络的网络前缀,则在本网络,否则不在

  1. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 (4)。
  2. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行 (5)。
  3. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 (6)。
  4. 报告转发分组出错。

路由表

路由表根据路由选择算法得出的,主要用途是路由选择,总用软件来实现。
image

转发表由路由表得来,可以用软件实现,也可以用特殊的硬件来实现。转发表必须包含完成转发 功能所必需的信息,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些MAC地址 信息的映射。

一般路由

直连路由

自动生成

非直连路由

主要是路由协议动态生成(动态)。
可以管理员手动配置(静态)。

按主机所在的网络地址来制作路由表
image

特定主机路由(路由表的最前面)**

前缀匹配是32位IP地址,管理员手动配置

虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
适用场景
采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。

默认路由(路由表的最后面)

管理员手动配置
只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器。
image

表示:
特殊前缀:0.0.0.0/0
也就是:默认路由的网络地址是*0.0.0.0,子网掩码也是0.0.0.0
也可以用*表示。

目的以减少路由表所占用的空间和搜索路由表所用的时间。
这种转发方式在一个网络只有很少的对外连接时是很有用的。
默认路由在主机发送 IP 数据报时往往更能显示出它的好处。

适用场景
如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。

最长前缀匹配

使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。
网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。
最长前缀匹配又称为最长匹配或最佳匹配。

最长前缀匹配举例
image

image

选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。
image

使用二叉线索查找路由表(不要求)

当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。

为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。

这里最常用的就是二叉线索 (binary trie)

IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。

例子:用 5 个前缀构成的二叉线索

从二叉线索的根节点自顶向下的深度最多有 32 层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。

         32 位的 IP 地址               唯一前缀
  01000110 00000000 00000000 00000000	0100
  01010110 00000000 00000000 00000000	0101
  01100001 00000000 00000000 00000000	011
  10110000 00000010 00000000 00000000	10110
  10111011 00001010 00000000 00000000	10111

trie
image

posted @ 2022-10-17 11:45  kingwzun  阅读(208)  评论(0编辑  收藏  举报