当前位置: 首页 > news >正文

TCP/IP详解卷一第三章“链路层”概要总结(未完编辑中)

本章内容还未编辑完,本章内容稍多,每天会更新一两个点的  

在第一章中知道TCP/IP协议族中设计链路层的目的是为IP模块发送和接收IP数据报。它可用于携带一些支持IP的辅助性协议;例如ARP。TCP/IP支持多种不同的链路层,它依赖于使用的网络硬件类型:有线局域网,例如以太网;城域网等等……大多数链路层技术都有一个相关的协议,描述由网络硬件传输的相应PDU格式。描述链路层的PDU时,通常使用术语帧,用以区分那些更高层的PDU格式,例如描述网络层和传输层PDU的分组和段。帧格式通常支持可变的帧长度范围从几字节到几千字节。这个范围的上限称为最大传输单元(MTU)。有些网络技术(例如调制解调器和串行线路)不强制规定最大的帧,因此它们可以由用户来配置。

  一、以太网和IEEE 802局域网/城域网标准

  第一个常见格式的以太网目前被称为“10Mb/s以太网”或“共享以太网”,该网络结构如下图所示;

基本的共享以太网包含一个或多个站(例如工作站、超级计算机),它们都被连接到一个共享的电缆段上。当介质被确定为空闲状态时,链路层的PDU(帧)可以从一个站发送到一个或更多其他站。如果多个站同时发送数据,可能因信号传播延迟而发生碰撞。碰撞可以被检测到,它会导致发送站等待一个随机时间,然后重新发送数据。这种常见的方法称为“带冲突检测的 载波侦听多路访问”。

正是因为这种模式多个站共享同一网络,该标准需要在每个以太网接口实现一种分布式算法,用来控制一个站发送自己的数据。这种特定的方法称为“带冲突(或称碰撞)检测的载波侦听多路访问(CSMA/CD)”,它用于协调哪些计算机可访问共享的介质也就是图中显示的中间那根共享的线路,同时不需要其他特殊协议或同步。

  采用CSMA/CD,一个站(例如计算机)首先会检测目前网络上正在发送的信号,并在其空闲的时候发送自己的帧。这就是协议中的“载波侦听”部分。如果其他站恰好也在这个时候一起同时发送各自的帧,那么,它们发生重叠的电信号被检测为一次碰撞。在这种情况下,每个站等待一个随机时间,然后再次尝试发送各自的帧。这个时间量的选择会依据统一的概率分布,随后每个碰撞检测到的时间长度加倍。最终,每个站会得到机会发送,或者尝试一定次数(传统以太网为16)后超时。采用CSMA/CD,在任何给定的时间里,在网络中只能有一个帧传输。如CSMA/CD这样的访问方法被正式更名为“介质访问控制(MAC)协议”。

  现在以太网除了原有的10Mb/s以太网,还有100Mb/s(快速以太网)、1000Mb/s、10Gb/s甚至更高。在大型数据中心和大型企业中10Gb/s以太网是很普遍的,且可以达到100Gb/s的速度。随着快速以太网的发展,基于竞争的MAC协议以及不太流行。在局域网中每个站之间的线路通常不共享,而是采用一个专用的星形拓扑结构。通过以太网交换机来实现,如下图所示:

一个交换式以太网包含一个或多个站,每个站使用一条专用的线路连接到一个交换机端口。在大多数情况下,交换式以太网以全双工方式(一根介质可以输入与输出数据)运行,并且不需要使用CSMA/CD算法。交换机可以通过交换机端口级联形成更大的以太网,该端口有时也称为“上行”端口。

  目前,交换机为以太网中的每个站提供同时发送和接收数据的能力(称为“全双工以太网”)。1000Mb/s以太网任支持半双工(同时只能接收或输出数据)操作,但很少使用。

  无线网络时现在连接Internet最流行的技术之一。常见的无线局域网(WLAN)IEEE标准称为无线保真或WIFI,有时也称为“无线以太网”或802.11.

二、IEEE802局域网/城域网标准

  原始的以太网帧格式被称为DIX格式或Ethernet Ⅱ格式。对这种类型的以太网稍加修改后,由IEEE标准化为一种CSMA/CD网络,称为802.3。带802前缀的标准定义了局域网和城域网的工作过程。当前最流行的802标准包括802.3(以太网)和802.11(WLAN/Wi-Fi)。下图则为一个相对完整点的列表;

有关TCP/IP协议的局域网和城域网IEEE802标准(2011年版)

802.1ak

多注册协议(MRP)

802.1AE

MAC安全(MACSec)

802.1AX

链路聚合(以前的802.3ad)

802.1d

MAC网桥

802.1p

流量类/优先级/QoS

802.1q

虚拟网桥的局域网/MRP的更正

802.1s

多生成树协议(MSTP)

802.1w

快速生成树协议(RSTP)

802.1X

基于端口的网络访问控制(PNAC)

802.2

逻辑链路控制(LLC)

802.3

基于以太网和10Mb/s以太网

802.3u

100Mb/s以太网(“快速以太网”)

802.3x

全双工运行和流量控制

802.3z/802.3ab

1000Mb/s以太网(“千兆以太网“)

802.3ae

10Gb/s以太网(“万兆以太网”)

802.ad

链路聚合

802.3af

以太网供电(PoE,15.4W)

802.3ah

以太网接入(第一公里以太网)

802.3as

帧格式扩展(2000字节)

802.3at

以太网供电增强(“PoE+”,30W)

802.3ba

40/100Gb/s以太网

802.11a

运行在5GHz的54Mb/s的无线局域网

802.11b

运行在2.4GHz的11Mb/s的无线局域网

802.11e

针对802.11的QoS增强

802.11g

运行在2.4GHz的54Mb/s的无线局域网

802.11h

频谱/电源管理扩展

802.11i

安全增强/代替WEP

802.11j

运行在4.9~5.0GHz(日本)

802.11n

运行在2.4GHz和5GHz的6.5~600Mb/s的无线局域网,使用可选的MIMO和40MHz信道

802.11s(草案)

网状网,拥塞控制

802.11y

运行在3.7GHz的54Mb/s的无线局域网(许可的)

802.16

微波存取全球互通技术(WiMAX)

802.16d

固定的无线城域网标准(WiMAX)

802.16e

固定/移动的无线城域网标准(WiMAX)

802.16h

改进的共存机制

802.16j

802.16中的多条中继

802.16k

802.16网桥

802.21

介质无关切换介质无关切换

  除了802.3、802.11、802.16标准定义的特定类型的局域网之外,还有一些相关标准适用于所有IEEE标准的局域网技术。最常见的是定义逻辑链路控制(LLC)的802.2标准,其帧头部在802网格的帧格式中常见。在IEEE的术语中,LLC和MAC是链路层的“子层”,LLC(对数帧格式)对每种网络都是通用的,而MAC层可能有所不同。虽然最初的以太网使用CSMA/CD,但无线局域网常使用CSMA/CD,但无线局域网常使用CSMA/CA(CA是“冲突避免”)。802.2和802.3共同定义了与EthernetⅡ不同的帧格式,直到802.3x才最终纠正。

三、以太网帧格式

  所有的以太网(802.3)帧都基于一个共同的格式。在原有规范的基础上,帧格式已被改进以支持额外功能。如下图所示:

以太网(IEEE 802.3)帧格式包含一个源地址和一个目的地址、一个重载的长度/类型字段、一个数据字段和一个帧校验序列(CRC32)。另外,基本帧格式中的一个标签包含了一个VLAN ID和优先级信息(802.1p/q),以及一个可扩展标签。前导和SFD被用于接收器同步。当以太网以半双工模式运行在100 Mb/s或以上速率时,其他位可能被作为载体扩展添加到短帧中,以确保冲突检测电路的正常运行。

  图中所示的帧格式包括48位(6字节)的目的地址(DST)和源地址(SRC)字段。源地址后紧跟着一个类型字段或长度字段。在多数情况下用于确定头部后面的数据类型。“注:最初的IEEE(802.3)规范将长度/类型字段作为长度字段而不是类型字段使用。因此这个字段可以用于多个目的(重载)。目前,如果字段值大于或等于1536,则表示类型,若是小于或等于1500,则用于表示长度。当前的【802.3-2008】标准采用修改后的802.3帧格式,提供最大482字节的标签,被携带在每个以太网帧中。这些较大的帧称为信封帧,长度最大可达2000字节。包含802.1p/q标签的帧称为Q标签帧,也就是信封帧。并非所有信封帧都是Q标签帧”

四、帧校验序列/循环冗余校验

   在以太网帧格式中,有效载荷区域之后的最后字段提供对帧完整性的检查。循环冗余校验(CRC)字段位于尾部,有32位,有时也被称为IEEE/ANSI标准的CRC32。如果要使用一个n位CRC检查数据传输错误,被检查的消息需要先追加n位0形成一个扩展消息。然后,扩展消息使用模2除法除以一个(n+1)位的值,这个作为除数的值称为生成多项式。放在CRC字段中的值为这除法计算中的余数的二进制反码(商被丢弃)。

例如以太网使用n=32,CRC32的生成多项式是33位的二进制数100000100110000010001110110110111.。如果我们发送16位的消息1001111000101111就要进行该16位消息除以10011的模2除法运算,其中10011是国际电信联盟(ITU)将CRC4的生成多项式的值标准化为10011的。最后得出余数为1111其反码为0000放置在帧的CRC或帧校验序列(FCS)字段中,商为0101(丢弃),结果为100001100000.在接收方执行相同得除法得出余数,并判断该值与FCS字段得值是否匹配。如果两者不匹配,帧可能在传输过程中受损,通常被丢弃。所以CRC功能可用于提示信息受损。

五、帧大小

  在以太网帧中,最小的帧为64字节,要求数据区(有效载荷)长度(无标签)最小为48字节。当有效载荷较小时,填充字节(值为0)被添加到有效载荷尾部,以确保达到最小长度。最小尺寸的帧能在电缆中传输约11000m.

  传统以太网的最大帧长度为1518字节(包括4字节CRC和14字节头部)。最大帧长度为1518值是因为如果一个帧中包括一个错误(接收到不正确得CRC校验),只需重发1.5kb以修复这种问题。另一个是因为MTU大小限制为1500字节。为了发送一个更大的而消息,则需要更多的帧(例如,对于TCP/IP网络中常用的较大尺寸为64kb,需要至少发送44个帧)。

   多个以太网帧构成一个更大的上层PDU的后果是,每个帧都贡献一个固定开销(14字节的头部和4字节的CRC)。为了允许以太网硬件接收电路正确恢复来自网络中的数据,并为其他站提供将自己的流量与已有流量区分开的机会,以太网帧在网络中不能无缝的压缩在一起。EthernetⅡ规范了除在帧开始处定义了7字节前导和1字节的SFD之外,还指定了12字节的包间距(IPG)时间(10Mb/s为9.6us,100Mb/s为960ns,1000Mb/s为96ns,10000Mb/s为9.6ns)。因此EthernetⅡ的每帧效率为1500/(12+8+14+1500+4)=0.975293约为98%。一种提高效率的方法为,在以太网中传输大量数据时,尽量使帧尺寸更大一些。这可以采用以太网巨型帧(JF)来实现,这是一种非标准的以太网扩展(主要在1000Mb/s以太网交换机中使用),通常允许帧尺寸高达9000字节。有些环境使用的帧称为超级巨型帧,通常超过9000字节。在使用巨型帧时,这些较大的帧无法与较小的1518字节的帧互操作,因为它们无法由大多数传统以太网设备处理。

六、802.1p/q:虚拟局域网和QoS标签

    为了解决大型多用途交换网络运行中的问题,IEEE采用一种称为虚拟局域网(VLAN)的功能扩展802LAN标准,他被定义在802.1q【802.1Q-2005】标准中。兼容以太网交换机将主机之间的流量分隔为常见的VLAN。正是由于这种分隔,连在同一交换机但在不同VLAN中的两台主机,它们之间的流量需要一台路由器来传递。

  工作站到VLAN的映射有几种方法。通过端口分配VLAN,交换机端口所连接的站被分配在一个特定VLAN中,这样连接到任意站都成为VLAN中的成员。其他选择包括基于MAC地址的VLAN,以太网交换机使用表将一个站的MAC地址映射到一个VLAN。如果有些站改变它们的MAC地址(由于某些用户行为,有时需要这样做),它们可能变得难以管理。有些IP地址也可用作分配VLAN的基础。当不同VLAN中的站连接到同一台交换机时交换机用以确保流量不在两个不同的VLAN之间泄露。当多个VLAN跨越多个交换机(中继)时,在以太网帧发送到另一台交换机之前,需要使用VLAN来标记该帧的归属。这使用一个称为VLAN标签(头部)的标记,其中包括12位VLAN标识符(提供4096个VLAN,但保留VLAN 0 和VLAN 4095)。它还包含支持QoS的3位优先级。在很多情况下,管理员必须配置交换机端口(在做VLAN实验的时候基本上都是在端口配置),以便发送802.1p/q帧能中继到适当的端口。

  802.1p规定了在帧中表示QoS标识符的机制。802.1p头部包括一个3位优先级字段,用于表明一个QoS级别。该标准是802.1qVLAN标准的扩展。这两个标准可以一起工作,并在同一投不中共享某些位。它用3个有效位定义了8个服务级别。0级为最低优先级,用于传统的尽力而为的流量。7级位最高优先级,可用于关键路由或网管功能。这个标准规定了优先级如何被编码在分组中,但没指定如何控制哪些分组采用哪些级别,以及实现优先级服务的底层机制,这些可由具体的实现者来定义。因此,一个优先级流量相对于另一个的处理方式是由实现或供应商定义的。

如果802.1p/q头部中的VLAN ID字段被设置为0,802.1p可以独立于VLAN使用。

   控制802.1p/q信息的Linux命令是vconfig。它可用来添加和删除虚拟接口,即与物理接口相关联的VLAN ID。它可用来设置802.1p优先级,更改虚拟接口确定方式,改变由特定VLAN ID标记的分组之间的映射,以及协议在操作系统中处理时如何划分优先级

七、802.1AX:链路聚合(以前的802.3ad)

  有些系统配备多个网络接口,具有绑定或链路聚合能力。通过链路聚合,可以将两个及更多接口看作一个接口,通过冗余或将数据分割到多个接口,提高性能并获得更好的可靠性。IEEE修订的802.1AX【802.1AX-2008】定义了最常用的链路聚合方法,以及可管理这些链路的链路聚合控制协议(LACP)。LACP使用一种特定格式的IEEE802帧(称为LACPDU)。

  以太网交换机支持的链路聚合是一种替代方案,它比支持更高速网络接口的性价比高。如果多个端口聚合能提供足够的带宽,则可能并不需要高速接口。链路聚合不仅可以被网络交换机支持,而且可在一台主机上跨越多个网络接口卡(NIC)。通常情况下,聚合的端口必须是同一类型,并工作在同一模式(半双工或全双工)下。

  Linux可用以下命令来实现跨越不同类设备的链路聚合(绑定):

        modprobe bonding

        ifconfig bond0 10.0.0.111 netmask 255.255.255.128

        ifenslave bond0 eth0 wlan0

以上命令中第一个用于加载驱动,它是一个支持链路聚合的特殊设备驱动程序。第二个命令使用ipv4地址来创建bond0接口。虽然IP相关信息对创建聚合接口不是必需的,但它是典型的。在ifenslave命令执行后,绑定设备bond0用MASTER标志来标记,而设备eth0和wlan0用SLAVE标志来标记。

  LACP协议旨在通过避免手工配置,以简化链路聚合的建立工作。在LACP“主角”(客户端)和“参与者”(服务器)启用后,它们通常每秒都会发送LACPDU。LACP自动确定哪些成员链路可被聚合成一个链路聚合组(LAG),并将它们聚合起来。这个过程的实现需要通过一些其他链路发送一系列信息(MAC地址、端口优先级、端口号和密钥)。

八、全双工、省电、自动协商和802.1X流量控制

  在以太网最开始的时候,仅工作在半双工模式,并使用一条电缆(即一次只能像一个方向发送数据)。后面改为了全双工操作,这样可以有效禁用冲突检测电路。也可以增加以太网的物理长度(因为半双工操作和冲突检测的相关事件约束被取消)。

  在Linux里可以使用ethtool程序来查询是否支持全双工,以及是否正在执行全双工操作。还可以显示和设置以太网接口的很多属性。例如chaxunth0接口就可以使用 ethtool eth0命令来查询。

九、双工不匹配

  自动协商曾有一些互操作性问题,特别是一台计算机及其相关的交换机端口使用不同的双工配置时,或者当自动协商只在链路的一端被禁用时。在这种情况下,可能会发生双工不匹配。只是在这种情况下,连接不会完全失败,但可能带来显著的性能下降。当网络中出现中等程度的双向流量繁忙时(例如在大数据传输期间),一个半双工接口会将输入的流量检测为冲突,这可能需要更高层协议(例如TCP)重传。因此性能下降可能只在半双工接口发送数据,同时又有大量流量需要接受时才是最明显的,当站处于轻负载时通常不会发生这种情况。

十、局域网唤醒(WoL)、省电和魔术分组

   在Windows和Linux中,Windows唤醒功能和Linux唤醒选项用于使网络接口或主机脱离低功耗(睡眠)状态,这是基于某类分组的传输来实现的。这种分组用来触发可配置的功率状态改变。在Linux中,用于唤醒的值可以是零,或者是多个用于低功耗状态唤醒的位,它们可以被以下几种帧所触发:任何物理层(PHY)活动(p)、发往站的单播帧(u)、组播帧(m)、广播帧(b)、ARP帧(a)、魔术分组帧(g),以及包括密码的魔术分组帧。这些都可用上面提到的ethtool的选项来配置。例如命令 ethtool -s eth0 wo1 umgb  

    当接收到任何u、m、g或b类型的帧时,这个命令将eth0设备配置为发送一个唤醒信号。Windows也提供类似的功能,但标准的用户接口只支持魔术分组帧,以及一个预定义的u、m、b和a类型帧的子集。魔术分组包含一个字节值0xFF的特定重复模式。通常情况这种帧采用UDP分组形式封装在以太网广播帧中发送。有几个工具可以生成它们,例如 wol MAC地址  这个命令的结果是构造一个魔术分组。

十一、链路层流量控制

   以全双工模式运行扩展的以太网和跨越不同速率的网段时,可能需要由交换机将帧缓存一段时间。例如,当多个站发送到同一个目的地(称为输出端口争用),这种情况可能发生。如果一个站聚合的流量速率超过该站的链路速率,那么帧就开始存储在中间交换机中。如果这种情况持续一段时间,这些帧可能被丢弃。

  环节这种情况的一种方法是在发送方采取流量控制(使它慢下来)。一些以太网交换机(和接口)通过在交换机和网卡之间发送特殊信号帧来实现流量控制。流量控制信号被发送到发送方,通知它必须放慢传输速率,以太网使用PAUSE消息(也称为PAUSE帧)实现流量控制,这由802.3x【802.3-2008】定义。

  PAUSE消息包含在MAC控制帧中,通过将以太网长度/类型字段值设为0x8808。以及使用MAC控制操作码0x0001来标识。如果一个站接收到这种帧,表示建议它减缓发送速度。PAUSE帧总是被发送到MAC地址01:80:C2:00:00:01,并且只能在全双工链路上使用。它包含一个保持关闭(hold-off)时间值(指定量为512比特的时间),表明发送方在继续发送之前需要暂停多长时间。

   MAC控制帧采用上面的图所示的常规封装的帧格式(如下所示)

但紧跟在长度/类型字段后的是一个2字节的操作码与上图又有些细小的差别。PAUSE帧实际上是唯一一种使用MAC控制帧的帧类型。它包括一个2字节的保持关闭时间。“整个”MAC控制层(基本只是802.3x流量控制)的实现是可选的。

  以太网层次的流量控制可能有重大负面影响,因此通常并不使用它。当多个站通过一台过载的交换机发送时,该交换机通常向所有主机发送PAUSE帧。但是,交换机的内存使用可能对发送主机不均衡,因此有些主机可能被惩罚(即流量控制),即使它们对交换机流量过载没有什么关系。

十二、网桥和交换机 

  IEEE 802.1d标准规定了网桥的操作,交换机本质上是高性能的网桥。网桥或交换机用于连接多个物理的链路层网络(例如一对物理的以太网段)或成组的站。最基本的设置涉及连接两个交换机来形成一个扩展的局域网。如下图所示:

图中所示的交换机A和B互连形成一个扩展的局域网。在这个例子中,客户端系统都连接到A,服务器都连接到B,端口编号仅供参考。注:每个网络单元(包括每个交换机)有自己的MAC地址。每个网桥经过一段时间对域外MAC地址的“学习”后,最终每个交换机会知道每个站可由哪个端口到达。每个交换机基于每个端口(也可能是每个VLAN)的列表被存储在一张表(称为过滤数据库)中。下图显示了每个交换机了解每个站的位置后,形成的包含这些信息的数据库例子:

当第一次打开一个交换机(网桥)时,它的数据库是空的,因此它不知道除自己之外的任何站的位置。当它每次接收到一个目的地不是自己的帧时,它为除该帧到达的端口之外的所有端口做一个备份,并向所有端口发送这个帧的备份。如果交换机(网桥)未学习到站的位置,每个帧将会被交付到每个网段,这样会导致不必要的开销。学习能力可以显著降低开销,他是交换机和网桥的一个基本功能。目前多数操作系统支持网络接口之间的网桥功能,这意味着具有多个接口的计算机可用作网桥。例如,在Windows中的“网络连接”中的(突出显示)可以选择“网桥链接”。

下图所示为一个简单的拓扑例子

在该简单的拓扑中,一台基于Linux的PC被配置为网桥,它在两个以太网之间实现互联。作为一个处于学习中的网桥,它不断积累并建立一些表,其中包含有关哪个端口可到达扩展局域网中的其他系统的信息

  在上图中,这个简单的网络使用一台基于Linux、带两个端口的PC作为网桥。只有一个站连接到端口2,网络其他部分都连接到端口1.以下命令可以启用网桥:

brct1 addbr br0

brct1 addif br0 eth1

brct1 addif br0 eth1

ifconfig eth0 up

ifconfig eth1 up

ifconfig br0 up

以下几条命令可以创建一个网桥设备br0,并为网桥增加接口th0和eth1。brct1 delif命令可用于删除接口。在建立接口之后,brctl showmacs命令可用于检查过滤数据库(称为转发数据库,用Linux的术语称为fdbs):

brctl show

brct1 showmacs br0

由于站可能出现移动、网卡更换、MAC地址改变或其他情况,所以就算网桥曾发现一个MAC地址可通过某个端口访问,这个信息也不能假设永远是正确的。为了解决这个问题,在每次学习一个地址后,网桥启动一个计时器(通常默认为5分钟)。在Linux每个学习条没有使用一个与网桥相关的固定时间。如果在指定的“有效期”内,没有再次看到该条目中的地址,则将这个条目删除。

  当一个条目因有效期满而被删除时,后续的帧将被发送到接收端口之外的所有端口(称为洪泛),并更新过滤数据库中的所有条目。实际上,过滤数据库的使用和学习有利于优化性能,如果表是空的,网络将花费更多开销,但仍能履行职责。在两个以上的网桥通过冗余链路互联的情况下,帧的洪泛可能导致帧永远循环的洪泛灾难。为了解决该问题便运用了以下的一种方法生成树。

十三、生成树协议

  网桥可能单独或与其他网桥共同运行。当两个以上的网桥使用(或交换机端口交叉连接时),由于存在级联的可能性,因此可能形成很多组的循环帧。例如如下图所示的网络。

假设图中的多个交换机刚被打开,并且他们的过滤数据库为空。当站S发送一个帧时,交换机B在端口7、8和9复制该帧。这时,最初的帧已被“放大”3倍。这些帧被交换机A、D和C接收。交换机A在端口2和3生成的该帧的副本。交换机D和C分别在端口20、22和13、14生成更多的副本。当这些副本在交换机A、C和D之间双向传输,这些放大倍数已增大为6.当这些帧到达时,转发数据库开始出现震荡,这是由于网桥反复尝试查找通过哪些端口可到达站S,这种情况显然不能够允许发生。如果允许发生这种情况,采用这种配置的网桥将会无法使用。但是生成树协议(STP)可以避免这种情况发生。在当前的标准【802.1D-2004】中,传统的STP被快速生成树协议(RSTP)代替。

   STP通过在每个网桥禁用某些端口来工作,这样可以避免拓扑环路(即两个网桥之间不允许出现重复路径),但如果拓扑结构未分区,则仍可以到达所有节点。在数学上,一个生成树是一张图中所有节点和一些线的集合,从任何节点到其他节点(跨越图)有一条路径或路由,但是没有环路(这些线的结婚构成一棵树)。一张图中可能存在多个生成树,STP用于找出这张图中的其中一颗生成树,该图将网桥作为节点并将链路作为线(或称为“边”)。以上图为基本,来说明该想法,如下所示:

  在该图中,红线表示网络中被STP选择用于转发帧的链路。其他链路没有被使用,端口8、9、12、21、22和3被阻塞。通过使用STP,早期没有各种问题的出现,这些帧只是作为另一个抵达帧的副本而被创建。这里没有出现放大的问题。由于任意两个站之间只有一条路径,因此可以避免循环。生成树的形成和维护由多个网桥完成,在每个网桥上运行一个分布式算法。

    用于转发数据库时,STP必须处理以下情况,例如网桥启动和关闭、接口卡更换或MAC地址改变。这种变化明显会影响生成树运行,因此STP必须适应这些变化。这种适应通过交换一种称为网桥协议数据单元(BPDU)的帧来实现。这些帧用来形成和维护生成树。这颗树“生长”自一个网桥---该网桥由其他网桥选举为“根网桥”。

 综合上面所述,一个网络中可能存在多个生成树,但是确定哪个生成树是最优的最适合转发帧,着基于每条链路和网桥位置的相关成本。这个成本与一个链路速度称反比的整数、例如,一条10Mb/s链路的成本为100,100Mb/和1000Mb/s链路的成本分别为19和4.STP计算到根网桥的成本最小的路径。如果必须遍历多条链路,那么相关成本是这些链路成本之和。

十四、端口状态和角色

  网桥端口可能有5个状态:阻塞、侦听、学习、转发和禁用。下图所示为状态转换以及它们之间的关系:

上图中,在正常的STP操作中,端口在4个主要状态之间转换。在阻塞状态下,帧不被转发,但一次拓扑变化或超时可能导致向侦听状态转换。转发状态是活跃的交换机端口承载数据流量的正常状态。括号中的状态名用于表示RSTP相关的端口状态

 在图中所示显示的生成树中,实线表示端口的正常转换,细的实线表示由管理配置引起的变化。在初始化后,一个端口进入阻塞状态。在这种状态下,它不进行地质学系,数据转发或BPDU,并在它需要被包含在将到达的根网桥的路径中的情况下,使端口转换到侦听状态。在侦听状态下,该端口允许发送和接收BPDU,但不进行地址学习或数据转发。经过一个典型的15秒的转发延迟,端口进入学习状态。这时,它被允许执行数据转发之外的所有操作。在进入转发状态并开始转发数据之前,需要等待另一个转发延迟。

   相对于端口状态机,每个端口都扮演一定的角色。由于RSTP的出现,这个术语变得越来越重要。端口可能扮演根端口、指定端口、备用端口或备份端口等角色。根端口是生成树中位于指向根的线段终点的那些端口。指定端口是指处于转发状态,并与根相连线段中路径成本最小的端口。备份端口是与根相连线段中成本更高的端口。它们不处于转发状态。备份端口是指连接到同一线段中作为同一网桥指定端口使用的端口。因此,备份端口可轻易接管一个失效的指定端口,而不影响生成树拓扑的其余部分,但是它不能在全部网桥失效的情况下提供一条到根的备用路径。

十五、BPDU结构

    为了确定生成树中的链路,STP使用了下图所示的BPDU:

如图所示,BPDU被放置在802帧的有效载荷区,并在网桥之间交换以建立生成树。重要的字段包括源、根节点、到根的成本和拓扑变化提示。在802.1w和【802.1D-2004】中(包括快速STP或RSTP),附加字段显示端口状态。

 上图所示的格式适用于最初的STP,以及新的STP。BPDU总被发现到组的地址01:80:C2:00:00:00,并且不会通过一个未修改的网桥转发。在该图中,DST、SRC和L/T(长度/类型)字段是携带BPDU的传统以太网(802.3)帧头部的一部分。3字节的LLC/SNAP头部由802.1定义,并针对BPDU被设置为常数0x424203。并非所有BPDU都是用LLC/SNAP封装,但这是以常见的一个选项。

  协议(Port)字段给出协议ID号,它被设置为0,版本(vers)字段设置为0或2,取决于使用STP还是RSTP。类型(Type)字段的分配与版本类似。标志(Flags)字段包含拓扑变化(TC)和拓扑变化确认(TCA)位,它们由最初的802.1d标准定义。附加位被定义为建议(P)、端口角色(00为未知,01为备用,10为根,11为指定)、学习(L)、转发(F)和协议(A)。根ID字段给出发送方使用的根网桥标识符,即从网桥ID字段中获得的MAC地址。这些ID字段都用一种特殊方式编码,包括MAC地址之前的一个2字节的优先级字段。优先级的值可通过管理软件来设置,以强制要求生成树采用某个特定网桥作为根(例如思科在自己的Catalyst交换机中使用默认值0x8000).

  根路径成本是在根ID字段中指定的计算出的到达某个网桥的成本。PID字段是端口标识符和由发送帧给出的端口号,它被附加在一个可配置的1字节的优先级字段(默认0x80)之后。消息有效期(MsgA)字段支出消息有效期。最大有效期(MaxA)字段指出超时(默认为20秒)的最大期限。欢迎时间(Hello Time)字段指出配置帧的传输周期。转发延迟字段指出处于学习和侦听状态的时间。所有的有效期和时间字段可在1/256秒内获得。

  消息有效期字段不像其他的时间字段那样是固定值。当根网桥发送一个BPDU时,它将该字段设置为0。网桥转发接收到的不是根端口的帧,并将消息有效期字段加1。本质上来讲,该字段是一个跳步计数器,用于记录BPDU经过的网桥数量。当一个BPDU被一个端口接收时,其包含的信息在内存和STP算法参与者中被保存至超时(超时发生在(MaxA-MsgA)时刻)。如果超过这个时间,根端口没有接收到另一个BPDU,根网桥被宣布“死亡”,并且重新开始根网桥的选举。

十六、建立生成树

   STP的第一个工作就是选举根网桥。根网桥是在网络(或VLAN)中标识符最小(优先级与MAC地址结合)的网桥。当一个网桥初始化时,它假设自己是根网桥,并用自己的网桥ID作为根ID字段的值发送配置BPDU消息,如果它检测到一个ID更小的网桥,则停止发送自己的帧,并基于接收到的ID更小的帧构造下一步发送的BPDU。发出根ID更小的BPDU的端口被标记为根端口(即端口在到根网桥的路径上)。剩余端口被设置为阻塞或转发状态。

十七、拓扑变化

   STP的另一个重要工作是处理拓扑变化。数据库有效期机制适应拓扑变化也可以,但这种是比较差的方法,因为其有效期计时器需要花费的时间较长(5分钟)来删除错误条目。但是,STP采用的方法检测到拓扑变化,可以快速通知它们所在的网络。在STP中,当一个端口进入阻塞或转发状态时,这意味着发生了拓扑变化。当网桥检测到一个连接变化(例如一条链路故障),它向根端口之外的端口发送拓扑变化通知(TCN)BPDU,通知自己在树中的父网桥,直到根为止。树中通向根的下一个网桥发送通知的网桥确认TCN BPDU,并将它们转发到根。当接收到拓扑变化通知时,根网桥在后续的周期性配置消息中设置TC位。这种消息被网络中的每个网桥转发,并被处在阻塞或转发状态的端口接收。设置这个位允许网桥减小转发延时计时器的有效期,将有效期以秒代替推荐的5分钟。这样,数据库中已有的错误条目可被快速清除和重新学习,同时允许访问那些被删除的条目。

  在Linux中,网桥功能时默认禁用STP的。在多数简单的拓扑中,一台普通的计算机可被用作网桥。“brct1 stp br0 on” 这条命令可以位当前使用的网桥启用STP(命令为Linux中的命令)。

相关文章:

  • 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
  • QQ五毛项目记
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • [acwing周赛复盘] 第 94 场周赛20230311
  • 解决:微软在登录时总是弹出需要家长或监护人同意才能使用该账户并且不断循环?
  • Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)
  • Spring 事务和事务传播机制
  • 2023年第九届数维杯国际大学生数学建模挑战赛
  • 一文图解爬虫_姊妹篇(spider)
  • 推介会如何做好媒体宣传
  • alias linux 命令别名使用
  • 数字化转型具体包含哪些内容?
  • Golang: Store Query Result in a Map
  • Django学习日志07
  • ZYNQ_project:test_fifo_255X8
  • Angular 4.x 动态创建组件
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Hibernate最全面试题
  • Linux Process Manage
  • NSTimer学习笔记
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SQLServer之创建数据库快照
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Wamp集成环境 添加PHP的新版本
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 机器学习学习笔记一
  • 记一次删除Git记录中的大文件的过程
  • 事件委托的小应用
  • 我是如何设计 Upload 上传组件的
  • 学习笔记:对象,原型和继承(1)
  • 我们雇佣了一只大猴子...
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (10)STL算法之搜索(二) 二分查找
  • (2.2w字)前端单元测试之Jest详解篇
  • (C++17) optional的使用
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (十) 初识 Docker file
  • (十八)SpringBoot之发送QQ邮件
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Sql Server 保留几位小数的两种做法
  • ***详解账号泄露:全球约1亿用户已泄露
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .naturalWidth 和naturalHeight属性,
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net Core与存储过程(一)
  • .net Signalr 使用笔记
  • .Net 中Partitioner static与dynamic的性能对比
  • .net6使用Sejil可视化日志
  • :O)修改linux硬件时间
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [14]内置对象
  • [AIGC] Redis基础命令集详细介绍