计算机网络原理(TCP/IP协议三):链路层

  • 以太网、IEEE802局域网、城域网
  • 全双工、省电、自动协商、802.1X
  • 集线器、网桥、交换机
  • 无线局域网——IEEE802.11
  • 点到点协议
  • 环回
  • MTU和路径MTU
  • 隧道

TCP/IP协议族中设计链路层的目的:为IP模块发送和接收IP数据报。它可用于携带一些支持IP的服务性协议,例如ARP。

TCP/IP支持多种不同的链路层,它依赖于使用的网络硬件类型:有线局域网,例如以太网;城域网(MAN),例如服务供应商提供的有线电视和DSL连接;有限语音网络,例如支持调制解调器的电话线;无线局域网,例如Wi-Fi(无线局域网);基于蜂窝技术的各种无线数据服务,例如HSPA、EV-DO、LTE和WiMAX。

该章节将详细讨论以下内容:在以太网和Wi-Fi的链路层中,如何使用点到点协议(PPP),如何在其他(链路或更高层)协议中携带链路层协议,以及一种称为隧道的技术等。

 一、以太网、IEEE802局域网、城域网

1.1相关标准及原理

以 太网这个术语通常指一套标准,由DEC、Intel公司和Xerox公司在1980年首次发布,并在1982年加以修订。第一个常见格式的以太网,目前被 称为“10Mb/s以太网”或“共享以太网”,它被IEEE采纳(轻微修改)为802.3标准。这种网络的结构通常如图所示:

共享以太网包含一个或多个站(例如工作站、超级计算机),它们都被连接到一个共享的电缆上。当介质被确定为空闲状态时,链路层PDU(帧)可以从一个站发送到一个或多个其他站。

带冲突检测的载波侦听多路访问(CSMA/CD):在共享以太网如果多个站共享同一网络,它们同时发送数据,可能因信号延迟而发生碰撞。该标准需要在每个以太网接口实现一种分布式算法,当发生碰撞可以被检测到,它会导致发送站等待一个随机时间,然后重新发送数据。这种常见的方法称为带冲突检测的载波侦听多路访问(CSMA/CD)。它协调哪些计算机可访问共享的介质(电缆),同时不需要其他特殊协议或同步。

采 用CSMA/CD,一个站(例如计算机)首先检测目前网络上正在发送的信号,并在网络空闲时发送自己的帧,这是协议中的“载波侦听”部分。如果其他站碰巧 同时发送,发生重叠的电信号被检测为一次碰撞。在这种情况下,每个站等待一个随机时间,然后在此尝试发送。这个时间量的选择依据一个统一的概率分布,随后 每个碰撞被检测到的时间长度加倍。最终,每个站得到机会发送,或者尝试一定次数后超时。采用CSMA/CD,在任何时间内,网络中只能有一个帧传输。

介质访问控制协议(MAC):CSMA/CD这样的访问方法更正式的名称为介质访问控制(MAC)协议,MAC协议有很多类型,有些基于每个站尝试独立使用网络(例如CSMA/CD的基于竞争的协议),有些基于预先安排的协调(例如依据为每个站分配的时段发送)。

交换式以太网: 随着10Mb/s以太网的发展,更快的计算机和基础设施使用局域网速度不断提升,由最初的3Mb/s到现在大型数据中心可达100Gb/s的速度。由于 100Mb/s(也称为“快速以太网”,最流行的版本“100BASE-TX”)的发展,基于竞争的MAC协议已变得不流行。相反,局域网中每个站之间的 线路通常不共享,而是提供专用的星型拓扑结构,这种以太网结构可以通过以太网交换机来实现,如下图是交换式以太网结构示图:

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

目前,交换机为以太网中的每个站提供同时发送和接收数据的能力(称为”全双工以太网“)。虽然1000Mb/s以太网(1000BASE-T)仍支持半双工(一次一个方向)操作,但相对于全双工以太网来说,它很少使用。

无线以太网: 当前连接Internet的最流行技术之一是无线网络,常见的无线局域网(WLAN)IEEE标准称为无线保真或Wi-Fi,有时也称为”无线以太网“或 802.11。虽然这个标准与802有线以太网标准不同,但帧格式和通用接口大部分来自802.3,并且都是IEEE802局域网标准的一部分。

1.2IEEE802局域网/城域网标准

原 始的以太网帧格式和工作过程由行业协议所描述,这种格式被称为DIX格式或Ethernet II格式。对于这种类型的以太网稍加修改后,由IEEE标准化为一种CSMA/CD网络,称为802.3。在IEEE标准中,带802前缀的标准定义了局 域网和城域网的工作过程。当前最流行的802标准包括802.3(以太网)和802.11(WLAN/Wi-Fi)。这种标准随着时间推移而演变,经过独 立修订后名称发生改变(例如802.11g),并最终被纳入修订过的标准。下面表格中相当完整的目录,包括截止2011年年中支持TCP/IP的相关 IEEE802局域网和城域网标准(考虑篇幅问题,用一个单独的博客来展示这个表格):IEEE802局域网和城域网标准名称目录表

除 了802.3、802.11、802.16标准定义的特定类型的局域网之外,还有一些相关标准适用于所有IEEE标准的局域网技术。最常见的定义逻辑链路 控制(LLC)的802.2标准,其帧头部在802网络的帧格式中常见。虽然最初的以太网使用CSMA/CD,但无线局域网常使用CSMA/CA(CA 是”冲突避免“)。

链路层子层:在IEEE的术语中,LLC和MAC是链路层的”子层“,LLC(多 数帧格式)对每种网络都是通用的,而MAC层可能有所不同。LLC实现了逻辑链路控制服务,为上层(网络层)提供服务(例如数据帧的封装和解封);MAC 实现了媒体访问控制服务,为当前链路层提供服务(例如寻址、地址解析、发送数据)。这篇博客不针对分层介绍,而是对整个链路层基于以太网和无线局域网解析 相关协议细节。

1.3以太网帧格式

所有的以太网(802.3)帧都基于一个共同的格式。在原有规范的此基础上,帧格式已经被改进以支持额外功能,参考下图来理解以太网帧格式的具体内容:

IEEE分组: 在链路从的数据一般被称为帧,但IEEE提出了一个相对新的术语IEEE分组(一个在其他标准中经常使用的术语)的关系,也可以说是物理层PDU。在 IEEE分组开始部分包括前导和SFD被用于接收器同步,在IEEE分组结束部分当以太网以半双工模式运行在100Mb/s或以上速率时,其他位可能被作 为载体扩展添加到短帧中,以确保冲突检测电路的正常运行。

前导字段:以太网帧开始是一个前导字段,接收器电路用它确定一个帧的到达时间,并确定编码位(称为时钟恢复)之间的时间量。由于以太网是一个异步的局域网(即每个以太网接口卡中不保持精确的时钟同步),从一个接口到另一个接口的编码之间的间隔可能不同。

帧起始分隔符(SFD):前导是一个公认的模式(典型值为0xAA),在发现帧起始分隔符(SFD)时,接收器使用它“恢复时钟”。SFD的固定值为(0xAB)。

半双工模式下的载体扩展: 在半双工模式下,CSMA/CD机理的约束,产生了碰撞时间和碰撞域的概念。由于在发送帧的同时能检测到媒体上发生的碰撞现象,就要求发送帧限定最小长 度。在一定的传输率下,最小帧长度与碰撞域的地理范围成正比关系;以半双工模式为例,当传输率达到1Gb/s时,在同样的最小帧长度标准情况下,网络系统 跨距将会缩小到无法使用的地步。为此,在1Gb/s以太网上采用了帧的扩展技术。帧扩展技术是在不改变802.3标准所规定的最小帧长度情况下提出的一种 解决办法,把帧一直扩展到512字节(即4096位),如果形成的帧小于512字节,则在发送时要在帧的后面添加上扩展位,达到512字节发送到媒体上 去。

以太网帧格式包含的字段:源地址(DST)、目的地地址(SRC)、重载长度/类型字段(P/Q标签)、其他标签、数据字段、填充(可能没有)、帧校验序列(FCS)。

以太网帧中的地址: 即DST和SRC,这些地址有时也采用其他名称,例如MAC地址、链路层地址、802地址、硬件地址、物理地址。以太网帧的目的地址也允许寻址到多个站点 (即广播和组播,后面广播和组播相关博客中详细介绍),广播功能用于ARP协议,组播功能用于ICMPv6协议,以实现网络层地址和链路层地址之间的转 换。

长度/类型字段: 在多数情况下,它用于确定头部后面的数据类型。最初的IEEE(802.3)规范将长度/类型字段作为长度字段而不是类型字段使用,因此这个字段被重载 (可用于多个目的)。关键看字段值,目前如果字段值大于或等于1536,则该字段表示类型,它是由标准分配的超过1536的值;如果字段值等于或小于 1500,则该字段表示长度。[ETHERTYPES]给出了类型的完整列表,TCP/IP网络使用的常见值包括IPv4(0x0800)、 IPv6(0x86DD)、ARP(0x0806),0x8100表示一个Q标签帧(可携带一个“虚拟局域网”或802.1q标准的VLAN ID)。一个以太网帧的基本大小是1518字节,但最近的标准将该值扩大到了2000字节。

PQ标签与其他标签: 在前面介绍的字段后面,[802.3-2008]提供了多种标签,包含由其他IEEE标准定义的各种协议字段。其中最常见的是由802.1p和 802.1q使用的标签,它提供虚拟局域网和一些服务质量(QoS)指示符。(因为P/Q标签比较常见,所以在结构图中独立划分了出来)

信封帧、Q标签帧:当前的[802.3-2008]标准采用修改后的802.3帧格式,提供最大482字节的“标签”,它携带在每个以太网帧中。这些较大的帧称为信封帧,长度最大可能达到2000字节。包含802.1p/q标签的帧称为Q标签帧,也是信封帧。

有效载荷:也被称为帧的数据区,这里是放高层PDU(例如IP数据报)的地方。传统上,以太网的有效载荷一直是1500字节,它代表以太网的MTU。

填充:目前大多数系统位以太网使用1500字节的MTU,虽然在必要时它也可设置为一个较小的值。有效载荷有时被填充(添加)数个0,以保证帧总体长度符合最小长度要求。

帧校验序列:提供对帧完整性检查的值。

1.3.1帧校验序列(FCS)/循环冗余校验(CRC)

循 环冗余校验(CRC)字段位于帧的尾部,有32位,有时称为IEEE/ANSI标准的CRC32[802.3-2008]。要使用n位CRC检测数据传输 错误,被检查的消息首先要追加n位0形成一个扩展消息。然后,扩展消息(使用模2除法)除以一个(n+1)位的值,这个作为除数的值称为生成多项式。放置 在消息的CRC字段中的值是这次触发计算中余数的二进制反码(商被丢弃)。该余数的反码将被放置在帧的CRC或帧校验序列(FCS)字段中。在接收到数据 之后,接收方执行相同的除法计算出余数,并判断改值与FCS字段的值是否匹配。如果两者不匹配,帧可能在传输的过程中受损,通常该帧就会被丢弃。(检测原 理和算法演示在 计算机网络原理(六):链路层和局域网)相关内容中详细介绍。

生 成多项式已被标准化为一系列不同的n值,以太网使用n=32,CRC32生成多项式是33位的二进制数 100000100110000010001110110110111。而国际电信联盟(ITU)将CRC4的生成多项式值标准为10011,这是 G.704[G704]标准中规定的。

1.3.2帧大小

以太网帧有最小和最大尺寸,最小帧是64字节,要求数据区(有效载荷)长度(无标签)最小48字节。当有效载荷较小时,填充字节(值为0)被添加到有效载荷的尾部,以确保达到最小长度。

因 为以太网共享传输介质,各个端需要通过获取帧冲突的信息来决定什么时候向传输介质发送数据,这就要求以太网帧来说不能太长,特别是在传输速率较小的介质上 (例如10Mb/s以太网)。传统以太网的最大帧长度是1518字节(包括4字节CRC和14字节头部),这是一种折中的方案,如果一个帧包括一个错误 (接收不正确的CRC校验),只需要重发1.5KB以修复该问题。另一方面MTU大小限制为1500字节。

由于多个以太网构成一个更大的 上 层PDU的后果是,每个帧都需要一个固定开销(14字节头部和4字节的CRC)。还有为了允许以太网硬件接收电路正确恢复来自网络的数据,并为其他站提供 自己的流量与已有流量区分开的机会,以太网在网络中不能无缝地压缩在一起。Ethernet II规范除了帧开始处定义7字节前导和1字节SFD之外,还指定了12字节的包间距(IPG),因此Ethernet II的每帧效率最多为1500字节。

而对于TCP/IP网络常用的较大尺寸64KB,需要至少44个帧,这会导致大量的资源浪费。一种提高 效率的方式是,在以太网中传输大量数据时,尽量使尺寸更大一些。得益于传输介质的速率的提升,可以采用以太网巨型帧[JF]来实现,它是一种非标准的以太 网扩展(主要在1000Mb/s以太网交换机中使用),通常允许帧尺寸高达9000字节。有些环境使用使用的帧称为超级巨型帧,它们通常超过9000字 节。在使用矩形帧时要谨慎,这些较大的帧无法与较小的1518字节的帧互操作,因为它们无法由大多数传统以太网设备处理。

1.3.3802.1p/q:虚拟局域网和QoS标签

虚拟局域网(VLAN)是将局域网内的设备逻辑地划分成一个个网段从而实现虚拟工作组的技术(也有说法是划分为多个广播域的技术),通过交换机上配置 VLAN,可以实现在同一个VLAN内的用户可以进行二层互访,而不同LAN间的用户被二层隔离。这样既能够隔离广播域,又能够提升网络的安全。

因为在早期的局域网LAN技术基于总线结构,多个节点同时发送消息会产生冲突,任意节点发出消息都会被发送到其他节点形成广播,所有主机共享一条传输通道,无法控制网络中的信息安全,网络中计算机数量越多冲突越严重效率越低,广播也会产生大量的带宽浪费。

虽 然网桥和交换机何以采用交换方式将来自入端口的信息转发到出端口上,克服了共享网络中的冲突问题,但交换机依然存在广播和信息安全问题。但现在最新的技术 已研发出高性能路由器设备解决以上的问题,逐渐取代VLAN技术,但VLAN仍然还有很多组织在使用,在某些环境中仍受欢迎。

简单的来说 VLAN可以通过几种地址映射的方式组织虚拟网络,一种是通过端口分配VLAN,交换机端口所连接的站分配在一个特定的VLAN,这样连接的任意站就都成 为VLAN中的成员;另一种是基于MAC地址的VLAN,以太网交换机使用表将一个站的MAC地址映射到一个VLAN。

当不同的VLAN 中 的站连接在同一交换机时,交换机确保流量不在两个VLAN之间泄露,简单的来说路由器只会将流量分发到目标VLAN的端口上。它们使用VLAN来标记该帧 的归属,这个功能被称为VLAN标签(或头部)的标记,其中包含12位VLAN标识符(提供4096个VLAN,但保留VLAN 0和VLAN 4095)。

VLAN头部:两字节的标签/协议ID、QoS的3位优先级值,以在路由器中实现按需优先转发消息、CFI用来标识地址格式(1位),12位VLAN标识。

这里就简单的介绍以下什么是虚拟局域网和VLAN头部,想了解更多建议参考相关内容:《以太网权威指南》、VLAN虚拟局域网虚拟局域网vlan理论

 1.3.4802.1AX:链路聚合(以前的802.3ad)

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

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

简单的来说链路聚合就是将多个物理接口绑定在一个虚拟接口上,当流量达到时,通过一些接口选择模式来决定使用那个物理接口发送。例如:接口循环交付、高可用系统模式、基于流量的接口选择模式、针对容错模式、动态聚合模式。

接口循环交付:一个接口作为另一个接口的备份使用,基于对MAC源地址和目的地址执行异或操作选择接口,将帧复制到所有接口,执行802.3ad标准的乱路聚合,或采用更先进的负载平衡选项;

高可用系统模式:当一个链路停止运行时(由MII监控来检测),这种系统将故障部分转移到冗余的网络基础设施上;

基于流量的接口选择模式:通过流量的流向来选择接口,这种可以尽量减少排序,并保证多个接口负载平衡的情况,这种模式在一定程度上是有效的。

针对容错模式:比如通过在多个接口上同时发送数据帧实现流量冗余,在接收端可以选择任意一个无错的帧,从而达到降低链路层的因为错误的重发及相关通信操作。

动态聚合模式:这种模式并不将物理接口强绑定到虚拟接口上,而是当流量到达时从可用物理接口中临时选择一个物理接口作为流量发送接口。(可以这么理解,具体看实现)

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

 二、全双工、省电、自动协商、802.1X

2.1半双工与全双工模式

双工是指两台通讯设备之间,允许有双向的数据传输。通常有两种双工模式:半双工、全双工。

半双工模式(half-duplex):两台设备之间可以双向传输数据,但不能同时进行。因此同一时间只允许一台设备传输数据,当一台设备要传输数据,需要等待另一台设备传输完数据之后才能进行。

全双工模式(full-duplex):两台设备同时进行双向传输数据。

除了全双工还有单工模式,是指传输只支持数据在一个方向上传输,但现在一般很少见了,半双工也在很多实际应用中被全双工取代。

在 802.3u中可以基于接口交换信息(例如速度)和功能(例如半双工或全双工)实现自动协商,但这建立在接口支持自动协商的基础上,现在的网络设备也基本 都支持这一功能。它能够基于接口的速率、工作模式(全双工或半双工)、物理端口类型、地址以及物理层电路在NIC内部还是外部等信息来自动建立接口与接口 之间的通信通道参数,以提供相关功能,也可以手动设置速率和工作模式等参数。

 2.2双工不匹配

自动协商曾经有一些互操作性问题,特别是一台计算机及相关的交换机端口使用不同的双工配置时,或者挡自动协商在链路的一端被禁用时。在这种情况下,可能发生双工不匹配。而双工不匹配时,连接不会完全失败,但可能出现显著的性能下降。

双工不匹配的情况下当网络中出现中等程度的双向流量繁忙时可能会因为自动协商降级到半双工模式,一个半双工接口会将输入的流量检测位冲突,从而触发以太网MAC的CSMA/CD的指数退避功能。同时,导致这个冲突的数据被丢弃,这就会导致需要更高层协议(TCP)重传。

性能下降可能只在半双工接口发送数据时,也只有在大量流量要接收时才明显,站处于轻负载时通常不会发生这种情况。

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

在 操作系统中有一些电源管理方面的功能,例如Windows唤醒功能和Linux唤醒功能用于使网络接口或主机脱离低功耗(睡眠)状态,这是基于某类分组的 传输实现,这种分组用来触发可配置的功率状态改变。在Linux中,用于唤醒的值可以是0,或者多个用于低功耗状态唤醒的位,它们可以被以下几种帧所触 发:任何物理层(PHY)活动(P)、发往站外的单播帧(u)、组播帧(m)、广播帧(b)、ARP帧(a)、魔术分组帧(g)以及包括密码的魔术分组 帧,这些都是通过ethtool命令的选项来设置,相关具体操作在后面的Linux服务器网络相关博客中解析。

2.4链路层流量控制

以 全双工模式运行扩展的以太网和跨越不同速率的网段时,可能需要由交换机将帧缓存一段时间。例如,当多个站发送到同意目的地(称为输出端口争用),这种情况 就需要将部分帧缓存下来等待输出端口发送。这种情况就是一个站聚合流量的速率超过超过该站的链路速率,那么帧就开始存储在中间交换机中,如果这种情况持续 一段时间,这些帧可能被丢弃。为了缓解这种情况的一种方法是在发送方采取流量控制,一些以太网交换机(和接口)通过在交换机和网卡之间发送特殊信号帧来实 现流量控制。流量控制信号被发送到发送方,通知它必须放慢传输速率,但规范将这些细节留给具体实现来完成。以太网使用PAUSE消息(也称为PAUSE 帧)实现流量控制,它由802.3.x[802.3-2008]来定义。

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

关于流量控制可能有重大负面影响,因此通常不使用它,相关原理在计算机网络原理(六):链路层和局域网中解析。

 三、集线器、网桥、交换机

在《TCP/IP详解卷一:协议》第二版的第三章中并没有介绍集线器,这里补充下一相关工作原理的内容,以便对比解析网桥和路由器。

3.1集线器

集线器是将一个PC设备连接单个网络的网络设备,它会存储多个端口,因此当数据包到达一个端口时,其他每个端口也会接收它,集线器的网络拓扑接口参考下图:

集线器的工作原理: 当一台PC通过集线器的网络连接向另一台PC发送数据时,集线器受到数据包以后会将它复制成多分通过广播的形式转发给除接收数据包的每个连接它的端口。在 端口的另一端如果是还是一个集线器按照同样的方式转发数据包;在端口的另一端如果是一台终端设备,终端设备通过数据包的目的地址来识别该数据包是否是自己 的,如果是自己的则接收该数据包,如果不是则丢弃。(这是广播相关的内容,后面会有广播相关内容的详细解析博客)

集线器的作用:可以实现连接多个网络设备,数据在通过物理介质传输是都会出现信号衰减的问题,集线器可以相当于一个信号放大器,保证数据可以完整的传输到目的地。

集线器的缺陷: 因为集线器通过广播的方式转发数据,会浪费大量的网络带宽,并且在结构复杂的网络链路中会因为广播消息导致出现网络风暴的问题(泛洪),甚至在环形网络链 路结构中发送端还会收到因为集线器广播转发的自己的数据。还有就是有时候终端设备可能会禁止广播消息,导致数据发送失败。

因为采用广播式转发数据的方式,集线器只能在同一个站内部转发数据,所以集线器不能作为站与站之间的网络连接设备,集线器也被称为转发器。相关内容可以参考:电子科技大学:TCP/IP协议原理

3.2网桥/交换机

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

在 前面介绍过集线器时间一台网络终端设备连接到网络中,它可以实现一台设备与网络中的所有设备相连接,一台设备向另一台设备发送数据时通过集线器广播给所有 设备,而交换机只会将数据通过交换机发送给目的地址的设备以及必须经过的链路的链路上的其他交换机,交换机使用的源地址和目的地址通常被称为MAC地址, 它由交换机内部建立MAC地址表来实现数据一对一的转发。

网桥与交换机的区别就是,交换机通常支持两个以上的设备连接实现连接的所有设备 一 对一转发数据,网桥通常支持两个网络设备于其连接实现这两个设备之间的数据转发,所以网桥通常用于连接两个站以实现将两个局域网合并成一个扩展局域网,通 过图来理解交换机和网桥组成的网络基本结构逻辑:

前 面说过交换机可以实现于其连接的所有设备与设备之间的一对一传输数据,而在上图中基于网桥实现的扩展局域网只能在两个局域网之间实现一对一传输,而两个局 域网内部还是依赖集线器的广播传输方式。当扩展局域网中一个终端设备向另一个终端设备发送数据时,在它所属的局域网(站)内部通过集线器以广播的方式转 发,如果接收方与发送方在同一个局域网内部时,网桥收到广播来的数据会被丢弃;如果接受方与发送方不在同一局域网内部时,网桥接收到广播来的数据时会通过 网桥连接的另一个局域网(即接受方所属的局域网)端口转发出去,当接收方的集线器收到该数据时同样会采用广播的方式转发给所属的局域网其他连接他的设备, 接受方的所有终端收到该数据后检查接收地址是否与自己相符,如果是自己的就接收,如果不是自己的就丢弃。

3.3生成树协议

在 实际的网络结构中一般都是需要多台交换机的连接来实现,并且还会采用网状结构构成环路的网络拓扑结构,以便达到网络链路冗余的目的,从而达到保障不会因为 某个节点的故障引发整个网络瘫痪。在这样的网络结构中,每个交换机都有自己的MAC地址,每个交换机经过一段时间对其他交换机的MAC地址的学习后,最终 每个交换机会知道每个站可由那个端口到达,每个交换机基于每个端口的列表被存储在一张表中(过滤数据库)。

这个生成地址表的过程是基于生成树协议来实现的,先以下面这个简单的网络拓扑结构来了解生成树协议的基本原理:

假设上图中的所有交换机都刚刚被打开,并且它们的过滤数据库为空

1.当站S发送一个帧时,交换机B在端口7、8、9复制该帧。

2.交换机A、C、D接收站S发送的帧。

3.交换机A在端口2、3生成该帧的副本;交换机D在端口20、22生成该帧的副本;交换机C在端口13、14生成该帧的副本。

4.当这些帧在交换机A、C、D之间双向传输,这些帧到达时,转发数据库开始出现震荡,这是由于网桥反复尝试查找通过那些端口可到达站S。

通过以上的介绍会发现这种情况是行不通的,这种没有控制的广播方式会在网络中形成网络风暴以及网络环路,交换机是无法正常工作的。为了解决这个问题,有一种协议称为生成树协议(STP)。

STP 通过拥塞冗余路径上的一些端口,确保达到任何目标地址只有一条路径(没有环路的链路路径),STP借用交换BPDU来阻止环路,BPDU中包含 BID(Bridge ID,桥ID)用来识别哪台计算机发出的BPDU。如果拓扑未分区,则数据可以基于没有环路的链路路径到达所有站。在数学上,一个生成树是一张图中所有节点和一些线的集合,从任何节点到达其他节点有一条路径或路由,但是没有环路,这些线的集合构成一棵树。比如在上图的网络结构基础上可以生成下图这样的一个条转发帧的链路:

在 上图实现了一条链路连接所有节点,规避了广播方式的网络风暴和环路问题,当然是在实际的网络连接管理中一个交换机上会针一个节点生成多个路由表,当一条链 路出现故障时就可以启用备份的冗余链路。然后就是生成的树形成和维护多个交换机,每个网桥上运行一个分布式算法,以便在启动时自动生成树和当某个节点出现 故障时重建链路或启动备份链路。

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

一个网络可能存在多个生成树,这是因为一个交换机可以针对另一个交换机生 成多个路由表,那么如何确定哪棵生成数最适合转发帧,这基于每条链路和根网桥的位置的相关成本。这个成本是一个与链路速度成反比的整数,例如一条 10Mb/s链路的成本为100,100Mb/s和1000Mb/s链路的成本分别为19和4(这只是举一个例子,具体要看各个交换机产商的实现)。

3.3.1端口状态和角色

为了理解STP的基本操作,我们需要了解网桥端口的状态机,以及BPDU内容。网桥端口可能有5个状态:阻塞、侦听、学习、转发、禁用。通过下图来了解它们之间的关系:

在 上图中表示了一个交换机端口从初始状态进入转发状态的过程,以及当管理配置引起端口状态变化时如何重新进入转发状态,实线箭头表示端口状态正常转换,小虚 线表示由管理配置引起的状态改变。无论从那种状态转换到转发状态,都意味着交换机在该端口上重新经历一次STP操作,即生成树或更新该端口的路由表。下面 简单的描述一下端口的状态转换以及各个状态下的特性:

在初始化后,端口进入阻塞状态。在这种情况下,它不进行地址学习、数据转发或BPDU发送,但它会监控接收的BPDU,并在它需要被包含在将到达的根网桥的路径中的情况下,使端口转换到侦听状态。如果在20秒之内没有收到BPDU,它会自动进入侦听状态。

在侦听状态下,该端口允许发送和接收BPDU,但不进行地址学习或数据转发。

经过一个典型的15秒的转发延迟,端口进入学习状态。这时,它被允许执行数据转发之外的所有操作。

在进入转发状态并开始转发数据之前,还需要等待另一个转发延迟。

端口角色:相对于端口状态,每个端口都扮演一定的角色。端口可能扮演的角色有:根端口、指定端口、备用端口、备份端口等角色(具体看设备生厂商的实现,例如可以参考华为NetEngine AR V600R021C00 配置指南-以太网交换配置)。

根端口:生成树中位于指向根的线段终点的那些端口;

指定端口:指处于转发状态,并与根相连线段中路径成本最小的端口;

备用端口(Backup端口):与根相连线段中成本最高的端口,它们不处于转发状态。

备份端口(Alternate):指连接到同一线段中作为同一网桥指定端口使用的端口,当指定端口失效时接管它的数据转发职责,而不影响生成树拓扑的其余部分。

在华为的相关文档中还有三种端口的划分:

边缘端口:设备上与中断设备直连的端口为边缘端口。边缘端口位于网络的边缘,不参与生成树计算,可以直接进入转发状态。端口使能生成树协议后,会默认启用边缘端口自动探测功能,当端口(2*Hello Time +1)秒的时间内收不到BPDU报文,自动将端口设置为边缘端口,否则设置为非边缘端口。如果手动配置设备上端口为边缘端口,边缘端口自动探测功能就不生效了。

Master端口:介绍Master端口和域端口之前先了解几个MSTP的基本概念。MSTP网络中一般有多个MST(Multiple Spanning Tree)域,每个MST域内会计算出一棵生成树,即内部生成树IST(Internal Spanning Tree)。将每个MST域看作一个节点,所有MST域之间会计算出一棵生成树,即公共生成树CST(Common Spanning Tree)。所有IST和CST构成以可完整的生成树,即公共和内部生成树CIST(Common and Internal Spanning Tree)。总根即CIST中的根桥。Master端口是MST域中和总根相连的路径最短的端口,是MST域中的报文去往总根的必经之路。

域边缘端口:指位于MST域的边缘并连接其他MST域或者单生成树的端口。Master端口是特殊的域边缘端口,Master端口在CIST上的角色是根端口,在其他各实例上的角色都是Master端口。

3.3.2BPDU结构

在前面介绍了端口,交换机或网桥要建立过滤数据库从而实现生成树,是基于交换BPDU帧来实现的,所以在介绍如何生成树之前,有必要了解BPDU的帧结构以及每个字段的内容:

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

BPDU报文可以分为以下几类

  • 配置BPDU(Configuration BPDU):STP用来进行生成树计算和维护生成树拓扑的报文。
  • RST BPDU:RSTP用来进行生成树计算和维护生成树拓扑的报文。
  • MST BPDU:MSTP用来进行生成树计算和维护生成树拓扑的报文。
  • TCN BPDU(Topology Change Notification BPDU):网络拓扑发生变化时用来通知相关设备的报文。

下面来逐个解析BPDU帧的字段:

Prot:协议标识符,即协议ID号,两字节,设置为0;

Vers:协议版本标识符,STP为0,RSTP为2,MSTP为3;

Type:当前BPDU类型,配置BPDU为0x00,TCN BPDU为0x80,RSTP与MSTP为0x02(即Vers为2或3时);

Flags: 网络拓扑变化标志。对于MSTP,是指CIST标志字段。包括最低位TC表示拓扑变化标志,最高位TCA表示拓扑变化确认标志。其他附加位被定义为:建议 (P)、端口角色(00为未知,01为备用,10为根,11为指定)、学习(L)、转发(F)、协议(A);

根ID:当前网桥的BID,对于MSTP,代表CIST的总根BID。

根路径成本:即路径开销,本端口累计到根网桥的开销。对于MSTP,是指CIST外部路径开销,从本设备所属的MST域到CIST根桥所属MST域的累计路径开销。CIST外部路径开销根据链路带宽计算。

网桥ID:本设备的BID。对于MSTP,是指CIST的域根设ID,即IST Master的ID。如果总根在域内,那么域根设备ID就是总根设备ID。

PID:发送BPDU的端口ID。对于MSTP,是指端口的IST中的指定端口ID。

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

MaxA:BPDU报文最大生存期,超时则认为到根设备的链路故障,默认为20秒。

Hello Time:指配置帧的传输周期,在华为的相关设备中默认为2秒。

转发延迟:指处于学习和侦听状态的时间,默认为15秒,用于控制侦听和学习状态的持续时间。

3.3.3生成树协议定时器

BPDU 报文中携带的与时间相关的字段包括Hello Time、转发延迟(Forward Delay)、MsgA(即message Age,消息有效期)、MaxA(即Max Age,报文最大生存期)。其中Hello Time、转发延迟、MaxA为三个定时器的值,缺省值分别为2秒、15秒、20秒,一般各种设备都支持手工配置。

Hello Time定时器和超时时间: 设备每个Hello Time时间会向周围设备发送BPDU报文,以确认链路是否存在故障。如果设备在超时时间内没收到上游设备发送的BPDU,则生成树会重新进行计算。例如 华为的设备超时计算公式如下,其中Timer Factor(定时器的因素)默认为3,支持手工配置,得到计算超时公式为:(超时时间=Hello Time x 3 x Timer Factor)。

当网络拓扑稳定之后,Hello Time定时器的值只有在根网桥修改后才有效。新的根网桥会在发出的BPDU报文中填充相应的字段以向非根桥传递该定时器修改的信息。但当拓扑变化之后,TCN BPDU的发送不受这个定时器的管理。

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

Forward Delay定时器指一个端口处于侦听(Listening)状态和学习(Learning)状态的各自持续时间,默认15秒。即Listening状态持 续15秒,随后Learning状态在持续15秒。这两个状态下的端口均不转发用户流量,这时STP用于避免临时环路的关键。

Max Age(MaxA)定时器和Message Age(MsgA):Max Age定时器的值即BPDU报文老化时间,可在根桥通过命令人为改动老化时间。Max Age通过BPDU报文的传输,可保证Max Age在整网中一致。运行生成树协议的网络中非根桥设备收到BPDU报文后,报文中的Message Age和Max Age会进行比较:

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

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

如 果配置BPDU(这里以配置BPDU举例,RST BPDU、MST BPDU的情况类似)是根网桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前网桥接收到的BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文每经过一个桥,Message Age增加1。

以下图来解析MaxA定时器与MsgA的工作机制:

1.当DeviceB和DeviceC从DeviceA收到配置BPDU,Message Age为0,所以在DeviceB和DeviceC的端口上,配置BPDU报文的老化时间为(Max Age - 0);

2.DeviceD和DeviceE从DeviceB收到配置BPDU,Message Age为1,所以在DeviceD和DeviceE去往DeviceA的端口上,配置BPDU报文的老化时间为(Max Age -1);

3.DeviceF从DeviceE收到配置BPDU,Message Age为2,所以在DeviceF去往DeviceA的端口上,配置BPDU报文的老化时间为(Max Age -2)。

 3.3.4根桥、根端口、指定端口的选举原则

BPDU 报文中携带Root Identifier(网桥ID、根ID、BID)、Root Path Cost(RPC,根路径成本、路径开销)、Bridge Identifier(网桥ID、发送设备ID)、Port Identifier(PID、发送端口PID)字段构成消息优先级向量{根桥ID,根路径开销,发送设备BID、发送端口PID}。设备通过交互并比较 消息优先级向量中各字段的值确定根桥、根端口、指定端口。

BID由桥优先级(Bridge Priority)与桥MAC地址(即DST、RSC,以太网帧的源地址和目的地址)构成,高16位是桥优先级,其余的低48位是MAC地址。

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

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

根桥选举:最小BID原则,BID最小的设备被选举为根网桥。

根端口选举:1. 最小RPC原则,非根桥设备上,根路径开销RPC最小的端口被选举为根端口;2.最小发送设备BID原则,非根桥设备上如果有两个及以上端口的路径开销相 同,则受到BPDU报文中“发送设备BID”最小的端口被选举为根端口。最后根桥上每个端口到根桥的根路径开销都是0,根桥上没有根端口。

指定端口选举:最小PID原则,根路径开销相同的情况下,阻塞PID值较大的端口,PID小的端口被选举为指定端口。用下图来解析指定端口选举规则:

DeviceA上端口PA1的PID小于端口PID2的PID,由于两个端口上收到的BPDU中,根路径开销、发送设备BID都相同,所以消除环路的依据只有PID。

3.3.5建立生成树:STP/RSTP拓扑计算方法

当 一个网桥初识化时,它假设自己是根网桥,即网络中所有的设备使能生成树协议后,每一台设备都认为自己是根桥。此时,每台设备不转发用户流量,仅收发配置 BPDU/RST BPDU。所有设备通过交互配置BPDU/RST BPDU进行选举工作,选出根网桥、根端口、指定端口。

STP/RSTP算法实现的基本过程

  • 初始状态:由于每个网桥都认为自己是根桥,所以在每个端口发出的BPDU中,根桥字段都是用各自的BID,RPC字段是类继的到根桥的开销(初始状态由于每个桥都认为自己是根桥,因此RPC为0),发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。
  • 选择根桥:网络初识化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中BID最小的设备被选为根桥。
  • 选择根端口和指定端口:

1.非根桥设备将接收最优配置消息(最优配置的选择过程参考后面的具体内容)的那个端口为根端口;

2. 设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:根桥ID替换为根端口的配置消息的根桥ID;根路径开销替换为根端口 配置消息的根路径开销加上根端口对应的路径开销;发送者BID替换为自身设备的ID;发送端口PID替换为自身端口ID。

3.设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:如果计算出的配置消息替换,并周期性地向外发送;如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接收不发送配置消息。

  • 最优配置消息的选择过程:

1.每个端口将受到配置消息与自己的配置消息进行比较:如果收到的配置消息优先级较低,则将其直接丢弃,对自己的配置消息不进行任何处理;如果收到的配置消息优先级较高,则用该配置消息的内容将自己配置消息的内容替换掉;如果收到的配置消息和自己的一样,则将其直接丢弃。

2.设备将所有端口的配置消息进行比较,选出最优的配置消息。

 STP算法实现举例

 一旦根桥、根端口、指定端口选举成功,整个树形拓扑就建立完毕了。下面结合例子说明STP算法实现的具体过程:

如上图所示,DeviceA、DeviceB、DeviceC的优先级分别是0、1、2,DeviceA与DeviceB之间、DeviceA与DeviceC之间、DeviceB与DeviceC之间链路的路径开销分别为5、10、4。

  • 各设备的初始状态:

  • 各设备的比较过程及结果(STP拓扑计算过程及结果):
设备 比较过程 比较后端口的配置
DeviceA
  • Port A1收到Port B1的配置消息{1,0,1,Port B1},发现自己的配置消息{0,0,0,Port A1}更优,于是将其丢弃。
  • Port A2收到Port C1的配置消息{2,0,2,Port C1},发现自己的配置消息{0,0,0,Port A2}更优,于是将其丢弃。
  • DeviceA发现自己各端口的配置消息中的根桥和指定桥都是自己,于是认为自己就是根桥,各端口的配置消息都不作任何修改,此后便周期性地向外发送配置消息。
  • Port A1:{0,0,0,Port A1}
  • Port A2:{0,0,0,Port A2}
DeviceB
  • Port B1收到Port A1的配置消息{0,0,0,Port A1},发现其比自己的配置消息{1,0,1,Port B1}更优,于是更新自己的配置消息。
  • Port B2收到Port C2的配置消息{2,0,2,Port C2},发现自己的配置消息{1,0,1,Port B2}更优,于是将其丢弃。
  • Port B1:{0,0,0,Port A1}
  • Port B2:{1,0,1,Port B2}
  • DeviceB比较自己各端口的配置消息,发现Port B1的配置消息最优,于是该端口被确定为根端口,其配置消息不变。
  • DeviceB 根据根端口的配置消息和路径开销,为Port B2计算出指定端口的配置消息{0,5,1,Port B2},然后与Port B2本身的配置消息{1,0,1,Port B2}进行比较,发现计算出的配置消息更优,于是Port B2被确定为指定端口,其配置消息也被替换为计算出的配置消息,并周期性地向外发送。
  • 根端口Port B1:{0,0,0,Port A1}
  • 指定端口Port B2:{0,5,1,Port B2}
 DeviceC
  • Port C1收到Port A2的配置消息{0,0,0,Port A2},发现其比自己的配置消息{2,0,2,Port C1}更优,于是更新自己的配置消息。
  • Port C2收到Port B2更新前的配置消息{1,0,1,Port B2},发现其比自己的配置消息{2,0,2,Port C2}更优,于是更新自己的配置消息。
  • Port C1:{0,0,0,Port A2}
  • Port C2:{1,0,1,Port B2}
  • DeviceC比较自己各端口的配置消息,发现Port C1的配置消息最优,于是该端口被确定为根端口,其配置消息不变。
  • DeviceC根据根端口的配置消息和路径开销,为Port C2计算出指定端口的配置消息{0,10,2,Port C2},然后与Port C2本身的配置消息{1,0,1,Port B2}进行比较,发现计算出的配置消息更优,于是Port C2被确定为指定端口,其配置消息也被替换为计算出的配置消息。
  • 根端口Port C1:{0,0,0,Port A2}
  • 指定端口Port C2:{0,10,2,Port C2}
  • Port C2收到Port B2更新后的配置消息{0,5,1,Port B2},发现其比自己的配置消息{0,10,2,Port C2}更优,于是更新自己的配置消息。
  • Port C1收到Port A2周期性发来的配置消息{0,0,0,Port A2},发现其与自己的配置消息一样,于是将其丢弃。
  • Port C1:{0,0,0,Port A2}
  • Port C2:{0,5,1,Port B2}
  • DeviceC比较Port C1的根路径开销10(收到的配置消息中的根路径开销0+本端口所在链路的路径开销10)与Port C2的根路径开销9(收到的配置消息中的根路径开销5+本端口所在链路的路径开销4),发现后者更小,因此Port C2的配置消息更优,于是Port C2被确定为根端口,其配置消息不变。
  • DeviceC根据根端口的配置消息和路径开销,为Port C1计算出指定端口的配置消息{0,9,2,Port C1},然后与Port C1本身的配置消息{0,0,0,Port A2}进行比较,发现本身的配置消息更优,于是Port C1被阻塞,其配置消息不变。从此,Port C1不再转发数据,直至有触发生成树计算的新情况出现,譬如DeviceB与DeviceC之间的链路down掉。
  • 阻塞端口Port C1:{0,0,0,Port A2}
  • 根端口Port C2:{0,5,1,Port B2}

网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备收到该配置BPDU后,如果优先级比自己的配置BPDU高,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息,否则会丢弃该配置BPDU。

3.3.6拓扑变化

STP的另一个重要工作是处理拓扑变化,虽然可用前面提到的数据库有效机制适应拓扑变化,但这是一个比较差的方法,因为有效期计时适应拓扑变化,但这是一个比较差的方法,因为有效计时需要花费很长时间(5分钟)删除错误条目。相反,STP采用一种方法检测拓扑变化,并快速通知它们所在的网络。在STP中,当一个端口进入阻塞或转发状态时,意味者发生拓扑变化。当网桥检测到一个连接变化(例如一条链路故障),它向根端口之外的端口发送拓扑变化通知(TCN)BPDU,通知自己在树中的父网桥,直到根为止。树中通向根的下一个网桥向发送通知的网桥确认TCN BPDU,并将它转发到根。当接收到拓扑变化通知时,根网桥在后续的周期性配置消息中设置TC位。这种消息被网络中每个桥所转发,并在处于阻塞或转发状态的端口接收。设置这个位允许网桥减小转发延时计时器的有效期,将有效期以秒代替推荐的5分钟。这样,数据库中已有的错误条目可被快速清除和重新学习,同时允许访问那些被误删除的条目。
当链路中断或接口异常Down等情况,由于MAC地址的老化时间的存在(缺省为5分钟),如果不及时通知上游设备,会导致上游设备的报文在这段时间内一直向一个不可达的链路发送。用下面的例子来解析拓扑变化时STP的处理机制:

正常情况下,DeviceA和DeviceB之间的链路被阻塞,由A到B的流量依次流经DeviceA、DeviceB、DeviceD、DeviceB。如果DeviceC和DeviceD之间的链路发生故障,流量需要由DeviceA直接转发到DeviceB,但是DeviceA上,仍然存在指向DeviceC的MAC地址表项,因此在此MAC地址表项老化前,流量还会转发给DeviceC,这样就导致流量的丢失。此时就需要拓扑变化机制来将拓扑的变更及时通知到网络。下面来看生成树协议拓扑变化处理过程,即TCN的发送和TC的泛洪:

1.T点接口发生变更后,下游设备会不间断地向上游设备发送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位和TCA位同时置为1后发送,TC位置1是为了通知下游设备直接删除桥MAC地址表项,TCA位置1是为了通知下游设备停止发送TCN BPDU报文。

在一个运行RSTP的网络中,检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态(转发状态)。一旦检测到拓扑变化,设备将进行如下处理:

1.为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器是Hello Time的两倍。在这个时间内,清空所有端口上学习到的MAC地址。同时,有非边缘指定端口和根端口向外发送RST BPDU,其中TC位置。一旦TC While Timer超时,则停止发送RST BPDU。

2.其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。

这样就实现了RST BPDU在网络中的泛洪。

 3.3.7多注册协议与虚拟网桥的局域网:MSTP

多注册协议(Multiple Registration Protocol,MRP)提供了在桥接局域网环境中的站之间注册属性的通用方法。[802.1ak-2007]定义了两个特殊的MRP“应用程序”,称为MVRP(用于注册VLAN)和MMRP(用于注册组MAC地址)。MRP代替了早期的GARP框架,MVRP和MMRP分别代替了旧的GVRP和GMRP协议。这些协议最初都由802.1q定义。

在使用MVRP时,当一个站被配置为一个VLAN成员时,该信息被传输到它所连接的交换机,并交由该交换机将站加入VLAN通知其他交换机。这允许交换机根据VLAN ID添加自己的过滤表,也允许VLAN拓扑变化不必通过STP而重新计算现有生成树。避免重新计算STP是从GVRP向MVRP迁移的原因之一。

MVRP是一个站注册其感兴趣的组MAC地址(组播地址)的方法。这个信息可能被用于交换机建立端口,组播流量必须通过该端口来交付。如果没有这样的功能,交换机不得不广播所有的组播流量,这样可能导致不必要的开销。MMRP是一个第2层协议,它与第3层协议IGMP和MLD相似,并在很多交换机中支持“IGMP/MLD探听”能力。

关于MVRP相关的详细内容可以参考802.1ak,这里具体来了解一下基于MVRP的实现多生成树协议MTSP,先来看MTSP的BPDU报文字段结构(来源华为相关内容手册):

Version 1 Length:BPDU版本1的长度,值固定为0。

Version 3 Length:BPDU版本3的长度。

MST Configuration Identifier:MST配置标识,表示MST域的标签信息,包含4个字段。

CIST Internal Root Path Cost:CIST内部路径开销从本端口到ST Master设备的累计路径开销。CIST内部路径开销根据链路带宽计算。

CIST Bridge Identifier:CIST的指定设备ID。

CIST Remaining Hops:BPDU报文在CIST中的剩余跳数。

MSTI Configuration(may be absent):MSTI配置信息,每个MSTI的配置信息占16比特,如果n个MSTI就占用n*16比特。

MSTP拓扑计算方法:MSTP网络中包含1个或多个MST域(Multiple Spanning Tree Region),每个MST Region中包含一个或多个MSTI。MSTI是所有运行STP/RSTP/MSTP的设备经MSTP协议计算后形成的树状网络。可以参考下面的MSTP网络层次示意图:

MST域(MST Region):MST域是多生成树域,由网络中的多台设备以及它们之间的网段所构成,同一个MST域的设备具有下列特点:

都启动MSTP;具有相同的域名;具有相同的VLAN到生成树实例映射配置;具有相同MSTP修订级别配置。

一个局域网可以存在多个MST域,各MST域之间在物理上直接或间接相连,用户可以通过MSTP配置命令把多台设备划分在同一个MST域内。参考MST域示意图来理解具体内容:

VLAN映射表:描述了VLAN和MSTI之间的映射关系,比如上面MST Region 4的VLAN映射表是:VLAN1映射到MSTI1;VLAN2映射到MSTI2;其余VLAN映射到MSTI3。

CST、IST、CIST、SST:在MSTP多生成树下的不同范围的网络。

公共生成树CST(Common Spanning Tree)是连接网络内所有MST域的一棵生成树。如果把每个MST域看作是一个节点,CST就是这些节点通过STP或RSTP协议计算生成的一棵生成树。

内部生成树IST(Internal Spanning Tree)是各MST域内的一棵生成树。IST是一个特殊的MSTI,MSTI的ID为0,通常称为MSTI0。IST是CIST在MST域中的一个片段。

公共和内部生成树CIST(Common and Internal Spanning Tree)是同STP或RST协议计算生成的,连接一个网络内所有设备的单生成树,所有MST域的IST加上CST构成一棵完整的树,即CIST。

单生成树SST(Single Spanning Tree)有两种情况:运行STP或RSTP的设备只能属于一个生成树;MST域中只有一个设备,这个设备构成单生成树。

域根、总根、主桥

域根(Regional Root):分为IST域和MSTI域根,在MST域中IST生成生成树中距离总根最近的设备是IST域根,一个MST域内可以生成多颗树,每棵生成树都成为一个MSTI。MSTI域根是每个多生成树实例的树根,域中不同的MSTI有各自的域根。

总根(Common and Spanning Tree):即CIST的根桥,例如前面“MSTP网络层次示意图”中的DeviceA。

主桥(Master Bridge):也就是IST Master,它是域内距离总根较近的设备,即前面“MST域示意图”中的黄色标识设备,如果总根根在MST域中,则总根为该域的主桥。

MSTP拓扑计算:MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST。域内则通过计算生成多棵生成树,每棵生成树都被称为一个多生成树实例。其中实例0被称为IST,其他的多生成树实例为MSTI。MSTP同STP一样,使用配置消息进行生成树计算,只是配置消息携带的是设备上MSTP的配置信息。

MSTP优先级向量:MSTI和CIST都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中,各设备相互交换MST BPDU来生成MSTI和CIST:

参与CIST计算的优先级向量为:{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}

参与MST计算的优先级向量为:{域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}

 MSTP优先级向量说明

根交换设备ID:根交换设备ID用于选择CIST中的根交换设备,根交换设备ID=Priority(16比特)+MAC(48比特)。其中Prioity为MSTI0的优先级。

外部路径开销(ERPC):从CIST的域根到达总根的路径开销,MST域内所有交换设备上保存的外部路径开销。如果CIST根交换设备在域中,则域内所有交换设备上保存的外部开销为0。

域根ID:域根ID用于选择MSTI中的域根。域根ID=Priority(16比特)+MAC(48比特)。其中Priority为MSTI0的优先级。

内部路径开销(IRPC):本桥到达域根的路径开销,域边缘端口保存的内部路径开销大于非域边缘端口保存的内部路径开销。

指定交换设备ID:CIST或MSTI实例的指定交换设备是本桥通往域根的相邻近的上游桥,如果本桥就是总根桥或域根,则指定交换设备为自己。

指定端口ID:指定交换设备上同本设备上端口相连的端口。Port ID=Priority(4位)+端口号(12位)。端口优先级必须是16的整数倍。

接收端口ID:接收到BPDU报文的端口,Port ID=Priority(4位)+端口号(12),端口优先级必须是16的整数倍。

MSTP优先级向量的比较原则:同一向量比较,值最小的向量具有最高优先级,下面是具体的比较原则:

1.首先,比较跟交换设备ID。

2.如果交换设备ID相同,再比较外部路径开销。

3.如果外部路径开销相同,再比较域根ID。

4.如果域根ID仍然相同,再比较内部路径开销。

5.如果内部路径仍然相同,再比较指定交换设备ID。

6.如果指定交换设备仍然相同,再比较指定端口ID。

7.如果指定端口ID还相同,再比较接收端口ID。

如果端口接收到BPDU内包含的配置消息由于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代,端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。

CIST的计算:经过比较配置消息后,在整个网络中选择一个优先级最高的设备作为CIST的树根,在每个MST域内MSTP通过计算生成IST,同时MSTP将每个MST域作为单台设备对待,通过计算在MST域间生成CST,CST和IST构成整个网络的CIST。

MSTI的计算:在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。MSTI的特点:

每个MSTI独立计算自己的生成树,互不干涉。

每个MSTI的生成树计算方法与STP基本相同。

每个MSTI的生成树可以有不同的根,不同的拓扑。

每个MSTI在自己的生成树内发送BPDU。

每个MSTI的拓扑通过命令配置决定。

每个端口在不同MSTI上的生成树参数可以不同。

每个端口在不同MSTI上的角色、状态可以不同。

 在运行MSTP协议的网络中,一个VLAN报文将沿着如下路径进行转发:在MST域内,沿着其对应的MSTI转发,在MST域间,沿着CST转发。

 3.3.8RSTP与MSTP的快速收敛机制

 RSTP/MSTP快速收敛的关键在于引入了Proposal/Agreement机制、根端口快熟切换机制、边缘端口。

Proposal/Agreement机制简称P/A机制,其目的是使一个指定端口尽快进入Forwarding状态。P/A机制分为普通P/A机制和增强P/A机制两种。

普通P/A机制及基于示例的解析

如上图所示,根桥DeviceA和DeviceB之间新添加了一条链路,在当前状态下,DeviceB的另外几个端口p2是Alternate端口,p3是指定端口且处于Forwarding状态,p4是边缘端口。

新链路连接成功后,P/A机制协商过程如下

1.p0和p1两个端口马上先称为指定端口,发送RST BPDU。

2.DeviceB的p1端口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。

3.DeviceA的p0进入Discarding状态,于是发送的RST BPDU中把Proposal和Agreement置1。

4.DeviceB收到根桥发送来的携带Proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。

5.p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。

6.各端口synced变量置位后,p2、p3进入Discarding状态,p1进入Forwarding状态并向DeviceA返回Agreement置位的回应RST BPDU。

7.当DeviceA判断出这是对刚刚发出Proposal的回应,于是端口p0马上进入Forwarding状态。

事实上对于STP,指定端口的选择可以很快可以完成,主要的速度瓶颈在于:为避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个Forward Delay所有端口才能进行转发。而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路,而使用P/A机制加快了上游端口转到Forwarding状态的速度。

注意:P/A机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样。

增强P/A机制的解析

增强P/A机制工作过程

1.协商开始时,每一台设备都认为自己是根桥,根桥上的端口是指定端口,端口状态为Discarding,端口的synced变量置位,触发Proposal和Agreement同时置位。上游设备发送Proposal报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并且阻塞所有非边缘端口。

2.上游设备继续发送Agreement报文,下游设备收到后,根端口转为Forwarding状态。

3.下游设备回应Agreement报文,上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。

缺省情况下,设备使用增强的快速迁移机制,如果设备和其他厂商的设备进行互通,而其他厂商设备使用普通的P/A机制,此时,可在华为设备上通过设置P/A机制为普通的快速迁移机制,从而实现华为设备和其他厂商设备进行互通。

根端口快速切换机制

如果RSTP/MSTP网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口并直接进入Forwarding状态。因为通过这个Alternate端口的网络段上必然有个指定端口可以通往根桥。

如示图中,DeviceA为根桥,DeviceB为备份根桥,DeviceC的interface2为Alternate端口。DeviceC的根端口interface1接口故障:STP模式时,DeviceC的interface2会先切换成根端口并进入Discarding状态,继续等待一个Forward Delay时间(缺省值为15秒)后进入Learning状态,等待一个Forward Delay时间(缺省值为15秒)后才进入Forwarding状态。RSTP/MSTP模式时,DeviceC的Interface2会切换成根端口,并直接进入Forwarding状态。

相比较STP模式时接口需要等待2*Forward Delay时间才能进入Forwarding状态,RSTP/MSTP模式时的根端口快速切换机制使接口直接切换成Forwarding状态,减少业务流量丢包。

边缘端口:在RSTP/MSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。

边缘端口不参与生成树运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将生成树协议禁用。但是一旦边缘端口收到BPDU,就失去了边缘端口属性,称为普通端口,并重新进行生成树计算,从而引起网络振荡,BPDU保护可以解决此问题。

 四、无线局域网——IEEE802.11

目前,无线保真(WiFi)是访问Internet的最流行的技术之一,IEEE标准名称为802.11,它是无线以太网标准,下面是IEEE802.11网络的体系结构图:

从上面的体系结构图中可以看到,网络中包括多个站(STA),在通常情况下站和接入点(AP)组成一个操作子集,一个AP和相关的站被称作一个基本服务集(BSS),AP之间通常使用一种有线的分布式服务(DS,基本是“主干”)连接,形成一个扩展服务集(ESS),这种方式通常被称为基础设施模式。802.11标准也提供一种Ad hoc(自组织模式),在这种配置中没有AP或DS,而是直接采用站到站(对等)的通信。在IEEE术语中,加入一个Ad hoc网络的STA形成一个独立基本服务集(IBSS)。由BSS或IBSS的集合形成的无线局域网称为服务集。它由一个服务集标识符(SSID)来标识,扩展服务集标识符(ESSID)是由SSID命名的一个BSS集合,它实际上是一个长32个字符的局域网名称。在WLAN第一次建立时,该名称通常分配给AP。

关于无线局域网的相关原理可以参考我的另一篇博客:计算机网络原理(七):无线网络和移动网络以方便理解后面的内容,特别是在帧结构方面这两篇博客刚好结合将每个部分都解析清楚了。

4.1IEEE802.11帧

802.11网络有一个常见的总体框架,但不包括多种类型的帧格式,每种类型的帧不一定包含所有字段,下面是常见的帧格式和数据帧:

MPDU格式类似于以太网,但取决于接入点之间使用的DS类型:帧是发送到DS还是来自它,以及帧是否聚合。Qos控制字段用于特殊功能,HT字段用于控制802.11的“高吞吐量”功能。

物理层会聚程序(PLCP)头部独立于物理层的方式提供特定的物理层信息,帧的PLCP部分的传输速率通常比其余部分低,这两做的目的:提高正确交付的概率(较低速度通常具备有更好的容错性能),提供对传统设备的兼容性和防止慢速操作的干扰。帧的MAC PDU(MPDU)与以太网相似,但是有一些额外字段。

MDPU以真控制字段开始,其中包括2位类型字段,用于识别该帧的类型,这里有三种类型的帧:管理帧、控制帧、数据帧。每种类型有不同的子类型。剩余字段由帧类型来决定。(下面简单的介绍相关概念,关于具体的帧内容考虑篇幅和内容相关性留到后期WLAN网络系列博客介绍

4.2管理帧

管理帧用于创建、维持、终止、接入站点之间的连接,其主要功能负责sta在802.11无线网络中的接入与退出功能,及sta与ap之间的协商、信息同步操作,管理帧分为14种类型。它们被用于确定是否采用加密、传输网络名称(SSID或ESSID),支持那种传输速率,以及采用的时间数据库等,当一个WiFi接口“扫描”临近的接入点时,这些帧被用于提供必要的信息。

扫描是一个站点发现可用的网络及相关配置信息的过程,这涉及每个可用频率和流量的侦听过程,以确定可用的接入点。一个站可以主动探测网络,在扫描时传输一个特殊的管理帧("探测请求")。这些探测请求有一定的限制,以保证802.11流量不在非802.11频率上传输。

当一个AP广播它的SSID时,任何站可以尝试与AP建立连接。当一个连接建立时多数WiFi网络会提供必要的配置信息,以便为站提供Internet接入。但是AP的运营商可能希望控制帧使用网络的站,有些运营商故意使连接变得困难,AP不广播其SSID被作为一项安全措施,这种方法提供了有限的安全性,这是由于SSID可以被猜测,链路加密和密码可以提供更可靠的安全性。

4.3控制帧:RTS/CTS和ACK

控制帧与帧确认被用于一种流量控制方式,流量控制有助于接收方使一个过快的发送降低速度,帧确认有助于发送方知道那些帧已被正确接收。相关内容参考:计算机网络原理(七):无线网络和移动网络2.3。

4.4数据帧、分片、聚合

在一个繁忙的网络中看到的帧大多数是数据帧,802.11帧和链路层(LLC)帧之间存在一对一关系,它们保证更高层协议(如IP)时可用的。但是,802.11支持分片,可将一个帧分为多个分片,根据802.11n的规定,它也支持帧聚合,可以将多个帧合并发送以减少开销。

分片:每个分片有自己的MAC头部和尾部的CRC,并且它们独立于其他分片处理,到不同目的地的分片可以交错发送,当信道有明显的干扰时,分片有助于提高性能。除非使用块确认功能,否则每个分片将被单独发送,并由接收方为每个分片产生一个ACK。由于分片小于全尺寸的帧,如果需要启动一次重传,则只需要重传少量数据。

分片仅用于目的地址为单播的帧,为了具备这种能力,顺序控制字段包含一个分片号(4位)和一个序列号(12位)。如果一个帧经过分片,所有分片包含相同的序列号值,而每个相邻的分片的分片号只差为1,由于分片号字段长度为4位,同一帧最多可能有15个分片。帧控制中的更多标识字段表示更多分片还没有到达,最后一个分片将这个位置为0。接收方将接收的同一序列的分片根据分片号重组成原始帧,再交给更高层协议来处理。

分片大小通常设置为256~2048字节,并作为一个阈值(只有那些超过阈值的帧才会被分片),很多AP通常设置更高的阈值,这样就会默认不使用分片。

聚合:802.11n提供的增强功能之一是支持两种形式的帧聚合:一种形式是聚合的MAC服务数据单元(A-MSDU),它可将多个完整的802.3帧聚合在一个802.11帧中。另一种形式是称为聚合的MAC协议数据单元(A-MPDU),它可以将多个具有相同的源、目的和Qos的MPDU聚合为短帧。

聚合的MAC服务数据单元(A-MSDU):A-MSDU方法在技术上更有效率,每个802.3头部通常为14字节向36字节的802.11MAC头部更短。因此,仅一个802.11MAC头部对应于多个802.3帧,每聚合一个帧最多可节约22字节。一个A-MSDU可能高达7935字节,可容纳100多个小的(50字节)分组,但只能容纳少数(5个)较大(1500字节)的数据分组。A-MSDU仅对应一个FCS,更大的A-MSDU帧会增大交付出错的概率,由于整个聚合只针对一个FCS,因此在出错时将不得不重传整个帧。

聚合的MAC协议数据单元(A-MPDU):多个802.11帧可以聚合起来,每个帧有自己的802.11MAC头部和FCS,每个帧最多4095字节。A-MPDU可携带最多64KB的数据,足够包含1000多个小的分组和大约40个较大1.5KB的分组。由于每个子帧都携带自己的FCS,因此可有选择的重传那些出错的子帧,这使得802.11那种的块确认功能成为可能,它是一种扩展的确认形式,为发送方提供哪个A-MPDU子帧交付成功的反馈信息。

 4.5省电模式和时间同步功能

802.11规范提供一种使站进入有限电源状态方式,成为省电模式(PSM)。详细内容不介绍了,这部分可以参考计算机网络原理(七):无线网络和移动网络2.6和2.7的内容。

 4.6IEEE802.11介质访问控制

《TCP/IP讲解卷一:协议》P82~84,大概内容包括:虚拟载波侦听、RTS/CTS和网络分配量;物理载波侦听(CCA);DCF冲突避免/退避过程;HCF和802.11e/n的Qos;也可以参考 计算机网络原理(七):无线网络和移动网络2.3的相关内容理解。

4.6无线局域网五层细节:速率、信道、频率

《TCP/IP讲解卷一:协议》P84~88,大概内容包括:信道和频率、更高吞吐量的802.11/802.11n,在以后的通信原理相关博客内容中介绍。

4.7WiFi网状网(802.11s)

 这部相关内容在《TCP/IP讲解卷一:协议》P89中有简单的介绍,这里也不介绍了,以后在具体的WLAN网络系列博客中在介绍。

 五、点到点协议

PPP表示点到点协议[RFC1661][RFC1662][RFC2153],这是一种在串行链路上传输IP数据报的流行方法,从低速的拨号调制解调器到高速的光链路[RFC2615]。它被DSL服务供应商广泛部署,也可以分配Internet系统的参数(例如最初的IP地址和域名服务器)。

PPP实际上是一个协议集合,而不是一个单一的协议,它支持建立连接的基本方法称为链路控制协议(Link Control Protocol,LCP),以及一系列NCP协议,在LCP建立了基本链路之后,用于各种协议(包括IPv4、IPv6、非IP协议)建立网络层链路。

5.1链路控制协议

PPP的LPC用于在点到点链路上建立和维护低层的双方通信路径,因此PPP操作只需要关注一条链路的两端,它不需要像以太网和WiFi的MAC层协议那样处理共享资源访问的问题。

PPP通常对底层的点到点链路由最低要求,LCP更是这样。链路必须支持双向操作(LCP使用的确认),以及异步或同步操作。通常,LCP使用简单的位级别帧格式,基于高级数据链路控制(HDLC)建立链路协议。

下面来逐个解析这些帧的字段:

标志:点到点链路的两个端使用这个字段来发现一个帧的开始和结束。如果0x7E值出现在帧的内部,这会带来一些小问题,而且这是一个很可能会产生的问题,因为数据中很可能回出现0x7E。针对这个问题两种解决方案,当在异步链路上,ppp使用字符填充(也称为字节填充)替换,如果转义字符出现在帧的其他地方用2字节序列0x7D5E替换,如果转义字符出现在帧中则用2字节的0x7D5D替换;当在同步链路上,ppp使用位填充,注意字符的位模式为01111110(连续6个1的位序列),在除了标志字符之外的任何地方,位填充在5个连续1之后填充一个0。这样做意味着发送的字节可能超过8位,但通常是正常的,因为低层串行处理硬件能去掉填充的比特流,并将它恢复成未填充的样子。

地址:用于指定哪个站正在处理,但ppp只关心一个站,所以设置了0xFF(所有站),也就是说这个字段总是被设置为0xFF。

控制:用于指示帧序列和重传行为,由于链路层的可靠性通常不由PPP实现,所以控制字段设置为0x03。

协议:表明携带的数据类型,协议号的分配方式为高位字节的最低有效位为0,低位字节的最低有效位为1。协议号的分配范围与数据类型:0x0000~0xEFFF范围内的值表示网络层协议,0x0021时数据部分是IP数据报;0x8000~0xBFFF范围内值表示NCP的相关数据,0x8021时数据部分是NCP数据(网络控制协议);0x4000~0x7FFF范围内的值用于NCP不相关的协议;0xC000~0xEFFF范围内的值表示控制协议,0xC021时数据部分是LCP数据(链路控制协议)。如果协议字段压缩(PFC)选项在链路建立时协商成功,协议字段可被压缩为1个字节,但是要注意LCP分组总是使用2字节的未压缩格式。

数据:最大不能超过1500字节,1500字节大小等于PPP协议中配置参数选项MRU。

FCS(校验):用于差错检测的冗余循环校验码。

由于地址和控制字段在PPP中都是固定的常数,所以在传输过程中经常通告一个称为地址和控制字段压缩(ACFC)的选项来省略它们,该选项实质上是消除了这两个字段。

PPP被配置为不重传,尽管确实有增加重传的规范[RFC1663]折中方案,但它依赖于携带的流量类型,在[RFC3366]中详细讨论了要考虑的有关因素。

5.1.1LCP操作

LCP在基本PPP分组之上进行了简单的封装,下面是LCP的分组格式:

LCP分组的字段解析:

协议:LCP的PPP协议字段值始终是0xC021,它不能用PFC删除,以免产生分歧。

代码:该字段给出了请求或响应的操作类型:配置请求(0x01)、配置ACK(0x02)、配置NACK(0x03)、配置REJECT(0x04)、终止请求(0x05)、终止ACK(0x06)、代码REJECT(0x07)、协议REJECT(0x08)、回送请求(0x09)、回送应答(0x0A)、放弃请求(0x0B)、标识(0x0C)、剩余时间(0x0D)。

标识:由LCP请求帧的发送方提供的序列号,并随着每个后续消息进行递增。在生成一个回复(ACK、NACK、REJECT响应)时,这个字段通告复制响应分组请求中包含的值来构造。采用这种方式,请求方可通过匹配标识符来识别相应请求的应答。

长度:给出了LCP分组的字节长度,它不能超过链路的最大接收单元(MRU),长度字段是LCP协议的一部分,PPP协议通常不提供这种字段。

代码字段各种值表达的具体意义:ACK消息通常表明接受一组选项;NACK消息用于建议选项表明部分拒绝;REJECT消息完全拒绝一个或多个选项;拒绝代码表明前一个分组包的某些字段值未知。

LCP用于建立PPP链路和各方商定选项,典型的交换过程包括一对包含选项列表的配置请求和配置确认、一个认证交换、数据交换、一个终止交换。因为PPP是一个包括很多部分的通用协议,所以在一条链路建立和终止之间可能发生很多其他类型的操作。下面是一个简化的分组交换时间表和一个简化的状态机示图:

LCP的主要工作是使一条点到点链路到达最低要求,配置消息使链路两端开始基本配置过程,并建立商定的选项。终止消息用于完成后清除一条链路,LCP也提供一些附加功能:

回送请求/应答消息可由LCP在一条活跃链路上随时交换,以验证对方的操作;

放弃请求消息可用于性能测试,指示对方丢弃没有响应的分组;

标识和剩余时间消息用于管理目的:了解地方的系统类型,指出链路保持建立的时间。

如果一个远程工作站处于环回模式(或者说“回路”),这时点到点链路会出现一个常见问题,电话公司的广域数据线路有时会为了测试而设置换回模式,由一方发送的数据直接由另一方返回,虽然这可能对线路测试有用,但它对数据通信完全没有帮助,所以LCP包括一种发送魔术数字(由发送发选择任意数字)的方式,并查看是否立即返回相同类型的消息,如果是的话,该线路被检测为处于回路,并可能需要进行维护。

下面来说说关于PPP状态机,一旦低层协议表明一个关联变为活跃(例如调制解调器检测到载波),则认为这个链路已被建立。链路质量测试包含链路质量报告和确认交换,它也可以在此期间完成。如果链接需要认证,例如当拨号到一个ISP时,可能需要一些额外的信息交换,以认证链路上的一方或双方的身份。当底层协议或硬件表明一个关联已停止(例如载波消失),或发送一个链路终止请求,并从对方接收到一个终止响应,则认为这个链路已被终止。

5.1.2LCP选项

当LCP建立一条有一个或多个NCP使用的链路时,可以对一些选项进行协商,下面具体来讨论一些选项情况:

异步控制字符映射(ACCM):简称“asyncmap”选项定义哪些控制需要被“转义”为PPP操作,转义一个字符标识不发送这个这个字符的真实值,而将PPP转义字符(0x7D)放在控制字符原始值0x20异或形成的值之前。

配置MRU:由于PPP缺少一个长度字段,并且串行线路通常不提供帧封装,所以在理论上对一个PPP帧的长度没有硬性限制。实际上最大帧大小通常由MRU指定,当一台主机指定一个MRU选项(类型0x01)时,它要求对方不发送比MRU选项提供的值更长的帧。MRU值是数据字段的字节长度,他不计算其他PPP开销字段(即协议、FCS、标志字段)。它的典型值是1500或1492,但也可能多大65535,IPv6操作需要的长度最小为1280,PPP标志要求具体实现能接收最大1500字节的帧,MRU更多的是建议对方选择帧大小,而不是硬性限制帧大小。当小分组和大分组在同一条PPP链路上交错传输时,较大分组可能占用一条低带宽链路的大部分带宽,并影响小分组的正常传输。这可能导致抖动(延迟变化),对交互式应用产生负面影响。配置较小的MRU有助于缓解这个问题,但会产生更大的开销。

链路质量报告:PPP交互链路质量报告信息的机制,在选项协商期间,可能包括一个包含所请求的特定质量协议的配置信息,选项中的第16位白保留给特定协议,但最常见的是一个包括链路质量报告的PPP标准,它在PPP协议字段中使用值0xC025。如果启用该选项,则要求对方按某个周期尖阁提供LQR。LQR请求之间的最大周期间隔被编码位一个32位数字,他被保存在配置选项中,并以1/100秒位单位标识。对方可能比这个要求更频繁地生成LQR,LQR包括以下信息:一个魔术数字、发送和接收的分组数和字节数、出错的输入分组数和丢弃的分组数,以及交换的LQR总数。如果链路质量无法满足某些配置阈值,有些实现也提供了终止链路的方法。LQR可在PPP链路进入建立状态后请求,每个LQR被赋予一个序列号,因此他能确定一段时间的趋势,甚至在LQR重新排序时也能确定。

回送控制协议(CBCP):很多PPP实现支持一种回叫功能,在一次典型的会叫建立过程中,PPP拨号回叫客户端呼叫PPP回叫服务器,并提供认证信息,而服务器断开连接并回叫客户端。在呼叫费用不对称或某些安全级别情况下,这种做法可能是有用的。

自描述填充:PPP使用一些压缩和加密算法在处理时需要一定的最小字节数,称为块大小。在数据不够长的情况下,通过填充增加数据长度,达到一个甚至多个块的大小。一种填充方法称为子描述填充,它将填充值变为非零。这时,没给个字节获得填充区域的偏凉值,因此填充的第一个字节值为0x01,最后一个字节包含填充字节数。最多支持255字节的填充。

聚合帧:为了减少每个帧包含一个头部的固定开销,提出了一种将多个不同协议的有效载荷聚合成PPP帧的方法,称为PPPMux方法。主要PPP头部的协议字段被设置为聚合帧(0x0059),然后每个有效载荷块被插入帧中。

5.2多链路PPP

PPP的一个特殊版本称为多链路PPP(MP)[RFC1990],可用于将多条点到点链路聚合为一条链路,这种想法与前面讨论过的链路聚合相似,并被用于多个电路交换信道的聚合。MP包含一个特殊的LCP选项,表示支持多链路,以及一个用于多链路上PPP帧分片与重组的协商协议。一条聚合链路(称为一个捆绑)可作为一条完整的虚拟链路来操作,并包含自己的配置信息。链路捆绑由大量成员链路组成,每个成员链路可能有自己的选项集。

实现MP的典型方法是使分组轮流经过各个成员链路传输,MP在每个分组中添加一个2~4字节的序列头部,而远程MP接收方的任务是重组正确的顺序,下面来看MP分片的PPP分组帧结构:

在MP分片中重点要关注标志和序列号字段,下面来逐个了解:

标志:注意这不是PPP帧的首位标志,而是分片的标志,如果一个帧没有被分片,但使用这种格式传输,则B和E位都被置位,表明该分片是第一个和最后一个。否则,第一个分片的B、E位组合被设置为10,最后一个分片的B、E位组合被置为01,它们之间的所有分片被设置为00。

序列号:用于给出相对第一个分片的分组号偏移量。

MP使用一个称为多链路最大接受重构单元的LCP选项,它可以将一系列更大的MRU应用于捆绑中。大于成员链路MRU的帧仍被允许通过这个MP链路,直到达到这个值得上限为止。由于一个MP捆绑可能跨越多条成员链路,因此需要一种方法来确定成员链路属于同一捆绑。同一捆绑中得成员链路由LCP端点鉴别选项时别。端点鉴别可以使用电话号码、从IP或MAC地址中提取得数字、其他可管理得字符串。

建立MP得基本方法定义在[RFC1990]中,希望各个成员链路可以对称使用,相近数量得分片被分配到号码固定得每条链路上。为了实现复杂得分配,[RFC2125]中规定了带宽分配协议(BAP)和带宽分配控制协议(BACP)。BAP用于为一个捆绑动态添加或删除链路,而BACP用于交换如何使用BAP添加和删除链路的信息。这种功能有助于实现按需带宽(BOD)。

BAP/BACP使用一种新的链路啊鉴别LCP选项LCP选项,这个选项包含一个16位的数字值,一个捆绑中的每条成员链路有不同的值。它被BAP用于确定添加或删除哪些链路。在一条PPP链路的网络阶段,每个捆绑都需要使用BPCP协商,它的目的是找出首要端口。也就是说,如果在多个对端之间同时建立多个捆绑时,将会优先为首选对端分配成员链路。

BAP包括3种分组类型:请求、响应、标识。请求用于向一个捆绑添加一条链路,或从一个捆绑中删除一条链路。标识用于为原始或被确认的请求返回结果。响应是对这些请求的ACK或NAC。

5.3压缩控制协议

压缩类型是不同的,无论是调制解调器硬件支持的压缩类型,还是我们以后讨论的协议头部压缩。目前,有几个压缩选项可选。可在一条PPP链路的两个方向做出选择,LCP可协商一个使压缩协议(CCP)生效的选项。CCP的作用就像NCP,只不过LCP链路建立交换阶段指明压缩选项时才开始处理配置压缩细节。

CCP仅在链路进入网络状态时协商,它使用于LCP相同的分组交换过程和格式,灵台还有一些特殊的选项,对常见的代码字段值(1~7)定义了2个新操作:复位请求、复位确认,如果一个压缩帧中检测到一个错误,复位请求可以用于请求对方复位压缩状态,在复位后,对方响应一个复位确认。

一个或多个压缩帧可做为一个PPP帧的一部分,压缩帧携带的协议字段值为0x00FD,但是如何知名存在多个压缩帧,这个依赖于使用的特定压缩算法。当CCP与MP结合时,既可用于一个捆绑,也可用于多条成员链路的某些组合。如果只用于成员链路,协议字段设置为0x00FB.

CCP可以使用十几个压缩算法之一[PPPn],大多数算法不是官方标准的IETF文档,虽然它们可能在RFC中加以描述。如果使用压缩,PPP帧在进一步处理之前需要重构,因此高层的PPP操作通常不关心压缩帧的细节。

5.4PPP认证

在一条PPP链路处于网络状态之前,通常有必要使用某种认证机制,以识别建立连接的对方身份。下面简单的介绍几种不同的认证机制:

最简单最、安全性低的认证方案是密码认证协议(PAP),这种协议非常简单,一方请求另一方发送一个密码,由于该密码在PPP链路上未加密传输,窃听者在线路上可以轻易捕获密码并使用它。PAP分组像LCP分组那样编码,协议字段值设置为0xC023。

查询-握手认证协议(CHAP)提供一种更安全的认证方法,在使用CHAP时,一个随机值从一方发送到另一方,响应通过一种特殊的单向功能,将一个随机值和一个共享密钥结合形成响应中的一个数字。在接收到这个响应之后,认证方能更可靠地验证对方密钥是否正确,这个协议在链路上不会以明文形式发送密钥或密码,因此窃听者那一了解相关信息。由于每次使用不同的随机值,每个查询/响应的结果会改变,即使一个窃听者有可能捕获到这个值,也无法通过重新使用来欺骗对方。

EAP是一个可用于各种网络的认证框架,它支持很多不同的认证方法,从简单的密码到(PAP、CHAP)可靠的认证类型(智能卡、生物识别)

5.5网络控制协议

虽然多种NCP可用于一条PPP链路,但更多关注IPv4和IPv6的NCP。对于IPv4,NCP被称为IP控制协议(IPCP);对于IPv6,NCP被称为IPV6CP。在LCP完成链路建立和认证之后,该链路每端都进入网络状态,并用一个或多个NCP进行网络层的相关协商。

这里关乎到网络控制层相关的内容,以后在具体的网络工程的PPP相关内容中详细解析。

5.6头部压缩

头部压缩从以前的VJ压缩[RFC1144]到后来演化成IP头部压缩[RFC2507][RFC3544],再到最新的改进方案称为鲁棒性头部压缩(ROHC)[RFC5225]。相关具体的等容到后期网络工程的PPP相关内容中详细介绍。

 六、环回、MTU、隧道基础

 6.1环回

环回就是指使用Internet协议(例如TCP/IP)与同以计算机的服务器通信。为了实现这个目标,大多数实现支持一种工作在网络层的环回(或称“回送”)能力——通常使用一个虚拟的环回网络接口来实现。它就像一个真正的网络接口,但实际上是一个由操作系统提供的专用软件,可通过TCP/IP与同一主机的其他部分通信。以127开始的IPv4地址和IPv6地址::1都是为这个目的而保留的。简单的说就是当报文发送到环回接口(即发送到网络层),它就会通过网络层再交给传输层,而不会发送到真实的网络中。

6.2MTU

在链路层中因为物理介质和设备的差异,在不同的链路环节可能出现不同的传输帧大小的限制,通常采用相同的大小以保持兼容性,链路层的这种特征被称为最大传输单元(MTU)。

当同一网络中的两台主机之间通信时,本地链路的MTU在会话期间对数据报大小有直接的影响。当两台主机之间跨越多个网络通信时,每条链路可能有不同大小的MTU,在包含所有链路的整个网络路径上,最小的MTU称为路径MTU。

6.3隧道基础

两台计算机通过Internet或其他网络建立一条虚拟链路,虚拟专用网络VPN提供这种服务,这类服务的最常用的方法称为隧道。

一般来说,隧道在高层(或同等层)分组中携带低层数据,例如IPv4或IPv6分组中携带IPv4数据,在UDP、IPv4或IPv6分组中携带以太网数据,隧道转变了在头部中协议严格分层的思路,并允许形成覆盖网络。

为某些协议层的分组或另一层的分组建立隧道有多种方法,用于建立隧道的3种常见协议包括:通用路有封装(GRE)、Microsoft专用的点对点隧道协议(PPTP)、第二层隧道协议(L2TP)。

单向链路:当链路仅在一个方向工作时,这种一个方向工作的链路称为单向链路(UDL),由于它们需要交换信息(例如PPP配置消息),因此前面介绍的很多协议在这种情况下不能正常运行。为了解决这种问题提出了一种标准,可在辅助Internet接口上创建隧道,它可以与UDL操作相结合。典型情况是由卫星提供下行流量而形成一条Internet连接,或者时调制解调器提供上行流量而形成一条拨号链路。为了在接收方自动理解和维护隧道,[RFC3077]规定了一种动态隧道配置协议(DTCP),DTCP涉及在下行链路中发送组播Hello消息,因此任何有兴趣的接收方都可以直到已有UDL及其MAC和IP地址。另外Hello消息标识网络中一个隧道端点的接口,它可以通过用户端的辅助接口到达。

关于隧道相关内容在后期的网络工程相关内容中再详细介绍,在上一篇博客第五节中也有链路虚拟化的介绍,可以参考。

 

posted @ 2022-11-16 22:24  他乡踏雪  阅读(489)  评论(0编辑  收藏  举报