精华内容
下载资源
问答
  • 对路由理解正确的是
    千次阅读
    2018-07-30 20:58:49

    微服务专栏地址

      专栏:微服务
      微服务系列总目录

    目录

    简介

    路由发现是微服务体系中一块重要组成,从以下几个方面理解微服务路由:

    1.什么是路由
    2. 为什么需要路由
    3. 从路由的角度看微服务的体系架构是什么样的
    4. 路由、服务发现、负载均衡有什么关系
    5. 补充:负载均衡算法有哪些

    1. 什么是微服务路由

    直白理解:“路由”是指根据请求URL,将请求分配到对应的处理程序。

      如SpringMVC的DispatchServlet,统一接收所有需要SpringMVC处理的请求,再根据指定饿匹配规则,将请求映射到最终的Controller中的某个方法。这里不再扩展,有兴趣的可以直接查看相关资料。

    2. 微服务为什么需要路由

    微服务需要一套完善的请求分发机制来保证一个请求到来能正确的找到对应的服务实例

      微服务一般是由几十、上百个服务组成,无论是外部调用GW,或者内部服务之间的调用,对于一个URL请求,最终会确认一个服务实例进行处理。对每个服务实例手动指定一个唯一访问地址,然后根据URL去手动实现请求匹配是不可取的,尤其是基于云环境的微服务体系。
      反向路由是微服务的网关的功能之一,可以为我们处理每个请求到服务实例的绑定,结合网关特点,可以做许多额外的横切面的工作,让更多的精力聚焦于业务。对于为什么需要API网关,请查看《五:对微服务API服务网关的理解

    3. 从路由的角度看微服务的体系架构是什么样的

    理解阶段,只能先了解整体流程,后续实际代码阶段以及原理、源码分析阶段会深入了解。

    微服务路由发现体系

    3.1 内部服务如何调用

    • 基础服务之间的调用:结合服务注册中心以及专属的具有负载均衡功能的客户端,如Eureka+(restTemplate+Ribbon)或者Eureka+Feign
    • 聚合服务调用:结合服务注册中心以及专属的具有负载均衡功能的客户端,如Eureka+(restTemplate+Ribbon)或者Eureka+Feign

    3.2 外部路由如何实现

      基于Netflix的zuul,做了简单了解,SpringCloud与zuul集成的方式。这里先对核心流程做个简单了解,后续会有深入的应用、分析。
      

    • Spring Cloud很好的集成了zuul,并且可以通过注解的形式来进行请求的反向路由以及API网关功能
    • Spring Cloud集成zuul,对与url映射的处理方式与SpringMVC对url的请求方式类似,都是通过RequestMapping来进行请求绑定的。核心类:ZuulHandlerMapping
    • zuul的核心是ZuulServlet,一个请求核心流程:HttpServletRequest –>ZuulHandlerMapping –>ZuulController –> ZuulServlet –> ZuulFilter –> HttpServletResponse,详细流程请查看《五:对微服务API服务网关的理解

    4. 路由、API网关、服务发现、负载均衡有什么关系

    4.1 关系

    都是组成微服务的不可或缺的一部分

    • 路由是API网关的一个功能点
    • API网关需要定期或实时同步服务注册中心的服务列表,服务发现是将服务实例与服务注册中心进行实时关联
    • 微服务架构中的负载均衡一般采用进程内负载均衡或者独立主机负载均衡形式,要求客户端同样需要定时或实时同步服务注册中心维护的服务列表

    4.2 从服务发现工作流程理解一次请求过程

    请求到来之前肯定需要服务提供者正常工作

    • 服务提供者启动时,将提供的服务名称、服务器地址注册到服务配置中心
    • 服务消费者通过服务配置中心来获取需要调度的服务机器列表
    • 一次请求到来,经过路由分发定位到一组服务,再通过负载均衡算法之后,选取一台服务器调用
    • 当服务器宕机或下线,相应的机器动态从服务配置中心移除,并通知相应的服务消费者
    • 服务消费者一次访问服务配置中心之后,会将查询到的信息缓存到本地,后面调用先查缓存,从而降低服务配置中心压力

    5. 补充:负载均衡算法有哪些

    • 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
    • 随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。
    • 加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
    • 最小连接法:最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
    • 源地址哈希法:源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
    更多相关内容
  • 本文实例讲述了laravel5.1框架基础之路由。... 路由需要自己规定一定的规则,方便自己查看、使用、理解; 2、路由基本类型及使用示例 get Route::get('articles','ArticleController@index'); 或
  • 路由设置的正确方式

    万次阅读 多人点赞 2020-12-16 20:06:18
    最近在玩旁路由,踩了一些坑,也学习了点相关知识,特整理记录下。 一、旁路由的配置 上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,可以把它想成一个普通的连接路由器的电脑。让他们ip在一个网段...

    最近在玩旁路由,踩了一些坑,也学习了点相关知识,特整理记录下。

    一、旁路由的配置

    上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,可以把它想成一个普通的连接路由器的电脑。让他们ip在一个网段即可,比如主路由网关192.168.3.1,旁路由配置成192.168.3.2

    1.主路由配置:DHCP配置中把网关和DNS改成旁路由ip地址,如192.168.3.2。

    2.旁路由配置:关闭DHCP,把网关改成主路由地址,如192.168.3.1,关闭桥接模式,其他什么子网掩码,广播地址就不说了。 

    说明:还有的人是关闭主路由dhcp,开启旁路由dhcp,个人是不推荐这种做法的,虽然dhcp只是一个ip分配器,差别只是谁分配ip的问题,但是我们使用旁路由,就是想对主路由影响最小。如上配置后,撤掉旁路由后或者旁路由出现问题,只要改下主路由的dhcp网关,重启下就可以了,很方便。

    这样配置后,网络流量如下图:

    科学流量经过处理,会进行nat,这样上行和下行都会走旁路由进行加密和解密。

    普通流量只是上行经过旁路由转发一下,ip不会改变;下行的时候主路由发现ip包是电脑,会直接发过去。

    正常这样处理是比较完美的,旁路由只加解密科学流量,但是有些路由器这么配置,国内流量是无法上网的,只有国外的没问题,必须要配置一条防火墙规则才行。

    iptables -t nat -I POSTROUTING -j MASQUERADE

    这是为什么呢?

    出现问题的一般都是华为,小米,360等主路由器(发现他们都有个共同特征-不能配置dhcp网关),究其本质原因是,这些路由器会校验数据包的ip和mac地址的对应关系。国内包的上行经过旁路由转发给主路由时,主路由发现旁路由发过来的数据包ip不是它自己的,校验失败,所以图中普通流量那条路就不通了。

    然后加了防火墙规则为啥就可以了呢,上边那条规则的意思是执行SNAT功能,就是把数据包的源ip改成当前机器的,也就是旁路由的ip,而且还是动态改变(防止旁路由ip是动态?)。这样配置后,网络流量变成下图了:

    这样旁路由其实就是一个没有路由功能的二级路由器了,你会发现在你迅雷等高速下载的时候旁路由的cpu会异常的高,都用来nat了,而不是最初旁路由的目的--只加解密科学流量。

    还有的一种设置方法是不用加防火墙规则,旁路由加一个wan口,共用一个etho网口,这样我理解其实就是单臂路由吧?其实和上边差不多的。

    查看有没有设置正确的方法很简单

    1.迅雷等高速下载的时候看cpu占用是不是很高

    2.比较靠谱的一种,看上下行的流量,正确配置的话,旁路由的上行是大于下行的,如果上下相同且数据流量很大(高速下载时候比较明显),则配置有问题。

     

    这是下载速度:

     

    正确配置的上下行速度和cpu占用:

     

    错误配置的上下行速度和cpu占用:

    3.最最靠谱的是去主路由看联网设备信息,会发现该设备的ip是电脑的,但是mac地址是软路由的

     

    当然,如果用的主路由是华为、小米、360等,那没辙,只能用上述加防火墙规则或者加wan口,采用nat的方式避免它的检验(这样还不如弄成二级路由省时省心),或者换一个主路由器。

    展开全文
  • 静态路由及动态路由

    千次阅读 2022-05-10 15:24:40
    1.路由器的简单介绍 路由器(Router)是一种负责寻径、转发的网络层设备, 它从网络中选取一条最佳的通信路径提供给客户。路由器可连接几个分开的网络,用过IP逻辑地址连接到一起。...**静态路由的原理:**

    1.路由器的简单介绍

    路由器(Router)是一种负责寻径、转发的网络层设备, 它从网络中选取一条最佳的通信路径提供给客户。路由器可连接几个分开的网络,用过IP逻辑地址连接到一起。路由器通过路由表转发数据,路由表中记录着网络地址以及各地址之间距离的清单,路由器利用路由表清单选择最佳转发路径。路由器使用时间最少和路径最短的算法进行工作,用以保证当某条路径发生故障断开或者出现拥堵是仍能正常通信。通过端口的转换,路由器可以实现不同网段的网络间进行通信。

    2.路由器的工作原理

    1.静态路由

    **静态路由的原理:**静态路由不同于动态路由,不会自动生成识别目标端的IP地址,需要网络管理员手动输入目标段的IP地址,通过ARP协议获得对端的MAC地址,从而建立连接,是单方的。
    **静态路由器的优缺点:**静态路由器不会自动识别IP,配置比较简单,同时也严重缺乏灵活性,连接也是单方向的。

    2.默认路由

    **默认路由的原理:**默认路由本质上也是属于静态路由的,默认路由的一端固定连接大网的一个接口,当找不到目标网络的路由时,路由器会请求转发到默认路由接口。

    3.浮点路由

    **浮点路由的原理:**设置优先级,做备选路线,增加网络冗余性,以确保网络传送的安全可靠。

    **浮点路由的优缺点:**浮动保证了网络传输的安全可靠性,保障了工作环境的良好运行,但是成本相对较高,配置和维护相对困难。

    3.路由配置

    1、静态路由配置
    首先我们可以先进行常规操作

    #undo terminal monitor 关闭弹窗

    #进入用户视图更改命名

    #interface +端口号 ,进入端口视图

    #ip add +ip , 添加ip地址(如下图示例)
    请添加图片描述
    接下来我们要观察各路由的目标网段及下一跳的IP,然后给每台路由做设置。

    #ip route-static +目标网段+子网掩码+下一跳IP

    如图中所示,给两台路由都做好配置,就可实现跨网段信息交互了。

    2、默认路由配置
    同静态路由,先设置常规操作,方便后面配置

    #进入用户视图更改命名

    #interface +端口号 ,进入端口视图

    #ip add +ip , 添加ip地址
    请添加图片描述
    下面的步骤就与静态路由稍有区别了。

    同样,先观察每台路由的目标网段及下一跳IP

    以图为示例

    我们设置R1和R3为默认路由

    #ip route-static 0.0.0.0 0.0.0.0 +下一跳IP

    R2我们需要进行双向设置,既与R1通又与R3通,需要设置两次

    #ip route-static +目标网段+子网掩码+下一跳IP (R1方向)

    #ip route-static +目标网段+子网掩码+下一跳IP(R2方向)

    3、浮动路由配置
    先进行常规操作

    #undo terminal monitor 关闭弹窗

    #进入用户视图更改命名

    #interface +端口号 ,进入端口视图

    #ip add +ip , 添加ip地址(如下图示例)
    请添加图片描述
    第一步,先观察各路由的目标网段及下一跳IP,对R1和R2设置一个最优路径的配置。

    这里我们需要设一个环回IP,用于测试

    #int lookback0

    #ip add +IP地址(如1.1.1.1 24)

    后面的配置与静态路由相同。

    第二步,设置备选路径,由R1,R3,R2构成

    同样需要用到第一步设置的环回IP lookback0

    对R2进行设置

    #ip route-static 目标网段+子网掩码 +下一跳IP preference +优先级数(优先级数要比60大)

    R1同理

    #ip route-static 目标网段+子网掩码 +下一跳IP preference +优先级数(优先级数要比60大)

    R3设置需要双向,不用再设优先级

    #ip route-static 目标网段+子网掩码 +下一跳IP(R1方向)

    #ip route-static 目标网段+子网掩码 +下一跳IP(R2方向)

    最后我们可以用PC机和环回IP进行PING通,测试配置是否无误。

    4.动态路由

    1.动态路由概述
    动态路由是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文。
    动态路由协议:路由器之间用来交换信息的语言

    2.动态路由特点
    1.减少了网络管理
    2.占用了网络带宽(少量,可忽略不计)

    3.选择依据:度量值
    跳数、带宽、时延、可靠性、成本、负载
    路由器会通过度量值来确定最优路由路径

    4.收敛
    使所有路由器都到达一致状态的过程

    5.动态路由协议分类
    距离矢量路由协议
    ——依据从源网络到目标网络所经过的路由器的个数选择路由 - - RIP、IGIP(思科私有协议)
    链路状态路由协议
    ——综合考虑从源网络到目标网络的各条路径的情况选择路由 - - OSPF、ISIS

    一、RIP协议

    1.概述:

    RIP(Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。

    RIP 被定义为距离矢量路由协议,而距离矢量路由协议的根本特征就是自己的路由表是完全从其它路由器学来的,并且将收到的路由条目一丝不变地放进自己的路由表,以供数据转发。正因为如此,对于路由是否正确,对于目标是否可达,RIP全然不知。

    “距离”的定义 :
    从一路由器到直接连接的网络的距离定义为 1。
    从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。

    RIP 使用跳数作为 metric,跳数就是到达目标网络所需要经过的路由器个数,因为直连网络不需要经过任何路由器,所以直连网络的 metric 为 0。RIP 所支持网络的最大跳数为 15,也就是 metric 值最大为 15,一但大于 15,如 16,被 RIP 认为目标不可达,由此可见,RIP 并不适合大型网络

    RIP协议的管理距离为120。当路由表中出现了多条目标网段、子网掩码相同的路由信息时,优先选择管理距离小的协议所生成的路由信息。

    RIP协议一共有两个版本:
    Version 1 有类路由协议,广播更新。(由于不支持VLSM,RIPV1已经被淘汰,以RIPv2为主
    Version 2 无类路由协议,支持VLSM

    RIP协议的三个要素:
    (1)仅和相邻路由器交换信息。
    (2)交换的信息是当前本路由器所知道的全部信息,即自己的路由表。RIP交换的是本路由器上完整的路由表。
    (3)按固定的时间间隔交换路由信息,例如,每隔 30 秒

    2.RIP协议工作原理及流程
    RIP协议在整个工作流程中主要使用四个定时器:
    更新定时器(Update timer):
    当此定时器超时时,立即发送更新报文。(30s)
    老化定时器(Age timer):
    RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。(180s)
    垃圾收集定时器(Garbage-collect timer):
    如果在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则该路由将被从RIP路由表中彻底删除。(240s)
    抑制定时器(Suppress timer):
    默认时长为180s,当RIP设备收到对端的路由更新,其cost为16,对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由cost小于16的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。

    3.路由表的建立
    路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。路由表中也只有到直连网络的直连路由。
    以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
    经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
    请添加图片描述
    4.RIPv2认证功能
    由于 RIP 没有邻居的概念,所以自己并不知道发出去的路由更新是不是有路由器收到,同样也不知道会被什么样的路由器收到,因为 RIP 的路由更新是明文的,网络中无论谁收到,都可以读取里面的信息,这就难免会有不怀好意者窃听 RIP 的路由信息。为了防止路由信息被非法窃取,RIP ver 2 可以相互认证,只有能够提供密码的路由器,才能够获得路由更新。而 RIP ver 1 是不支持认证的。RIP ver 2 可以支持明文与 MD5 认证。

    路由器之间,当一方开启认证之后,另一方也同样需要开启认证,并且密码一致,才能读取路由信息。认证是基于接口配置的,密码使用 key chain 来定义,key chain中可以定义多个密码,每个密码都有一个序号,RIP ver 2 在认证时,只要双方最前面的一组密码相同,认证即可通过,双方密码序号不一定需要相同,key chain 名字也不需要相同,但在某些低版本 IOS 中,会要求双方的密码序号必须相同,才能认证成功,所以建议大家配置认证时,双方都配置相同的序号和密码。

    5.RIP协议优缺点:

    优点:
    对于小型网络,RIP就所占带宽而言开销小,易于配置、管理和实现;
    “好”消息传的快;

    缺点:
    (1)网络规模被限制,最大跳数为15跳
    (2)使用“跳数”作为度量值,以跳数的多少比较路由路径的优劣。 RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
    (3)收敛速度慢。当网络中出现拓扑变化时,需要较长的时间才会收敛。可能会导致网络中路由表信息不一致。
    (4)路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。

    6.RIP协议路由环路发生原理及处理方式
    6.1 路由环路形成
    请添加图片描述
    如上图所示,当正常运行的网1突然不可达时,R1路由器将到网1的路由条目删除,但是还没来的及向 R2路由器进行更新。此时R2路由器更新计时器先超时,R2将自己的路由信息发送给R1,R1就从R2处又学习到了网1的路由信息,并且将距离设置成2。此时,R1 的路由表已经出现了错误,但路由器并不知道。

    当R1的更新计时器超时后,R1又向R2发送自己的路由信息,R2用从R1路由表内学习到的路由信息将自己的到网1的路由信息进行覆盖,此时R2到网1的路由信息中,距离字段被改为3。

    以此类推,在不断的路由更新中,到网1的距离会逐渐增加直至无穷大,同时R1与R2之间在到网1的路由信息上形成了路由环路。如果没有一定的措施去解决 的话,路由器将永远无法发现这个错误。

    6.2路由环路的危害
    路由环路会对网络造成严重影响,导致网络性能降低,甚至使网络瘫痪。
    路由环路可能造成以下后果:
    ①环路内的路由器占用链路带宽来反复收发流量。
    ②路由器的 CPU 因不断循环数据包而不堪重负。
    ③路由器的 CPU 承担了无用的数据包转发工作,从而影响到网络收敛。
    ④路由更新可能会丢失或无法得到及时处理。这些状况可能会导致更多的路由环路,使情况进一步恶化。
    ⑤数据包可能丢失在“黑洞”中。

    6.3路由环路解决方法
    距离矢量路由环路的解决方法有如下五种:
    1)最大跳计数(maximum metric),RIP允许跳计数最大可以达到15,任何需要经过16跳才能到达的网络都被认为是不可达的。解决了环路时跳数会增加到无限大的问题
    2)水平分隔(split horizon),限制路由器不能按照接收信息的方向去将接收到的信息再发回去。
    例:路由器从f1/0口收到去往Net1的路由信息,在发送更新时,不会将关于Net1的路由信息再从f1/0口发出去。
    3)路由中毒(路由毒化)或毒性反转。路由毒化用于在发往其它路由器的路由更新中将路由标记为不可达。标记“不可达”的方法是将度量设置为最大值。对于 RIP,毒化路由的度量为 16。
    毒性反转:R3发现10.4.0.0不可达,立刻向外发送毒化路由,告知R2该网段不可达。R2在收到毒化路由后,会根据毒性反转,立刻向R3发送一条毒化路由。确保 R3 不会轻易受到有关网络 10.4.0.0 的错误更新的影响。
    请添加图片描述
    4)抑制计时器
    抑制计时器可用来防止定期更新消息错误地恢复某条可能已经发生故障的路由。抑制计时器指示路由器将那些可能会影响路由的更改保持一段特定的时间。如果确定某条路由为 down(不可用)或 possibly down(可能不可用),则在规定的时间段内,任何有关该路由的信息都将被忽略。这表示路由器将在一段足够长的时间内将路由标记为 unreachable(不可达),以便路由更新能够传递带有最新信息的路由表。
    5)触发更新:路由器周期性发送更新,RIP是默认每隔30秒。 触发更新就是当检测到网络拓扑发生变动时,路由器会立即发送一个更新信息给邻居路由器,而不用等待更新计时器,并依次产生触发更新通知它们的邻居路由器,此过程就叫触发更新。

    7.RIP 的配置
    以R1配置为例:
    router rip
    version 2
    no auto-summary
    network 192.168.20.0
    network 192.168.1.0
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

    二、OSPF协议

    1.OSPF概述
    路由协议 OSPF 全称为 Open Shortest Path First,也就开放的最短路径优先协议,因为 OSPF 是由 IETF 开发的,它的使用不受任何厂商限制,所有人都可以使用,所以称为开放的,而最短路径优先(SPF)只OSPF的核心思想,其使用的算法是Dijkstra算法,最短路径优先并没有太多特殊的含义,并没有任何一个路由协议是最长路径优先的,所有协议,都会选最短的。

    距离矢量路由协议的根本特征就是自己的路由表是完全从其它路由器学来的,并且将收到的路由条目一丝不变地放进自己的路由表,运行距离矢量路由协议的路由器之间交换的是路由表,距离矢量路由协议是没有大脑的,路由表从来不会自己计算,总是把别人的路由表拿来就用;而 OSPF 完全抛弃了这种不可靠的算法,OSPF是典型的链路状态路由协议,路由器之间交换的并不是路由表,而是链路状态,OSPF通过获得网络中所有的链路状态信息,从而计算出到达每个目标精确的网络路径。

    OSPF 工作在单个 AS,是个绝对的内部网关路由协议(Interior Gateway Protocol, 即 IGP)。

    OSPF 对网络没有跳数限制,支持 CIDR和VLSM,没有自动汇总功能,但可以手工在任意比特位汇总,并且手工汇总没有任何条件限制,可以汇总到任意掩码长度。

    OSPF 并不会周期性更新路由表,而采用增量更新,即只在路由有变化时,才会发送更新,并且只发送有变化的路由信息;事实上,OSPF 是间接设置了周期性更新路由的规则,因为所有路由都是有刷新时间的,当达到刷新时间阀值时,该路由就会产生一次更新,默认时间为 1800 秒,即 30 分钟,所以 OSPF 路由的定期更新周期默认为 30 分钟。

    OSPF 所有路由的管理距离(Ddministrative Distance)为 110,OSPF 只支持等价负载均衡。

    OSPF 支持认证,并且支持明文和 MD5 认证;OSPF 不可以通过 Offset list 来改变路由的度量值( metric)。

    2.OSPF协议相关术语

    Router-ID:
    唯一标识一个路由器
    OSPF 路由器之间相互通告链路状态,如果路由器之间分不清谁是谁,没有办法确定各自的身份,那么通告的链路状态就是毫无意义的,所以必须给每一个 OSPF 路由器定义一个身份。这就是 Router-ID,并且 Router-ID 在网络中绝对不可以有重名,否则路由器收到的链路状态,就无法确定发起者的身份,也就无法通过链路状态信息确定网络位置,OSPF 路由器发出的链路状态都会写上自己的 Router-ID,可以理解为该链路状态的签名,不同路由器产生的链路状态,签名绝不会相同。
    每一台 OSPF 路由器只有一个 Router-ID,Router-ID 使用 IP 地址的形式来表示,确定 Router-ID 的方法为:
    ★1 .手工指定 Router-ID。
    ★2 .路由器上活动 Loopback 接口中 IP 地址最大的,也就是数字最大的,如 C 类
    地址优先于 B 类地址,一个非活动的接口的 IP 地址是不能被选为 Router-ID 的。
    ★3 .如果没有活动的 Loopback 接口,则选择活动物理接口 IP 地址最大的。

    COST:
    OSPF 使用接口的带宽来计算 度量值。计算方法:cost=100Mbit/接口带宽
    如果路由器要经过两个接口才能到达目标网络,那么很显然,两个接口的 Cost值要累加起来,才算是到达目标网络的 Metric 值,所以 OSPF 路由器计算到达目标网络的 Metric 值,必须将沿途中所有接口的 Cost 值累加起来,在累加时,只计算出接口,不计算进接口。
    OSPF 会自动计算接口上的 Cost 值,但也可以通过手工指定该接口的 Cost 值,手工指定的优先于自动计算的值。OSPF 计算的 Cost,同样是和接口带宽成反比,带宽越高,Cost 值越小。到达目标相同 Cost 值的路径,可以执行负载均衡,最多 6 条链路同时执行负载均衡。

    链路状态(Link-State):
    链路状态(LSA)就是 OSPF 接口上的描述信息,例如接口上的 IP 地址,子网掩码,网络类型,Cost 值等等,OSPF 路由器之间交换的并不是路由表,而是链路状态(LSA),OSPF 通过获得网络中所有的链路状态信息,从而计算出到达每个目标精确的网络路径。OSPF 路由器会将自己所有的链路状态毫不保留地全部发给邻居,邻居将收到的链路状态全部放入链路状态数据库(Link-State Database),邻居再发给自己的所有邻居,并且在传递过程种,绝对不会有任何更改。通过这样的过程,最终,网络中所有的 OSPF 路由器都拥有网络中所有的链路状态,并且所有路由器的链路状态应该能描绘出相同的网络拓朴。
    与距离矢量路由不同,距离矢量路由中交换的是完整的路由表,这样如果有人恶意攻击的话,就能够知道整个网络拓扑结构。而链路状态路由则交换链路的状态,用户无法通过这个清晰的得知整个链路拓扑。

    邻居(Neighbor):
    在同一网络中都有接口的两台路由器,通过Hello包建立和维护邻居关系
    OSPF 邻居靠发送 Hello 包来建立和维护,Hello 包会在启动了 OSPF 的接口上周期性发送,在不同的网络中,发送 Hello 包的间隔也会不同,当超过 4 倍的 Hello 时间,也就是 Dead 时间过后还没有收到邻居的 Hello 包,邻居关系将被断开。
    两台 OSPF 路由器必须满足 4 个条件,才能形成 OSPF 邻居,4 个必备条件如下:
    (1)Area-id(区域号码):即路由器之间必须配置在相同的 OSPF 区域,否则无法形成邻居。
    (2)Hello 时间与 Dead 时间:即路由器之间的 Hello 时间和 Dead 时间必须一致,否则无法形成邻居。
    (3)Authentication(认证):路由器之间必须配置相同的认证密码,如果密码不同,则无法形成邻居。
    (4)Stub Area Flag(末节标签):路由器之间的末节标签必须一致,即处在相同的末节区域内,否则无法形成邻居

    邻接:

    邻接是一种特殊的邻居。他不仅可以通过hello包进行通信,还可以互相之间发送LSA。

    OSPF 只有邻接关系之间才会交换 LSA,路由器会将链路状态数据库中所有的内容毫不保留地发给所有邻接,要想在 OSPF 路由器之间交换 LSA,必须先形成 OSPF 邻接关系。

    DR/BDR
    通过在多路访问网段中选择出一个核心路由器称为 DR(Designated Router),网段中所有的 OSPF 路由器都和 DR 互换 LSA。DR 就会拥有所有的 LSA,并且将所有的 LSA 转发给每一台路由器。

    如果 DR 失效后,那么就会造成 LSA 的丢失与不完整,所以在多路访问网络中除了选举出 DR 之外,还会选举出一台路由器作为 DR 的备份,称为 BDR(Backup Designated Router),BDR 在 DR 不可用时,代替 DR 的工作

    既不是 DR,也不是 BDR 的路由器称为Drother,Dother负责 和DR互换 LSA ,同时还会和 BDR互换 LSA。
    注意:Drother之间不能互换数据,这是为了防止出现环路
    请添加图片描述
    DR/BDR选举规则:
    DR 与 BDR 的选举是在一个二层网段内选举的,即在多个路由器互连的接口范围内,与 OSPF 区域没有任何关系,一个区域可能有多个多路访问网段,那么就会存在多个 DR 和 BDR,但一个多路访问网段,只能有一个 DR和 BDR;选举 DR 和 BDR 的规则为:
    1、比较接口优先级:
    选举优先级最高的成为 DR,优先级数字越大,表示优先级越高,被选为 DR 的几率就越大,次优先级的为 BDR,优先级范围是 0-255,默认为 1,优先级为 0 表示没有资格选举 DR 和 BDR。
    2、Route-Id 大小:
    如果在优先级都相同的情况下,Route-Id 最大的成为 DR,其次是 BDR,数字越大,被选为 DR 的几率就越大。
    DR和Dorther处理数据报的区别:所有 OSPF 路由器,包括 DR 与 BDR,都能够接收和传递目标地址为224.0.0.5 的数据包。只有 DR 和 BDR 才能接收和传递目标地址为 224.0.0.6 的数据包。

    OSPF网络类型
    OSPF是一个在各方面都考虑比较周全的路由协议,也会因此将该协议变得更为复杂化,OSPF并不像RIP与EIGRP那样,RIP与EIGRP在运行时,并不考虑OSI模型在二层所定义的内容,即并不关心二层的链路介质类型,而OSPF在运行时,必须考虑链路层的类型,称为OSPF网络类型(Network Type),对于不同二层介质类型,OSPF将有不同的操作和运行过程,网络类型,可分为如下几种:
    点到点(Point-To-Point)
    点到多点(Point-To-Multipoint )
    广播(Broadcast )
    非广播(Non-Broadcast )
    点到多点非广播(Point-To-Multipoint Non-Broadcast)

    对于不同的网络类型,将会影响到 OSPF 的 Hello 时间与 Dead 时间,关系到 DR与 BDR 的选举与否,影响到 OSPF 邻居是自动建立还是手工建立,总结如下表:
    请添加图片描述
    OSPF 邻居的成功建立,并不要求双方网络类型一致,但双方网络类型不一致,将可能导致链路状态数据库中的条目无法进入路由表。

    3.OSPF原理

    OSPF的计算
    OSPF 协议路由的计算过程可简单描述如下:
    ①每台 OSPF 路由器根据自己周围的网络拓扑结构生成 LSA(Link StateAdvertisement,链路状态通告),并通过更新报文将 LSA 发送给网络中的 其它 OSPF 路由器。
    ②每台 OSPF 路由器都会收集其它路由器通告的 LSA,所有的 LSA 放在一起 便组成了 LSDB(Link State Database,链路状态数据库)。LSA 是对路由 器周围网络拓扑结构的描述,LSDB 则是对整个自治系统的网络拓扑结构的 描述。
    ③OSPF 路由器将 LSDB 转换成一张带权的有向图,这张图便是对整个网络拓 扑结构的真实反映。各个路由器得到的有向图是完全相同的。
    ④每台路由器根据有向图,使用 SPF 算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。

    4.OSPF启动过程

    七种状态机:
    请添加图片描述
    路由器从启动OSPF进程,到根据链路状态数据库计算出路由表,同样需要经历一系列的启动过程,总共有8种可能的启动过程,但并不是一定会经历这8个过程,具体过程如下:
    Down → Attempt → Init → Two-way → Exstart → Exchange → Loading → Full

    ①Down
    路由器刚刚启动OSPF进程,还没有从任何路由器收到任何数据包,Hello包也没有收到,在此进程,可以向外发送Hello包,以试图发现邻居。

    ②Attempt
    因为OSPF使用组播发送数据包,如使用组播发送Hello包,如果Hello包不能发出去被其它路由器收到,就不能和其它路由器建立OSPF邻居;在一些组播不能发送的网络中,例如帧中继这样的非广播网络环境,组播不能够传递,在这种情况下,就需要指定OSPF使用单播向邻居发送Hello包,以此试图和指定的邻居建立OSPF邻居关系,在此状态下,OSPF称为Attempt状态。

    ③Init
    只是OSPF路由器一方收到了另一方的Hello,但并没有双方都交换Hello,也就是对方的Hello中还没有将自己列为邻居。

    ④Two-way
    双方都已经交换了Hello信息,并且从Hello中看到对方已经将自己列为邻居,此状态,就表示OSPF邻居关系已经建立,并且如果是需要选举DR和BDR的话,也已经选举出来,但OSPF邻居之间并不一定就会交换LSA,如果不需要交换LSA,则永远停留在此状态,如果需要形成邻接并互相交换LSA,则状态继续往下进行。(比如Drother与Drother之间将永远停留在Two-way状态,因为Drother与Drother之间不需要交换LSA。)

    ⑤Exstart
    因为在OSPF邻居之间交换完整的LSA之前,会先发送Database Description Packets (DBD),Link-state Request (LSR)等数据包,邻居之间是谁先发,谁后发,需要确定顺序,在Exstart状态,就是确定邻居之间的主从关系(Master—Slave关系),Router-ID数字大的为主路由器,另一端为从路由器,由主路由器先向从路由器发送信息。在选举DR与BDR的网络环境中,并不一定DR就是主路由器,BDR就是从路由器,因为DR和BDR可以通过调整接口优先级来控制,所以DR也许是因为优先级比BDR高,而Router-ID并不比BDR高。
    注意:在任何网络环境下,OSPF在交换LSA之前,都需要确定主从关系。

    ⑥Exchange
    就是交换Database Description Packets (DBD)的过程,DBD只是LSA的简单描述,只包含LSA的一些头部信息,收到DBD的路由器会和自己的链路状态数据库作对比,确定需要哪些LSA的完整信息,就会发送LSR请求给邻居。

    ⑦Loading
    邻居根据收到的LSR(Link-State Request),向对方回复Link-state update(LSU)。

    ⑧Full
    等到OSPF都收到了邻居回复的所有Link-state update(LSU),那么此时的数据库状态就变成了收敛状态,此状态就是Full状态,但此时只是数据库已经同步,但路由表却还在计算当中。
    注意:除了Two-way和Full这两个状态,邻居停留在任何状态,都是不正常。

    OSPF数据包交换过程
    从OSPF建立邻居,到LSA的互换,到路由表的计算,需要经过一系列的数据包交换过程,过程如下:
    Hello

    Database Description Packets (DBD)

    Link-state Request (LSR)

    Link-state update(LSU)

    LSDB

    具体情况如下:

    Hello
    Hello包是用来建立和维护OSPF邻居的,要交换LSA,必须先通过Hello包建立OSPF邻居。

    Database Description Packets (DBD)
    邻居建立之后,并不会立刻就将自己链路状态数据库中所有的LSA全部发给邻居,而是将LSA的基本描述信息发给邻居,这就是Database Description Packets (DBD),是LSA的目录信息,相当于书的目录,邻居在看完DBD之后,就能知道哪些LSA是需要邻居发送给自己的。

    Link-state Request (LSR)
    邻居在看完发来的LSA描述信息(DBD)之后,就知道哪些LSA是需要邻居发送给自己的,自己就会向邻居发送LSA请求(LSR),告诉邻居自己需要哪些LSA。

    Link-state update(LSU)
    当邻居收到其它路由器发来的LSA请求(LSR)之后,就知道对方需要哪些LSA,然后根据LSR,将完整的LSA内容全部发给邻居,以供计算路由表。

    LSDB
    就是已经收到了所有需要邻居发给自己的LSA,这时的链路状态数据库已经达到收敛状态。

    5.OSPF区域

    1.区域划分

    随着网络规模日益扩大,当一个大型网络中的路由器都运行 OSPF 路由协议时, 路由器数量的增多会导致LSDB 非常庞大,占用大量的存储空间,并使得运行 SPF 算法的复杂度增加,导致CPU 负担很重。

    在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于“振荡” 之中,造成网络中会有大量的OSPF 协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。

    OSPF 协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF 的接口必须指明属于哪一个区域。如图 1所示
    请添加图片描述
    划分区域后,可以在区域边界路由器上进行路由聚合,以减少通告到其他区域的LSA 数量,还可以将网络拓扑变化带来的影响最小化。

    2.路由器的类型

    OSPF 路由器根据在 AS 中的不同位置,可以分为以下四类:
    (1) 区域内路由器IR( Internal Router )
    该类路由器的所有接口都属于同一个 OSPF 区域。
    (2) 区域边界路由器 ABR ( Area Border Router )
    该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域(骨干区域的介绍请参见下一小节)。 ABR 用来连接骨干区域和非骨干区域,它与骨干区域 之间既可以是物理连接,也可以是逻辑上的连接
    (3) 骨干路由器( Backbone Router )
    该类路由器至少有一个接口属于骨干区域。因此,所有的 ABR 和位于 Area0 的内部路由器都是骨干路由器。
    (4) 自治系统边界路由器 ASBR
    与其他 AS 交换路由信息的路由器称为 ASBR 。 ASBR 并不一定位于 AS 的边界,它有可能是区域内路由器,也有可能是 ABR 。只要一台 OSPF 路由器引入了外部 路由的信息,它就成为 ASBR 。
    请添加图片描述
    3. 骨干区域与虚连接

    OSPF 划分区域之后,并非所有的区域都是平等的关系。其中有一个区域是与众不同的,它的区域号(Area ID)是 0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF 有两个规定:

    ①所有非骨干区域必须与骨干区域保持连通;
    ②骨干区域自身也必须保持连通。

    但在实际应用中,可能会因为各方面条件的限制,无法满足这个要求。这时可以通 过配置OSPF 虚连接(Virtual Link)予以解决。虚连接是指在两台 ABR 之间通过一个非骨干区域而建立的一条逻辑上的连接通道。它的两端必须是 ABR,而且必须在两端同时配置方可生效。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区(Transit Area)

    4.外部路由
    OSPF 同其它路由协议一样,可以将其它外部协议的路由信息或其它 OSPF 进程的路由信息重分布进自己的域内,在路由表中的表示方法和OSPF自己的路由会有所不同,这样的路由在 OSPF 域内就是 OSPF 外部路由(External Route)。外部路由分为两类:

    (1)O E2 :类型为 O E2 的外部路由,在该路由进入 OSPF 之前的 Metric 值为多少,进入 OSPF域后就不变。
    (2)O E1:O E1 的路由在 OSPF 路由器上的 Metric值包含该路由进入 OSPF 域之前的 Metric 值,再加上在 OSPF 域内传递的 Metric 值。

    OE2与OE1在路由条目上没有任何区别,只是对于路由的Metric值计算有区别;类型为OE2的外部路由,在该路由进入OSPF之前的Metric值为多少,进入OSPF域后,所有OSPF路由器看到关于该路由的Metric值全部相同,不会再为该路由增加任何Metric值,OE2默认Metric值为20。而OE1的路由在OSPF路由器上的Metric值包含该路由进入OSPF域之前的Metric值,再加上在OSPF域内传递的Metric值,也就是到达外部路由的Metric值为到达ASBR的Metric值再加上进入OSPF域之前的Metric值之和,不同OSPF路由器看到OE1的路由的Metric值可能会有不同

    5.OSPF末节区域
    路由增加,就意味着 LSA 的增加,有时,在一个末梢网络中,许多路由信息是多余的,并不需要通告进来,因为一个 OSPF 区域内的所有路由器都能够通过该区域的 ABR 去往其它 OSPF 区域或者 OSPF 以外的外部网络,一个区域的路由器只要知道去往 ABR,就能去往区域外的网络,因此可以过滤掉区域外的路由进入,这样的区域称为 OSPF 末节区域(Stub Area);一个末节区域的所有路由器虽然可以从 ABR 去往区域外的网络,但路由器上还是得有指向 ABR 的路由,所以末节区域的路由器只需要有默认路由,而不需要明细路由,即可与区域外的网络通信,根据末节区域过滤掉区域外的不同路由,可将末节区域分为如下四类:
    Stub Area(末节区域)
    Totally Stub Area(完全末节区域)
    Not-so-Stubby Area(NSSA)
    Totally Not-so-Stubby Area(Totally NSSA)
    ① Stub Area(末节区域)
    在 Stub Area(末节区域)下,ABR 将过滤掉所有外部路由进入末节区域,同时,末节区域内的路由器也不可以将外部路由重分布进 OSPF 进程,即末节区域内的路由器不可以成为 ASBR,但其它 OSPF 区域的路由(Inter-Area Route)可以进入末节区域,由于没有去往外部网络的路由,所以 ABR 会自动向末节区域内发送一条指向自己的默认路由
    ②Totally Stub Area(完全末节区域)
    在 Totally Stub Area(完全末节区域)下,ABR 将过滤掉所有外部路由和其它 OSPF区域的路由(Inter-Area Route)进入完全末节区域,同时,末节区域内的路由器也不可以将外部路由重分布进 OSPF 进程,即完全末节区域内的路由器不可以成为ASBR,由于没有去往外部网络的路由,所以 ABR 会自动向完全末节区域内发送一条指向自己的默认路由
    ③Not-so-Stubby Area(NSSA)
    在 Not-so-Stubby Area(NSSA)下,ABR 将 过滤掉所有外部路由进入末节区域,同时也允许其它 OSPF 区域的路由(Inter-Area Route)进入 NSSA 区域,并且路由器还 可以将外部路由重分布进 OSPF 进程,即 NSSA 区域内的路由器可以成为 ASBR,由于自身可以将外部网络的路由重分布进 OSPF 进程,所以 ABR 不会自动向 NSSA 区域内发送一条指向自己的默认路由,但可以手工向 NSSA 域内发送默认路由,并且只可在 ABR 上发送默认路由
    ④ Totally Not-so-Stubby Area(Totally NSSA)
    在 Totally Not-so-Stubby Area(Totally NSSA)下,ABR 将过滤掉所有外部路由和其它 OSPF 区域的路由(Inter-Area Route)进入 Totally NSSA 区域,但路由器可以将外部路由重分布进 OSPF 进程,即 Totally NSSA 区域内的路由器可以成为 ASBR,由于没有去往其它 OSPF 区域的路由,所以 ABR 会自动向 Totally NSSA 内发送一条指向自己的默认路由

    注:
    ★在末节区域下,ABR 自动发出的默认路由,Metric 值默认为 1,可通过命令 area area-id default-cost cost 修改,默认路由除了默认的 Cost 值以外,还会累加真实接口的 Cost 值。
    ★骨干区域不能配置为任何末节区域。
    ★当将某个区域配置为末节区域后,则区域中所有路由器都必须配置为末节区域,因为配置为末节区域的路由器上所有接口发出的 Hello 包中都会有末节标签,所有如果对方没有末节标签,则不能成为邻居。

    总结:
    请添加图片描述
    6.OSPF虚链路(Virtual Link)

    因为OSPF采用了区域化的设计,并且区域也采用了Hub-Spoke的架构,所有区域中定义出一个核心,然后其它部分都与核心相连,OSPF的区域0就是所有区域的核心,称为BackBone 区域(骨干区域),而其它Normal 区域(常规区域)应该直接和骨干区域相连,常规区域只能和骨干区域交换LSA,常规区域与常规区域之间即使直连也无法互换LSA,但在某些情况下,某些常规区域无法与骨干区域直连,这时便无法得到其它区域的路由,因此,设计了将骨干区域的范围通过虚拟的方法进行扩展到相邻常规区域的位置,因而让不能直接与骨干区域相连的区域,最终可以与骨干区域直连,这种对骨干虚拟的扩展和拉伸就是OSPF虚链路(Virtual Link)能实现的;因为某些常规区域不能与骨干区域直连而只能与其它常规区域直连,所以OSPF虚链路(Virtual Link)通过将相邻的常规区域虚拟为骨干区域,从而让那些不能与骨干区域直连的常规区域也能获得其它OSPF区域的路由。与骨干区域相邻的常规区域被扩展后,该区域被称为Transit Area,理论上Transit Area不应该为末节区域;在扩展后,原本为常规区域的Transit Area,将变成骨干区域,所以路由将从Inter-Area Route转变为Intra-Area Route,路由表示形式也将从O IA改变为O的形式;在进行OSPF虚链路扩展时,是将Transit Area中与骨干区域直连的ABR和连接另一个常规区域的ABR相连,连接这两个ABR时,使用双方的Router-ID来连接。如下图:
    请添加图片描述
    在上图中,区域2只能与区域1直连,而无法与骨干区域直连,在这种情况下,由于常规区域与常规区域之间即使直连也无法互换LSA,所以R3虽然是ABR,但因为没有连接骨干区域,最后不可能将任何区域的LSA发进区域2,最终导致区域2无法外其它区域通信,在这种情况下,需要通过OSPF虚链路将骨干区域的范围扩展到相邻的区域1,如下图:
    请添加图片描述
    在进行OSPF虚链路扩展后,区域1被虚拟成了骨干区域,而这时的R3等同于连接骨干区域和区域2的ABR,所以可以将自己所有的LSA发进区域2。在扩展OSPF虚链路时,是通过连接R2(ABR)与R3(ABR)的Router-ID 来建立的。
    因为OSPF虚链路(Virtual Link)能将骨干区域扩展到相邻的常规区域,从而将常规区域虚拟为骨干区域,所以在某些情况下,如公司合并,或者为了备份骨干区域,可能出现骨干区域被常规区域所隔离,如下图:
    请添加图片描述
    图中骨干区域被区域1分割为两部分,将使得骨干区域自己的路由无法相互传递,在使用OSPF虚链路后,可以将区域1也扩展为骨干区域,如下图:
    请添加图片描述
    在经过OSPF虚链路将区域1也扩展为骨干区域后,可见所有的区域都变成了骨干区域,从而使网络中骨干区域能够收到另外一边被分割的骨干区域的路由,并且最后骨干区域自己的路由都为Intra-Area Route,但Area 1与骨干区域的路由将仍然为O IA。

    注意:OSPF虚链路必须是在两个拥有共同区域的ABR之间建立的,其中必须至少有一个ABR是连接骨干的。
    OSPF虚链路被认为是骨干区域的一个接口,一条链路,也需要建立OSPF邻居,但在邻居建立之后,链路上是没有Hello包传递的。

    7.OSPF认证
    同RIP和EIGRP一样,出于安全考虑,OSPF也使用了认证,OSPF同时支持明文和MD5认证,在启用OSPF认证后,Hello包中将携带密码,双方Hello包中的密码必须相同,才能建立OSPF邻居关系,需要注意,空密码也是密码的一种。

    当OSPF邻居的一方在接口上启用认证后,从该接口发出的Hello包中就会带有密码,双方的Hello包中拥有相同的密码时,邻居方可建立;一台OSPF路由器可能有多个OSPF接口,也可能多个接口在多个OSPF区域,只要在接口上输入OSPF认证的命令后,便表示开启了OSPF认证,可以在每个接口上一个一个启用,也可以一次性开启多个接口的认证,如果需要开启多个接口的认证功能,那么认证的命令就并非直接在接口上输入,而是到OSPF进程模式下输入,并且是对某个区域全局开启的,当在进程下对某个区域开启OSPF认证后,就表示在属于该区域的所有接口上开启了认证。所以,在进程下对区域配置认证,是快速配置多个接口认证的方法,与在多个接口上一个一个开启,没有本质区别。因为OSPF虚链路被认为是骨干区域的一个接口,一条链路,所以在OSPF进程下对骨干区域开启认证后,不仅表示开启了区域0下所有接口的认证,同时也开启了OSPF虚链路的认证,但OSPF虚链路在建立后,并没有Hello包的传递,所以认证在没有重置OSPF进程的情况下,是不会生效的。

    8.OSPF汇总路由
    在OSPF同区域内,LSA是绝对不允许以任何形式或任何手段更改的,但在一个区域与另一个区域之间,LSA可以被ABR修改后传递,从而得知,在同一个区域内,OSPF路由是不能被汇总的,而是当路由从一个区域被ABR转发到另外一个区域时,就可以执行路由汇总,并且汇总必须是在ABR上执行的,但该汇总不对OSPF外部路由生效;在将外部路由重分布进OSPF时,也可以执行路由汇总,此时的汇总必须在ASBR上配置。
    为了防止路由黑洞,需要在执行路由汇总的路由器上将汇总由指向空接口(null0),在IOS 12.1(6)以后的版本,配置汇总后会自动产生指向空接口的路由,但在IOS 12.1(6)及以前的版本需要手工创建。
    注意:OSPF RFC (1583)并没有规定一个区域适合多少台路由器,一个网段多少个邻居,或如何布署网络。

    展开全文
  • 文章目录Pre什么是 IP 协议?IP 协议的工作原理 Pre ... 但是在网络层,IP 协议几乎一统天下。IP 协议目前主要有两个版本 IPv4 和 IPv6。...相信你经常会碰到一些和 IP 协议相关的名词,比如一道常见的面试题目:路由

    在这里插入图片描述


    Pre

    如果说传输层协议,除了 TCP/UDP,我们还可以有其他选择,比如 Google 开发的 QUIC 协议,帮助在传输层支持 HTTP 3.0 传输。

    但是在网络层,IP 协议几乎一统天下。IP 协议目前主要有两个版本 IPv4 和 IPv6。这一讲我们先介绍 IPv4 协议。

    IPv4使用范围很大,平时工作中很容易遇到,比如开发场景、网络优化场景、解决线上问题场景等。相信你经常会碰到一些和 IP 协议相关的名词,比如一道常见的面试题目:路由和寻址的区别是什么?

    因此,学习 IPv4 还是非常有意义的。接下来,就带着对上面的问题,开启今天的学习。


    什么是 IP 协议?

    IP 协议(Internet Protocol)是一个处于垄断地位的网络层协议。 IPv4 就是 IP 协议的第 4 个版本,是目前互联网的主要网络层协议。IPv4 为传输层提供 Host-To-Host 的能力,IPv4 需要底层数据链路层的支持

    在这里插入图片描述
    IP 协议并不负责数据的可靠性。传输数据时,数据被切分成一个个数据封包。IP 协议上层的传输层协议会对数据进行一次拆分,IP 协议还会进一步进行拆分。进行两次拆分是为了适配底层的设备。

    数据在网络中交换(封包交换算法),并不需要预先建立一个连接,而是任由数据在网络中传输,每个节点通过路由算法帮助数据封包选择下一个目的地。

    可靠性保证数据无损地到达目的地。可靠性是 IP 协议上方的 Host-To-Host 协议保证的,比如 TCP 协议通过应答机制、窗口等保证数据的可靠性。 IP 协议自身不能保证可靠性。比如 IP 协议可能会遇到下面这几个问题:

    • 封包损坏(数据传输过程中被损坏);

    • 丢包(数据发送过程中丢失);

    • 重发(数据被重发,比如中间设备通过 2 个路径传递数据);

    • 乱序(到达目的地时数据和发送数据不一致)。

    但是 IP 协议并不会去处理这些问题,因为网络层只专注解决网络层的问题, 而且不同特性的应用在不同场景下需要解决的问题不一样。对于网络层来说,这里主要有 3 个问题要解决:

    • 延迟

    • 吞吐量

    • 丢包率

    这三个是鱼和熊掌不能兼得,我们后续会讨论。

    另外,IP 协议目前主要有两种架构,一种是 IPv4,是目前应用最广泛的互联网协议;另一种是 IPv6,目前世界各地正在积极地部署 IPv6。

    在这里插入图片描述


    IP 协议的工作原理

    • IP 协议接收 IP 协议上方的 Host-To-Host 协议传来的数据,然后进行拆分,这个能力叫作分片(Fragmentation)
    • 然后 IP 协议为每个片段(Fragment)增加一个 IP 头(Header),组成一个IP 封包(Datagram)
    • 之后,IP 协议调用底层的局域网(数据链路层)传送数据。最后 IP 协议通过寻址和路由能力最终把封包送达目的地

    接下来具体看下完整的过程。

    分片(Fragmentation)

    分片就是把数据切分成片。 IP 协议通过它下层的局域网(链路层)协议传输数据,因此需要适配底层传输网络的传输能力。数据太大通常就不适合底层网络传输,这就需要把大的数据切片。 当然也可能选择不切片,IP 协议提供了一个能力就是把封包标记为不切片,当底层网络看到不切片的封包,又没有能力传输的时候,就会丢弃这个封包。你要注意,在网络环境中往往存在多条路径,一条路径断了,说不定其他路径可以连通。


    增加协议头(IP Header)

    切片完成之后,IP 协议会为每个切片(数据封包 Datagram)增加一个协议头。一个 IPv4 的协议头看上去就是如下图所示的样子:

    在这里插入图片描述
    其中分成 4 个部分。

    • 最重要的是原地址和目标地址。IPv4 的地址是 4 组 8 位的数字,总共是 32 位。

    • Type Of Service 服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系。

    • IHL(Internet Header Length)用来描述 IP 协议头的大小。所以 IP 协议头的大小是可变的。IHL 只有 4 位,最大值 1111 = 15。最大是 15 个双字0.0(15*4 字节 = 60 字节)。

    • Total Length 定义报文(封包 Datagram)的长度。

    • Identification(报文的 ID),发送方分配,代表顺序。

    • Fragment offset 描述要不要分包(拆分),以及如何拆分。

    • Time To Live 描述封包存活的时间。因此每个 IP 封包发送出去后,就开始销毁倒计时。如果倒计时为 0,就会销毁。比如中间的路由器看到一个 TTL 为 0 的封包,就直接丢弃。

    • Protocol 是描述上层的协议,比如 TCP = 6,UDP = 17。

    • Options 代表可选项。

    • Checksum 用来检验封包的正确性,如果 Checksum 对不上,就需要选择丢弃这个封包。


    “鱼和熊掌”不能兼得——延迟、吞吐量、丢包率

    上面我们看到 IPv4 协议中提供了一个叫作 Type of Service(服务类型)的字段。这个字段是为了在延迟、吞吐量和丢包率三者间选择。

    延迟(latency)

    延迟指的是 1 bit 的数据从网络的一个终端传送到另一个终端需要的时间。这个时间包括在发送端准备发送的时间、排队发送的时间、发送数据的时间、数据传输的时间等。


    吞吐量(Throughput)

    吞吐量指单位时间内可以传输的平均数据量。比如用 bit/s 作为单位,就是 bps。吞吐量和延迟没有联系,比如延迟很高的网络,有可能吞吐量很高。可以类比成水管很大流速很慢,对比水管很细流速很快,这两种情况,最终流量可以是相等的。


    丢包率(Packet loss)

    丢表率指发送出去的封包没有到达目的地的比例。 在最大流速确定的网络中,丢表率会直接影响吞吐量。

    我们的网络有时候需要低延迟,比如玩一款 RTS 游戏或者 Moba 游戏,这种时候延迟非常重要。另外如果把延迟看作一个平均指标,丢包也会影响延迟——一个包丢了,需要重发。而有的应用需要高吞吐量,延迟不是很重要,比如说网盘下载文件。大部分应用期望丢包不能太严重,比如语音电话,少量丢包还能听清,大量丢包就麻烦了,根本听不清对方说什么。严格希望不丢包的应用比较少,只有极特殊的网络控制管理场景,才需要在互联网层要求不丢包。

    当然这三个条件,通常不能同时满足。如果同时追求延迟、吞吐量、丢包率,那么对网络设备的要求就会非常高,说白了就会非常贵

    因此 IP 协议头中的 Type of Service 字段里,有以下 4 种主要的类型可以选择:

    • 低延迟

    • 高吞吐量

    • 低丢包率

    • 低成本


    寻址(Addressing)

    地址想要表达的是一个东西在哪里。寻址要做的就是:给一个地址,然后找到这个东西。IPv4 协议的寻址过程是逐级寻址。

    IPv4 地址

    IPv4 地址是 4 个 8 位(Octet)排列而成,总共可以编址 43 亿个地址。

    比如 103.16.3.1 就是一个合法的 Ipv4 地址。4 组数字用.分开,是为了让人可读,实际上在内存和传输过程中,就是直接用 32 位。

    可以观察一下103.16.3.1的二进制,如下图所示:

    在这里插入图片描述


    寻址过程

    寻址就是如何根据 IP 地址找到设备。因为 IPv4 的世界中,网络是一个树状模型。顶层有多个平行的网络,每个网络有自己的网络号。然后顶层网络下方又有多个子网,子网下方还有子网,最后才是设备。

    在这里插入图片描述

    IP 协议的寻址过程需要逐级找到网络,最后定位设备。下面我们具体分析下这个过程。

    步骤 1:找到顶层网络

    比如103.16.3.1最顶层的网络号可以和255.0.0.0(子网掩码)做位与运算得到,如下所示:

    复制代码

    103.16.3.1 & 255.0.0.0 = 103.0.0.0
    

    因此103.0.0.0就是103.16.3.1所在的顶层网络。255.0.0.0.称作子网掩码。子网掩码的作用就是帮助根据 IP 地址找到对应子网。子网掩码是很多个1接着很多个0,和 IP 地址一起使用。


    步骤 2:找到下一层网络

    接下来要找到下一级网络,就需要用 IP 地址和下一级的子网掩码做位与运算。 比如:

    103.16.3.1 & 255.255.0.0 = 103.16.0.0
    
    

    其中103.16.0.0就是下一级的网络号。


    步骤 3:找到再下一级网络

    接下来使用255.255.255.0子网掩码找到下一级网络是103.16.3.0。


    步骤 4:定位设备

    设备就在子网103.16.3.0中,最终找到的设备号是1。

    当然子网掩码也不一定都是255,比如这个子网掩码255.240.0.0也是可以的。但通常我们把 IPv4 的网络分成这样 4 层。


    路由(Routing)

    在寻址过程中,数据总是存于某个局域网中。如果目的地在局域网中,就可以直接定位到设备了。如果目的地不在局域网中,这个时候,就需再去往其他网络。

    由于网络和网络间是网关在连接,因此如果目的地 IP 不在局域网中,就需要为 IP 封包选择通往下一个网络的路径,其实就是选择其中一个网关。你可能会问:网关有多个吗?如果一个网络和多个网络接壤,那自然需要多个网关了。下图中,路由器在选择 IP 封包下一个应该是去往哪个 Gateway?

    在这里插入图片描述
    假如,我们要为 IP 地址 14.215.177.38 寻址,当前路由器所在的网络的编号是16.0.0.0。那么我们就需要知道去往 14.0.0.0 网络的 Gateway IP 地址。

    如果你在当前网络中用route查看路由表,可能可以看到一条下面这样的记录。

    Destination14.0.0.0
    
    Gateway16.12.1.100
    
    Mask255.0.0.0
    
    Iface16.12.1.1
    

    这条记录就说明如果你要去往 14.0.0.0 网络,IP 地址 14.215.177.38 先要和 255.0.0.0 进行位运算,然后再查表,看到 14.0.0.0,得知去往 Gateway 的网卡(IFace)是 16.12.1.1。

    当封包去向下一个节点后,会进入新的路由节点,然后会继续上述路由过程,直到最终定位到设备。


    总结

    这里我们梳理学习了 IP 协议和 IP 协议的工作原理。

    • 首先 IP 协议会进行分片,将上游数据拆成一个个的封包(Datagram),
    • 然后为封包增加 IP 头部。封包发送出去后,就开始了寻址过程。寻址就是找到 IP 地址对应的设备。在局域网内,如果找不到设备,就需要路由。
    • 路由就是找到数据应该往哪里发送。最后通过层层路由定位到具体的设备。

    QA

    路由和寻址的区别是什么?

    寻址(Addressing)就是通过地址找设备。和现实生活中的寻址是一样的,比如根据地址找到一个公寓。在 IPv4 协议中,寻址找到的是一个设备所在的位置。

    路由(Routing)本质是路径的选择。就好像知道地址,但是到了每个十字路口,还需要选择具体的路径。

    所以,要做路由,就必须能够理解地址,也就是需要借助寻址的能力。要通过寻址找到最终的设备,又要借助路由在每个节点选择数据传输的线路。因此,路由和寻址,是相辅相成的关系。


    127.0.0.1, localhost, 0.0.0.0 有什么不同

    • 127.0.0.1是本地回环地址(loopback),发送到 loopback 的数据会被转发到本地应用。

    • localhost 指代的是本地计算机,用于访问绑定在 loopback 上的服务。localhost 是一个主机名,不仅仅可以指向 IPv4 的本地回环地址,也可以指向 IPv6 的本地回环地址 [::1]。

    • 0.0.0.0是一个特殊目的 IP 地址,称作不可路由 IP 地址,它的用途会被特殊规定。通常情况下,当我们把一个服务绑定到0.0.0.0,相当于把服务绑定到任意的 IP 地址。比如一台服务器上有多个网卡,不同网卡连接不同的网络,如果服务绑定到 0.0.0.0 就可以保证服务在多个 IP 地址上都可以用。

    在这里插入图片描述

    展开全文
  • iOS 动态路由实现方案

    千次阅读 多人点赞 2022-04-12 16:33:58
    移动端(iOS)的路由 URI 统一资源标识符(Uniform Resource Identifier)是一种用于标识互联网资源的字符串,此种标识允许用于网络中的资源通过特定的协议进行交互操作。URI 最常见的形式就是统一资源定位符 URL...
  • 路由的基本概念

    千次阅读 2021-12-31 14:17:56
    一、什么是路由 1、路由器的作用:网络中的路由器负责为数据包选择转发路径。 2、路由表:每个路由器中有一个路由表,路由表则是若干条路由信息的一个集合。 3、路由条目的各个字段进行解释: ①Destination/...
  • vue路由全面详解(下):路由守卫、缓存路由组件(终于要把路由的常用知识写完啦)
  • 前一篇简单阐述了静态路由中的相关知识(传送门) 本篇就整理一下动态路由的相关内容 动态路由基本概念 动态路由主要是基于以下两点 能否设计一种机制使各个路由器根据自己静态的不完整的信息“学习”出比较复杂...
  • 静态路由与默认路由

    千次阅读 2021-04-02 17:27:48
    静态路由原理与配置 一.路由器的工作原理 路由器本质上是一种网关,是互联网的一个结点设备。实现的功能是不同网络之间的数据包进行存储和分组转发。简单来说,大家可以把路由器理解为网络分发工具。 除了分发工具...
  • 等价路由/浮动路由/路由汇总都是一些十分基础却很重要的知识点,如果基础不打好,万丈高楼凭何支撑,建议都来学习一下,也可以收藏起来慢慢理解,有不会的可以问我,教学相长嘛,文章有不对的十分真诚的欢迎指出
  • ( B) A.TRUE B.FALSE 解析: 13、下面关于末节区域,完全末节区域,NSSA区域理解正确的是( D ) A. 末节区域只能泛洪第三类LSA。完全末节区域不可以洪泛任何第三类LSA(包括默认路由的LSA) B.末节区域可以泛洪...
  • 如何正确解决vue路由模式weixin-jssdk授权问题第一种情况:最常用的history模式第二种也比较常用,hash模式第三种就是memoryHistory总结 第一种情况:最常用的history模式 这里根据项目出现做出总结: 1、Android...
  • 内省(Introspection)对于理解我们一个场景的知识有多少来自于注视点序列以及我们从一次注视中收集了多少是一个很差的指导,但是在本文中我们将假设一次注视(single fixation)给我们的不仅仅是一个单一的被识别...
  • 这一事实不但去掉了Kelly F P’Voice T(2005)结果中内部平衡点的假设条件,而且也可以理解为一种探测机制.我们通过仿真证实了算法的正确性,同时仿真结果也表明局部稳定性的吸引域可以很大,甚至是全局稳定的.
  • AI上推荐 之 MIND(动态路由与胶囊网络的奇光异彩)

    千次阅读 多人点赞 2022-03-23 21:08:16
    读完这篇paper之后,我感觉作者思考出发点应该也是这样,但是人家用了一种更加优雅的方式用户交互过的历史商品进行聚类,即胶囊网络,该网络采用了动态路由算法能非常自然的将历史商品聚成多个集合,每个集合的...
  • Date 20210603 By WJB 由于工作需要,最近开始学习Vue框架,遇到的第一个问题是关于路由(router)方面的问题。 管理路由的解释网上有很多文章
  • 路由与交换技术(笔记)

    千次阅读 2021-12-27 22:42:39
    文章目录第一章一、移动通信网络架构二、数据通信系统三、OSI 参考模型遵循四、双绞线线序五、以太网线缆六、以太网工作原理七、以太网交换机工作...生成树协议)链路聚合技术第三章RIP基本原理BGP路由协议第四章第七章...
  • 1.第一种就是我们前端这边把路由写好,登录的时候根据用户的角色权限来动态展示路由,(前端控制路由) 详情可以看看这个人写的,感觉挺好的https://segmentfault.com/a/1190000009275424,我当时看这个项目看了好久才...
  • vue路由的使用

    千次阅读 2022-01-16 13:56:57
    1. 理解: 一个路由(router)就是一组映射关系(key-value),多个路由需要的路由器(router)进行管理 2. 前端路由: key是路径,value是组件 1.基本使用 安装vue-router,命令: npm i vue-router 引入vue-router之后...
  • 本文介绍了由Sara Sabour,Nicholas Frosst和Geoffrey Hinton所著的论文“胶囊之间的动态路由”。在这篇文章中,我们将描述胶囊的基本概念,并应用胶囊网络(capsnet)检测MNIST数据集中的数字。在本文最后的第三...
  • 日常生活中“路由器”对于每个人来说都是不会陌生的,简单来说我们上网就离不开路由器,而作为代码搬运工,路由器、路由等名词我们来说更是需要深入了解的。 一、路由 1.概念  路由(routing)是指分组从源到目的...
  • 这里写目录标题一、单臂路由1、单臂路由的优点与缺点三级标题三级标题三级标题二、静态路由与默认路由 一、单臂路由 1、单臂路由的优点与缺点 优点:实现不同vlan之间的通信,有助理解、学习VLAN原理和子接口概念。 ...
  • traceroute追踪路由命令

    千次阅读 2022-07-05 15:54:57
    traceroute追踪路由命令
  • 本书详尽阐述单页面Web 应用(SPA)开发技术,从SPA 构建基础入手,通过MV*、模块化编程、路由、模块间通信、服务器端交互等概念的阐述,全面介绍SPA 的设计与架构,帮助读者正确掌握SPA 开发的各方面知识要素。...
  • 科普一下IP路由基础

    千次阅读 2022-02-14 11:14:30
    本文系统介绍了IP路由的基础知识,包含路由起源/背景/作用/转发流程/路由表/最优条目选举办法,适合网络相关人员初学使用
  • [Linux] traceroute 路由跟踪指令用例

    千次阅读 2021-05-15 21:01:19
    traceroute是用来跟踪数据包到达网络主机所经过的路由工具。在Linux系统中,称之为traceroute,在Windows中称为tracert。一条路径上的每个设备traceroute要测3次。输出结果中包含每次测试的时间(ms)和设备的名称及其...
  • 路由基础——路由的基本概念

    千次阅读 2020-05-12 15:05:43
    本篇主要讲的是路由的基本概念,主要有五个知识点:路由的基本概念,路由表,路由信息的来源,路由的优先级,路由的度量值。首先,我先知道一些专业术语: (1)计算机网络(Completely Network)将世界上各种类型...
  • 一、理解什么是react-router history 直接拿开发文档里的原话: React Router 是建立在 history 之上的。 简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 lo...
  • 前端路由详解

    千次阅读 2017-08-14 00:02:20
    什么是前端路由路由是根据不同的 url 地址展示不同的内容或页面,就是把不同路由对应不同的内容或页面的任务交给前端来做,之前是通过服务端根据 url 的不同返回不同的页面实现的。什么时候使用前端路由?在单页面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,563
精华内容 26,625
热门标签
关键字:

对路由理解正确的是