草庐IT

什么是SD-WAN?图文详解五大技术点

ToDesk企业安全远控 2023-04-28 原文

目录

什么是SD-WAN?

为什么需要SD-WAN? 

1. 更快:规划最优路线,降低网络延时

2. 更稳:绕开拥塞线路,避免抖动丢包

SD-WAN,为极速远程而生

庞大机房节点数量决定扎实基建

千万终端实时探测网络质量

智能路线优化

高速数据包转发

负载均衡


使用远程桌面时,被控端的画面经过编码后,需要通过网络传送到主控端。

以我们熟悉的快递举例,快递发出后,要经过站点集散中转、道路运输,最终才能送到目的地。不管是道路的拥堵,还是站点货物的积压,都会使得快递晚到。

同理,远程桌面的传输也面临着网络线路拥堵路由节点数据积压等诸多难题,导致端到端延时大幅提高。

为提高网络传输的质量,OTT SD-WAN技术应运而生,它就像是我们手机里的“行车导航”,实时探测所有节点的网络质量并选择最优传输路线。本篇就将深度拆解Zuler OTT SD-WAN。

什么是SD-WAN?

OTT SD-WAN(Over-The-Top Software-Defined WAN),即顶层软件定义广域网。

广域网,是指覆盖较大范围的网络,比如全国、全球的网络。而在某一区域(如家庭、学校、工厂)内多台计算机互联成为的计算机组则为局域网。

软件定义,是指我们通过软件来管理这个超大网络上的数据传输。全球有大量的运营商,不同运营商网络之间一直缺乏信息交流和统一管理。OTT SD-WAN 就是在运营商网络之上搭建一个统一平台,解决应用层的互联互通问题。

 为什么需要SD-WAN? 

1. 更快:规划最优路线,降低网络延时

运营商网络本身不具备全局视野,每个路由器只能基于局部信息尽力传输。这种方式就像开车没有导航,只能看着沿途的路牌走,无法避开前方拥堵和事故路段。

SD-WAN则给网络带来了“智能导航”,能够提前发现拥堵路段、自动规划最优路线,保障传输的高速稳定。

此外,SD-WAN的“转控分离”架构还能降低网络的处理延时:网络机房负责转发,控制机房负责线路规划和资源调配。二者分工明确,把各自的硬件效率最大化,共同实现更低延迟

 2. 更稳:绕开拥塞线路,避免抖动丢包

除了速度,远程桌面的网络传输更要追求稳定。网络波动带来的抖动和丢包会造成卡顿和画质损坏,严重影响操作连贯性。

SD-WAN能够实时探测全域网络的延时、丢包和抖动情况,主动绕开不稳定线路,从源头上规避网络抖动与丢包即使遇到突发波动,也可以实现毫秒级的快速线路切换,把网络波动的影响降到最低。

SD-WAN,为极速远程而生

SD-WAN和网络优化是一项高度复杂的系统性工程,既需要大规模组网技术,又需要海量数据训练和实战经验积累。

ToDesk团队具备4亿月活规模、超10年的全球网络优化经验,将全球领先的SD-WAN服务引入远程桌面,实现全球任意两个节点间网络延时不超过120ms,终端到边缘节点延时不超过10ms。

庞大机房节点数量决定扎实基建

要实现有效调度,首先就要有足够多的节点机房。ToDesk目前在全国部署的机房数量已经超过200个,覆盖密度远高于传统远控厂商。

此外,ToDesk SD-WAN采用“核心-中层-边缘”三层组网架构,信息高效共享,且骨干节点间专线直连,进一步降低传输延时。

千万终端实时探测网络质量

ToDesk SD-WAN依托覆盖全国的节点机房和千万级在线终端,可以精准感知全国网络状况。

节点之间的骨干线路好比“高速公路”,从用户终端到节点的接入线路好比“最后一公里”。网络质量探测对二者都要兼顾,才能确保全程畅通。

– 对于接入线路,在线终端会定时向节点机房发送探测信号,并选出最快速的接入点,确保数据顺畅进入骨干线路。

– 对于骨干线路,节点之间会互通彼此之间的线路状况,并把信息汇总到SD-WAN控制系统,获得网络质量的全局感知。

智能路线优化

基于实时探测到的信息,ToDesk SD-WAN进行全局计算,选出最佳接入节点和最佳转发路线。

计算过程基于QoE(Quality of Experience)算法,对丢包、延时、抖动等大量指标进行优化平衡。当用户选择不同的流畅度、还原度、资源占用配置时,算法结果也会发生相应变化。

 相较传统路由系统的局部路线选择,SD-WAN站得更高,看得更远,不会因为眼前的路好走而陷入前方的拥堵。规划好路线后,SD-WAN会在数据包出发的第一时间就给它带上“导航”指令,每到一个节点都会按指令走向下一个节点,直至终端。

ToDesk开发了基于最新SRv6的高效IP承载协议,解决了传统IP承载网的孤岛问题,协议结构更精简,解析和转发更迅速。

高速数据包转发

就像快递在集散中心分拣要花时间一样,数据包在机房转发时也有处理时间。如果处理不及时,还会增加数据包的排队时间。

为了提升转发速度,ToDesk在SD-WAN机房中采用了自研的用户态网络转发协议栈,能从两个方面提升处理速度:

  1. 1. 基于DPDK的精简架构,数据包从网络硬件直达用户空间,减少了内核空间与用户空间之间的数据拷贝和系统调用;
  2. 2. 采用轮询模式完成数据包收发,CPU处理数据包的过程不再被打断,节省了CPU切换任务所需的性能和时间。

相比于传统机房的Linux内核级转发,ToDesk的用户态转发速度提升5~6倍,单次转发用时低于1ms。

负载均衡

基于实时探测到的网络情况,对负载较高的网络线路进行智能分流,提前预防网络拥塞的出现,维持系统整体的稳定通畅。

—————————————————

SD-WAN网络和视频编解码技术共同奠定了ToDesk优质体验的基础。ToDesk还将RTC实时传输技术应用到远程桌面传输中,不断拔高低延时、无卡顿的极致用户体验。

下一期,我们将深度拆解RTC技术,一起聊聊远控业内首创的ToDesk RTC引擎带来的全新变革。

敬请期待!

有关什么是SD-WAN?图文详解五大技术点的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  7. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

随机推荐