【网络干货】二层STP技术详解

一、STP 出现的背景

STP 是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路。由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。

环路的网络中,会产生如下两种情况:

1、广播风暴导致网络不可用。

2、MAC 地址表震荡导致 MAC 地址表项被破坏。

二、STP 基本概念

一个根桥

树形的网络结构必须有树根,于是 STP 引入了根桥(Root Bridge)概念。

对于一个 STP 网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。

网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置 BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。

两种度量

生成树的生成计算有两大基本度量依据:ID 和路径开销。

ID

ID 又分为:BID(Bridge ID)和 PID(Port ID)。

BID:桥 ID

IEEE 802.1D 标准中规定 BID 是由 16 位的桥优先级(Bridge Priority)与桥 MAC 地址构成。BID 桥优先级占据高 16 位,其余的低 48 位是 MAC 地址。

在 STP 网络中,桥 ID 最小的设备会被选举为根桥。

PID:端口 ID

PID 由两部分构成的,高 4 位是端口优先级,低 12 位是端口号。

PID 只在某些情况下对选择指定端口有作用。

路径开销

路径开销(Path Cost)是一个端口变量,是 STP 协议用于选择链路的参考值。STP 协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。在一个 STP 网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。

三要素选举

从环形网络拓扑结构到树形结构,总体来说有三个要素:根桥、根端口和指定端口

根桥 RB(Root Bridge)

根桥就是网桥 ID 最小的桥,通过交互配置 BPDU 协议报文选出最小的 BID。

根端口 RP(Root Port)

所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能 STP 的端口中,根路径开销最小者,就是根端口。很显然,在一个运行 STP 协议的设备上根端口有且只有一个,根桥上没有根端口。

指定端口 DP(Designated Port)

need-to-insert-img

一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根非指定端口都处于阻塞(Blocking)状态,它们只接收 STP 协议报文而不转发用户流量。

四个比较原则

STP 选举有四个比较原则,构成消息优先级向量:{ 根桥 ID,累计根路径开销,发送设备 BID,发送端口 PID }。

在 STP 计算过程中,都遵循数值越小越好的原则。

最小 BID:用来选举根桥。运行 STP 协议的设备之间根据表 2 所示根桥 ID 字段选择最小的BID。

最小累计根路径开销:用来在非根桥上选择根端口。在根桥上,每个端口到根桥的根路径开销都是 0。

最小发送者 BID:当一台运行 STP 协议的设备要在两个以上根路径开销相等的端口之中选择根端口时,通过 STP 协议计算,将选择接收到的配置消息中发送者 BID 较小的那个端口。

最小 PID:用于在根路径开销相同的情况下,不阻塞最小 PID 的端口,而是阻塞 PID 值较大的端口。

五种端口状态

对于 STP,影响端口状态和端口收敛有以下 3 个参数。

Hello Time

运行 STP 协议的设备发送配置消息 BPDU 的时间间隔,用于设备检测链路是否存在故障。设备每隔 Hello Time 时间会向周围的设备发送 hello 报文,以确认链路是否存在故障。当网络拓扑稳定之后,该计时器的修改只有在根桥修改后才有效。新的根桥会在发出的 BPDU报文中填充适当的字段以向其他非根桥传递该计时器修改的信息。但当拓扑变化之后, TCN PDU 的发送不受这个计时器的管理。

Forward Delay

设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此, STP 采用了一种状态迁移机制,新选出的根端口和指定端口要经过 2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。

说明:Forward Delay Timer 指一个端口处于 Listening 和 Learning 状态的各自持续时间,默认是 15秒。即 Listening 状态持续 15 秒,随后 Learning 状态再持续 15 秒。这两个状态下的端口会处于 Blocking 状态,这正是 STP 用于避免临时环路的关键。

Max Age

端口的 BPDU 报文老化时间,可在根桥上通过命令人为改动老化时间。

Max Age 通过配置 BPDU 报文的传输,可保证 Max Age 在整网中一致。运行 STP 协议的网络中非根桥设备收到配置 BPDU 报文后,报文中的 Message Age 和 Max Age 会进行比较:

如果 Message Age 小于等于 Max Age,则该非根桥设备继续转发配置 BPDU 报文。

如果 Message Age 大于 Max Age,则该配置 BPDU 报文将被老化。该非根桥设备直接丢弃该配置 BPDU,可认为网络直径过大,导致根桥连接失败。

说明:如果配置 BPDU 是根桥发出的,则 Message Age 为 0。否则, Message Age 是从根桥发送到当前桥接收到 BPDU 的总时间,包括传输延时等。实际实现中,配置 BPDU 报文经过一个桥,Message Age 增加 1。

三、STP 报文格式

桥 ID、路径开销和端口 ID 等信息,所有这些信息都是通过 BPDU 协议报文传输。

配置 BPDU 是一种心跳报文,只要端口使能 STP,则配置 BPDU 就会按照 Hello Time 定时器规定的时间间隔从指定端口发出。

TCN BPDU 是在设备检测到网络拓扑发生变化时才发出。

BPDU 报文被封装在以太网数据帧中,目的 MAC 是组播 MAC:01-80-C2-00-00-00, Length/Type字段为 MAC 数据长度,后面是 LLC 头, LLC 之后是 BPDU 报文头。以太网数据帧格式如下图。

配置 BPDU

通常所说的 BPDU 报文多数指配置 BPDU。

在初始化过程中,每个桥都主动发送配置 BPDU。但在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置 BPDU 后,才触发发送自己的配置 BPDU。配置 BPDU 的长度至少要 35 个字节,包含了桥 ID、路径开销和端口 ID 等参数。只有当发送者的 BID 或端口的 PID两个字段中至少有一个和本桥接收端口不同, BPDU 报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的 BPDU 报文。

配置 BPDU 在以下 3 种情况下会产生:

只要端口使能 STP,则配置 BPDU 就会按照 Hello Time 定时器规定的时间间隔从指定端口发出。

当根端口收到配置 BPDU 时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。

当指定端口收到比自己差的配置 BPDU 时,会立刻向下游设备发送自己的 BPDU。

BPDU 报文基本格式

need-to-insert-img

标志字段STP 中只使用了其最高位和最低位。

Flags 字段格式

TCN BPDU

TCN BPDU 内容比较简单,只有表 1 中列出的前 3 个字段:协议号、版本和类型。类型字段是固定值 0x80,长度只有 4 个字节。

TCN BPDU 是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点。

TCN BPDU 在如下两种情况下会产生:

端口状态变为 Forwarding 状态,且该设备上至少有一个指定端口。

指定端口收到 TCN BPDU,复制 TCN BPDU 并发往根桥。

四、STP 拓扑计算

网络中所有的设备使能 STP 协议后,每一台设备都认为自己是根桥。此时,每台设备仅仅收发配置 BPDU,而不转发用户流量,所有的端口都处于 Listening 状态。所有设备通过交换配置 BPDU后,进行选举工作,选出根桥、根端口和指定端口。

BPDU  报文的交互过程

如图 1 所示,用{}标注的四元组表示了由根桥 ID(图中以 S1_MAC 和 S2_MAC 代表两台设备的BID)、累计根路径开销、发送者 BID、发送端口 PID 构成的有序组。配置 BPDU 会按照 Hello Timer规定的时间间隔来发送。

STP 算法实现的基本过程

1. 初始状态

由于每个桥都认为自己是根桥,所以在每个端口所发出的 BPDU 中,根桥字段都是用各自的 BID, Root Path Cost 字段是累计的到根桥的开销,发送者 BID 是自己的 BID,端口 PID是发送该 BPDU 端口的端口 ID。

2. 选择根桥

网络初始化时,网络中所有的 STP 设备都认为自己是“根桥”,根桥 ID 为自身的设备 ID。通过交换配置消息,设备之间比较根桥 ID,网络中根桥 ID 最小的设备被选为根桥。

3. 选择根端口和指定端口

根端口和指定端口的选择过程如表 1 所示

一旦根桥、根端口和指定端口选举成功,整个树形拓扑就建立完毕了。

STP 拓扑变化

STP 拓扑变化处理过程如图 3 所示。

1. 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送 TCN BPDU 报文。

2. 上游设备收到下游设备发来的 TCN BPDU 报文后,只有指定端口处理 TCN BPDU 报文。其它端口也有可能收到 TCN BPDU 报文,但不会处理。

3. 上游设备会把配置 BPDU 报文中的 Flags 的 TCA 位设置 1,然后发送给下游设备,告知下游设备停止发送 TCN BPDU 报文。

4. 上游设备复制一份 TCN BPDU 报文,向根桥方向发送。

5. 重复步骤 1、 2、 3、 4,直到根桥收到 TCN BPDU 报文。

6. 根桥把配置 BPDU 报文中的 Flags 的 TC 位置 1 后发送,通知下游设备直接删除桥 MAC 地址表项。

说明:

TCN BPDU 报文主要用来向上游设备乃至根桥通知拓扑变化。

置位的 TCA 标记的配置 BPDU 报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送 TCN BPDU 报文。

置位的 TC 标记的配置 BPDU 报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥 MAC 地址表项,从而达到快速收敛的目的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容