STP是一个古老的协议,把它从故纸堆里扒出来是因为对理解现而今的数据中心网络的防环还是有一定帮忙的。在VMware环境中,VM连接的网络是虚拟的,是否会有环路吗?

STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于在网络中建立树形拓扑,消除网络中的环路,并且可以通过一定的方法实现路径冗余。

技术原理 (不关心网络的同学可以跳过这一段)

Spanning Tree Protocol(STP)在IEEE802.1D文档中有详细定义。

STP的基本原理是通过在交换机之间传递BPDU网桥协议数据单元(Bridge Protocol Data Unit)协议报文来确定网络的拓扑结构。BPDU有两种,配置BPDU(Configuration BPDU)和TCN BPDU。前者是用于计算无环的生成树的,后者则是用于在二层网络拓扑发生变化时产生用来缩短MAC表项的刷新时间的(由默认的300s缩短为15s)。

STP的基本思想是按照"树"的结构构造网络拓扑结构,因此可以消除网络中的环路,避免由于环路的存在而造成广播风暴问题。树的根是一个称为根桥的Bridge设备,根桥的确立是由交换机或网桥的BID(Bridge ID)确定的,BID最小的设备将成为二层网络中的根桥。BID是由网桥优先级和MAC地址构成。由根桥开始,逐级形成一棵树,根桥定时发送配置BPDU,非根桥接收配置BPDU,更新最佳BPDU并转发。这里的最佳BPDU指的是当前根桥所发送的BPDU。如果接收到了下级BPDU(新接入的设备发送BPDU,但该设备的BID比当前根桥大),接收到该下级BPDU的设备将会向新接入的设备发送自己存储的最佳BPDU,以告知其当前网络中根桥;如果接收到的BPDU更优,将会重新计算生成树拓扑。

当非根桥在离上一次接收到最佳BPDU最长寿命(Max Age,默认20s)后还没有接收到最佳BPDU的时候,该端口将进入监听状态,该设备将产生TCN BPDU,并从根端口转发出去,从指定端口接收到TCN BPDU的上级设备将发送确认,然后再向上级设备发送TCN BPDU,此过程持续到根桥为止,然后根桥在其后发送的配置BPDU中将携带标记表明拓扑已发生变化,网络中的所有设备接收到后将CAM表项的刷新时间从300s缩短为15s。整个收敛的时间为50s左右。

为了更好的实现收敛,在IEEE 802.1w规定的快速生成树协议RSTP,收敛速度可达到1s,这个在后面也会介绍。

STP实现的几个过程:

1、生成树初始化与收敛

STP首先要建立一个根节点称为根网桥,并构建了拓扑,网络中每一个节点都只有一条路径可以到达,最终生成的树起源于根节点,不属于最短路径树的一部分冗余链路会被阻塞,所以可以实现一个无环路的拓扑。(在阻塞链路上收到数据帧将会被丢弃。)

STP需要网络设备互相交换消息来检测桥接环路,交换机发送的用于构建无环路拓扑的消息称为网桥协议数据单元BPDU。阻塞端口会收到BPDU,以保证当活动路径或设备发生故障的时候,仍然可以计算出一棵新的生成树。BPDU将提供足够的信息,所有交换机利用此信息可以完成以下的工作:

选择一台单独的交换机作为生成树的根。

计算它自身到根交换机的最短路径。

对于每一个LAN网段,指定一台交换机作为最接近的交换机,称它为指定交换机,指定交换机处理所有从LAN到根交换机的通信。

每个非根交换机选择自身的一个端口作为根端口,它是到根交换机路径最短的接口。

在每个网段上选择属于生成树一部分的端口作为指定端口,非指定端口将被阻塞掉。

运行生成树协议的交换机上的端口,总是处于下面四个状态中的一个:

1)阻塞:所有端口以阻塞状态启动以防止回路,由生成树确定哪个端口切换为转发状态,处于阻塞状态的端口不转发数据帧但可接受BPDU。

2)监听:不转发数据帧,但检测BPDU(临时状态)。

3)学习:不转发数据帧,但学习MAC地址表(临时状态)。

4)转发:可以传送和接受数据数据帧。

STP四步初始化原则

STP在建立无环路逻辑拓扑时候,STP必须遵守“STP 四步初始化原则” 即:

第1步:最低的根BID。

第2步:最低的路径开销到根桥。

第3步:最低的发送方BID。

第4步:更低的端口ID。

当一台网桥设备加电起动时,按照(Hello Time)时间间隔为2秒频率向所有端口发送BPDU,网桥通过以上4个步骤来确定每个端口得到最优先的BPDU。如果自己最优先,则发送給对方,否则停止发送,接受对方的BPDU。如果在20秒时间未能收到对方发来的优先级高的BPDU的话,则又开始重新发送BPDU来确认最优的BPDU。

这里可以看到根桥是非常重要的,在网络中经常要设计为主备2个根桥设备。

STP潜在故障

1、双工不匹配:在点到点链路上,双工不匹配是一种常见的配置错误。当链路的一段采用手工的方式配置为了全双工模式,而另一侧却使用自动协商的默认配置的时候,那么就可能发生双工不匹配的情况。

2、单向链路失效:单向链路是产生桥接环路的一个非常常见的原因。如果光纤链路存在没有检测出来的故障或收发器故障,通常导致单向链路。在启用STP来提供网络冗余的情况下,对于两个链路伙伴之间所连接的物理链路,如果由于某种原因导致这条链路工作在单向通信的状态下,那么就可能导致桥接环路或路由选择黑洞,进而对维护网络稳定非常有害。

3、帧破坏:帧破坏是导致STP故障的另外一种原因。如果接口正在经受高速的物理错误,其结果有可能就会导致BPDU丢失,而这会使处于阻塞状态的接口过渡到转发状态。虽然如此,但因为STP默认参数是非常保守的,所以很少会发生上述情况。

4、资源错误:即使在通过专门的ASIC硬件执行大部分交换功能的高端交换机中,STP仍然由CPU来执行。这就意味着:如果处于某种原因而过度使用了网桥的CPU,那么就可能导致CPU没有足够的资源来发出BPDU。通常情况下,STP不是一种密集调用处理器的应用,而且STP的优先级高于其他进程。因此,出现资源问题的可能性并不大。

5、PortFast配置错误:如果管理员在端口上启用了PortFast特性,那么当链路启动的时候,端口就会绕过STP的监听和学习状态,并且直接过渡到转发状态。但是如果在错误的端口上配置了PortFast特性,那么这种快速过渡就有可能导致桥接环路。

可见STP还是非常复杂的,如果配置不当对整个数据中心网络会带来非常大的影响。

对于在实际中交换机与VMware vSwitch连接的场景,建议开PortFast,不接收BPDU。这个和VMware vSwitch的设计有关。

VMware vSwitch的避免环路设计

如图,VMware的vSwtich虚拟交换机只提供虚拟机与虚拟机之间通信,或者虚拟机与外部网络之间通信;多个虚拟交换机之间无法直接通信。同时,连接在同一虚拟交换机的多块物理网卡间也不会直接通信。 这种方式可以避免形成虚拟交换机与物理交换机间的环路。

那么网桥协议数据单元(Bridge Protocol Data Unit)是否会被发送到虚拟交换机或和虚拟交换机进行BPDU交换呢?其实,vSwitch是不会参与到STP的过程中的,也不会产生BPDU报文。

对于物理网络PDU的发送会有一个逻辑的边界,通常是终端物理交换机。这样BPDU数据包就不会被发送到物理网卡或者虚拟交换机中。

在一个复杂的网络环境中,由于链路的变更计算、STP状态更新可能需要花费30~50秒才能在全部链路交换设备中更新完毕,而在此期间,多个端口可能会受到影响导致较长时间的网络中断,为了避免此情况,建议在STP协议的网络环境中,将连接到虚拟交换机的网卡所连接的物理交换机端口启用Portfast功能,让端口在链路状态改变情况下快速恢复通信。

同时这里也建立配置BPDU Guard功能。BPDU Guard使具备PortFast特性的端口在接收到BPDU时进入err-disable状态来避免桥接环路。正常情况下,配置Portfast的端口接的是服务器类设备,不会发送BPDU。但如果这个端口收到了BPDU那一般是有环路出现了。BPDU Guard马上防环。

如果虚拟机往虚拟交换机发送BPDU,又会怎么样呢?如果出现这种情况,会出现虚拟交换机被迫参与STP计算而被截断链路,来避免环路。但这实际上会造成了虚拟化平台内部网络影响。

如果要防止此情况发生,需要在esxi主机上启用BPDUFilter功能,将BPDU数据包在虚拟机端口处直接屏蔽掉。

方法如下:

本文参考如下网站:

baike.baidu.com

www.vmware.com

www.cisco.com

转发请注明!

bpduguard使用在接着虚拟机的服务器上,避免网络环路:STP和VMware vSwitch相关推荐

  1. 使用mvc模式读取服务器上的文件,关于C#:如何使用asp.net MVC应用程序从服务器上的网络路径读取...

    我已经在运行.net MVC应用程序的Web服务器上设置了到另一台用于存储上载文件的服务器的网络路径.为了允许通过应用程序将文件上传到网络路径,我修改了IIS中的应用程序池,以便该应用程序有权上传到它 ...

  2. 华为服务器建虚拟机,在服务器上创建虚拟机

    在服务器上创建虚拟机 内容精选 换一换 服务器迁移通常有三种手段:全新部署业务.主机迁移服务.镜像迁移,如表1所示.对于华为云上云服务器的跨帐号跨区域迁移,建议采用镜像迁移方式.跨帐号跨区域迁移云服务 ...

  3. 虚拟机服务器怎么安装驱动程序不正常怎么办,虚拟机安装不上虚拟网络驱动怎么处理...

    VMware安装网卡驱动的方法 下载完成后,是一个iso文件,文件名为vmware-esx-drivers-net-igb_400.3.0.18-1vmw.2.17.249663.396986.iso ...

  4. 如何使用Xshell将文件传输到linux虚拟机或服务器上

    1-使用rz命令进行查看是否安装了lrzsz程序 2-如果没有安装,使用yum -y install lrzsz进行安装 3-安装完成好使用命令rpm -qa lrzsz查看是否安装 4-点击 属性- ...

  5. vm迁移虚拟机到服务器上,迁移

    您可使用冷迁移或热迁移将虚拟机从一个计算资源或存储位置移至另一计算资源或存储位置.例如,您可使用 vSphere vMotion 将已打开电源的虚拟机从主机上移开,以便执行维护.平衡负载.并置相互通信 ...

  6. 服务器系统盘符加密,在CentOS 8系统服务器上设置网络绑定磁盘加密(NBDE)

    在Linux服务器环境下,完全的磁盘加密是很难可靠地做到的.因此,世界各地的数据中心中的很多服务器都没有加密.如今,这很快成为一种不可接受的做法.Red Hat最近尝试了这个方法,并为我们提供了网络绑 ...

  7. 解决使用ssh工具远程连接到服务器上因为网络波动而需要重连的问题

    ###测试环境:服务端centos7 客户端mac os ###问题描述: 在连接使用ssh连接远程的centos7时,因为网络出现波动后,导致需要重新连接使用ssh命令连接centos7. ###解 ...

  8. 部署jsp到虚拟机服务器上

    title: 部署jsp项目到虚拟机服务器上 date: 2019-04-30 21:59:14 tags: [jsp, 服务器] 记录如何部署jsp项目到远程虚拟机或者服务器上 准备工具: Xshe ...

  9. 虚拟机安装 服务器 Ubuntu Server20.04.2

    虚拟机安装 服务器 Ubuntu Server20.04.2 下载地址 VMware创建新的虚拟机 首选选择典型 稍后安装操作系统,并点击下一步 选择Linux Ubuntu64位 命名虚拟机 指定虚 ...

最新文章

  1. iOS ViewController的生命周期
  2. Python环境的安装
  3. IT项目管理总结:第十章 项目沟通管理
  4. 网络知识:电脑无线网连接不上问题汇总!
  5. Oracle Weblogic 11g(10.3.4)的小知识
  6. poj1548Robots dfs实践
  7. 超级简单的自动刷新_支付宝自动收取能量、偷能量、超级简单教程,荣耀V20亲测可用...
  8. 报表引擎API开发入门—带参程序数据集
  9. 如何更省钱的在矩池云上使用pycharm
  10. 【Shell】数某关键字在文件中出现次数
  11. Open3d之颜色映射优化
  12. python类创建多个实例是同一个实例_创建一个类的多个实例
  13. xCheckRDCostMerge2NX2N函数流程
  14. “差不多先生”姚劲波和不再神奇的58同城
  15. 三妈式初音miku_【MMD模型】三妈式初音 Appearance Miku 原版
  16. starops 云效运维 文档_云效手册专有云版.pdf
  17. 计算机可以谭音乐吗,武汉音乐学院作曲系师生作品入选第44届国际计算机音乐大会...
  18. 无法导入android 工程--提示项目已经存在
  19. 实现简单计算器 两个数字的加减乘除计算
  20. (遇到问题) AAAI2021 pdf要求: CYMK颜色空间,png图片300DPI,字体嵌入pdf

热门文章

  1. 各版本的Hadoop安装包下载
  2. 在linux终端中重命名文件,Linux系统中重命名文件的方法有哪些
  3. A7600C USIM卡接口设计
  4. 学废了吗?2022年我的GTD工作流
  5. JavaScript的佛祖保佑
  6. FPGA中ROM IP与RAM IP核配置与调用
  7. AfxGetThreadState 与 _AFX_THREAD_STATE 剖析
  8. IDA安卓动调 模拟器手机(详细)
  9. HDU-6578 Blank
  10. HPE服务器使用ILO5安装系统