本文主要内容来自 SpriCoder的博客,更换了更清晰的图片并对原文的疏漏做了补充和修正。
路由器基础
路由器的内部组件
- 特殊组件的计算机
- console 口进行具体的调试
- 辅助口(Auxiliary):一般不用,但是可能会用到
随机存取存储器
- 路由器配置文件的临时存储,一般做为内存使用
- 断电或重新启动时 RAM 内容丢失
- 存储:
- 路由表
- ARP 缓存
- 快速切换缓存
- 报文缓存:可能前面有正在处理的,需要等待
- 数据包保留队列
- 根据地址位就可以读到地址内容(访问比较快)
非易失随机存取存储器
NVRAM,Non-volatile RAM
- 存储备份(backup)/启动(startup)配置文件
- 路由器掉电或重启时内容不会丢失。
- 内置电池的方式来保证不断电,这一部分可以整体单独拿出来
- 保证快速访问,但是存储空间有限。
Flash
相当于台式机硬盘
- 电子可擦可编程只读存储器(EEPROM, Electronically Erasable Programmable Read-Only Memory)
- 存储了 Cisco IOS(互联网操作系统)
- 允许更新软件而无需更换闪存芯片
- 可以存储多个版本的 IOS
- 断电保持
只读存储器
ROM,Read-Only Memory
- 包含 POST(开机自检):PC 也有,开机的时候,读取一些参数进行对比,如果一样则保证硬件是正常的。
- 引导程序(加载 Cisco IOS)
- 作系统软件
- IOS 的备份,精简(trimmed down)版本
- 升级需要安装新的芯片组
接口
- 数据包通过其进入和离开路由器的网络连接口
- 附在主板(motherboard)上或作为单独的模块。
- 大部分是网口,主要是用来支持网络的
- 0/0 第一个,串口接口可能还分多个
路由器启动步骤
系统启动程序
- 执行开机自检(POST):在此自检期间,路由器从所有硬件模块上的 ROM 执行诊断:如果有问题导致操作系统无法重启,那么我们就需要对硬件进行检查
- 验证 CPU,内存和网络接口端口的基本操作。
- 软件初始化。
软件启动程序
- ROM 中的通用引导加载程序(bootstrap)在 CPU 卡上执行。
- 可以在以下几个位置之一找到操作系统(Cisco IOS)。该位置在配置寄存器的引导字段中公开。
- 加载操作系统映像。
- 先从 Flash 找,也就只有一个 image 文件,将 image 导入内存
- 如果 image 找不到,则到 TFTP Server,如果能找到则下载下拉一个 image
- 如果 TFTP 也没有配置,则去 ROM 中导出 IOS
- 将保存在 NVRAM 中的配置文件加载到主存储器中,并一次执行一行。
- 先看 NVRAM 中有没有配置(start.config)
- 然后看 TFTP Server 有没有配置,如果有则下载一个
- 如果都没有,用 console 进行配置
- 如果 NVRAM 中没有有效的配置文件,则执行问题驱动(question-driven)的初始配置例程,该例程称为系统配置对话框,也称为设置模式。
路由器初始化过程
- 设置不用作在路由器中输入复杂协议功能的模式。
- 对于大多数路由器配置任务,应使用安装程序提出最少的配置,然后使用各种 configuration mode 命令而非安装程序
查看和修改基本的路由器配置
- 其他更加具体命令内容,可以在命令行下使用
?
来看 config
模式是全局配置。- banner:配置登录提示文字:一般会写路由器是谁用的,干什么用的,谁登录是非法的。
show version
命令可以查看到路由器的配置信息。
执行基本的编址方案
- 配置接口,每一个接口可以配置一个描述
- no shutdown:启动端口
- 可以拷贝配置情况进入 startup 中
路由和配置
使用网络寻址进行路由
- 路由器通常使用两个基本功能(路径确定功能和交换功能)将数据包从一条数据链路中继(relay)到另一条数据链路。
- 交换功能允许路由器在一个接口上接受数据包并通过第二个接口转发。
- 路径确定功能使路由器能够选择最合适的接口来转发数据包。
- 路由器使用地址的网络部分进行路径选择,以将数据包传递到下一个路由器
- 地址的节点部分由直接连接到目标网络的路由器使用,以将数据包传递到正确的主机。
静态和动态路由
静态路由
- 尽管(whereas)动态路由倾向于显示(reveal)有关互联网络的所有已知信息,但是出于安全原因,您可能希望隐藏互联网络的某些部分。
- 当只有一条路径可访问网络时,到网络的静态路由就足够了。(默认路由,将 B 所有不知道位置的全部交给 A,由 A 去进行访问)
- 这种分区称为末节网络(Stub Network)
静态路由配置
A static route allows manual configuration of the routing table.
- network:包含掩码
- adress:要确定下一跳地址
- Distance:管理距离
管理距离
- 管理距离(administrative distance)是路由信息源的可信赖性的等级,表示为从 0 到 255 的数值。(管理距离)
- 数字越大,可信度(trustworthiness)越低。
- 因此静态路由的管理距离通常很短(默认值为 1)
- 管理距离是 0 的路由是什么情况?直连网段是最可信的,比静态路由还高
动态路由
- 动态路由协议还可以重定向网络中不同路径之间的流量(或负载分担(loadshare))
- 往往网络是冗余的,保证连通性
- 静态路由的问题:如果指定的路径中出现故障就会出问题,而静态路由就避免了这个问题。
- 动态路由依赖于路由协议在路由器之间共享知识。
- 动态路由取决于两个基本路由器功能:
- 维护(maintance)路由表(动态维持的)
- 向其他路由器分发(distribution)路由信息
- 彼此基于协议交换信息
收敛(Convergence)时间
- 收敛时间:
- 从刚启动到网络达到稳定的时间
- 从发生变化到再次稳定的时间
- 收敛时间越短,路由协议越强,需要路由器的基本硬件支持。
动态路由协议分类
- 大致分为以下三类:
- 距离矢量(DV,Distance Vector)
- 链路状态(LS,Link State)
- 混合路由(HR,Hybird Routing)
- 其中 Hybrid Routing 是在两种之间
距离矢量协议
- 距离矢量算法不允许路由器知道互联网络的确切拓扑
- 基于距离矢量的路由算法(也称为 Bellman-Ford 算法)在路由器之间传递路由表的周期性副本。
- 大家交换 Routing Table
- 只知道可达,但是不知道怎么可达(知道 where,但是不知道 how),不知道整个网路的具体拓扑
路由环路问题
- 稳定之后,如果 NetWork1 不可到达
- B 发现不可达,但是告知 C 的时候比较晚,C 已经将信息告诉了 D,这样子就可能循环下去,然后不收敛。
- 网络 1 的无效更新将继续循环,直到其他进程停止循环为止。
- 尽管有一个基本事实,即目标网络(网络 1)已关闭,但这种称为计数到无穷大的条件却使数据包在网络中连续循环。
- 当路由器计数到无穷远时,无效信息将允许存在路由环路。
路由环路解决方案一:定义最大值(Maximum)
- 设置最大跳数,比如最多转发 15 跳,16 跳以上为不可达
路由环路解决方案二:路由中毒(Route Poisoning)
- 当网络 5 发生故障时,路由器 E 通过将网络 5 的表条目设置为16 或不可访问来启动路由中毒。(而不是删除条目)
- 、当路由器 C 从路由器 E 接收到路由中毒时,它会将更新(称为毒性逆转,poison reverse)发送回路由器 E。这确保网段上的所有路由器都已接收到中毒的路由信息。
- 最终所有的路由器都知道不可达
- 路由毒害,由信息在路由表中失效的时候,把该表项的的度量值(metric)设为无穷大 16,而不是马上从路由表中删掉这条路由信息,再将其信息发布出去,这样相邻的路由器就得知这条路由已无效了
路由环路解决方案三:水平分隔(Split Horizon)
- 从某个端口收到的报文信息,不能再从端口发送回去
- 比如 A 发送给 B 和 D,之后 B 和 D 又把之后的报文还给 A,这时候就不接受 B 和 D 的。也即使 A 只接受 B 的
- 如果 B 和 D 接收到一个到达目的网段 1 的更好的路径,A 是会接收的
- 有名词解释题目
路由环路解决方案四:计时器(Hold-Down Timers)
- 我收到网络信息不可以到达的信息的时候,启动计时器,开始计时(这个信息包含请计时信息)
- 如果有任何一个计时的设备收到了一个比原来更好的达到路径,则会修改对应记录,但是如果更差不会记录。
- 计时器结束后,删除掉对应的条目,避免出现问题
- 每一条路由表的记录都有有效时间
阻止发送路由更新
- 为了防止接口发出任何路由更新信息,请使用以下命令:
Router(config-router)#Passive-interface f0/0
- 它仅在使用距离矢量路由协议时才有效,因为链接状态路由协议不会直接从其邻居的路由表中获取拓扑信息
- 接受路由表的更新,但是不发送报文出去
链接状态协议
LSP,Link-state Protocol
- 基于链接状态的路由算法也称为 SPF(最短路径优先)算法,维护复杂的拓扑信息数据库:对树处理路由表,没有环路问题
- 链接状态路由使用:
- 链接状态广告(link-state advertisements,LSAs):告诉你我有这个链路(每一个网段都是相同性质链路,链路上有唯一的 NetID、带宽、连接拓扑关系、网段、链路类型等属性,我们优化属性后,进行 LSA,告知对方主 Key,如果再需要的话,再给具体信息)
- 拓扑数据库(有 LSA 组成,每个节点都持有)
- 根据 SPF(shortest path first)算法生成的 SPF 树(Tree 会不一样,因为每一个路由都是以自己为根的)
- 每个网络的路径和端口的路由表
- RFC 1583 包含对 OSPF 链路状态概念和操作的描述。
链接状态网络发现
- 路由器之间交换 LSA,每个路由器都以直接连接的网络开头
- 每个路由器与其他路由器并行构建一个拓扑数据库,该拓扑数据库包含来自网络的所有 LSA。
- SPF 算法计算网络可达性:路由器将此逻辑拓扑构建为一棵树,以其自身为根,由链路状态协议互联网络中每个网络的所有可能路径组成。然后,对这些路径进行最短路径优先(SPF)排序。
- 路由器在路由表中列出其最佳路径以及这些目标网络的端口。它还维护拓扑元素和状态详细信息的其他数据库。
链接状态的问题
- 处理和存储要求
- 在大多数情况下,运行链路状态路由协议要求路由器比距离矢量路由协议使用更多的内存并执行更多的处理:需要 CPU 进行计算
- 带宽要求
- 在初始链路状态数据包泛洪(flooding)期间,所有使用链路状态路由协议的路由器会将 LSA 数据包发送到所有其他路由器。 随着路由器对带宽的需求增加,此操作将淹没互联网,并暂时减少可用于承载用户数据的路由流量的带宽。
- 一开始的时候报文会比较频繁多(所以告知 LSA 而不是 LS,减小压力)
- 注:初期消耗大,之后消耗小,稳定之后是根据事务触发更新
问题:链接状态更新
- 链路状态路由必须确保所有路由器都获得所有必要的 LSA 数据包。
- 具有不同 LSA 集的路由器根据不同的拓扑数据计算路由。
- 如果有一个链路的状态发生变化(恢复或者被破坏),必须将修改通知给全部路由器消耗代价比较大(SPF 算法)。
比较:链接状态和距离矢量
- DV:距离矢量
- 视野窄,代价小
- 基于跳数
- 定期交换路由表,收敛慢
- 交换路由表
- LS:链路状态
- 视野宽,有一定代价
- 基于带宽
- 初期充分交换,收敛快
- 交换 Linked State 的数据库
混合协议
混合协议,Hybrid Protocols
- 混合协议的示例:
- OSI’s IS-IS(Intermediate System-to-Intermediate System)
- Cisco’s EIGRP(Enhanced Interior Gateway Routing Protocol). 基于负载和带宽评判,定时交换路由表
- 上面是思科的一个视角
主动路由协议
Routing Protocol
- IP 主动路由协议的示例包括:
英文缩写 | 英文解释 | 中文解释 | 备注 |
---|---|---|---|
RIP | a distance-vector routing protocol | 距离矢量协议 | DV |
IGRP | Cisco’s distance-vector routing protocol IGRP | 思科的距离矢量路由协议 | DV,基本启用 |
OSPF | Open Shortest Path First | 开放式最短路径优先 | LSP |
EIGRP | - | 平衡的混合路由协议 | 杂合 |
- 工作在第三层
路由协议的主要目标
- 最佳(Optimal)路线:选择最佳路线
- 效率(Efficiency):最少使用带宽和路由器处理器资源
- 快速收敛(Rapid Convergence):越快越好。有些比其他人收敛更快。
- 灵活性(Flexibility):可以处理各种情况,例如高使用率和失败的路由
评价协议的标准
- 四个方面都好的协议更好一些
- 可以同时运行多个进程,之后基于 AD 度量,AD 的值低的被采用
如何启用动态路由协议
- 如何启动 protocol:
router protocol [RIP...]
- 公告端口
network network-number
:要求是直连的网口
定义默认路由
- 默认路由使路由表更短。(很多路由被省略)
- 如果路由表中没有目标网络的条目,则将数据包发送到默认网络。
- 在 B 上设置,除了左侧五个网段的信息,都默认从 192.34.56.0 转发
- 对于左边的网络可以被认为是一个末节网络(Stub NetWork)
- 使用动态路由协议定义默认路由:
Router(config)## ip default-network [network-number]
- 将默认路由定义为静态路由:
Router(config)## ip route 0.0.0.0 0.0.0.0 [next-hop-ipaddress| exit-interface]
- 配置默认路由后,使用 show ip route 将显示:(172.16.1.2 是默认的下一跳地址)
- 不得已的网关是到网络 0.0.0.0 的 172.16.1.2
- 所有不知道转发给谁的都给 172.16.1.2