集线器、交换机、虚拟局域网与快速以太网

星期3, 2008年10月14日
Posted in category 网络技术

交换机这个词听起来像是一个定义明确的概念。我知道已经有很多人搞不懂网桥和路由的区别了。不幸的是,人们使用交换机这个词,好像他们发明了一个新概念一样,实际上这东西只是和网桥及路由有点区别而已。而且有很多种互相独立的产品都称为是交换机。交换机的厂商不断地扩展它的能力范围,现在的交换机已经混杂或者包含了网桥和路由的功能。我给交换机下了一个(不合文法的)定义:它是一个市场名词,意味着“快速”。现在几乎所有的产品都混杂着或者包含着网桥与路由的功能。所以,也许使用“交换机”来代替“一个传递数据的箱子”这个名词,会更好一些。

集线器
以太网开始时被设计为总线结构(有分接头的长线)。但在为某个建筑物布线时,这种结构被证明不是很方便。而且,某些类型的错误可能引发整个网络的崩溃。更方便的布线策略是星型结构,特别是建筑物的电话线已经采用了这种布线策略。为了布线更加便利,不同的以太网都被标准化为采用普通的电话线(即双绞线)来操作。星型结构的中心是HUB,即集线器(见下图)。它像中继器一样连接网段。

用HUB连接的星型结构

虽然HUB也可能有令人担忧的问题,如单点故障,但它比总线安全得多,因为它可以被锁在安全的地方,从而不会被人溅上咖啡或者不小心把线给拖了出来。而且总线结构也会有很多的单点故障。移开一个终结点电阻器或者某个站点产生噪声都可能使整个网络崩溃。所以我们使用了HUB,它实际上相当于一个多端口的中继器。这也就意味着,当某个站点在传输时,HUB对其他链路来说,就是起中继器的作用,每次转发一位数据。如果同一时间有两个站点企图传输,就会产生冲突,这和总线结构是一样的。有时,我们把这种结构的LAN(使用HUB以及很多点对点链路的LAN)称为交换的LAN(switched LAN)。但在目前,更普遍的一种说法是,交换的LAN仅指5.1.2节中描述的L2层的交换。为了让读者不混淆这两个概念,我们把多端口中继器(实际上就是HUB)的产品称为“L1层的交换的LAN”。

学习式HUB和安全性
在传统的(总线结构)以太网中,不管是不是指定的目的站点,每个站点都将收到发送出来的包。然后计算机的NIC(网络接口卡)负责为上层软件过滤包,只接收那些目的地址为上层软件所指定接收的包。星型结构使得HUB能够更智能化地只向特定的待接收端口转发包。不幸的是,由于HUB一收到数据就开始转发,因而在HUB判断出哪个端口才应该转发时(根据包内的目的地址),HUB已经把包的前一部分转发出去了。所以需要有某种策略使得HUB可以在无须转发的端口上停止发送数据。假定在这样的端口上有一个站点A,它在收到一部分包以后就收不到数据了。这种策略会使得A认为现在(在包的后一部分传输的过程中)LAN是空闲的,于是A就开始发送数据,导致冲突。为此,厂商典型的做法是,让HUB在除目的端口以外的其他端口上制造出冲突的现象。即HUB在往目的端口发送真正数据的同时,向其他的端口发送冲突信号。这种做法的市场(商业)说法是,HUB具有安全特征,它使得该HUB所连接的站点不能偷听到发送给其他站点的数据包。HUB怎么知道哪个站点位于哪个端口上呢?跟网桥的做法一样,它可以通过源地址来学习。当目的地址还不知道时(即不知道目的地址位于哪个端口上),HUB把这个包向所有的端口转发(当然要把发送该包的端口除外)。可以假定,A是端口P上唯一的一个站点,即便不知道地址C位于哪个站点上,由于假定了端口P上只有站点A,因此发送给地址C的包就没必要在端口P发送。这种假设可能会犯错,因为一个HUB可能连接到另外一个HUB上,所以站点A、C和X对HUB1来说,可能都是位于端口P上(见下图)。


对H1而言,多个站点都位于端口P

注意:由于中继器上并不能运行生成树算法。因此在把一个HUB连接到另外一个HUB上时要非常小心。如果不小心把HUB接成回路了,网络就可能什么也不工作了(会不断发生冲突)。

存储-转发和生成树
对HUB的另一项改进措施是,让HUB在转发包前先存储它。这有几点好处。
?HUB可以判断应该把这个包转发到哪个端口上。比如说它发现这个包应该发向端口p,它就只向端口p发送这个包,而不需要与此同时再向其他端口发送包或者冲突信号。
?没必要再发出冲突信号。我们也没必要再担心最大距离和最小包尺寸(CSMA/CD为了能够检测冲突,需要网络保证一个最大距离和最小的包尺寸)。
?各个端口的速度可以不同。如果包先被存储,然后才转发,即使A的端口是10Mb/s,而B的端口是100Mb/s,A与B之间也可以通信。
?合计带宽不受端口速度限制。假定H2已经知道了站点A、C、X和D的位置(见图“对H1而言,多个站点都位于端口P”),如果A与C同时发送包给站点X,H2可以陆续地把包转发给X。然而,如果A要发送包给X,而C要发送包给D,则H2可以同时转发包给X和D,而且A-X和C-D之间的会话都能使用全部的带宽。
注意:确实有某些原因需要把中继器发展为网桥,而我们所做的就是把HUB从n端口的中继器变为n端口的网桥。当然,这种带存储—转发的n端口的HUB称为L2层的交换机。
由于L2层交换需要先存储再转发包,你可以认为这当中必须有一定时延,但我们可以采用一种名叫捷径转发的方法。捷径转发就是说L2层交换机一旦决定要把这个包转发到哪个端口,就开始发送该包(而不是等到全部接收完才开始转发)。捷径转发是可行的,但也可能出现问题,比如说发送包的端口与接收包的端口数据传输速度不一致时。所以我们又发明了学习网桥。现在需要注意的是,由于交换机可以接到交换机上,因而可能导致回路。网桥(可能市场营销人员会把它叫做交换机)形成的回路是很糟糕的一件事。所以我们需要生成树算法。在这一点上,L2层的交换机也就是网桥。当我追问别人什么是交换机和网桥的区别时,得到了以下的答案:
? “交换机有n个端口,而网桥只有两个端口。”(可能一开始的产品对端口数有限制,但在网桥的概念里并没有限制端口数量)。
? “交换机的工作由硬件完成,速度较快;网桥的速度较慢。”(可现在有运行得比某些人们称之为交换机更快的网桥,而且“速度快”是个相对的概念)。
? “交换机上的端口连接的是点到点链路所构成的节点;而网桥的端口所连接的是整个局域网。”这个观点曾经一度可能是正确的,但现在人们已经建立在交换机外的局域网,并且由于现在一台交换机可以接到另外一台交换机上,这也就相当于把一个局域网接到了交换机的一个端口上,而不是交换机的每个端口只连一个单一的站点。而且,现在很多交换机的厂商已经提高连接不同链路的技术,包括令牌环结构和总线结构。
但实际上, L3层的交换机也就是路由器。

混合L1和L2的交换机
如上所述,我们把多端口中继器称为L1层的交换机,把网桥称为L2层的交换机。有些交换机可以同时进行L1层和L2层的交换工作。也即它们在某些端口上起着中继器的作用,在某些端口上起着网桥的作用。这相当于接了两个局域网,然后把它们桥接在一起。这样做可以包装方便。在一个模块化交换机里,每一块板卡都有端口连接到它。同一板卡的端口之间是位于L1层的连接,不同板卡上的端口之间的连接是通过网桥连接的。同一板卡之间采用L1层的交换是为了节省同一板卡内部的包使用宝贵的底板带宽。如果尽可能地让多个站点间的业务流在同一板卡的不同端口上,可以得到更大的总体带宽利用率(如果底板带宽成为瓶颈的话,这种做法是正确的,因为位于L1的会话可以在本地的板卡上解决,而不需要使用底板的带宽)。当然,同一板卡内的传输也可以使用存储—转发模式,并且也能使用底板带宽,但这会增加该板卡上为了缓冲包而导致的硬件开销。在L1层进行交换的端口的集合有时称为冲突域。这意味着这些端口上的站点如果在同一时间开始传输的话,会产生冲突;而位于不同冲突域上的站点同时传输则不会产生这个问题。通过L1或L2连接在一起的端口的集合有时称为广播域(见下图)。也就是说,在L3看来,它们是处于一个局域网上。之所以称之为广播域,是因为如果L3发送了一个广播包,如ARP包,这个包会被发送到该广播域内的所有端口上。

两个冲突域,一个广播域

产品与标准,L1与L2
让交换在L2(存储—转发)上进行比交换在L1(中继器)上进行要好得多,因为L2上的交换可以有更高的合计带宽,并且可以减少由于冲突带来的复杂性。考虑冲突的影响需要涉及到限制包的大小以及物理链路的距离。而且,如果交换在L2上进行,还可以允许不同端口具有不同的数据传输速率(例如,某些端口的数据传输速率为10Mb/s,而某些端口的数据传输速率为100Mb/s)。而在L1上进行的交换必须保证每个端口的数据传输速率都相同。最初的时候,在L2上进行转发要比在L1进行昂贵得多(如在L2上可能每个端口要1000美元而L1上每个端口只需300美元),但交换机的制造商最终找到了降低费用的方法,除了在很低端的产品之外,使得L2层的转发跟L1上的转发费用大致相当。所以现在的交换机基本都是L2交换机,特别是在高速局域网上(100Mb/s和1Gb/s)。但是802标准采取了L1转发。为什么会这样呢?这是因为IEEE 802.3希望他们制定的标准在CSMA/CD下工作,并且认为,如果一个HUB可以做存储-转发工作,那么它就是一个网桥,因而也就不属于802.3委员会所讨论的范围了。很不幸的是,802.3委员会因而提交了一个冗长的文档,与厂商的意愿相背。

快速LAN
以太网协议使得站点可以检测冲突。10Mb/s以太网(最初的总线结构)规定了一个最小包长和一个最大的合法电缆长度,使得在链路一端的站点能够知道它是否和在链路另外一端的站点发生了冲突。因此,我们怎么才能让以太网快一些呢?如果我们以10为增长因子,可以采取以下做法:
? 让最小包长扩大10倍。
? 让最大合法距离缩小10倍。
? 混合使用前两种方法。
? 不关心冲突检测—不去关心冲突所丢失的包,把这个问题留给更高的层来处理。
? 让交换机进行存储—转发,从而避免冲突的发生。
在802.3委员会为100Mb/s以太网所制定的标准中,最大的合法距离被缩小了10倍(因为该委员会只考虑了L1转发)。但这种限制对采用L2转发的产品来说没有必要。在吉比特以太网标准中,为了提高10倍的速度,委员会把最小包长扩大为512个字节。也就是说,一个大小为64个字节的包需要附加上448个字节的载波扩展(carrier extension)才能发送(这样的话,这个包在发送时就有512个字节了)。注意,这种做法和要求最小包长为512个字节,然后少于512字节的包被填充至512个字节大小的做法不同(见下图)。在吉比特标准中,一个原来为64字节,然后被扩展的包在MAC层以上的层看来依然是64字节的包。当网桥把这个包发到非吉比特的局域网上去时,这个包的大小仍然为64个字节。

载波扩展与包填充的比较

如果有多个小的包需要传输,它们可以被合并在一起依次传输,但是第一个包需要被扩展到512个字节(见下图),以免产生重复包。假定直接把几个小包合并到最前面的512字节中,然后在传输过程中发生了冲突,目的端可能已经正确地接受了前面的几个包,但是发送方无法知道前512字节中的哪几个包已经被正确地接收了。所以发送方只好把这些包都重发一遍,这样在接收方那里就产生了重复包。但是当发送方发送完512个字节后,其他站点会发现线路繁忙,因而在最初512个字节后面的包就不会遇到冲突了。

最初512个字节中的包需要有载波扩展

虽然吉比特标准中假定了HUB是个中继器(L1交换机),但在大多数的产品中,HUB都是个网桥(L2交换机)。在这种情况下,包没必要被扩展,因为不可能发生冲突。虽然在HUB与站点之间的链路总是两条链路—每一条负责一个方向—链路对可以被当作全双工方式(full duplex)(可以同时进行收/发);也可以被当作半双工方式(half duplex)(如果收/发同时进行,则认为发生冲突)。当H U B是个中继器时,半双工模式允许站点检测冲突
并采取一定措施。如果链路是全双工模式,则没必要对小包进行载波扩展( carrier extension)。当有某条链路加入网络时,有一个商谈过程来确定链路的速度和工作方式(全双工还是半双工)。虽然在L2转发的情况下不会发生冲突,但是交换机还可能会遇到拥塞。下面举了两个例子:
? 源端口的数据传输速率高于目的端口的数据传输速率。
? 同时有两个源端口以全速向同一个目的端口传输数据。
在这些情况下,交换机的缓冲区可能会溢出,因为它没法按它接收数据的速率来发送这些数据。如果站点是用半双工方式连接的,交换机可以通过幕后压力(backpressure)来降低该站点的发送速度,也即向相反方向(向发送数据的站点)发送冲突信号。在全双工方式下,委员会(802.3x)定义了暂停帧(pause frame),HUB通过这个帧明确地告诉站点降低发送速度。

虚拟局域网
跟往常一样,这很难给它下个定义,“什么是虚拟局域网( V L A N )?”。首先,我们要知道,一个虚拟局域网跟局域网并没有什么不同。它覆盖了一个广播(或组播)包能够达到的范围(前面我们已经知道,这称为广播域)。VLAN与LAN之间的区别,如果有的话,也就是包装(packaging)上的不同。VLAN允许在同一个交换机上有多个分离的LAN。例如,已知某个交换机上端口1 ~ 32位于VLAN A上,而端口33 ~ 64则位于VLAN B上。这个交换机可以当作两个分离的网桥使用:一部分负责端口1 ~ 32之间的转发,另一部分负责端口33 ~ 64之间的转发(见下图)。

虚拟LAN和物理LAN

除非这交换机足够智能化,以致它可以作为两个VLAN之间的路由使用,否则你需要另外一个“盒子”,即一个路由器来连接这两个VLAN,它各有一个端口连接到这两个VLAN上(见下图)。你也可以用两个单独的交换机来各自负责这两个VLAN。注意:用一个独立的路由器来连接这些VLAN,需要使每个VLAN都连接到这个路由器的一个端口上。

通过路由器连接VLAN

为什么需要虚拟局域网
人们发明VLAN,主要是因为IP的特性。原因如下:
? IP需要在同一个局域网上的站点拥有同样的IP前缀。因而,当一个站点移动到其他局域网上去时,需要改变它的IP地址。
? 改变IP地址是一个很麻烦的手工操作(注意,虽然DHCP可以很容易地改变IP地址,但是VLAN在DHCP广泛使用之前已经出现)。
? IP的广播在一个局域网的范围内进行,如果这个局域网过大,会发生某些问题,特别是执行或者配置错误可能导致广播风暴。
? IP路由(而不是通过桥接)比较慢而且昂贵(这个结论现在已经不成立了,因为人们已经制造出了更快的IP路由。基于IP判断和基于以太网的包头判断,两者的难度相当)。
如果把所有的设备都桥接起来,使得从IP的角度上看起来,整个拓扑结构就是一个巨大的局域网,这种设想是很诱人的。它可以让IP站点在局域网内移动时,无须改变其IP地址。而且,还可以用便宜、简单且快速的L2交换机来连接整个网络,而无须使用相对较慢且较昂贵的路由器。这种做法的缺点是:
? 广播包(如ARP)的传输量与局域网中的站点数目成正比。但如果把用户按组划分,位于某个组内的用户就不会受其他组的广播包传输量的影响,这样做的效果会好得多。
? 同一局域网内的用户,可以偷听到其他用户的传输,因而把用户按组划分为几个不同的局域网,可能会更安全一些(注意:我不是很赞成这种观念。通过使用星型结构以及L2转发,当目的站点的MAC地址已知时,数据包将只会往目的站点所在端口转发。如果真有这种窃听的事情发生,正确的做法是使用加密。虚拟局域网并不提供很大的安全保证)。
? 有些协议发送的包过多,它们可能陷入广播风暴的困境中。把这些协议分处在不同的局域网中,这样一个协议出现的问题,不会影响到其他协议的工作。
综上所述,较好的做法是,把需要经常联系的用户划分在一个局域网中(这样它们之间就可以通过网桥连接,而无须通过路由器),然后把需要分开的组划分到不同的局域网中(这样每个组都不会受到其他组的广播包的影响)。这样做的前提是,每个组的用户可以分散在不同交换机的端口上。
以上就是虚拟局域网的基本思想,它可以让你拥有你所希望得到的广播域的范围。一个VLAN可以是某台交换机的一个端口子集,也可以包含多个交换机的端口。

映射端口到虚拟局域网
映射端口到虚拟局域网的思想是,有一串互连的交换机,然后定义一个从VLAN(假定VLAN有多个)到交换机端口的映射关系。一个简单的例子是,有某个交换机,它的一些端口位于虚拟局域网A中,另一些端口位于虚拟局域网B中。你怎么确定一个虚拟局域网的范围呢?以下是几个简单的策略:
? 该交换机始终让端口1~k位于一个虚拟局域网上,而让端口k + 1~2 k位于另外一个虚拟局域网上。
? 可以为交换机配置端口/VLAN之间的映射关系。
? 可以为交换机配置一张VLAN/MAC地址的映射表。它通过连接到某端口的站点的MAC地址来动态地确定VLAN/端口之间的映射关系。
? 可以为交换机配置VLAN/IP前缀之间的映射关系。它通过连接到某端口的站点所发送的包内的源IP地址来确定VLAN与该端口之间的映射关系。
? 可以为交换机配置一张VLAN/协议之间的映射关系表。它通过数据链路头部的协议类型或SAP信息来确定VLAN与端口之间的映射关系。

举例:虚拟局域网使用独立路由器转发
假定我们现在有一个16端口的交换机,每8个端口连在一个独立的虚拟局域网上。每个站点都使用IP协议。端口1~8所连的站点使用同一个IP前缀(如下图所示,IP前缀为a.b.c),其他8个端口上的站点使用另一个IP前缀(f.g.k)。该交换机桥接了端口1~8;当这8个端口上的任何一个站点向该组内的其他站点发送包时,如果交换机还不知道目的地址(存储在L2的包头中)的位置,它将向这8个端口中的其他7个端口转发该包(发送该包的端口除外)。换句话说,端口1~8就像一个普通的局域网一样。而端口9~16,则组成另外一个区别于端口1~8的局域网。

通过路由器连接VLAN

如果包需要在局域网间进行交换,则需要通过路由器。一些交换机也可以在虚拟局域网间起到路由器的作用,但在第一个例子里,我们先假定交换机不能在虚拟局域网之间转发包。因此,为了连接这些VLAN,我们需要用一个路由器来连接它们,每个VLAN连接到路由器的一个端口上。图“通过路由器连接VLAN”中,左边的端口( 2、3和7)位于虚拟局域网A中,右边的端口(9、11和1 3)位于虚拟局域网B中。路由器R连接到两个端口:虚拟局域网A中的7,以及虚拟局域网B中的端口11。为了清晰起见,我直接用站点IP地址中的第4段来表示该节点,如H表示IP地址为a.b.c.H的节点。假定站点H希望发送一个包给站点D。节点H的IP逻辑注意到D的IP前缀(a.b.c)与H的IP前缀相同,因此它们位于同一个局域网内。因而,H将发出一个ARP请求来发现D的数据链路地址(d)。现在H知道I P地址为a.b.c.D的节点的数据链路地址为d,H通过发送一个包,其数据链路头部中源=c,目的=d;IP头部中源=a.b.c.H、目的=a.b.c.d.D,来与D进行通信。如果交换机还不知道数据链路地址d的位置,它将向虚拟局域网A中除端口2之外的其他所有端口转发这个包。如果交换机已经知道了d位于端口3上,则它只将该包转发给端口3。现在再假设站点H希望发送一个包给站点Q。由于Q的IP前缀(f.g.k)不同于H的IP前缀(a.b.c),H的IP逻辑将通知H把这个包发给路由器。假定现在H已经知道了它所处的局域网上的路由器的IP地址为a.b.c.R1。H发出一个ARP请求来发现路由器的数据链路地址(本例中为f),然后发送一个包给Q,该包中的数据链路头部的源=h、目的=f;IP头部中,源=a.b.c.H,目的=a.b.c.d.Q。路由器R接收该包,然后根据IP包头部的目的地址的IP前缀(f.g.k)确定它是属于R的右端口所连接的局域网。然后R发出一个ARP请求来得到IP站点(f.g.k.Q)的数据链路地址(q)。现在路由器向虚拟局域网B转发这个包,其数据链路包头的源=j、目的=q。IP的头部跟原来一样,源=a.b.c.H,目的=f.g.k.Q。注意,从路由器R的角度与从站点的角度一致,整个网络看起来像两个自然的局域网(见下图)。

通过路由器连接LAN  a和LAN b

举例:虚拟局域网使用交换机作为路由器转发
现在我们假定交换机可以有路由器的功能。从端站点的角度看,事情并没有变化,如下图所示。

由联合的交换机/路由器连接VLAN A和 B

在这种情况下,路由器R并没有占用交换机的端口。如果有8个端口被分配给虚拟局域网A,则允许有8个站点连接到虚拟局域网A上。交换机必须知道,R在虚拟局域网A上的M A C地址是f,在虚拟局域网B上的MAC地址是j。当交换机从虚拟局域网A(即该包来自端口1~8)上接收到一个包时,这可能有3种情况:
? 目的站点的数据链路地址还不知道,但肯定是在端口1~8中。这种情况下,交换机把这个包转发给其他7个端口(发送该包的端口除外)。
? 目的站点的数据链路地址已知,位于端口i上,且i属于端口1~8。交换机直接把该包转发给端口i。
? 目的站点的数据链路地址为f,这种情况下该包由交换机的I P路由器逻辑处理。
注意,如果H发送了一个数据链路地址为q的包,该包会被当成为虚拟局域网A中目的站点位置未知的包处理,因为交换机并没有桥接这两个局域网。

动态绑定链路到虚拟局域网
标准委员会并没有制定任何关于动态绑定链路到虚拟局域网的标准。目前所有的解决方案都是专用的(非标准的)。某些方案希望通过收到的包来得出映射关系。如果到VLAN的映射关系是基于IP地址的前缀来确定,那么学习的机制必须取决于包的IP头部中的源地址(在交换机通过L2头部中所指出的协议类型确定该包确实是IP包以后)。如果到VLAN的映射关系是基于协议来确定,则学习的机制必须取决于数据链路层头部的协议类型或DSAP(目的服务访问点,destination service access point)。
这种学习机制可能会出现某些欺骗性的情况。在一个站点发送包之前,交换机不知道该站点所连的端口属于哪个VLAN。如果交换机收到从某个已知是位于虚拟局域网A中的端口发来的包,该包的目的数据链路地址位置未知,或者是组播/广播的目的数据链路地址,交换机应该只把该包发送给与源站点处于同一个VLAN中的端口。但交换机也应该把该包发送给那些还不知道处于哪个VLAN中的端口,因为它们也有可能处于虚拟局域网A中。如果到VLAN的映射关系是基于协议来判断的,这会使得交换机很难得出VLAN/端口之间的映射关系,因为一个站点可能同时运行了好几种协议,从而使得这个站点同时处于好几个VLAN中。例如,假设虚拟局域网A中运行IP协议,而虚拟局域网B中运行Apple Talk协议。如果端口x上的站点发送了一个Apple Talk的包,这意味着端口x位于虚拟局域网B中。但是,交换机不能认为端口x不在虚拟局域网A中,因为这个站点同时可能还运行了IP协议。为了安全起见,交换机不得不假定所有的端口都可能位于所有的VLAN中,并将转发那些目的站点位置未知的包以及广播包到所有的端口上。这样,使用VLAN所带来的好处就被抵消得一干二净。因此,任何希望提供动态绑定端口到VLAN上的交换机制造商,毫无疑问地都假定站点会发送它所运行的每一种协议的包。在该站点发送包且该包被交换机正确接收之前,交换机不会转发适当的包给该站点。如果允许一个端口上可以连接多个站点,也可能会发生同样的问题。多个站点的情况可能发生在一台交换机连接到另一台交换机上时,或者该端口连接的是一个总线结构,同时有多个站点连接在一条物理链路上。先让我们来讨论一下一个端口可以连多个站点的情况(见下图)。

带多站点的端口

开始的时候,交换机上的每个端口都可以被当成一个单独的VLAN,每个端口上的站点都被分配了相应的IP地址。交换机被配置为:IP前缀为X的站点属于VLAN1,IP前缀为Z的站点属于VLAN2,IP前缀为Q的站点属于VLAN3,但还不知道具体的哪些端口属于哪个VLAN。最后,交换机通过检查IP包知道,端口a属于VLAN2,端口b属于VLAN1,端口c属于VLAN3。现在,让我们把事情变得更复杂些。把站点Q、F移到前缀为Z的局域网中(见下图)

把Q、F移到LAN Z上

我们这么做的前提是,不强迫用户重新配置被移动站点的IP地址。因此,即便该站点物理上已经处于另外一条链路上了,但它仍被当成是前缀为Q的局域网的一部分。(在某些非标准的解决方法中),交换机认为现在端口a连接了两个VLAN:VLAN 2和VLAN 3。如果VLAN 2上某个站点发送了一个广播包,交换机只把这个包发送给位于VLAN 2上的端口(本例中,只有端口a)。但是,如果VLAN 3上的某站点发送了一个广播包,交换机必须把这个包发送给所有位于VLAN 3上的端口(见下图,端口a和c)。如果有足够多的站点被移动后,广播包(如ARP包)或者目的地址位置未知的包就可能需要被交换机转发到所有的端口上。在这种情况下,你几乎可以认为,整个网络就是一个巨大的局域网。

动态虚拟局域网绑定,交换机-交换机
现在让我们来讨论一台交换机可以连接到另外一台交换机的情况(见下图)。

在内部交换机端口需要VLAN标示

在两个交换机之间的链路上,包可能属于VLAN 1,也可能属于VLAN 2。所以IEEE提出了一个方案,给包增加一个附加信息(称为VLAN标识,VLAN tag),以便交换机能够分清这个包应该发给哪个VLAN。但是如果站点收到一个带VLAN标识的包,它可能会混淆,所以交换机必须区分哪些端口连的是交换机,哪些端口连的是站点。交换机在把带VLAN标识的包发送给连到非交换机的端口时,需要先除去包中的VLAN标识。VLAN标识占两个字节,其中3位用于表示优先级,12位用于表示VLAN的ID,1位用于表示地址是否属于规范格式。通过使用以太网类型81-00来确定存在VLAN标识。例如,802.3中可能出现【如图“不带VLAN标识的以太网包”】和【图“带VLAN标识的同一包”】所示的包。

不带VLAN标示的以太网包

带VLAN标示的同一包

即便原来的包是802.3格式的,也需要使用以太网类型。例如,【如图“不带VLAN标识的802.3包”】和【图“带VLAN标识的同一包”】所示,802.3格式的包被修改为带VLAN标识的包,增加了4个字节(其中的81-00表明以太网类型,另有两字节的VLAN标识),因而与以太网包相同。

不带VLAN标示的802.3包

带VLAN标示的同一包

如果网络类型不是802.3,则不能使用以太网格式,所以我们使用SNAP编码来插入VLAN标识。【如图“不带VLAN的包”】和【图“不带VLAN标识的同一包”】所示。

不带VLAN的包

不带VLAN标识的同一包


注意,在这种格式中, VLAN标识的前面有10个字节。如果委员会预先为VLAN保留了一个珍贵的SAP,这个格式可以精简得多。例如,委员会保留了一个SAP值——如97,那么如果DSAP=97,则VLAN标识紧跟在它后面。这样,在VLAN前面就只须有3个字节。如果这样做不好的话(因为标识过的包没有适当的SSAP和CTL字段),委员会可以把DSAP和SSAP都设为97,然后保留CTL字段,这样在VLAN标识前面就有5个字节。根据最大合法包长的原则,标识位的开销可忽略不计。如果不带VLAN标识的包达到了合法长度,则加上VLAN标识后,它仍旧可达到合法长度。
交换机可以通过从交换机-交换机端口收到的带VLAN标识的包来判断哪些VLAN是可达的。但是由于站点不能理解VLAN标识,所以交换机必须被小心配置,以免把带VLAN标识的包发送给了连接站点的端口。某些交换机厂商通过一个非标准的机制,使得交换机可以在交换机—交换机的端口上告诉另外一个交换机哪些VLAN是可达的。在这种方式下,交换机不是通过从交换机—交换机的端口上收到的包来确定哪些VLAN是可达的,而是通过外在的协议信息来得到。但由于这种机制是非标准化的,因而只能用于同一厂商生产的两台交换机之间。

 

You can leave a response, or trackback from your own site.

0 Responses to “集线器、交换机、虚拟局域网与快速以太网”

Leave a Reply

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。