Broadcom最近推出了他们的新产品broadview,提供telemetry的监控方式,将问题定位至芯片级别,其架构如下: 在交换机侧加入agent,提供对芯片级别的操作:包括信息采集以及报文注入等,北向提供REST接口提供信息交互,控制器侧提供操作的具体逻辑。其官网介绍的功能如下: Buffer statistics tracking Packet tracing and injection Black hole detection Performance metrics for BST Drop counters due to congestion Support for StrataXGS and StrataDNX silicon families Reference implementation for applications…
Read more
最近调研了一些关于数据中心网络监控的论文和解决方案,主要关于丢包和延时的定位排查,现在telemetry的技术比较火热,写点东西小结一下,越来越懒得写博客了,写的不是很详细,特别是后面几篇,也可能有理解不到位的地方,欢迎指正。 1. Pingmesh Pingmesh是微软在2015年提出的,其架构模式在那之前已经在微软的数据中心运行了超过4年,采用商用交换机,每天收集10TB的延迟数据。它能够解决以下三个问题: 定位业务的延迟是否因为网络 提供并且跟踪当前网络服务水平(service level agreement ) 自动排除障碍 微软数据中心采用CLOS架构,如下图所示。拥有的规模如下:服务器规模在10万级别,交换机规模为万,服务器上联万兆。论文中阐述的一些统计和架构如下:时延统计采用端到端,中控系统为微软自己的…
Read more
PortLand是2009年提出的一种数据中心架构模式,它解决了传统架构的几种不足,具有以下几个优点:虚机迁移IP不变且原连接正常;部署前不需要人工配置交换机;任意主机可达;无环;链路失败检测。PortLand采用的是二层架构模式,方便扩容、迁移,同时解决了二层ARP,广播等带来的问题。 下图是几个胖树拓扑(Fat tree)的例子,也是PortLand采用的拓扑。拓扑为三层拓扑,从上而下分别是核心层、汇聚层和边缘层。边缘交换机下连主机,上连汇聚层,一个主机连接一个边缘交换机。几个汇聚层交换机(文中为2个)和几个边缘交换机(文中为2个)互连组成一个Pod。每个汇聚层上连2条链路到核心层,注意一个Pod上连的核心交换机各不相同,这是为了充分负载和容错的考虑。 1.Fabric Manager Fabric Mana…
Read more
VL2数据中心架构由微软在2009年提出,它是一种新型的架构方式,使得数据中心在节约成本的同时,保证资源的灵活动态分配。它支持数据数据中心内服务器之间均匀的高容量(uniform high capacity)、不同服务带宽互相隔离(performance isolation between services)、二层环境(Ethernet layer-2 semantics)。它采用了: 扁平化地址管理,使得不同的服务可以位于数据中心内部不同的位置。 Valiant Load Balancing(VLB)的负载均衡方式。 方便扩容。 通过在小型数据中心的实验,证明了VL2的可用性。本文部分用语可能翻译不是特别恰当,我根据自己的理解进行表述。 1.传统数据中心架构的缺点 传统数据中心架构具有以下几个缺点: 数据中心…
Read more
第一次接触Valiant Load-Balancing (VLB)的时候,对这个意思揣摩了半天,难道是『英勇的负载均衡』?Oh, no...后来才知道,是一个名叫Valiant推出的Load-Balancing方案。本文主要介绍了以下五点内容: 传统网络状况 VLB的算法思想 VLB的扩展,应对不同容量的链路 VLB如何应对链路断开情况 两个VLB网络之间如何连接 1.传统网络的不足 目前的网络流量很难估计和预测,充满了不确定性,这就导致了网络很容易拥塞。举个例子,比如不同数据中心流量传输,可能存在部分链路网络拥塞导致丢包,而部分链路仍然未满载(满流);也可能在平时的时候链路都未满载,而在高峰期就拥塞。所以链路的设计就不断的扩大链路的容量,以满足高峰期流量,降低丢包率,而这种方式的弊端是成本越来越高,且链路空闲导致带宽浪费。…
Read more
vxlan的出现是为了解决vlan的几个局限性:二层网络边界的限制、vlan数量不足、在多租户场景下的不适应。 vxlan定义了vtep(VXLAN Tunnel End Point--虚拟扩展本地网络隧道终结节点)的实体,vtep将虚机产生的数据封装到UDP包头内再发送出去,虚机本身的MAC地址和vlan信息在经过封装后已经不作为数据转发的依据。vtep可以是软件、硬件服务器或网络设备,其实现形式非常灵活,如果将vtep的功能直接集成到虚机Hypervisor内,则所有的虚机流量在进入交换机之前已经被打上新的vxlan标签和udp包头,相当于建立了任意两点之间的隧道。 因为虚机本身的vlan信息对外不可见,因此vxlan添加了一个新的标签VNI (VXLAN Network Identifer--虚拟扩展本地网络标识…
Read more
在之前的文章中介绍过,VEB是一种软件交换机,通过CPU模拟出的简单二层转发功能。它的优点是简单,成本低。缺点是,软件转发流量会消耗CPU资源;另外,虚拟机往往要求特殊的端口队列模型,而单一的物理网卡无法对上层多个虚拟化OS提供不同的队列服务。 因此,一些厂商提出了硬件VEB方案,又称为Hypervisor Bypass方案,也就是说虚机绕过软件交换机直接同网卡打交道,这样做的好处是一个虚机独享一个PCIe通道。但这样的缺点是,每一个PCIe插槽比较珍贵,涉及能耗、散热、空间支出、以及数量上限等问题。所以虚拟化网卡随即产生。 1. 虚拟化网卡 虚拟化网卡具有两大重要特性:虚拟接入和虚拟通道。虚拟接入是:对于服务器外部网络,VN-TAG/VEPA可以区分出不同虚机的流量,并在整个数据中心内部署有针对性的隔离和QoS策略。…
Read more
现有的虚拟接入的服务对象是虚机的网络流量,虚机运行在虚拟化平台软件中,而虚机又运行在物理服务器上,这就使得虚机的流量同时受到上联交换机、服务器网卡和Hypervisor的影响。在虚拟化服务器中一直有一个重要的概念称为VEB(Virtual Etherenet Bridges--虚拟桥接网络),VEB指代的是用于连接虚拟机到接入交换机的网络服务,VEB有软件和硬件两种实现方式。软件比如Open vSwitch。不管是硬件VEB还是软件VEB,它们目前都只能完成简单的二层网络转发,缺乏QoS机制和二层安全策略,流量镜像功能薄弱,但要在VEB里完全塞进一个接入交换机的功能特性,在短期内仍然具有很大难度;其次,网管人员没有独立的管理界面;最后,VEB形成了一个分类的网络接入层,如果VEB作为接入交换机,那么理应该在上面部署与接入交换机一样的端口策略,然而由于VEB与接入交换…
Read more
虚机的动态迁移要求在一个二层VLAN内进行。在常用的三层数据架构中,接入层和汇聚层为二层网络,三层网关设在汇聚层或者核心层,所有二层链路上多运行STP。 1. 二层网络存在的问题 未来数据中心内部的横向流量会越来越大,如果采用STP阻断多余端口,而只启用一条链路,则会导致资源的浪费;其次,二层设计会越来越复杂;然后,传统二层MAC没有层次化概念,边缘设备的MAC地址空间将会耗尽。 如果二层网络没办法解决问题,另一种思路是采用在汇聚交换机和接入交换机上设置IP网关,通过三层路由将所有交换机连接起来,类似的解决方案还包括将网关设备设在核心设备上,通过核心设备集中互联。该方案存在的问题如下: 在虚拟化环境中,虚拟只有在一个二层网络的范围内才能动态迁移,而不能跨三层网关迁移。虚拟化的最大特点是可以将业务动态部署到数据中心的任何…
Read more
本文主要介绍了DNS重定向,健康路由注入和LISP技术,文章参考参见《腾云》。 DNS重定向和健康路由注入都是应对用户访问,根据其位置将流量送到最适合的数据中心,并且在数据中心发生故障时,尽可能快地利用备份中心来吸收请求流量的技术。 1. DNS重定向 DNS重定向的思路是子DNS服务器中动态地维持几个后台数据中心的出口IP地址,针对一般的用户请求返回优先级最高的出口IP。如果其中一个数据中心出现问题,DNS服务器便将其对应的IP地址暂停使用,当收到后续的DNS请求时,便将流量导向仍在正常工作的数据中心,从而在广域网上实现后台资源的负载均衡。 但,DNS重定向远不是一个完美的解决方案,原因如下。 DNS重定向局限于基于域名解析的WEB服务。对于互联网上那些非WEB业务,该方案显得不那么方便。…
Read more
标准的网络QoS流程分为流量识别、流量标记和流量处理三个步骤。 1. 流量识别 流量识别在传统的QoS文档中被称为Classification,目的是将混合在一起的数据流进行分类。流量识别的依据是数据包头的内容,比如目的ip+tcp端口+dscp值。 QoS流量识别没有统一的公开标准,通常采用如下字段: 物理层。物理端口、子接口、PVC接口。 链路层。MAC地址、CoS值、MPLS EXP。 网络层。IP值、DSCP值、IP优先级。 传输层。TCP/UDP端口号。 会话层以上。业务特定标签,如URL等。 许多厂商退出了识别业务流程的功能。如NBAR是内置在CISCO路由器内的深度包检测功能,原理类似于IPS(Intrusion Prevention System--入侵检测设备)。NBAR会将每…
Read more
上篇文章所说的准入技术保证了只有正确的用户可以访问,剩下的工作就是确保这些用户的访问过程安全、可靠。这个也就是VPN发挥用处的地方。 VPN具备两个特性--长连接和加密。长连接的意思是每条VPN有状态,通信双方通过类似『三次握手』机制保证通信对端的唯一性以及数据的可靠性。加密则保证数据传输的私密性。 VPN只是用来描述一种架设在基础网络上的加密通道,至于实现这种效果的技术则是五花八门。比如:VT2P,VPLS,IPsec,EoMPLS等。IPsec和SSL是目前企业市场最常见额两种VPN技术。 1. IPsec IPsec是目前部署最广泛的点对点VPN技术之一。IPsec网关设备将发往对端的数据打包加密后在因特网上传输,对端节点收到数据包后解封装发往最终用户,整个过程中用户感觉不到IPsec隧道…
Read more
网络准入的执行在『加密』之前,只有接入用户的合法性得到保证,数据加密才有意义。目前,存在三种常用的准入技术:二层准入、三层准入、基于客户端方式的认证。 1.二层准入 二层准入是用户在获取三层IP之前必须通过的认证,当用户在接入网络时,需要同网络侧通过二层连接进行认证数据的交互,只有成功通过认证才能向DHCP服务器申请IP,从而发送数据。 二层准入的代表实现方式就是802.1X,由IEEE推出。而EAP是IETF推出的在数据链路层进行认证行为的一种机制。这个逻辑连起来就是,IETF首先制定了在数据链路层进行验证的EAP机制,然后IEEE给出了EAP在以太网环境中的运行机制。注意:EAP可以被运用在任何一种数据链路层智商,例如PPP,以太网。 802.1的认证流程可以归纳为以下四步: 1.1 端口初…
Read more
之前写过一篇简单地三层交换机转发原理,本篇文章介绍二三层交换机内部交换原理,主要参考CCNP的内容。 1.二层交换原理 以太网交换机相比较集线器而言提供了如下几种形式的隔离: 限制冲突域范围在每个端口内。 主机可以工作在全双工模式。 带宽不再共享。相反的,每一个交换端口能够提供专用的带宽,甚至还包括从交换矩阵到另一个交换端口的整个转发过程。这里指数据帧从主机发出,到连接主机的交换端口,然后进入交换机的交换矩阵,最后到达目的端口,数据帧所能占用的带宽都是专用的。 错误帧不会被转发。 流量控制。 支持其他类型的智能过滤或转发。 一个数据帧穿越二层交换机一共经历如下几个步骤: RX交换端口。 入站队列。 CAM和TCAM,注意以下是并行执行的。 3.1 入站及出站的安全ACL(TCAM)。TCA…
Read more
EIGRP也被称为混合路由选择协议或高级距离矢量协议,因为他兼具距离矢量协议和链路状态协议的特征。例如,EIGRP不像OSPF那样发送链路状态分组,而发送传统的距离矢量更新,这种更新包含有关网络的信息以及从通告路由器前往这些网络的成本。EIGRP还具备链路状态协议的特征:启动时与邻居同步网络拓扑信息,随后只在拓扑发生变化时发送具体的更新。 EIGRP默认跳数为100,最大可为255,RIP为16。EIGRP并不使用跳数来计算度量值。管理距离比较: 协议 管理距离 直连接口 0 静态路由 1 EIGRP 90…
Read more
Linux bridge是Linux内核中虚拟网桥的一个实现,它与OpenvSwitch都实现交换机功能,但比后者简单一些,只实现了最简单的二层功能,而没有ovs下诸如QoS,OpenFlow,netconf等等复杂的功能。本文主要参考《深入理解Linux网络技术内幕》,更像一个读书笔记性质的小结。 虚拟网桥是定义在真实设备之上的一个抽象设备,当该真实设备发生状态变化,则Linux bridge会受到影响。netdevice通知链向内核注册br_device_event回调函数,任何真实设备的变动会触发该回调函数。 下图是在有无网桥情况下收发包的示意图。在设备上传输数据是通过dev_queue_xmit执行的,它会调用设备驱动函数hard_start_xmit进行发包,中间有一些查找发包的过程。dev_queue_xm…
Read more
第一跳冗余协议用于将多台物理路由器配置成一台逻辑路由器,从而到达做热备以及负载均衡的目的。该协议向所有客户端提供一台虚拟路由器,其具有虚拟IP和MAC。在客户主机上将默认网关配制成这个虚拟IP,每当发送ARP请求,将会返回虚拟MAC,达到热备以及负载均衡的目的。而对主机来说,具体哪台物理路由器进行转发,以及某一台down掉之后进行切换热备,这些都是透明的。下面介绍FHRP下面主要的三种协议:热备用路由协议(HSRP),虚拟路由器冗余协议(VRRP),网关负载均衡协议(GLBP)。 1.热备用路由协议(HSRP) 这个是思科专用协议,主要向本地子网中得主机提供冗余网关,但并非一个最好的负载均衡解决方案。其缺点在于只有一台路由器处于活动状态,其他路由器都处于备用,只有发生故障才会进行切换,所以利用率低下。 备用组至少包括两…
Read more
openflow里面有个buffer_id的概念,用于标记缓存在交换机中的报文的id,该报文会被发送packet-in到控制器,控制器决策后下发带buffer_id的命令冲洗处理该报文,通常的处理命令为重走pipeline。 openflow中有如下两种方式可以发送带有buffer_id的报文: 下发Packet-Out消息。消息中可以选择是否带有buffer_id,如果不带(即buffer_id=NO_BUFFER)则直接从OutPort指定的端口发包;如果带有该buffer_id,则Packet-Out消息中的OutPort将会被忽略,转为指向保留端口TABLE,则标识将缓存在该交换机中的该报文重走pipeline,送入到第一个table,往往是table 0。 下发Flow-Mod消息。同样,消息中可以选择是否带有buffer_id…
Read more
最近系统的学习了下ospf路由协议,ospf较rip还是复杂很多,很多状态变迁,区域划分,不同的报文交互。每当拓扑发生变化,每台路由器都重新计算数据库,单个区域的ospf势必会导致拓扑过大,重计算消耗cpu的时间,以及存储完整地链路状态数据库消耗大量内存,所以在拓扑复杂情况下一般建议划分多个区域。 ospf下路由器有以下几种角色:主干路由器、内部路由器、区域边界路由器、自主系统边界路由器。链路状态通告(LSA)描述了路由器及其连接的网络。路由器彼此交换LSA以获悉完整地网络拓扑,这让所有路由器的拓扑数据库都相同。建立拓扑数据库后,OSPF使用Dijkstra算法找出前往每个远程网络的最佳路径,再将它们加入到路由选择表。 1.DR和BDR DR和BDR:在OSPF网络中,各路由器之间不直接两两发链路状态信息,而是通过选举…
Read more
最近需要用Quagga连接SDN controller运行路由协议,代替TOR跑ospf,其实这个在一个TOR的状态下是一点问题都没有的,参考一下官网文档就能很快搞定。但问题的关键是我有两个TOR,然后问题就出现了,如何在Quagga上运行两个ospfd进程?方法如下: 找另外一台机器,无论是本地启动虚拟机也好,或者找一台物理机器也好,运行两个Quagga,然后做RPC通信。 做Namespace隔离,隔离出两个ospfd进程 方法一比较曲折,这对于两台TOR来说或许是个缓兵之计,但当我们以后TOR数量增加的时候这个缺陷就暴露了,明显我们不可能为每台TOR搞个物理机器或者虚拟机。然后想着想着想到了docker,搞个轻量级虚拟机;再然后我仔细一想,直接自己做隔离好了。想法不错,动手开搞,调查了好久发现这个方法也太困难了,关于linux na…
Read more