路由表字段

路由表简介

路由表其实是一个小型的数据库,其中的每一笔路由记录,记载了通往每个节点或网络的路径,当路由器收到IP封包时,必须根据IP封包的目的地址,选择一笔合适的路由记录,亦即转送此一IP封包的最佳路径。然后依路径所指定的网络接口,将IP封包转送出去。

8-2-1 路由表的字段

 路由表的字段会因制造厂商及规格而有差异,不过基本上会有以下字段:

1、Network Destination(目的IP地址)  2、Netmask(网络掩码)

3、Interface(接口)           4、Gateway(网关)

5、Metric(成本)

为了方便说明,首先我们仿真一个简化的网络环境:

在上图的环境中,总共有A、B、C、D4个网络,以及R1、R2两部路由器,以下说明将以R1路由器为主轴。由于总共有4个网络,因此我们假设R1路由器中有4笔路由记录,分别记载通往这4个网络的路径以。

接下来便以这4笔记录为例,说明路由表各字段的功能。

Network Destination(目的IP地址)与Netmask(网络掩码)

由于这两个字段的信息必须合起来解读才有意义,因此将之合并说明。

路由记录利用Network Destination(目的IP地址)与Netmask(网络掩码)两个字段来代表的目的IP地址的范围,也就是用来定义目的网络。Network Destination(目的IP地址)为目的网络的Network ID,Netmask则是对应的子网掩码。

以R1路由器则言,通往A、B、C、D等网络的路由记录,其Network Destination(目的IP地址)与Netmask(网络掩码)两个字段值如下(其他字段暂省略);

Network Destination  Netmask    Interface    Gateway    Metric

203.74.205.0     255.255.255.0

203.74.206.0     255.255.255.0

203.74.207.0     255.255.255.0

203.74.208.0     255.255.255.0

请读者注意,路由记录也可用来代表通往某个主机的路径。当路由记录代表单一主机时,Network Destination字段必须填入主机的IP地址,Netmask字段则是255.255.255.255。

假设R1路由器中有一笔A1主机的路由记录,则Network Destination与Netmask,两个字段值如下:

Network Destination  Netmask    Interface    Gateway    Metric

203. 74.205.250   255.255.255.255

A1主机的IP地址

为了节省空间,路由表中的记录,一般都是代表一个网络,代表单一主机的记录则较为罕见。

Interface(接口)

记录路由器本身的网络接口。由于路由器具有多个网络接口中,当路由器决定以某笔路由记录来转送IP封包时,必须将IP封包从该记录指定的接口转送出去。

Network Destination  Netmask    Gateway  Interface    Metric

203.74.205.0     255.255.255.0       203.74.205.1

203.74.206.0     255.255.255.0       203.74.206.1

203.74.207.0     255.255.255.0       203.74.207.1

203.74.208.0     255.255.255.0       203.74.206.1

                    B、D网络是从同一个接口转送出去

Gateway(网关)

 记录要将IP封包转送至哪一部路由器。若目的网络已直接连接在此一路由器,代表毋须再将IP封包转送给其他路由器,因此Gateway(网关)字段填入Interface的IP地址即可。以R1路由器为例,通往A、B、C网络的路由记录,由于这3个网络直接与R1连接,不必再转送给其他路由器,因此Gateway(网关)字段入与Interface相同的IP地址。至于D网络,必须将封包转送给R2路由器,因此Gateway(网关)字段填入R2路由器在B网络的网络接口地址。

Network Destination  Netmask    Gateway    Interface   Metric

203.74.205.0     255.255.255.0  203.74.205.1      203.74.205.1

203.74.206.0     255.255.255.0  203.74.206.1     203.74.206.1

203.74.207.0     255.255.255.0  203.74.207.1     203.74.207.1

203.74.208.0     255.255.255.0  203.74.206.2     203.74.206.1

 


这是R2路由器连接B网络的网络接口地址

 

Metric(度量)

用来度量路径的成本。如果有两笔路由记录的Network Destination(目的IP地址)与Netmask(网络掩码)相同,则路由器会挑选Metric值最小的路径来使用。Metric值通常设为到达目的网络所须经过的HOP(路程段)数目上。

什么是HOP数目呢?IP封包从来源端传送到目的端,途中所经过的路由器数目即是HOP数目上。

IP封包从X传到Y,要经过2个HOP

以R1路由器为例,到A、B、C网络的路径为1个HOP,到D网络则为2个HOP。Network Destination  Netmask    Gateway    Interface    Metric

203.74.205.0     255.255.255.0  203.74.205.1     203.74.205.1    1

203.74.206.0     255.255.255.0  203.74.206.1     203.74.206.1    1

203.74.207.0     255.255.255.0  203.74.207.1     203.74.207.1    1

203.74.208.0     255.255.255.0  203.74.206.2     203.74.206.1    2

经过2部路由器,所以值为2

           

但是,Metric字段并不必然就是代表HOP数目,在不同的路由协议,可能会有不同的意义。例如OSPF协议会根据带宽、延时等因素来计算Metric字段值。因此,Metric字段可说是对于每条路径的加权值,而路由器会优先选择Metric值最小的路径

8-2-2决定路径的步骤

当路由器收到IP封包时,必须为它选择一条最佳路径,其实就是选择一笔最合适的路由记录。以下为路由器选择路径的步骤:

1、  将IP封包的目的IP地址与路由记录的Netmask(网络掩码)做位AND运算。例如:目的IP地址若为203.74.205.33,Netmask(网络掩码)为255.255.255.224,则运算结果为203.74.205.32。

来源地址(十进制) 203      74     205     33

    (二进制)11001011   01001010   11001101  00100001

子网掩码(十进制) 255      255     255     224

    (二进制)11111111   11111111   11111111   11100000

 

运算结果(二进制)11001011   01001010   11001101   00100000

 

 

 

 

 

 


2、  将上述结果与路由记录的Network Destination(目的IP地址)比较,若两者相同,才代表IP封包适用该路由记录。若找不到任何适用的记录,则使用默认路由,亦即将封包转送给默认的路由器来处理。

3、  若有多笔符合的记录,则从中找出Netmask字段中最多1的记录。这是因为Netmask字段的1愈多,代表目的网络的规模愈小,因此路径较为精确。假设符合步骤1、2有以下两笔记录:

203.74.205.0/24           Netmaske 24 Bits为1

203.74.0.0/16      Netmaske 16 Bits为1

则路由器会优先使用第1笔记录。

4、  找出Metric值最小的记录。Metric值代表路径的成本,因此路由器会优先使用成本较低的路径。

作业:1、写出路由表各字段的功能是什么

   2、路由器选择路径的步骤有哪些?




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过表名查询 MongoDB 的所有字段,你可以使用 `db.collection` 的 `find()` 方法来获取集合中的文档,并使用 `Object.keys()` 来提取文档的键(字段名)。以下是一个使用 Koa 框架的例子: ```javascript const Koa = require('koa'); const Router = require('koa-router'); const MongoClient = require('mongodb').MongoClient; const app = new Koa(); const router = new Router(); // MongoDB连接URL const url = 'mongodb://localhost:27017'; // 数据库名称 const dbName = 'your_database_name'; router.get('/collection/:collectionName/fields', async (ctx) => { const collectionName = ctx.params.collectionName; try { // 连接MongoDB const client = await MongoClient.connect(url); const db = client.db(dbName); // 获取集合中的第一个文档 const document = await db.collection(collectionName).findOne(); // 提取文档的键(字段名) const fields = Object.keys(document); // 关闭连接 client.close(); // 返回结果 ctx.body = { fields }; } catch (error) { ctx.status = 500; ctx.body = { error: 'Error retrieving fields' }; } }); app.use(router.routes()).use(router.allowedMethods()); app.listen(3000, () => { console.log('Server listening on port 3000'); }); ``` 在上面的示例中,我们通过路由参数 `:collectionName` 获取要查询的表名。然后,我们使用 `findOne()` 方法从集合中获取第一个文档,并使用 `Object.keys()` 提取文档的键(字段名)。最后,我们将字段名作为响应体返回给客户端。 请确保将 `your_database_name` 替换为实际的数据库名称,并确保 MongoDB 服务器正在运行并监听在默认端口 `27017` 上。同样,你可能需要根据自己的需求进行适当的错误处理和路由设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值