路由器

在之前关于路由器的介绍中,我们知道它是网络互联的核心设备,用于连接不同的网络,在网络之间转发 IP 数据报。对于路由器来说,路由表是其内部最为重要的构成组件。当路由器需要转发数据时,就会按照路由表和一定的匹配规则进行转发。对于路由表来说,一般有两种静态和动态这两种配置方式。下面将细化这一过程,分别讨论静态和动态路由使用场景,以及原理和配置。

回顾一下,对于一个路由器来说需要完成以下的工作:

  • 识别数据包的目的地:通过匹配子网掩码,确定出数据包应该发往的网段。
  • 确定路由信息的来源:当使用动态协议时,假如有多条路由可以到达某个网络,应该先评估将最优的那条添加到路由表中。
  • 匹配路由:根据路由表选择最合适的路由条目。
  • 维护和更新:拓扑的信息可能随时方法改变,需要自动的更新。

静态路由和动态路由的对比及应用场景

静态路由:

  • 是网络管理员在路由器上手动配置的路由条目
  • 当网络拓扑改变时,需要让管理员手动的更新路由条目
  • 路由过程必须根据管理员的配置转发

动态路由:

  • 当拓扑改变时,可以自动的更新路由条目。
  • 通过交换和路由更新来学习和维护远端的路由。就是动态路由器定期会同步哥各个路由器之间的路由信息,保持一致。
  • 路由器发现新的网络是通过共享路由表来实现的。

总结一下,静态路由将路由的转发完全交给管理员,在出现拓扑更新等情况,都是由管理员进行维护。而动态路由则相反,所有的转发,学习过程完全靠路由器自己。

静态路由-应用场景:

  • 小型的网络-比如只有几台路由器
  • 到达目的地只有单一路径时
  • 当测试,排错等情况想快速建立一条路由时
  • 作为默认路由使用:比如作为外网的输入

动态路由-应用场景:

  • 大型的网络

  • 当达到目的地有多条路径时

静态路由

在配置静态路由时,主要配置目的网段和下一跳地址,在配置前需要进行如下的分析:

静态路由的配置分析:

  1. 首先先统计网络个数

  2. 每个路由器需要配置的路由数目等于总网络数目减去本身连接的网络数目

  3. 目的网络位需要去的网络,也就是非直连的网络

  4. 下一跳为与自己直连路由器的接口地址

在为接口配置 IP 地址后,路由器就会生成两条默认路由-表示直连

Loopback 接口的作用主要是用于测试,当接收到数据时,会将数据自动返回来。

# 预配置命令
enable
configure terminal
line console 0
no exec-timeout
logging synchronous
no ip domain lookup # R3 Router
Router(config)#hostname R3
# Configure 1.1.1.1/24, 12.1.1.1/24 IP
Router(config)#int e 0/0
Router(config-if)# ip addr 12.1.1.1 255.255.255.0
Router(config-if)# no shutdown
Router(config)#int lo 0
Router(config-if)# ip addr 1.1.1.1 255.255.255.0
Router(config-if)# no shutdown # Configure Static Route
# Method1:
Router(config)#ip route 2.2.2.0 255.255.255.0 12.1.1.2
Router(config)#ip route 3.3.3.0 255.255.255.0 12.1.1.2
Router(config)#ip route 23.1.1.0 255.255.255.0 12.1.1.2 # Method2:边界配置默认路由比较省时间
Router(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2 // hostname R4
Router(config)#interface ethernet 0/0
Router(config-if)#ip address 12.1.1.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface loopback 0
Router(config-if)#ip address 2.2.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface ethernet 0/1
Router(config-if)#ip address 23.1.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit # Configure Static Route
Router(config)#ip route 1.1.1.0 255.255.255.0 12.1.1.1
Router(config)#ip route 3.3.3.0 255.255.255.0 23.1.1.2
# The configuration of R5 is same as the R3

想象这样一种情况,假设到达 5.5.5.5/24 的网络,在 R4 配置静态路由时,可以通过 R6 和 R7 两条路径。

这时数据包在到达该网络时,该如何选择呢?

采用的原则如下:

  • 首先通过 mask 匹配最长掩码
  • 如果最长掩码一样,比较 AD,可以手动配置
  • 当 AD 一样,可以比较 Metric
  • 最后还一样的话,通过负载均衡来实现

动态路由

路由器之间可以通过路由协议,自主学习来获得的路由信息,这样的路由称为动态路由。使用路由协议动态构建路由表不需要人工参与,并能自动的适应网络状态的变化更新路由表,大型网络或状态变化频繁的网络通常会采用动态路由协议。

自制系统和分层路由

因特网的网络数量巨大,几百万个路由器相互相互连接在一起。要让一个路由器记录每个网络的信息是不可能的,而且许多机构并不愿意自己的网络内部细节对外暴露。基于以上的原因,因特网划分了许多个自制系统(Autonomous System)。

自治系统内部的路由通过内部网关协议(IGP)交换路由信息,典型的内部网关协议有 RIP 和 OSPF。

自治系统之间也需要交换路由信息,自治系统之间使用外部网关协议(EGP)交换路由信息,每个自治系统都会有边界路由器来完成这个任务,目前因特网使用的外部网关协议是 BGP。

动态路由协议一般分为如上图中这几种:

距离矢量路由协议:根据跳数来,选择跳数最小的。如 RIP 协议。EIGRP 会把跳数作为参考。

链路状态路由协议:通过自己计算和筛选怎么走(邻居表,拓扑表,路由表),如 OSPF,IS-IS 等。

RIP (距离矢量)

应用层协议,使用 UDP 传输,端口为 520。RIP 和 IGRP 已经被淘汰,因为它们仅支持有类路由协议。(就是不能划分子网的协议)

路由信息协议(RIP)是路由器生产厂商之间使用的第一个开放标准,是连接不同厂商设备使用最为广泛的共有协议。RIP 协议有两个版本,V2 版本比 V1 版本的基础上增加了一些拓展特性,如更新认证、路由汇总、无类路由、VLSM, 将广播改为组播等。

RIP 协议是基于距离矢量的路由状态协议。RIP 协议中,如果路由器 A 和 网络 B 直接相连,那么路由器 A 到网络 B 的距离就是 N + 1。如果从路由器 A 出发 到达网络 B 需要经过 N 个路由器,则路由器 A 到网络 B 的距离就是 N + 1。

RIP 认为距离最小的路径就是最好的路径。RIP 中的距离也称为 “跳数”,每增加一个路由器,跳数就加 1。

RIP 工作原理

  1. 每个路由器每隔 30s 给自己所有的邻居路由器广播 RIP 报文,报文的内容是这个路由器当前的路由信息。
  2. 收到邻居路由器的路由表信息后,更新自己的路由表,下次将更新后的路由表告诉自己的邻居
  3. 180s 没有收到某个路由器的路由表信息,就认为这个路由器出现故障,路由表中将所有以这个路由器为下一站的表项的距离修改为 16,表示不可达。再过 60s 依然没有回复,从路由表删除

当两个路由器共享一条链路或者在同一个物理网络中,就称它们为邻居

配置:

#三台路由器正常配置端口

# R1
# r1(config)#router rip
# 关闭自动汇总,汇总成主类 A,B,C 类的网络。
r1(config-router)#no auto-summary
r1(config-router)#version 2
r1(config-router)#network 12.0.0.0
r1(config-router)#network 1.0.0.0
r1(config-router)#network 13..0.0
# R2,R3 同理 # 排错命令
show ip rip database
show ip protocols/inc second

由于在向外通告网络时,存在 30s (默认)的时间差,这就有可能出现环路的现象。

比如在图中 R3 宣告自己的网络后,恰巧 Lo 0 接口端口,此时 R3 会立即将直接在路由表中删除 3.3.3.0 的网络。

但此时 R2 是不知道的,假设过了 10 s 后,到了 R2 该通告本身路由的情况,此时会组播发给 R1 和 R3.

而此时 R3 发现,R2 能到达 3.3.3.0 的网络,会将该网络加入自己的路由表,并且距离加一。

此时如果有数据包发送 3.3.3.0 的网络,就会在 R2 和 R3 之间一直传递。而随着下一通告周期的来临,R2 和 R3

的举例会一直增加,直到 16 在双方的路由表消失。

如何解决成环的问题:

  1. 限制最大距离:RIP 协议允许一条路径上最多包含 15 个路由器,距离的最大值为 16(表示网络不可达)

  2. 水平分割:路由器从某个接口接收到的更新信息不允许再从这个接口发回去。

    1. 如 R2 收到了 R3 中到达 3.3.3.0 网络的路由信息,在自己宣告时不会将到 3.3.3.0 的消息再告诉 R3.

但水平分割依然无法解决像第一个图中,有多条路径可达的情况。

这里的解决方法就是毒性反转:

实际上是一种改进的水平分割,当路由器从某个接口上接收到某个网段的路由信息后,并不是不往回发送信息了,而是将这个网段的跳数(距离)设为无限大,再发送出去。收到此种的路由信息后,接收方路由会立即抛弃该路由,而不是等到其老化时间到。

简单来说,逆转指的是对水平分割而言,原来是不发送,现在是发送。但是发送的是距离为 16 的信息,这样就表明该网络不可达,所以叫毒。

这里可以做一个实验,利用关闭水平分割,手动造成成环现象。

# 关闭 R1 e 0/0 接口的水平分割
R1(config-if)#no ip split-horizon # 关闭 R2 e 0/0 接口的水平分割
R2(config-if)#no ip split-horizon # 设置 R2 的 e0/0 为被动,禁止发送协议报文
R2(config-router)# passive-interface e 0/0 # 关闭 R2 的 loopback 0 口 # 设置 R2 的 e0/0 为主动
R2(config-router)#no passive-interface e 0/0

这时我们可以利用 show ip route 来观察,会发现 R1 和 R2 的跳数一直都会增加,增加到 16,全都消失

原因:

由于把 R2 的端口设置成被动,R1 收不到 R2 关闭了 lo 0 的消息。而且 R1,R2 的水平分割都已经被关闭。

这时 R2 会收到来自 R1 的它到 2.2.2.0 网络的跳数是 1,所以到 2.2.2.0 网络的跳数是 2。

由于 R2 已经无法通过直连到达 2.2.2.2。所以会更新自己的跳数。之后 R2 又会给 R1 发送到 2.2.2.2 的跳数是 2。

由于 R1 本身到 2.2.2.2 网络就是通过 R2,所以会更新自己的路由表跳数为 3。就这样以此类推直到到 16 结束。

CCNA - Part12 - 路由协议 (1) - 静态路由,动态路由 RIP的更多相关文章

  1. vue路由--动态路由

    前面介绍的路由都是路径和组件一对一映射的 有时候需要多个路径映射到一个组件,这个组件根据参数的不同动态改变,这时候需要用到动态路由 动态路由这样定义路由路径: path: '/foo/:id'--可以 ...

  2. 06 Vue路由简介,原理,实现及嵌套路由,动态路由

    路由概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源. 那么url地址和真实的资源之间就有一种对应的关系,就是路由. 路 ...

  3. vue路由-动态路由和嵌套路由

    一.动态路由 我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.那么,我们可以在 vue-route ...

  4. CCNA 之 五 路由协议 一 静态路由

    静态路由 路由选择原理 什么是路由? 就如同去某一个地方,会有很多种路线,每一条路线经都可以称之为路由: 路由器中会维护一张路由表,每一个表项都是一条路由,也就是去往某个网络的路径,然后将对应的数据包 ...

  5. IT菜鸟之路由器基础配置(静态、动态、默认路由)

    路由器:连接不同网段的设备 企业级路由和家用级路由的区别: 待机数量不同(待机量) 待机量:同时接通的终端设备的数量 待机量的值越高,路由的性能越好 别墅级路由,表示信号好,和性能无关 交换机:背板带 ...

  6. Vlan间通讯,动态路由

    Vlan间通讯,动态路由 案例1:三层交换vlan间通信 案例2:多交换机vlan间通信 案例3:三层交换配置路由 案例4:RIP动态路由配置 案例5:三层交换配置RIP动态路由 1 案例1:三层交换 ...

  7. Cisco基础(二):三层交换vlan间通信、多交换机vlan间通信、三层交换配置路由、RIP动态路由配置、三层交换配置RIP动态路由

    一.三层交换vlan间通信 目标: VLAN实现了广播域的隔离,同时也将VLAN间的通信隔离了.三层交换技术使得VLAN间可以通信. 通过三层交换实现VLAN间通信 方案: 为了解决了传统路由器低速. ...

  8. Vue | 自定义指令和动态路由实现权限控制

    功能概述: 根据后端返回接口,实现路由动态显示 实现按钮(HTML元素)级别权限控制 涉及知识点: 路由守卫 Vuex使用 Vue自定义指令 导航守卫 前端工程采用Github开源项目Vue-elem ...

  9. Flask(5)- 动态路由

    前言 前面几篇文章讲的路由路径(rule)都是固定的,就是一个路径和一个视图函数绑定,当访问这条路径时会触发相应的处理函数 这样无法处理复杂的情况,比如常见的一个课程分类下有很多个课程,那么他们的 p ...

随机推荐

  1. PHP输入流

    PHP输入流php://input,对于这个的官方解释是: php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要 ...

  2. nova api报错network问题

    安装openstack Rocky版本的时候,在未安装网络服务前,创建虚拟机,报以下错误 [root@controller2 nova]# openstack server create --flav ...

  3. dart快速入门教程 (7.4)

    7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ...

  4. 【Flutter实战】自定义滚动条

    老孟导读:[Flutter实战]系列文章地址:http://laomengit.com/guide/introduction/mobile_system.html 默认情况下,Flutter 的滚动组 ...

  5. 《Java核心技术(卷1)》笔记:第8章 泛型程序设计

    (P 327)"菱形"语法: ArrayList<String> files = new ArrayList<>(); // Java 9 扩展了菱形语法的 ...

  6. 【Spring注解驱动开发】如何使用@Value注解为bean的属性赋值,我们一起吊打面试官!

    写在前面 在之前的文章中,我们探讨了如何向Spring的IOC容器中注册bean组件,讲解了有关bean组件的生命周期的知识.今天,我们就来一起聊聊@Value注解的用法. 项目工程源码已经提交到Gi ...

  7. 《算法笔记》6.6小节 问题 A: 任务调度

    这道题我一开始看到的时候,想到的是拓补排序,可是这么菜又这么懒的我怎么可能用呢,既然出现在优先队列里面,那么久一定和他有关了 可是并没有使用优先队列 思路: 对于这道题,我们肯定是对他们定义优先级,然 ...

  8. Docker(六)容器数据卷

    容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...

  9. 关于位图数据和标记位-P3

    文章目录 1 背景 1.1 问题 2 问题1探究 2.1 没有区的情况 2.2 一个区的情况 2.3 两个区的情况 2.4 三个区的情况 2.5 四个区的情况 2.6 五个区的情况 3 问题2探究 3 ...

  10. [PA2015]Siano 单调栈

    由于某人找了个单调栈的题解但是没研究透所以让我们来研究............ 首先先来考虑下面一种情况,假设第\(k\)次切割时,天数为\(d_k\),高度为\(b_k\),第\(k+1\)次切割时 ...