《计算机网络-自顶向下》05. 网络层-控制平面

news/2024/4/30 3:32:31/文章来源:https://blog.csdn.net/qq_43098197/article/details/130037796

文章目录

    • 路由控制方式
      • 每路由控制
      • 逻辑集中式控制
    • 路由选择算法
      • LS —— 链路状态路由选择算法
      • DV —— 距离向量路由选择算法
      • LS 和 DV 算法的比较
    • 自治系统内部路由协议
      • RIP
      • OSPF
    • 自治系统外部路由协议:BGP
      • 通告 BGP 路由信息
      • 选择最好的路由
        • 相关术语
        • 热土豆选择
        • 路由选择算法(路径选择)
    • SDN 控制平面
      • SDN 控制器和 SDN 网络控制应用程序
      • OpenFlow 协议
      • 数据平面和控制平面交互的例子
    • ICMP:因特网控制报文协议

路由控制方式

每路由控制

image-20230401013752871

逻辑集中式控制

image-20230401013825308

控制器与路由器中的控制代理(CA)进行交互,以配置和管理该路由器的转发表。CA 无法直接与控制器交互,而是被动的。

路由选择算法

LS —— 链路状态路由选择算法

在链路状态算法中,网络拓扑和所有的链路开销都是已知的,各个节点(即路由)都需要先获得网络拓扑中的所有链路开销才可以使用 LS 算法计算。

具体操作来说就是,通过让每个节点向网络中所有其它节点广播链路状态分组,其中每个链路状态分组包含它所连接的链路的标识和开销。

节点广播的结果是所有节点都具有该网络中各个点的链路开销,当各个点得到一张完整的链路开销后便可以运行 LS 算法计算出到各个点的最低开销路径,由此得到该路由最终的路由表(也称转发表)。

链路状态算法采用 Dijkstra 算法来实现,但在网络中我们称为 LS 算法。

路由器得到路由表的步骤:

  1. 首先路由器需要得到整个网络拓扑的链路开销。
  2. 得到网络拓扑的链路开销后,使用 LS 算法计算得到路由表。

路由震荡:

image-20230401212730129

图中各点之间的边权表示拥塞程度。

DV —— 距离向量路由选择算法

距离矢量路由选择的基本思想

  • 各路由器维护一张路由表 , 结构如图

    To(目标)Next(邻接点)cost(链路消耗)
    AZ14

    我需要从某个点前往目标点,下一个点我得选择一个前往目标 B 最低开销链路的点。

  • 各路由器与相邻路由器交换路由表 ( 待续 )

  • 根据获得的路由信息 , 更新路由表 ( 待续 )

如下图所示,已知 X、Y、Z 三点到 B 的距离分别为 22、11、10,A 与 X、Y、Z 交换路由表,也得到相应的链路开销为 10、12、4,最终得到从 A 去向目标 B 的最低开销路径的下一个邻接点为 Z。

image-20230401192439241

路由信息更新:

  • 事件一:路由检测到自己到邻居的链路开销发生变化时,它就更新其距离向量。
  • 事件二:邻居路由传给我的路由表中的距离矢量发生了变化,也需要更新。

事件一举例:当 A 到 X 的链路开销变为 5 时,此时 A 需要更新路由表,为了同步,X 也需要更新路由表。

事件二举例:当 X 到 B 的链路开销变为 2 时,此时 X 需要更新路由表,为了同步,A 也需要更新路由表。(此时 A 到 B 的距离最低开销为 12,因此 A 存储的不再是 B-Z-14,而是 B-X-12)

特点:

  • 分布式:每个节点都需要从一个或多个邻接点接收某些信息,执行计算,然后将计算的结果分发给邻居。
  • 迭代:此过程一直要持续到邻居之间无更多信息要交换为止(该算法是自终止的,即没有需要计算的时候,它便自我停止了)。
  • 异步:不要钱所有节点相互之间更新、计算都保持一致。

每个节点都将持续经历如下过程:

image-20230401201245397

无穷计算问题:

如下图所示,

  • 首先初始状态时,A B C D E 均可达,B->A[1], C->A[2], D->A[3], E->A[4]。

  • After 1:B->A 不可达,此时邻居 C 说“我可达呀”,从 C 得到 C->A[2],但 C->A 需要经过 B,而 B->C[1],因此 B 决定从 C 处走,所以从 B 开始若要到达 A,则需要消耗 B->A[3]。

  • After 2:从 B 走到 C 后,C 要到达 A 就必须经过 B,而 B->A[3],因此从 C->A[4]。

  • After 3:从 C 走到 B 后,B 还是无法直接到达 A,因此又是传给 C,因此和 After 1 一样 B->A = C->A[4] + 1 = 4,即 B->A[5]。

    从 B 走到 C 后,此时不再走 B,因此 D < B,且 D 也可以到达 A,即 D->A[3]。

    从 C 走到 D 后,D 的邻接点是 C、E 且都可以到达 A,此时 C->A 和 E->A 的链路开销一致,我们默认选左边的,因此 D->A = D->C[1] + C->A[4] = 5,即 D->A[5]。

  • 如此反复,直至各点都为 INF 无穷,表示 A 点都不可达。

  • TTL 到期后,会自动舍弃该分组。

image-20230401201858226

解决方案:

平分裂 (split horizon) 算法:增加毒性逆转

  • C 知道要经过 B 才能到达 A ,所以 C 向 B 报告它到 A 的距离为 INF ; C 告诉 D 它到 A 的真实距离
  • D 告诉 E, 它到 A 的距离 , 但 D 告诉 C 它通向 A 的距离为 INF
  • 第一次交换 : B 通过测试发现到 A 的路径为 INF, 而 C 也告诉 B 到 A 的距离为 INF, 因此 ,B 到 A 的距离为 INF
  • 第二次交换 : C 从 B 和 D 那里获知 , 到 A 的距离为 INF, 因此将它到 A 的距离为 INF
  • 如此反复,坏消息以一次交换一个节点的速度传播

image-20230401210115614

优点:坏消息以一次交换一个节点的速度传播。

缺点:涉及 3 个或更多节点的环路将无法使用毒性逆转技术检测到,如图所示。

image-20230401210545726

LS 和 DV 算法的比较

报文复杂性:DV 略胜一筹

  • LS:有 n 个节点,E 条链路,发送 O(nE) 个报文。
  • DV:只和邻居交换信息。

收敛时间:LS 略胜一筹

  • LS:O(n2),收敛过程中可能遇到路由震荡。
  • DV:收敛较慢,可能遇到环路、无穷计数问题问题。

健壮性:LS 略胜一筹

  • LS

    • 节点会通告不正确的链路代价。
    • 每个节点只计算自己的路由表,因此错误信息影响较小。
  • DV

    • 节点可能通告全网所有节点不正确的路由代价。
    • 每个节点的路由表可能被其它节点使用,因此错误可以扩散到全网。

两个算法没有输赢,它们现在都在因特网中得到了应用。

自治系统内部路由协议

RIP

OSPF

自治系统外部路由协议:BGP

BGP 解决了 AS 与 AS 之间的通信问题,各个 AS 内部路由协议可以不一致(AS 内部各个路由器的路由协议需要一致),但 AS 与 AS 之间需要保持一致。

BGP 是一种分布式和异步的协议,就像距离向量路由选择协议一样。

在 BGP 中,分组并不是路由一个特定的目的地址,而是路由到 CIDR 化的前缀,即子网。例如 a.b.c.d/x 高 x 比特便是前缀。

BGP 为每台路由器提供了如下任务:

  1. 从邻居 AS 获得前缀的可达性信息。

    BGP 允许每个子网向因特网通告它们的存在,而 BGP 确保在因特网中所有 AS 都知道该子网。

  2. 确定到该前缀的“最好的”路由。

    一台路由器可能知道两条或更多条到达特定前缀的不同路由。需要基于路由策略选择一条最好的。

通告 BGP 路由信息

对于每个 AS,路由器可分为网关路由器和内部路由器。

  • 网关路由器是一台谓语 AS 边缘的路由器,它直接连接到其它 AS 中的一台或多台路由器。
  • 内部路由器仅连接在它自己 AS 中的主机和路由器。
  • 例如:如图,AS1 中 1a、1b、1d 是内部路由器,1c 是网关路由器。

image-20230403131853635

在 BGP 中,每台路由器通过使用 179 端口的半永久 TCP 连接交换路由选择信息。每条直接连接以及所有通过该连接发送的 BGP 报文,称为 BGP 连接。

  • 跨越两个 AS 的 BGP 称为外部 BGP(eBGP)连接
  • 在相同 AS 中的两台路由器之间的 BGP 会话称为内部 BGP(iBGP)连接。
  • 在每个 AS 内部使用 TCP 连接,而不再是物理链路。

image-20230403131916302

向 AS1 和 AS2 中所有路由器通告前缀 x 的可达性信息。

  1. 网关路由器 3a 先向网关路由器 2c 发送一个 eBGP 报文 “AS3 x”。
  2. 网关路由器 2c 接着向 AS2 中内部的所有路由器(包括网关路由器 2a)发送一个 iBGP 报文 “AS3 x”。
  3. 网关路由器 2a 接下来向网关路由器 1c 发送一个 eBGP 报文 “AS2 AS3 x”。
  4. 最后,网关路由器 1c 向 AS1 中内部所有路由器发送一个 iBGP 报文 “AS2 AS3 x”。
  5. 这个过程完成后,在 AS1 和 AS2 中的每个路由器都知道了 x 的存在并且也都知道了通往 x 的 AS 路径。

当然,在真实网络中,从某个给定的路由器到某个给定的目的地可能有多条不同的路径,每条通过了不同的 AS 序列。

网关路由器可能获取有关一个子网X的多条路径,从多个 eBGP 会话上:

  • AS1 网关路由器 1c 从 2a 学习到路径:AS2,AS3,X
  • AS1 网关路由器 1c 从 3a 处学习到路径:AS3,X
  • 基于策略,AS1 路由器 1c 选择了路径:AS3,X,而且通过 iBGP 告诉所有 AS1 内部的路由器

image-20230403135524567

选择最好的路由

从一个给定的路由器到一个目的子网可能有多条路径,那么一台路由器就需要选择一条最好的路径。

相关术语

  • AS-PATH:包含了通告已经通过的 AS 的列表。当某个前缀通过某个 AS 时,该 AS 将其 ASN 加入到该 AS 的 AS-PATH 的现有列表中。

    例如:AS1 到达 3a 可通过 AS-PATH “AS2,AS3,X”,而另一条是 AS-PATH “AS3,X”。

  • NEXT-HOP:是 AS-PATH 起始的路由器接口的 IP 地址。

    例如:“AS2,AS3,X” 其属性 NEXT-HOP 是最左边 AS2 的路由接口地址。

BGP 路由器还使用 AS-PATH 属性来检测和防止通告环路。
如果一台路由器在路径列表中看到包含了它自己的 AS,它将拒绝该通告。

热土豆选择

热土豆路由选择依据的思想:对于路由器 1b,应尽可能快地使用最低开销将分组送出其 AS,而不担心其 AS 外部到目的地余下部分的开销。热土豆路由选择是自私的算法,因为它试图只减小自己 AS 中的开销,而忽略在其 AS 之外的开销。

比喻:热土豆,因为它烫,所以要尽快送出去(尽快送出其 AS)。

路由选择算法(路径选择)

  1. 路由被指派一个本地偏好值作为其属性之一。

    • 一条路由的本地偏好可能由该路由器设置或可能由在相同 AS 中的另一台路由器学习到。
    • 本地偏好属性的值是一种策略决定,它完全取决于该 AS 的网络管理员。
    • 具有最高本地偏好值的路由将被选择。
  2. 若都具有相同的最高本地偏好值,则选择最短 AS-PATH 的路由。

    若采用该规则,则 BGP 将使用 DV 算法来决定路径,其中距离测量单位为 AS 条数,而不是路由器跳数。

  3. 若都具有相同的最高本地偏好值和 AS-PATH 长度,则使用热土豆选择,即选择具有最靠近 NEXT-HOP 路由器的路由。

  4. 若结果上述规则的过滤后,还无法确定下一个路由(即下一跳),那么就使用 BGP 标识符来选择路由。

SDN 控制平面

SDN 体系结构具有 4 个关键特征:

  • 基于流表的转发:分组转发规则被精确规定在交换机的流表中。

  • 数据平面与控制平面分离

  • 网络控制功能:控制平面由两个组件组成:一个 SDN 控制器和若干网络控制应用程序。

    控制器维护准确的网络状态信息(如:远程链路、交换机和主机的状态),为运行在网络控制应用程序提供这些信息、方法,这应用程序通过这些方法能够监视、编程和控制下面的网络设备。

  • 可编程的网络:运行在网络控制应用上的软件,这些软件使用了由 SDN 控制器提供的 API 来定义和控制网络设备中的数据平面。

SDN 控制器和 SDN 网络控制应用程序

控制器的功能大体分为 3 个层次:

  • 通信层:SDN 控制器和受控网络设备之间的通信。控制器和受控设备之间的通信跨越了一个接口,它现在被称为控制器的“南向”接口。
  • 网络范围状态管理层:负责存储有关网络的主机、链路、交换机和其它 SDN 控制设备的最新状态。
  • 网络控制应用程序层:控制器通过它的“北向”接口与网络控制应用程序交互。该 API 允许网络控制应用程序在状态管理层之间读写网络状态和流表。

image-20230405094343514

OpenFlow 协议

OpenFlow 协议运行在 SDN 控制器和 SDN 控制的交换机或其它实现 OpenFlow API 的设备之间。OpenFlow 协议运行在 TCP 之上,使用 6653 端口。

从控制器到受控交换机流动的主要报文有如下:

  • 配置:该报文允许控制器查询并设置交换机的配置参数。
  • 修改状态:该报文由控制器所使用,以增加/删除或修改交换机流表中的表项,并设置交换机端口特性。
  • 读状态:该报文被控制器用于从交换机的流表和端口收集统计数据和计数器值。
  • 发送分组:该报文被控制器用于在受控交换机从特定的端口发送一个特定的报文。

从受控交换机到控制器流动的重要报文有如下:

  • 流删除:该报文通知控制器删除一个流表项,例如由于超时,或作为收到“修改状态”报文的结果。
  • 端口状态:交换机用该报文向控制器通知端口状态的变化。
  • 分组入:一个分组到达交换机端口,并且不能与任何流表项匹配,那么这个分组将被发送给控制器进行额外处理。“分组入”报文被用于将分组发送给控制器。

数据平面和控制平面交互的例子

例子简单,略,只贴图。

image-20230405101526249

ICMP:因特网控制报文协议

ICMP 被用于主机和路由器用来在网络层彼此通信。

主机或路由器使用 ICMP 来发送差错报文和询问报文。

ICMP 报文被封装在 IP 数据报中发送。

ICMP 差错报文如下:

  • 终点不可达
  • 源点抑制
  • 时间过期
  • 参数问题
  • 改变路由(重定向)

不应发送 ICMP 差错报文的情况:

  • 对 ICMP 差错报文不再发送 ICMP 差错报文
  • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报文
  • 对具有多播地址的数据报不发送 ICMP 差错报文
  • 对具有特殊地址(如:127.0.0.1 或 0.0.0.0)的数据报不发送 ICMP 差错报文

常用的 ICMP 询问报文:

  • 响应请求和回答
  • 时间戳请求和回答

ICMP 应用:

  • 分组网探测:ping 命令
  • 跟踪路由:tracerout 命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_283827.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用向量机(SVM)算法的推荐系统

系统整体结构 运行环境 包括Python环境、TensorFlow环境、安装模块、MySQL数据库。 Python环境 需要Python 3.6及以上配置&#xff0c;在Windows环境下推荐下载Anaconda完成Python所需的配置&#xff0c;下载地址为https://www.anaconda.com/&#xff0c;也可下载虚拟机在Li…

【ES】搜索结果处理RestClient查询文档

【ES】搜索结果处理&RestClient查询文档2.搜索结果处理2.1.排序2.1.1.普通字段排序2.1.2.地理坐标排序2.2.分页2.2.1.基本的分页2.2.2.深度分页问题2.2.3.小结2.3.高亮2.3.1.高亮原理2.3.2.实现高亮2.4.总结3.RestClient查询文档3.1.快速入门3.1.1.发起查询请求3.1.2.解析响…

Java面试题总结 | Java基础部分(持续更新)

Java基础 文章目录Java基础一个Java文件里可以有多个类吗&#xff08;不含内部类&#xff09;&#xff1f;创建对象的方法面向对象和面向过程简述自动装箱拆箱Java代码块执行顺序java中的基本数据类型对应的字节数包装类型和基本数据类型的场景java中的关键字分类final关键字st…

数据结构入门(C语言版)线性表中链表介绍及无头单向非循环链表接口实现

线性表之链表导航1、链表的概念和结构2、链表的分类3、链表的实现3.1 结构体定义3.2 接口函数定义3.3 接口函数的实现4、结语导航 1、链表的概念和结构 概念&#xff1a; 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素 。因此&#xff0c;为了表示每…

推荐NLP基础 RNN循环神经网络

NLP概述 Natural Language Processing(NLP, 自然语言处理) 目的&#xff1a;让计算机处理或“理解”自然语言&#xff0c;以执行语言翻译和问题回答等任务&#xff1b;最终 来讲就是构建机器语言和人类语言之间的沟通桥梁&#xff0c;实现人机交流为最终目的。 常见应用&…

Python 虚拟环境迁移到其他电脑

一、背景介绍 在 Python 项目开发过程中&#xff0c;根据不同的项目场景&#xff0c;需要切换不同的 Python 版本。 因此&#xff0c;我们经常会对不同的项目&#xff0c;创建特定的 Python 虚拟环境&#xff0c;实现项目环境间的“物理隔离”。 本地创建 Python 虚拟环境&…

三、位置判断与代码搬移

判断当前位置 判断当前位置是否在SDRAM # < cpu\arm920t\start.S > relocate1: /* relocate U-Boot to RAM */ adr r0, _start /* r0 <- current position of code */ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */ cmp r0, r1 /* dont reloc…

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…

电视王者沦落到再度卖楼求生,家电巨头跌落神坛,凸显行业之囧

电视无疑是中国家电行业中做得最成功的行业之一&#xff0c;在国内市场将外资品牌挤压出市场&#xff0c;还走向了海外市场&#xff0c;不过有一家国内的电视企业如今却无奈再度卖楼求生&#xff0c;这家企业就是长虹。一、长虹的变幻长虹称雄国内电视市场出自上一任领导人倪润…

pytorch 线性回归总结

测试1(y3∗x1−4∗x2y3*x_{1}-4*x_{2}y3∗x1​−4∗x2​),lr1e-2 %matplotlib inline import torch import numpy as np torch.manual_seed(1) from torch.nn import Linear from torch.autograd import Variable import torch.nn as nn import random np.random.seed(1) rand…

Robocup 仿真2D 学习笔记(四)阵型编辑

一、阵型文件介绍 阵型文件里设置的是球员在比赛中的跑位点 基于helios base的阵型文件&#xff0c;在目录/src/formations-dt中 阵型的调用在/src/strategy.cpp 文件&#xff1a; before-kick-off.conf 是球员上场之后的阵型 &#xff08;或进球等待开球&#xff09; no…

049:cesium加载czml文件,显示图形

第049个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载czml文件, 显示图形。这是官网的一个示例,这里转换了处理方式。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共78行)相关API参考:专栏目标示…

暴击一棵树——二叉树入门一(入门基础概念)

目录 1.树的概念 2.二叉树的概念 二叉树&#xff08;Binary Tree&#xff09; 满二叉树&#xff08;Full Binary Tree&#xff09; 完全二叉树&#xff08;Complete Binary Tree&#xff09; 3.堆和二叉树 4、二叉树的结构 1.二叉树的逻辑结构 2.二叉树的物理结构 1.树…

《钢琴调律师 五级》 笔记

声音产生的三个条件&#xff1a;物体振动、媒质传播、人耳接收 复合音&#xff1a;由一些频率不同的简谐成分合成的声音。大多数乐器都是复合音&#xff0c;因此才各有不同的音色特征 纯音&#xff1a;物体做简谐振动所产生的声音 乐音&#xff1a;指有较为明确音调感的声音。噪…

spark第七章:SparkStreaming实例

系列文章目录 系列文章目录 spark第一章&#xff1a;环境安装 spark第二章&#xff1a;sparkcore实例 spark第三章&#xff1a;工程化代码 spark第四章&#xff1a;SparkSQL基本操作 spark第五章&#xff1a;SparkSQL实例 spark第六章&#xff1a;SparkStreaming基本操作 spa…

javaEE+jsp820高校校园设备报修系统dzkfa9程序mysql

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

从C出发 13 --- 多维数组

数组的本质是数据集合&#xff0c;我们在程序里面操作数组&#xff0c;就是在操作数据 数组中的元素能不能是其他程序元素? 这个说法只是表示数组里面的元素是int 类型 而这个数组的类型是 int [5] 由元素类型和数组大小共同决定 int a[10] {0}; // a的类型 : int[10]…

文件小注意

目录 0 前言 1 标识 O_CREAT O_APPEND 2 ftruncate与truncate 3 O_DIRECT与O_DSYNC、O_SYNC 4 open与fopen 5 关于mmap 0 前言 文件操作在软件开发中是很常见的一件事。虽然与它相关的工作看起来不怎么起眼&#xff0c;无非就是通过通过open、read、write、close几个调用…

【MySQL】主从复制过程(实践)

1.安装好2台数据库服务器的系统&#xff0c;然后安装好MySQL软件 [rootjd-mysql ~]# mysql --version mysql Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using EditLine wrapper[rootjd-mysql-2 ~]# mysql --version …

第03章_用户与权限管理

第03章_用户与权限管理 1. 用户管理 ​ MysQL用户可以分为普通用户和root用户。root用户是超级管理员&#xff0c;拥有所有权限&#xff0c;包括创建用户 、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。 MysQL提供了许多语句用来管理用户账号&#…