却说上回,我们讲到,以太网内部的主要矛盾,已经上升为不断递增的终端数与有限的半双工信道之间的矛盾。
在一个冲突域中,终端数过多,会导致通信效率严重下降。
此外,以太网为代表的剑宗中,还盛行一种叫做“飞龙探云手”的邪术,修炼该邪术的弟子,可以将自身设为混杂模式,并不丢弃不属于自身(目的地址为自己)的数据包,而是监听所有的数据包。这种邪术来无影,去无踪,可以随意监听他人的通讯,严重威胁到以太网的安全,学名曰:Snipper(嗅探器)。
人们思考的解决之道是,尽量想办法减小冲突域。
武林中的鲑鱼派(CISCO)提出,严格限制每个以太网内部的终端数(控制在10个以内),多个以太网通过路由器互联互通。
CISCO作为路由器界的领军,自然希望通过此种手段多销售路由器,从而称霸于江湖。
而3COM则提出,利用一种装置,将以太网的冲突域分割为若干子网,只有去往特定子网的数据包,才需要送到这个子网。
最初,这种装置叫做“网桥”(Network Bridge)。网桥最早是由一台装有双网卡的计算机充当,如下图所示:
如图,当以太网网桥从上半部分子网收到应当去往下半部分的数据包时,会通过下半部分的网卡转发,反之亦然。
当我们把网桥做大,具有4个,5个,8个……直至数十个以太网接口时,我们给它起了一个新的名字——以太网交换机(Ethernet Switch)。
3COM发明了以太网交换机,正如李逍遥像酒剑仙学习了御剑术一般,可以同时驾驭多柄宝剑为己所用。
交换机的行为模式遵循以下规则:
- 当从一个接口收到数据报文的时候,根据目的MAC地址,匹配转发表项,找到目的接口并发送,同时,将数据包的源地址和入接口记录在转发表项数据库中;
- 如果找不到目的MAC地址所在的转发表项,(未知单播)则向每个接口复制一份这个数据包并发送(泛洪);
- 对于广播数据包和组播数据包,也向每个接口复制一份这个数据包并发送(泛洪)。
——且慢,大家看看这里面有什么错误?
如果两台交换机互相连接,一台交换机将收到的未知单播报文发送到所有接口,包括这个报文的入接口,会发生什么呢?
这个报文的入接口连接的交换机,会重新收到这个数据报文,并且依然找不到MAC表项,向所有接口泛洪。数据包送到另一台交换机,又被回送,如此这般,无限循环。
因此,我们需要在这个规则打一个补丁——
- 当从一个接口收到数据报文的时候,根据目的MAC地址,匹配转发表项,找到目的接口并发送,同时,将数据包的源地址和入接口记录在转发表项数据库中;
- 如果找不到目的MAC地址所在的转发表项,(未知单播)则向除了入接口以外的每个接口复制一份这个数据包并发送(泛洪);
- 对于广播数据包和组播数据包,也向除了入接口以外的每个接口复制一份这个数据包并发送(泛洪)。
这种机制叫做Flood-and-learn机制。
有了这种机制,两台计算机之间的通讯,只有第一个包需要泛洪,后面的数据包都可以通过交换机,精确地转发到它应该去的端口。
我们发现,在早期基于HUB的共享式以太网中,盛行的“飞龙探云手”,在基于交换机的交换式以太网中,再也没有用武之地了。只有在诊断网络故障或经授权合法监听的时候,可以通过交换机的端口镜像功能捕捉特定的数据包,这是后话。
这就是:御剑术大破飞龙探云手
很快,御剑术盛行江湖,3COM也获得了“酒剑仙”之名。后人有诗赞曰:
御剑乘风来,除魔天地间。
有酒乐逍遥,无酒我亦癫。
首包需泛洪,后续精准送,
转发达线速,唯我酒剑仙。
然而,我们留下了一个疑问——
最初的网桥是在计算机上安装双网卡实现的,而交换机一般都具有至少4个以太网接口,中高端盒式交换机可达50个以上,而框式交换机的接口数可达数百个。显然,不可能通过在计算机上安装这么多网卡来实现。
那么,拥有数百个接口的交换机是如何实现的呢?
且看下回分解。