重拾IP路由选择:CCNA学习指南中的IP路由选择
IP路由选择技术 是网络技术的核心部分,也是目前研究的热点,其中的 动态路由选择协议 比如RIPv1,RIPv2,OSPF等,解决了数据在网络中转递的诸多问题。
在TCP/IP协议详解的学习过程中,我们了解到该协议簇的层型结构,其中的网络层(采用的协议一般为IP协议)与我们目前研究的路由选择内容密切相关。
层型结构,把 如何把数据报从一台主机发送到另外一台主机,从而进行信息交流 这个复杂且难以解决的问题,利用分块的思想,拆分成四层,每一层都有自己独立要解决的问题,层次之间又相互联系。
那么如何保证发送到网络中的数据报能够准确无误的到达目的地?以及它是如何实现的?
简单的来说,IP路由选择是使用 路由器 将数据报 从一个网络 转移到另外一个网络的过程。
路由选择协议 与 被路由的协议 之间的区别
路由选择协议,能够让路由器能够 动态地 发现互联网络中的所有网络,让路由器之间相互交流,保证了所有路由器的 路由选择表 都相同。也用于发现最优路径,让数据在网络中转递的效率最高。RIP,RIPv2,OSPF,EIGRP(Cisco采用)等是常见的路由选择协议。
被路由的协议,在路由器确定了所有网络之后,就可以使用它来沿确定的路径发送用户数据了。被路由的协议是在接口上指定的,它决定了分组传播方式。IP,IPv6就是属于被路由的协议。
章节前瞻
IP路由选择 是 Cisco路由器 固有的功能,处理的非常棒。因此你如果想在CCNA考试中拿到可观的分数,或者是想在网络管理的时候表现很棒,IP路由选择都是应该掌握的基本功。
也就是说,IP路由选择 非常重要。
本章节将介绍:
- 路由选择基础
- IP路由选择的过程
- 静态路由
- 动态路由
- 默认路由
路由选择基础
将 LAN 和 WAN 连接到路由器,从而打造出互联网络之后,需要给每一台连接到互联网络的主机 分配逻辑网络地址(IP地址),让它们能够通过互联网络进行通信。
路由选择(routing):将来自设备的数据报 通过网络 发送到另外的目的网络的设备。
路由器只关心它所知道的网络 以及 前往每个网络的最佳路径。
通过中间网络 路由选择的时候,逻辑网络地址(IP地址)至关重要,它是数据报能够准确无误到达目的网络的保证。
在到达目的网络之后,路由器再根据MAC地址将数据报发送到正确的主机。
为了高效的路由分组,路由器必须知道以下的内容:
- 目的IP地址。
- 邻接路由器,能够提供远程网络的信息。
- 前往各个远程网络的可能路由。
- 前往各个远程网络的最佳路由。
- 如何维护和验证路由信息。
路由表
问题:什么是路由表?
路由器从邻接路由器获取远程网络信息,之后创建一个路由选择表,它相当于一个网络的地图,根据数据报的目的IP地址,路由表告诉路由器要将数据报发送往哪一个端口,从哪一个端口发送出去。
路由表内存储的信息,有 1)路由器可以到达的网络地址 2)达到目的网络的下一跳路由器的信息(或者是直接相连的网络的信息).
问题:如何根据网络的变化 来更新路由表?
更新路由表的两种方式
(1)静态路由选择:管理员手动添加所有网络的位置,一般不采用该方法。
(2)动态路由选择:利用 动态选路协议 来更新路由表。
执行 动态路由选择 时,路由器运行的协议 将与 邻接的路由器运行的协议 进行通信,这样的话,路由器就得到了想要的路由及网络的信息,并利用这些信息来更新路由表。
当网络发送变化的时候,动态路由协议 自动的告知路由器 从而更新路由表。
也就是说,动态路由协议,是实现 路由器和相邻路由器进行沟通 的方法。
而 静态路由选择 则需要管理员 把所有与变化相关的信息 手动输入进去,无疑是一件非常麻烦的事情。
在管理大型网络的时候,一般采取 动态路由选择 + 静态路由选择 相结合的方法。
路由选择的原则:最长匹配原则
问题:当一个路由器接收到一个数据报的时候,根据什么来对该数据报进行路由选择呢?
1)在路由表中寻找 主机号+网络号 都与目的IP地址相匹配的路由表项,根据找到的表项,决定发送往哪个端口。
2)第一步没有找到,没关系,找 网络号 与目的IP地址相匹配的路由表项,根据找到的表项,决定发送往哪个端口。
3)第一第二步都没有找到?好吧,我还有默认的表项,根据默认表项,发送往特定的端口。
注:如果在路由器上没有启用RIPv2,OSPF等路由选择协议,也没有手动添加静态路由,那么路由选择将只包含直连网络:无法与其他路由器进行沟通,又没有添加表项。
IP路由选择过程
CCNA教材用了 P228 到 P232 一共32个步骤,详细地阐述了数据报是如何从发送方主机发送,经中间路由转递,再到目的主机的过程。
这里做一个简单的概况。以及列出比较重要的知识点。
例子:PC1发送一个数据报给 中间路由A,中间路由A 转发给目的主机 PC2.
------ ----- ------
| | | | | |
| PC1| -------> | A | ------->| PC2|
| | | | | |
------ ----- ------
来到中间网络之前,发送方PC1的处理:
客户应用进程写入了一个数据,打算发给远端网络的服务器。数据经过TCP层(这里不讨论TCP层的内容),来到了IP层。
-> IP根据数据 创建一个IP数据报,这个数据报包含:源IP地址,目的IP地址,协议字段(区分所使用的传输层协议),以及数据。
现在报文长这样:
《 IP首部(含各种信息,协议字段) || TCP首部 || 数据 》
-> IP 根据目的IP地址 判断是发送往 远程网络 还是本地网络。
-> 好,这是一个发送往远程网络的数据报,IP将这个数据报发送往它的默认网关:以便数据报能够被路由到远程网络。
注意,在发送往默认网关之前,我们必须知道 默认网关的 介质访问控制/MAC地址:因为只有在获取了硬件地址之后,才能将分组交给数据链路层,再封装成数据帧。
-> 检查主机的ARP高速缓存,查看默认网关的IP地址 是否有被解析成 MAC地址,有的话跳过下一步,没有的话进行下一步。
(->) 通过ARP协议,广播的ARP请求 以及 默认网关所属的路由器的 ARP答复,我们获知了默认网关的MAC地址,并添加到高速缓存中。
-> 数据报来到了最底层:数据链路层,数据链路层中的 LAN驱动程序 根据 LAN/局域网类型(这里是以太网)来提供介质访问,并将数据报封装成帧,这个帧包含目的硬件地址,和源硬件地址。以及一个以太类型字段:指出了网络层采用的协议(IP协议)。在末尾还有一个 FCS(CRC检验的结果),以及CRC(循环冗余校验),用于检验中途是否出现差错。
现在报文长这样:
《 帧头(含目的 & 源MAC地址,以太类型字段等) || IP首部(含目的 & 源IP地址,协议字段等) || TCP首部 || 数据 || CRC 》
-> 递送到默认网关,进行中间路由选择。
以上就是发送方主机封装数据的全过程,需要注意的一点是:MAC地址只能用于LAN内部通信,不能用于穿越路由器进行通信。
大意是:比如数据报从主机A发出,经过路由器B,来到了路由器C··· 那么我从A发送的数据帧中的 源MAC地址 -对应于主机A的MAC地址;目的MAC地址 -对应于路由器B的默认网关MAC地址,而不能是 路由器C的网关MAC地址。
来到中间网络,路由器A的处理(路由选路)
每台冲突域中接收到该数据帧(其实是将比特组装成帧)的设备,都执行CRC计算,并与FCS进行比较,不相同丢弃。
那么数据报来到了路由器A(假设整个过程 只经过一个路由器)
-> CRC计算相同,检查目的硬件MAC地址,发现这个数据帧属于自己,于是查看 以太类型字段,找到对应的网络层协议。
-> 交给IP,首先判断是不是路由器配置中的IP地址。
-> 不是,进行路由选择:
- 路由表项中有到达目的网络的表项,接入下一步。
- 路由表项中没有,丢弃数据报,返回ICMP网络不可达差错报文。
注:不过这个网络。。只有一个路由器,因此没有必要使用动态选路协议。
-> 根据选择的路由表项,找到对应的接口E1,进入E1的缓存区。
-> 看ARP高速缓存中有没有对应目的IP地址的转换,没有的话进行ARP请求和应答,得到目的MAC地址。
-> 进入数据链路层,同上封装成数据帧。发送到中间链路。
来到接收方PC2
-> PC2检查了CRC,检查了MAC地址,发现是属于自己的,于是根据 以太类型字段,找到了网络层使用的IP协议。
-> IP首先对 IP报头执行CRC检查,再查看IP地址。(注:IP只通过检查报头来查看是否有错误,没有像数据链路层那样讲究:计算FCS)
-> IP地址也匹配,于是查看协议字段,找到对应的使用的传输层协议。来到了TCP层
···
经过TCP层之后,根据端口号,找到了对应的应用进程。读取了相关的信息之后,整个过程就结束了。
其他
以上就是一个简单的概况,之后,服务器进程可能会返回一些数据给客户端主机,也是经历相同的过程。
需要注意的是,在返回的过程中,数据报也有可能再中间的路由丢失(因为网络拥塞,或者链路关闭等),如果在中间路由,没有前往目的网络的表项,会马上被丢弃。
因此,在ping失败的时候,比如···timeout···
数据报不是没有到达目的地,有可能在返回的过程中因为某些原因导致数据报丢失。
没有到达目的地,一般是不可达错误。
只要在返回的过程中,有一台远程路由器没有前往目的网络的路由,数据报就会在 返回途中被丢弃。
所有的MAC地址都属于本地LAN。
交换机不会被用作默认网关。
Cisco 内部处理过程
为了能够让IP在路由选择表中正确地查找目标地址,路由器必须采取正确的措施和处理。
在网络发展的如此迅猛的现在,如果路由表包含成千上万的选项,处理时间将耗费CPU大量时间,这种处理让路由器不堪重负。
Cisco采用三种分组转发技术 -通过缓存来减少路由器的工作量
- 进程交换,这实际上是许多人对路由器工作原理的看法,早在1990年Cisco推出它的第一代路由器的时候,就采用了这种机制,路由器就是以这种简单的方法进行数据报的转递的。但是时过境迁,如今网络流量需求极高,这种转发过程又十分困难,于是就需要推出一些其他的技术来解决这些过程中过于复杂的内容。
- 快速交换,这种方法旨在提高缓慢的进程交换的速度 以及 效率。快速交换通过 缓存 来存储最近使用过的目标网络,避免每次路由选择的时候都需要进行查找。
- CEF(Cisco Express Forwarding)思科特快转发,为了适应现在网络的速度,思科开发了这种最新的网络技术。CEF创建了大量缓存表,这种创建工作由 变化(而非分组) 触发,换句话说:缓存随着网络拓扑的变化而变化。
静态路由的选择
静态路由选择需要管理员手动添加路由,注意掌握它的优点和缺点。
优点:
- 不会增加路由器CPU的负担。
- 不会占用路由器的带宽,节省WAN链路方面的开支,最大限度的降低路由器的负担:因为没有使用动态路由选择协议。
- 更加安全,管理员有很强大的决定权,可以限制主机可访问的网络。
缺点:
- 管理员必须对网络了如指掌,知道各台路由器是如何连接在一起的,这样才能正确配置路由。
- 工作量太大了。。在互联网络添加网络之后,必须在每台路由器上添加前往该网络的路由,这很繁琐。
- 鉴于第二点,在大型网络中使用静态路由根本不可行。
默认路由选择
默认路由选择 指的是配置一条特殊的路由,以便在路由器在路由表中找不到目标网络的时候,选择该路由。
动态路由选择
动态路由选择指的是路由器使用路由选择协议来获悉网络并更新路由表。比起静态路由或者默认路由,这要简单的多。
但是比起静态路由和默认路由,它所占用的 路由器CPU处理时间 和 网络链路带宽 大的多。
路由选择协议 制定了一些和邻接路由器相关的一组规则,路由器根据这些规则与邻接路由器交换信息。
本章讨论的是 RIP 路由选择信息协议。RIPv1,RIPv2。
互联网络中使用的路由选择协议分两类:内部网关协议(IGP)和 外部网关协议(EGP).
IGP用于在 位于同一个自主系统(autonomous system,AS)的路由器之间 交换路由选择信息。AS是统一管理的单个网络或者一系列的网络,这意味着 路由选择表信息相同的所有路由器均属于同一个AS。
EGP用于 在AS之间 进行通信,边界网关协议(BGP)就是一种EGP。
路由选择协议 基础
管理距离(AD),用于判断从邻接路由接收到路由选择信息的 可靠程度。它是一个 0-255 的整数:0代表可信度最高,255代表不会有数据报选择该路由。
如果,路由器收到两条对同一个远程网络路由的更新,它将选择 AD小 的更新添加到路由表中。
如果AD相同,那么比较 度量metric(跳数或者带宽) 来确定最优路径:将度量值最小的路由加入路由选择表。
如果AD与metric都相同,那么采用均衡负载,也就是流量分配的方式。
常用的AD:直连接口(0),静态路由(1),OSPF(110),RIP(120),未知(255,一般不会被使用)。
如果你配置了静态路由,那么路由器将会认为该路由优于它获悉的其他路由。
路由选择协议,分为三类:
- 距离矢量型,它根据 距离(metric:跳数)来确定前往目的网络的最佳路径,在RIP中,跳数最少的路径视为最优路径,矢量表示前往该网络的方向。典型的例子就是RIP,它定期的将路由选择表发送给邻接路由器。
- 链路状态协议,又叫最短路径优先协议,每台路由器都创建三个表:用于记录直接相连的邻居,用于确定整个网络的拓扑结构,以及路由选择表。
链路状态协议 能够更好地了解网络拓扑结构。OSPF是彻头彻尾的链路状态 IP路由选择协议,链路状态协议将包含链路状态的更新发送给每一个直接相连的路由器,后者再传播给邻居。
- 混合型,Cisco采用的 高级距离矢量路由选择协议EIGRP。
RIP 路由信息选择协议
RIP是纯粹的距离矢量路由选择协议,它每隔30s就将整个路由表发送出去。RIP根据跳数来决定最短路径,默认的最大跳数为15,16意味着网络不可达。
在小型的网络中,RIP的作用发挥的很好,但是在包含 大量路由器 或 低速WAN链路 的大型网络中,效率 极 低;在链路状态不同的网络中,RIP根本不管用。
RIPv1只支持 分类路由选择:这意味着网络中所有的设备都需要使用相同的子网掩码。这是因为RIPv1发送的更新信息中,没有包含子网掩码信息。
RIPv2支持 前缀路由选择,并在 路由选择更新中添加子网掩码的信息,这称作无类路由选择。
相比RIP,OSPF重要的多,也复杂的多。
缺点:RIP更新过于频繁,很容易引起网络拥塞,增大网络的负担与压力。
2016/8/27