最近刚开始学习SDN ( Software Designed Networking ),想在论坛记录一下,顺便敦促一下自己多学(mo) 习 (yu),如果有误,欢迎指正!
目前在看的课是:软件定义网络技术 Software Defined Networking,SDN

2-1 SDN的基本架构
ONF三层体系架构:
应用层
控制层:网络虚拟化的一种实现方式,其核心技术是OpenFlow
转发层:实现网络设备控制与转发的分离

具体的体系架构:包括四个平面和两大接口(如下所示)
————————分割线——————————
应用平面 管

北向接口 理

控制平面 平

SDN控制数据平面接口 (CDPI) (南向接口)

数据平面 面
————————分割线——————————

  1. 数据面关键技术:
    对数据面进行抽象建模:一个由多级流表(Flow Table)驱动的转发模型
  2. 控制平面的功能:
    (1)将SDN应用层请求转换到SDN Datapath;
    (2)为SDN应用提供底层网络的抽象模型(状态或事件)
    控制面的关键技术:控制器,网络操作系统(NOS)或网络控制器
    开源SDN控制器:NOX, POX, FloodLight, RYU, OpenDayLight, ONOS ...
  3. 应用平面的功能:
    (1)SDN应用逻辑与北向接口(NBI)驱动
    (2)通过北向接口与SDN控制器交互
    应用逻辑:应用交付能力(负载均衡, 访问控制, 应用加速)
  4. 管理平面的功能:
    (1)静态的工作:网元初始化配置,指定控制器,定义控制器及应用的控制范围
  5. 南向接口的功能:
    (1)转发行为控制,设备性能查询,统计报告,事件通知等
    关键技术:转发面开放协议:允许控制器控制交换机的配置以及相关转发行为
  6. 北向接口的功能:
    (1)控制器将网络能力封装后开放接口,供上层业务调用(REST API成为SDN北向接口的主流设计)

2-2 SDN设计的核心思想:

  1. 解耦(Decoupling):控制平面和数据平面不存在相互依赖,仅遵守相应接口即可
    (问题: 1.控制平面的服务能力性能成为瓶颈
    2.多控制器如何交互路由信息,保持分布式节点的一致性
    3. 控制平面延迟)
  2. 抽象(Abstraction):1.转发抽象;2.分布状态抽象;3.配置抽象
  3. 可编程(Programmable):
    例子: 1. 主动网络:开放网络节点的编程接口,用户数据上根据用户需求执行相应的计算
    2. 4D架构:数据平面,发现平面,扩展平面,决策平面

3-1 SDN数据平面

  1. 传统网络数据平面处理流程:
    输入端口————>拆封和解析,转发策略匹配(查表匹配),转发调度———> 输出端口
    传统网络数据平面的局限性:

    1. 协议相关,只能处理某几种特定的协议数据包;
    2. 功能模块固定,支持有限的用户配置,不支持编程自定义。(如二层表只能对MAC地址进行学习和查找,三层表只能完成IP地址的工作)
  2. 理想中的SDN数据平面架构:
    与传统网络数据平面的处理流程是基本一致的,不过在“拆封和解析,转发策略匹配(查表匹配),转发调度”这一阶段并不受到特定协议的局限性,而是可编程的。而转发表也被重新改成了流表。

  3. OpenFlow模型:

    1. 转发表对应的是抽象通用的流表结构,每个流表可实现用户定义的网络处理功能,从而实现可编程的数据转发处理;
    2. 将数据转发处理抽象成了通用的匹配-动作(Match-Action)过程。
      PS.OpenFlow模型的局限性:
      1. 未实现协议无关转发;
      2. 不支持对数据包解析逻辑进行编程。
  4. PISA架构:
    在数据包进入交换机时候,通过可编程解析器实现了协议无关的数据包解析处理;在入口和出口分别设计了”M-A“动作的处理。

3-2 OpenFlow概述:

OpenFlow架构三个组成部分:

  1. 流表: 知识交换机如何进行流的处理,每个动作关联一个流表项
  2. 安全通道:负责控制器与交换机之间的交互,通过安全通道与远端控制器连接
  3. OpenFlow协议:定义了一种南向接口标准,为控制器与交换机之间的通信提供了一种开放标准的方式

3-3 OpenFlow流表

  1. 什么是流表:特定流的策略表项的集合,负责数据包的查找与转发
    流的概念:
    · 某种共同特征的数据
    · 由网络管理员定义,根据不同的流执行不同的策略
    · 数据以“流”为单位进行处理
  2. 一张流表项包括了三部分:包头域、计数器、动作表
  1. 在动作表中分为两类动作:必备动作和可选动作,而这两个动作都依赖于端口,OpenFlow交换机的端口有:
    端口类型有:物理端口、逻辑端口和保留端口(前两个传统网络中也存在)
    保留端口:指定通用的转发动作(ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、NORMAL、FLOOD)
    4.

ps.今天还拜读了一下(还没读完 读了一半 读完会稍微写一下笔记)Nick McKeown的OpenFlow: Enabling Innovation in Campus Networks ,应该算是SDN比较经典的论文,附在文下,有需要的同学也可以阅读一下
Enabling Innovation in Campus Networks

Enabling Innovation in Campus Networks读书笔记:开篇提出了目前二三层交换机的缺陷,新的、革新性的技术被原有的网络交互流程所限制,新技术难以加入已经完善的体系之中。所以需要有新的架构去迎合技术的创新,而不是在硬件技术上升的同时网络技术停滞不前且僵化。这就是可编程交换机的存在的必要性。

可编程交换机机的初步需求:

  1. 能够支持广泛的研究
  2. 能保证生产流量和实验流量的分流
  3. 能够保证运营商内部技术实现“黑盒”的保密需求
    顺带着提出了OpenFlow交换机的基本架构(上面有讲过了,这里附个图):

然后文中提出了不同“Type” 的OpenFlow交换机应该要实现怎么样的功能:

  1. Type0 (Basic functions):

1.Forward this flow’s packets to a given port (or ports). This allows packets to be routed through the network. In most switches this is expected to take place at linerate.
2.Encapsulate and forward this flow’s packets to a controller. Packet is delivered to Secure Channel, where it is encapsulated and sent to a controller. Typically used for the first packet in a new flow, so a controller can decide if the flow should be added to the Flow
Table. Or in some experiments, it could be used to forward all packets to a controller for processing.
3.Drop this flow’s packets. Can be used for security, to curb denial of service attacks, or to reduce spurious broadcast discovery traffic from end-hosts.
英文并不是很好(如有错误麻烦指正!非常感谢),大概翻译一下就是:
1.对于某个给定一个或几个端口的流的包,要让他能成功在网络中通行(在大多数交换机中这个行为是以“一条直线”的方向来发生的,即不多做处理,仅转发)
2.封装该流的数据包并发送到控制器中。过程如下,数据包被发送到安全通道,在安全通道包被封装后发送到控制器。而对于每一个新流的第一个包,控制器可以决定是否将该流加到流表中。在一些实验里,它可以不仅仅对第一个包进行处理,而是所有报文都被转发到控制器进行处理。
3.丢弃某个流的数据包。该功能可用于安全模块,抑制拒绝服务攻击,或减少来自终端主机的虚假广播发现流量。

Type0匹配的报文头部如下 :

上面提到了生产流量和实验流量的分流,所以还有一条需求:
4.Forward this flow’s packets through the switch’s normal processing pipeline.
允许某流的数据包通过交换机正常的转发流程进行传输。

2.Type1:
文中提到的是对包头进行重写,还有给包进行优先级排序,同时流表需要匹配任意包头的报文,允许non-IP protocols的实验流量在交换机中传输,这就被定义为”Type 1“的交换机。

接着谈了谈Controller的作用,大体跟Vlan一致,从个人的角度去理解就是 ”4. Forward this flow’s packets through the switch’s normal processing pipeline. “的延伸。而更为复杂的Controller被”期待“去动态的加或减掉传输流,与此同时,Controller有权限去决定所有的流怎么工作。一个更更为复杂的Controller被”期待“有不同的实验账号和权限,使工作人员能在不同的流上进行各自独立的实验,而不同的权限则决定着这些流的实验能否被加到交换机中(类比一下华为传统交换机的super1 2 3)。

接着文中提到了“USING OPENFLOW”,举例“Amy-OSPF”:Amy(随便编的)的实验中,她决定用“Amy-OSPF”协议来处理流量,建立自己PC与OpenFlow的网络连接(这就不会打扰到其他人的网络连接)。要做到这一点,她要将一个流定义为通过她PC连接到交换机端口进入OpenFlow交换机的所有流量,并添加一个流入口,匹配的动作为“封装并转发所有数据包”。当她的数据包到达一个新的Controller,她的“Amy-OSPF”会选择一条路由并添加新的流入口,然后按照上述过程处理流量,而后续的数据包会由已经学习过“Amy-OSPF”的流表来进行快速处理。

文中顺延着“Amy-OSPF”的实验过程顺带提出了一些问题:

  1. 一个如此“中心化”的Controller能否有足够快的速度来处理新的流,还要给新的流进行编辑动作;2. 而当一个控制器操作失败的时候要怎么样来处理?
    Ans:在某种程度上,可以用简单的流量开关和中央控制器来解决,但在处理速率上要看实验中的协议复杂程度。通过使控制器(和实验)处于无状态情况,允许在多个分布式设备上进行简单的负载平衡,让可伸缩性和冗余成为可能。

经历了实验过程的阐述,“Amy-OSPF”终于要投入Production Network了,我们期待这个network有这样的两个性能:

  1. Packets belonging to users other than Amy should be routed using a standard and tested routing protocol running in the switch or router from a “name-brand” vendor.
  2. Amy should only be able to add flow entries for her
    traffic, or for any traffic her network administrator has
    allowed her to control.
    第一条是其他用户就用本来“标准的、已经经过测试的”协议进行通信,第二条则是Amy只能控制自己的流量,或者是网络管理员允许Amy管理的流量。

与任何实验平台一样,OpenFlow的大部分实验还没被想到(这个属于OpenFlow的早期论文甚至可以说是创始论文),所以作者提出了一些例子:
Example 1: Network Management and Access Control.

作者表示Openflow在Ethane(虽然感觉像是Ethernet 一类的东西,但是翻译过来是乙烷?有无懂哥能解答一下)上受到很多启发,OpenFlow Switch可以被看作是Ethane的数据通路开关的一种实现。而Ethernet的基本思想是允许网络管理员在中央控制器中定义一个网络范围的策略,该策略通过为每个新流做出允许控制决策而直接实施。

Controller通过每个包与他的发送者之间的关联,将两者进行绑定,本质上Controller接管了DNS,DHCP,当他们加入的时候就进行了身份认证,从而实现了Management和Access Control,从而实现在网络环境中实验特定的process

Example 2: VLANs.
这个就跟VLAN很类似了,就通过打tag来区分不同的分离的网络连接。

Example 3: Mobile wireless VOIP clients.
用户移动后,通过流表的快速处理来实现不同网络通信功能的转换以保证通话质量。

Example 4: A non-IP network.

前段时间看了Named_data_networking,也许也是一种non-IP network了。

Example 5: Processing packets rather than flows.
这个就比较新奇了。例如在入侵侦测系统中,每个包都检查,以保障通信安全;又例如做非常具体的拥塞处理机制,抑或是将一种报文转化成另外一种报文格式。

全文内容大致到这里就结束了,后续就是提了一些Openflow的组织和设备云云,让我们直接跳到Conclusion:好吧Conclusion也就是说了说他们已经实现了基础的OpenFlow network,希望大家都能对这个社区有贡献,全文,结束

5 天 后

继续开坑:一种基于预测与动态调整负载因子的SDN流表优化算法 by 史少平
笔记:
提高SDN系统性能的相关研究工作可分为两个方向:优化SDN控制器性能和增强OpenFlow交换机性能。
优化SDN控制器的性能的研究已经处于成熟阶段,其思路有3种:
1.提高控制软件性能,优化控制器管控能力;
2.控制面纵向扩展,使OpenFlow交换机具有部分控制处理能力;
3.控制面横向扩展,建立多控制器分布协同工作模式。
增强OpenFlow交换机数据转发能力的相关方案思路有两类:
1.基于输入流的特征分析的方案
2.基于流表资源复用的方案

文献[ A Dynamic timeout control algorithm in software defined networks. ]通过分析每次的输入流的到达数量,用 AR 算法预测下一个取样周期内到达的流数量,并用威布尔分布估算下一取样周期中仍然存在于流表中的流表项数量,提出了一种动态调整流表项超时时间的方案。
(问题来了,AR算法究竟是什么,于是去查阅Fitting autoregressive models for prediction,Fitting autoregressive models for prediction (springer.com)

9 天 后

来更新了...发现了《一种基于预测与动态调整负载因子的SDN流表优化算法》里面的主要提到的二次移动平均算法(SMA)并不需要很高深的数学知识...所以先不纠结AR模型了,先把SMA的实现贴一下:
https://paste.ubuntu.com/p/jJ9k6XwV6B/
(丑陋的实现,如果有理解不对的地方请指正!)
python复健 : ( Normal Distribution, White Noise )
https://paste.ubuntu.com/p/SqfgGChv6W/

12 天 后

最近在 Youtube 上遇到了(Computerphile 出的)一个「Software Defined Networking 是什么」的科普向介绍视频,贴在这里给需要/好奇的同学当作参考:

链接:https://youtu.be/Nh2hXUuKXyQ

1 个月 后

最近产能不足(摸鱼) 回来先继续往下开坑

《Shortest path routing algorithm with dynamic composite weights in SDN networks》

( Cite: D. Todorov, H. Valchanov and V. Aleksieva, "Shortest path routing algorithm with dynamic composite weights in SDN networks," 2021 International Conference Automatics and Informatics (ICAI), 2021, pp. 193-197, doi: 10.1109/ICAI52893.2021.9639512. )

Abstract

随着网络资源的增加,全球使用的路由算法无法提供适应的网络利用和Qos以满足终端的需要用户。SDN的引入可以更好的控制网络流量。本文提出了在SDN网络中最短路径路由动态复合权值算法(shortest path routing algorithm with dynamic composite weights)。

1 Introduction

开篇就说网络最近面临的压力越来越大吧啦吧啦,为了解决这些问题:自然就是要提升网络设备的处理能力,那自然就需要钞能力,但这显然不太合理。

传统的IP网络使用OSPF算法(基于Dijkstra的最短路径算法)。OSPF 路由静态地基于设备之间分配的权重来运行。路由表触发重新计算功能是在网络拓扑改变的前提下才进行。因此,在OSPF中,当报文发生拥塞时,即使总流量负载不高也不能通过替代路径发送。并且,他在交通阻塞的时候也不能提供需求的QoS。

为了提供灵活的网络管理和设置and动态and开销的有效性and适应性,SDN被发明了。然后介绍SDN就不多谈了直接跳到下一段。

路由算法可以被分为两类——分别是静态链路开销的路由算法and动态链路开销的路由算法。为了选到最佳路径,静态链路开销一般是基于跳数,距离or链路能力(serial口,e口,g口)。动态链路开销算法根据更复杂的指标(如可用链路容量、链路利用率或链路上的流量对可用带宽的计算)对报文流做出决策。 这提供了更好的QoS,因为每个包可以根据负载分布在不同的流上。

然后这个算法就是用动态节点(dynamic node)和链路权值(link weights)提供可选的流路径来改善QoS,为了实现自己的算法和测试,大佬们就自己开发了个Openflow controller然后在Mininet模拟器上操作。

2 RELATED WORK

介绍了一下大佬之前的具有源主机和目标主机之间链路发现的简单路由算法(simple routing algorithm with link discovery between source and destination hosts),该算法是基于收集主机交换的ARP报文信息来填充内存中的“入流表”。每个交换机包含了这个网络中的所有信息,还有在那个接口能找到他们。该算法具有环路发现机制,防止了在网状拓扑中循环报文的传输。 这种算法是被定义为静态的算法,因为他并没有收起网络状态信息(NSI),交通拥堵的时候也不会有网络路径的改变。它的主要优点是减少了网络流量,降低了控制器的总体负载。

下一段提了一嘴MHA( A Minimum Hop Algorithm )和 WSP ( Widest-Shortest Path Algorithm ) ,都是拓扑变化的时候才改变的时候才分配链路权值。

使用动态路由算法的控制器需要在一个比较短的间隔请求网络状态信息,目的是收集“准确的(当下的)”链路状态信息。控制器根据收集到的信息,计算出最合适的网络流向( flow ),以避免拥塞,满足网络需求。此外,这个控制器可以提供更好的网络利用率和保证一个更好的QoS。

在[9] ( Cite: A. Ali-Sadi, A. Al-Sherbaz, J. Xue, S. Turner, “Routing Algorithm Optimization for Software Defined Network WAN”, AIC-MITCSA, May 2016. ) 里面 大佬们介绍了 SFOP (Shortest-Feasible OpenFlow Path ) 算法 ,用于计算有着可行带宽and最低延迟的最佳路径。这个算法使用了两个参数用于计算最佳路径:i)当前状态的剩余带宽(IncBW)关联矩阵 ( incident matrix of remaining bandwidth (IncBW) for current state ) ,ii) 在现在的网络流向( flow )可能的带宽;在计算出最宽路径和最宽带宽后,该算法将最宽带宽与从交换机接收到的NSI进行比较。

另一个提供客户端和服务器之间连接负载均衡的动态路由算法是用于SDN的Extended Dijkstra最短路径算法 [10] ( Cite: W. Yahya, A. Basuki, J. Jiang, “The Extended Dijkstra’s-based Load Balancing for OpenFlow Network”, IJECE Vol. 5, No. 2, pp. 289-296, April 2015. ) 该算法将边缘权重和节点(交换机)权重都考虑上了,以寻求最合适的路径来规避堵塞。为了计算节点权重,该算法考虑通过该节点的流量之和、该节点每秒处理的流量位数和节点每秒可以处理的比特数。 计算边缘权重(edge weights)的方法是计算是通过这条边的流量、每秒由这条边处理的比特数和每秒可以处理的比特数之和。

静态路由算法相比于动态路由算法要更快的计算流路径,因为他们并不需要通过NSI来进行复杂的计算,以选最优路径。他们最明显的劣势是他们不能避免路径堵塞,不能提供可靠的网络负载平衡或者提供好的QoS。另一方面来说,动态路由算法引入更多的网络流量,并影响带宽,以收集所需的NSI 和可以提供更好的QoS。它们的主要缺点是考虑到未来的近似负荷。

3 PROPOSED ALGORITHM

话题回到了算法本身,是基于动态组合权值的最短路由算法。控制器使用OpenFlow协议以建立交换机双向的交流,以请求NSI和管理流表。这个控制器使用LLDP(Link Layer Discovery Protocol)去寻找交换机之间的链接,还用了ARP来寻找与交换机连接的主机。

A. System modules

Fig. 1 展示了该算法的系统模块,其中包含着最主要的模块是SDN控制器,还有两个子模块:连接模块和路由模块。

SDN控制器模块需要提供主要的功能是建立控制器和使用了OpenFlow协议的入网设备。它也支持用LLDP和ARP信息来收集交换机和主机的连接信息。控制器还使用了额外的交流包来对交换机的健康状态进行检查汇总(类同心跳报文?但是不单止关注着接入状态,估计还要关注网络传输的状态),同时NSI包用于从子模块中收集需要的信息以计算包发送的最佳路径。

连接模块需要提供的功能是映射已连接的交换机和连接的主机之间的链路,通过处理LLDP和ARP消息来识别连接的设备。这个模块同时也设计来操作和储存每一条链路和连接的NSI。其中含有RTT和交换机与链路吞吐量的计算逻辑。

路由模块需要提供的功能是主机之间最可靠的路径,基于连接模块提供的链路信息,然后给控制模块返回新的下一跳路径。为了计算该路径,路由模块使用了链路权值和节点权值,为了减少路径载荷来提供更好的QoS和更低的整体网络载荷。

B. Routing process

在与交换机建立了一个成功的连接之后,控制器需要将所有连接入网的设备进行一个全局的汇总。为了达成这个目的,控制器让Switch A从自己所有开启的端口发一个Packet Out报文,这个Packet Out报文里面包含LLDP包,携带的信息有:port number, MAC address, global identifier(switch的编号)

当LLDP包到达Switch B( Switch A的邻居 ),Switch B就会向控制器发送一个Packet In报文,因为这个从Switch A来的Packet Out报文的目的地址是广播,Switch B不知道怎么操作,所以就给控制器发一个Packet In报文。当控制器收到Switch B发来的包,它会添加一条链路记录,记录了交换机A的传递信息。如果Switch A发的Packet Out报文被主机收到了,主机就直接忽略掉。

为了找到交换机和主机之间的连接,控制器依赖于两个主机之间交换的ARP信息。然后就讲ARP怎么工作(不讲了)。当Switch收到两个host交换的ARP报文,就会给控制器发Packet In报文。

接下来,控制器创建一个后台任务,从交换机和监视器查询NSI,以观察网络状态变化。当控制器讲一个新的节点或者连接插入他自己的数据集,他就会先给“新人”分配一个默认的权值,直到收到Switch发来的“新人”的汇总与开销,才进行替换。
路由过程是基于Dijkstra最短路径算法的,使用了扩展的(extended?)节点和链路权重。SDN网络拓扑可以表现为一个带权的连接图 G=(V,E),其中V代表一串节点,E代表着边缘。他们都不会是负值,因为这个算法只是要选更少负载的路。对于这个图:
用RTT(v)来表示控制器与节点交换的echo数据包的Round Trip Time的移动平均值;
用Throughput(v)和Throughput(e)表示所有流中v和e的移动平均吞吐量值;
用Capability(v) 来代表v能处理的平均带宽;
用Dropped(e)来代表e丢弃的数据包

(1)定义了节点权重的计算:

nw[v]=\frac{RTT(v) \times Throughput(v)}{Capability(v)}(1)

(2)则定义了边缘权重的计算:

ew[e]=\frac{Throughput(e)}{Bandwidth(e)-Dropped(e)}(2)

Throughput(e) 是基于(3)中调和(?)(harmonic)意义的移动平均权重。

R(t)=\frac{n+1}{\frac{n}{R(t)}+\frac{1}{R(n+1)}}(3)
式中,R(t)为调和均值,是一系列吞吐量测量值,其中t = 0,1,2,…,n-1。

式中单位说明:

​ RTT的测量单位是秒;
​ Throughput和Capability是千字节每秒;
​ 对于测量Dropped packets,(2)式中使用的是丢掉的包数;

为了跟踪网络变化,控制器每15秒向所有节点进行请求,并计算新的权重,以及是否有任何节点或边缘挂掉了或添加了新的连接。

C. System workflow

在Fig. 2里面显示了算法的工作流程表。

  1. 握手报文在交换机之间交换,使用OpenFlow协议连接。在这个过程中,控制器和交换机对OpenFlow的最高版本进行协商,同时,交换机也将自己的状态信息(能力)发给控制器。如果在这个过程中有任何的错误发生,那该连接就会被双方终止掉,然后再重新建立一个新的连接。
  2. 当一个新的连接成功建立时,那控制器就会向交换机发送一个Flow Mod指令(集合),过程如下:控制器向交换机发送一个Flow Mod Reset信息,让它清空流表。然后再发指令让交换机将所有收到的包重定向到控制器。
  3. 当成功完成了配置步骤,控制器开启了Discovery Process,控制器就开启了Discovery Process,以收集交换机端口和它连接的设备的信息。为了达成这个目的,控制器让switch从他所有的端口发送LLDP信息。在这种方式下,控制器收集该拓扑的邻居信息。最后,控制器将网络信息保存在它的数据集中。
  4. 下一步,控制器起了一个后台的任务来间歇性的请求NSI和拓扑变化,同时也间歇性的计算节点和边缘权重。然后它开始监听进来的信息。如果接收到一个Packet In信息,控制器先检查它的以太网类型。
    1)如果这个消息是ARP类型,并且是一个以广播为目的地址的报文,同时它也没有被存在任何的交换机连接中,控制器就会存储当前连接的源MAC地址和端口号。在这种方式下,控制器要确保没有重复的host links被创建,所以控制器指示交换机从他的所有端口(除了接收到消息的端口)传递消息。
    2)当控制器收到了一个有目的MAC的Packet In消息,控制器就会检索所有设备的信息,然后计算出最佳路径。计算方法是Dijkstra算法,通过计算节点和边缘权重。最后,它生成一个流路径,使用Packet Out指令将消息发送到下一跳。 此外,控制器通过储存源MAC地址和目标IP地址来防止ARP环路。如果相同的信息从交换机发来,控制器就会直接忽略掉。

4. EXPERIMENTAL STUDY AND RESULTS

实验和结果就不放了,有兴趣的自己看吧,都是数据上的东西。

5.CONCLUSION

我来总结.jpg 这篇论文并不侧重算法,而是结构,fig. 2很好地反映了该结构的工作流程,也算是给广大研究者提供了新思路吧。但是并不是很重要的论文!!!读到一半有点点沉没成本的意味在里面了,不过也算是拓宽一下视野......顺便预告一下新坑:《Fat-trees: Universal networks for hardware-efficient supercomputing》,读读经典结构好了...

    mokkkkkkk 边缘(我猜这里是想表达port)权重和节点(交换机)权重


    我在 https://zhuanlan.zhihu.com/p/404852909 看到的相关表述,边缘接口应该就是连接终端设备(而不是其他交换机接口)的交换机接口吧,边缘权重的边缘指的就是这个吧,而节点权重的节点就是普通的连接其他交换机的接口
    😆

      6 天 后

      Fat-Trees: Universal Networks for Hardware-Efficient Supercomputing

      Link

      1 Abstract

      ​ 该论文展现了一种新式的通用路由网络,名为Fat-trees,可以用来连接通用并行超级计算机的处理器 。一个Fat-trees网络不仅仅可以参数化处理器的数量,还可以参数化其能支持同时通信的数量。

      Introduction略

      2 FAT-TREES(为了效率,直接进入FAT-TREES的部分)

      ​ 本节介绍了作为并行计算路由网络的Fat-trees。我们提出的基于胖树的并行计算这一行为有些arbitrary,并且受到各种connection machine projects的影响。我们使用的并行计算的直观模型是由一组由路由网络互连的处理器组成的并行计算引擎。处理器并不共享一个存储,他们通过路由网络来传输信息交流。路由网络的唯一任务就是去确保所有消息最终尽可能快地到达目的地。

      ​ 胖树是一种基于完全二叉树的路由网络。(Fig. 1) 一组由n个处理器构成的P处于Fat-trees的叶子位置上。底层树的每个边缘都对应着Fat-trees的两个通道:一个是从父结点到子结点,另一个是从子结点到父结点。每个通道由一束导线组成,通道c中的导线数称为其容量,用cap(c)表示。路由网络中信道的容量是由我们能够负担的硬件数量决定的,这个话题将在第四节中讨论。离开Root的通道对应外部世界的接口。每个Fat-tree的内部节点包含着输入通道和输出通道的交换机信息的环(?)(Circuitry)

      ​ 处理器产生的消息被批处理到传递Cycle中。在传递中,一个处理器会通过该网络传输信息给其他处理器。一些信息也许会在这个传递循环中丢失。因此,通常在传递结束时,确认信息会从目标处理器被发送回源处理器。未传递的消息必须在后续传递Cycle中再次发送。(TCP..)

      ————————————————未完待续 不知道啥时候更————————————————

      15 天 后

      SDN开发环境搭建以及Mininet编程
      别人的博客,控制器用的是ryu(安装ryu的时候直接:sudo apt install python3-ryu 就好了),我在按照它的方法安装的过程中碰到了奇奇怪怪的错误(也许是我的问题)但直接apt install肯定最方便。

      25 天 后
      1 个月 后
      11 天 后

      太好了,我也刚刚在接触SDN。 这篇帖子仿佛就像是大数据精准推送般给到我惊喜。

        InkHin 我也还是门外汉XD 个人推荐直接看上面Coursera的课hh 从结构上讲的比较透彻

        22 天 后

        相比于Ryu,似乎找到了自由度更高+非预期更少的解决方案...就是P4
        贴一下官方仓库连接:https://github.com/p4lang/tutorials
        exersice里有基本的代码学习路线,主要还是集中在数据面的编写。
        环境的话,可以直接用官方的镜像+virtualbox+vagrant来搭,当然你喜欢的话也可以到网上找一些教程来进行搭建(但我遇到了奇怪的问题,最后有个库因为gcc的版本装不上,换了好几个版本也不行),所以我的选择是:https://github.com/jafingerhut/p4-guide/blob/master/bin/README-install-troubleshooting.md

        教程2号:https://github.com/nsg-ethz/p4-learning

        教程3号:https://github.com/opennetworkinglab/ngsdn-tutorial
        ONOS结合p4的教程

        © 2018-2025 0xFFFF