总览

路由表

IP层通过路由将数据包送达该送达的目的地址,这就要求在整个网络中建立正确的路由表。路由表的内容是记录要到达哪里下一跳须要发到哪里(能够是port能够是ip),如此整个网络在单个节点仅仅知道自己局部转发信息的情况下就能正确的转发。

路由协议

路由表的原理简单,难的是维护。

怎样在全网络形成这样一张大表。假设在网络变动的时候全网的表高速收敛聚合?假设全部是手动的固然能够实现,可是成本太高。

这就须要自己主动化的协议。这样的形成并更新路由表的协议叫做路由协议。

内部网关协议和外部网关协议

世界假设是一个集权国家,就能够统一规划一个网络(即使如此。可能也会有试验网络)。可是世界各个组织和国家的博弈过程。各组织内部的网络协议不可能统一。可是因特网又希望能够在世界各国自由的通信。

唯一的解决方法就是各个组织之间的交换路由表的方式尽可能的统一。可是各个组织内部怎样组织和更新自己的路由表,各组织是自由的。

这就是外部网关协议和内部网关协议。

常见的路由协议

常见的内部网关协议有RIP、RIPv2。OSPF。IS-IS。常见的外部网关协议有EGP、BGP。

当中内部网关协议眼下最经常使用的是OSPFh和IS-IS。其实这两个协议差点儿是一样的。RIP比較老,用的算法问题比較多,逐渐退出使用。BGP是EGP的升级版,如今一般使用BGP。

分布式分层网络

网络是集中式和分布式的合体,集中式的网络最好管理,可是现实的网络大部分是分布式的。即使是一个组织内部,也被刻意的实现为了分层的分布式的。

同一层次之间的节点的路由表靠同层通信形成,而不是靠上层下发(当然使用上层网络向自治区外的路由仍然须要上层网络的參与)。

如此设计的优点是自己主动化。

集中式的须要顶层管理。而分布式的靠互相协商。

可是像中国这么大的国家。全部路由节点同一层次分布式。必定导致信息爆炸。现实世界使用聚合的思想(也就是分层的思想),将一个区域的节点聚合为一个节点,如此每一个层级都有较少的节点。每一个节点的下部就又构成了一个自治域。

分布式网络路由表可行更新策略与成本

目的是更新同层次和上下层次路由器的路由表,最直观的方案是各个节点都同层广播自己的路由表,再细致想还有更新部分条目的做法。再深入路由表结构。还有公布节点状态或者链路状态。相关节点自己去计算路由表的做法。不管协议怎样设计。都是要解决下面问题:

- 传输问题:

- 传输内容是什么

- 传输给谁

- 是周期性传输还是触发性传输

- 传输想要更新的内容全网更新要多久(收敛、聚合速度)

- 描写叙述问题

- 对不同网络的描写叙述方式是怎样的

- 怎样评价一条链路与还有一条可行链路的质量孰好孰坏

- 怎样定义与划分同一个层级的网络节点

- 怎样与不同层次的节点交互信息

- 认证

- 怎样确定公布路由信息的节点是可信的

这里的路由表都是指路由器上的,而不是普通的主机。普通主机的路由工作都是设置一个网关。将全部上网的数据包直接发送给网关就可以,无需关心路由问题。

传输问题

我们的目的是更新网络中的路由表,传输内容就有:路由表、路由条目、链路状态。前两个非常直观,链路状态是指一个路由器的全部port连接的对端路由器的状态(或者是这个port自己的状态)。比方掉线了。改网段了,连到其它的路由器了等事件。

    传输路由表是RIP採用的方法。而且採用周期性的全网广播(RIPv2引进了多播),当网络比較大时。相应的路由表也就比較大。如此传输不管对带宽还是收敛速度来说都是差点儿不可接受的。收敛太慢,网络的波动性就大,有的时候第一个路由表还没收到。第二个同一个节点的更新已经来了。对于变化比較多的大型网络拓扑来说差点儿无法使用。

所以OSPF和IS-IS採用传输链路状态的方法。我们知道路由表中记录的是下一跳。并非链路状态,可是每一个路由器能够依据其它路由器的链路状态动态计算出下一跳(比如B到10.0.0.0/24网段的链路断掉了,A就能够计算出要到10.0.0.0/24网段的吓一跳不能是B了。要看看其它路由器有没有链接到这个网段的链路)。

网络变化带来的传输量

RIP採用距离矢量,OSPF採用的是链路状态。距离矢量路由协议,更新的是“路由条目”,一条重要的链路假设发生变化,意味着需通告多条涉及到的路由条目。链路状态路由协议,更新的是“拓扑”。每台路由器上都有全然同样的拓扑,他们各自分别进行SPF算法。计算出路由条目。一条重要链路的变化,不必再发送全部被波及的路由条目,仅仅需发送一条链路通告。告知其它路由器本链路发生问题就可以。其它路由器会依据链路状态,改变自已的拓扑数据库。又一次计算路由条目。

收敛速度

从一个节点变化到全网络都改变路由表的速度。

RIP的模式自然非常慢。OSPF和IS-IS等先进算法眼下都对链路方式进行了大量的研发。

比如在SPF的基础上发展出了部分更新的ISPF。针对不是掉线,而仅仅是路由信息发生变化的情况(拓扑没变)。发展了PRC(Partial Route Calculate,部分路由计算算法)。针对扩散和计算能否够重叠以加速响应的问题。发展出了LSP高速扩散算法

   当然,这远不是这两个协议发展的终点。比方通过链路质量的变化做预測的预測方法也能够继续向协议整合。

描写叙述问题

对网络的描写叙述

对于传统的IP划分,有A、B、C等网段。但这仅仅是约定划分的,实际的使用中非常多网段都是非标准的VLSM,RIP不认识Variable Length Subnet Masks (VLSM)。通过VLSM能够有效指定一大片网络,能够非常灵活的合并以降低网络条目。

RIPv2引入了这个特性。可是OSPF和IS-IS原生的支持。

RIP将整个层次的网络缺点为一个一个点,到一个点是一跳,最多支持15跳。这样对于大于15跳到达的网络对于RIP来说是不可达的。而且。如此的跳,一定得注意避免环的问题。

OSPF则是链路概念。没有跳数限制,通过收到全网每一个节点的每一个port的状态。在本机画出一张网络图。进而计算出网络拓扑。

如此的信息持有量是不会出现环路的。

   这里的OSPF不会出现环路是针对自治区内部的,自治区之间是能够产生环路的,能够通过OSPF骨干网解决。

同一层次节点划分和与其它层次节点的通信

RIP是全然扁平的,同一层次的全部节点都是在一个广播域。

ospf和IS-IS能够将一个层次的节点进一步划分和聚合。如此假设在一个层次中假设有非常多节点,RIP也无法适应。

OSPF也是会洪泛广播链路变化。假设网络太大,这也是个问题。所以OSPF添加了自治区域(AS)的概念。洪泛仅仅发生在自治区域内。所以一个AS内部全部节点的拓扑数据库是同样的。连接AS的路由器叫做ABR(Area Border Router)。也就是说一台路由器能够同一时候在两个AS。仅仅要是不同的port就好。不论什么一个AS中的不论什么一台路由器都能够作为ASBR与外部网络相连(这个外部网络能够不是OSPF)。

依据路径质量选择下一跳

RIP选择下一跳全然依据跳数,哪个跳数少选择哪个。

而OSPF的通知链路状态的时候会同一时候通知链路质量。每两个节点之间的链路都有权重值来表示质量。如此就非常实际的选择链路质量好的下一跳。

可是这里也还是有问题的,几个断点两两间的链路都好,也并不一定意味着整条链路就是最好的(通常情况是)。所以非常多大公司都会在应用层次再检測一遍,在一个公司的各个机房内又一次做路由。能够说,运营商通过OSPF提供的路由能够满足大部分使用。可是对性能的极致追求还是须要自己优化。

OSPF(IS-IS)採用dijkstra算法来找最短路径,因为每一个节点都有完整的整个自治区内的节点链路状态,所以dijkstra降本节点放在树的根部,然后生成树。两个节点之间的连接全然是基于链路速度,所以这显然不科学,可是又足够科学能够使用。当然。你能够强制的手动指定一个节点到还有一个节点的链路质量。这是一个优化网络该有的做法。

   OSPF有一个对等路由的概念。到一个节点经过几个开销相等的节点时。OSPF会传输到随意一个,这就是负载均衡。所以支持OSPF的路由器天生的支持简单的负载均衡。

OSPF数据包类型

外部网关协议

名词解释

1、 SPF是眼下被各种基于链路状态的路由协议。它採用Dijkstra算法计算最短路径。其基本思路是依据LSDB里描写叙述的拓扑信息构建SPT(Shortest Path Tree,最短路径生成树),然后将LSDB里描写叙述的路由信息作为树上的叶子生成终于路由

2、 ISPF(Incremental SPF,增强SPF算法),主要用于部分拓扑发生变化的情况,在这样的情况下不须要又一次计算整个网络拓扑,而仅仅是将变化了的少量拓扑进行修正,从而大大节约路由计算时间。

3、 PRC(Partial Route Calculate,部分路由计算算法)。主要用于仅仅是路由信息发生变化的情况,在这样的情况下不须要又一次计算网络拓扑,仅仅是依据原有的拓扑生成新的路由信息就可以。从而大大节约路由计算时间。

4、 LSP高速扩散。

为了加快整个网络的收敛速度。当收到其它路由器发来的LSP时,假设此LSP比自己LSDB中的要新。按原来RFC协议的实现,则是用一个定时器,定时将LSDB内的LSP扩散出去,所以LSDB的同步会比較缓慢。

LSP高速扩散特性改进了这样的方式,配置此特性的路由器收到一个或多个比較新的LSP时。在路由计算之前,先将小于指定数目的LSP扩散出去,加快LSDB的同步过程。这样的方式在非常大程度上能够提高整个网络的收敛速度

5、 ISIS智能定时器。

改进了路由算法后,假设触发路由计算的间隔较长,同样会影响网路的收敛速度。

使用毫秒级定时器能够缩短这个间隔时间,但假设网络变化比較频繁,又会造成过度占用CPU资源。SPF智能定时器既能够对少量的外界突发事件进行高速响应,又能够避免过度的占用CPU。

通常情况下。一个正常执行的IS-IS网络是稳定的,发生大量的网络变动的几率非常小,IS-IS路由器不会频繁的进行路由计算,所以第一次触发的时间能够设置的非常短(毫秒级)。假设拓扑变化比較频繁,智能定时器会随着计算次数的添加,间隔时间也会逐渐延长,避免占用大量的CPU资源。

与SPF智能定时器相似的还有LSP生成智能定时器。在IS-IS协议中。当LSP生成定时器到期时,系统会依据当前拓扑又一次生成一个自己的LSP。原有的实现机制是採用间隔时间定长的定时器,不能同一时候满足高速收敛和低CPU占用率的须要。为此将LSP生成定时器也设计成智能定时器,使其能够对于突发事件(如接口Up/Down)高速响应,加快网络的收敛速度。

同一时候,当网络变化频繁时,智能定时器的间隔时间会自己主动延长。避免过度占用CPU资源

Linux内核project导论——网络:路由:路由原理的更多相关文章

  1. Linux内核project导论——网络:Netfilter概览

    简单介绍 最早的内核包过滤机制是ipfwadm.后来是ipchains.再后来就是iptables/netfilter了. 再往后,也就是如今是nftables. 只是nftables与iptable ...

  2. Linux内核project导论——网络:Filter(LSF、BPF、eBPF)

    概览 LSF(Linux socket filter)起源于BPF(Berkeley Packet Filter).基础从架构一致.但使用更简单.LSF内部的BPF最早是cBPF(classic).后 ...

  3. 使用socket BPF/Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)

    使用socket BPF linux 下的 包过滤器 BPF Linux内核工程导论——网络:Filter(LSF.BPF.eBPF) 注意(文中描述的内容): 此外,这段BPF代码还存在的一个问题是 ...

  4. Linux内核project导论——linux学习和职业曲线(刚開始学习的人,中级,高级都可參考)

    Linux世界介绍 给自己定级 门外汉: 不会安装操作系统 不会用虚拟机(安装和使用) 入门级: 熟悉常见的发行版,甚至装过而且能用一些特殊发行版(比如kali)做过一些简单的图形界面的使用. 会一些 ...

  5. Linux内核project导论——前言

    想要研究linux内核.使用linux内核,首先要知道linux内核能做到什么,提供了什么.我看过非常多刚開始学习的人一进入公司就開始使用linux内核开发内核模块.使用的不管是通信方式.内存接口还是 ...

  6. route-显示并设置Linux内核中的网络路由表

    route命令 网络配置 route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两 ...

  7. route---设置Linux内核中的网络路由表

    route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现. 在L ...

  8. Linux内核设计第二周——操作系统工作原理

    Linux内核设计第二周 ——操作系统工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 执行效果 从图中可以看出,每执行my_ start_ kernel函数两次或一次,my_ time ...

  9. linux内核无锁缓冲队列kfifo原理

    Linux kernel里面从来就不缺少简洁,优雅和高效的代码 比如,通过限定写入的数据不能溢出和内存屏障实现在单线程写单线程读的情况下不使用锁.因为锁是使用在共享资源可能存在冲突的情况下.还用设置b ...

随机推荐

  1. Now Task

    1. Java 多线程 首先整理基本功,如线程的状态,和调度 多线程的经典例子,包括代码在内 多线程死锁的问题,要结合数据库的例子来整理 JDK1.5的若干要点 多线程的设计模式 2. NIO 需要掌 ...

  2. 【最大团转最大点独立集(匈牙利算法+时间戳优化)】BZOJ2744-[HEOI2012]朋友圈

    [题目大意] 有两个国家A和B.存在以下朋友关系: 1.A国:每个人都有一个友善值,当两个A国人的友善值a.b,如果a xor b mod 2=1,那么这两个人都是朋友,否则不是: 2.B国:每个人都 ...

  3. 计算标准差 Exercise07_11

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:计算标准差 * */ public class Exercise07_11 ...

  4. Problem E: 调用函数,整数逆序输出

    #include<stdio.h> int reverse(int number)//定义函数 { ;//result用于储存结果 ) { result=result*; i=number ...

  5. Codeforces Round #114 (Div. 1) D. Wizards and Roads 笛卡尔树+树贪心+阅读题

    D. Wizards and Roads 题目连接: http://www.codeforces.com/contest/167/problem/D Description In some count ...

  6. C++ cout输出保留小数

    参考: http://www.cnblogs.com/wushuaiyi/p/4439361.html http://blog.csdn.net/edricbjtu/article/details/4 ...

  7. opengl笔记——OpenGL好资料备忘

    Plane Equation 注:面可理解为:连接面上的点与原点,投影相同(为:a*x1+b*x2+c*x3) OpenGL Matrix Class (C++) Overview OpenGL fi ...

  8. Delphi XE10下用FireDAC与SQLite连接要注意的问题 转

      Delphi在XE的版本上,已经实现了安卓与苹果的移动跨平台,因此只需要一份代码,就可以统领两种手机平台,确实是一种高效的做法和节约的策略. 用Delphi XE7连接SQLite,主流使用Fir ...

  9. mysql 按年月查询

    查询2017的数据:select * from table where year(column)='2017';查找月份为12的数据:select * from table where month(c ...

  10. .Net 有关程序集查找与加载的一点反思

    最近在做一款叫VICA产品,此产品采用了插件机制,插件在运行中加载,插件与插件之间存在依赖关系,所有的插件DLL为方便管理都放置在Plugins的文件夹下统一管理.这种处理方式不自觉的就让我想了解cl ...