先简单了解一下以太网中的数据链路层中MAC层再进入我们的主题
提到MAC层我们就不得不提到一个名词,MAC地址(又称为硬件地址).它存储在我们电脑的网卡中,无法改变的一个地址(因为是固化在网卡的ROM中的).要明确一点,MAC地址相同的可能性很低,低到几乎不可能(但不是不可能).
接下来我们来提下MAC帧的格式.这里介绍的是基于以太网V2标准的MAC帧.它由三各部分组成:首部,数据部,尾部
- 首部
- 目的地址:这个数据下一跳的地址(注意是下一跳)
- 源地址:这个数据上一跳的地址(注意是上一跳)
- 类型:指明上层网络层使用的是何种协议
- 数据
就是用来存储数据的
- 尾部
- 帧检验序列FCS:就是我们前面讲CRC的时候的冗余码
一般来说MAC帧的最短长度为64位,如果传输的数据少于64位,那么MAC子层就会进行字节填充
最后在物理层进行传输的时候还要在MAC帧的前面插入以下两个东西:
- 前同步码:使接收端的适配器在接受MAC帧时能够迅速调整其时钟频率,使它和发送端的时钟同步.
- 帧开始定界符:表示一个帧传输的开始
最后我们来讲一下以太网的扩展.以太网的扩展一般来说有有两种选择,在物理层进行扩展或者在数据链路层进行扩展
- 在物理层面进行扩展
在物理层进行扩展使用的是集线器,还记得我们讲过的星型局域网吧.一个集线器就就是一个以太网,把几个集线器连在一个主干集线器上,那么这几个以太网就变成一个以太网了.我们借由离散数学中的树的概念来理解一下.顶层的节点视为主干集线器,主干集线器下的节点为普通集线器,普通集线器下的节点为用户.
但是在物理层面进行扩展有一个很大的问题,本来每一个普通集线器节点包括下面的用户就为一个碰撞域(CSMA/CD中的"碰撞检测"),现在由于最顶层的主干集线器,变成了主干集线器,主干集线器下的所有普通集线器包括普通集线器的用户享用一个碰撞域.这意味什么呢,这意味着这个扩张的局域网中的所有人要共同分享这个局域网的速度.例如一个速度有10M/S的以太网,用户有10个,那么每个用户可能只有1M/S的速度(也不一定是平均的)
- 在数据链路层进行扩展
在数据链路层进行以太网的扩展使用的是网桥.因为网桥是工作数据链路层,所以它可以根据数据中的目的地址结合自身存储的转发表对数据进行过滤再进行转发,这意味从此你没有在物理层进行扩展时的碰撞域问题.同时这也意味这每一个网桥的两边都是独立的碰撞域
接下来我们再继续深入了解下网桥
- 网桥的连接方式
我们可以这样对网桥的连接方式进行抽象.在一片平地上有两条河,河上面有两座桥.现在呢,我们就拥有了两座桥和三片陆地.每一片陆地都是我们的一片碰撞域.
从这个抽象中我们可以知道,网桥有两个接口,两个网桥有三个碰撞域
- 透明网桥的自学习算法
透明网桥是一种即插即用的设备.这代表什么意思呢,它表示透明网桥不需要手动进行网桥转发表的设置,它有一种自学习的算法可以自己生成这个网络中的转发表.下面我们来认识一下这个算法
我们继续使用桥和陆地的抽象.现在三片陆地上有六个人,桥1左边为A,B,桥1右边和桥2左边为C,D,桥2右边为E,F.
现在A要走向B(A对B于发数据),于是A先走向桥1,然后通过桥1的左边接口,再走到B.在过这个过程中呢,桥1,桥2做了这些事:
- 桥1检查自己的转发表,发现它自己的转发表中没有A的记录
- 桥1知道A是通过左边的接口进来的,于是在自己的转发表中记录下,A在我们左边接口(一般用数字来代表接口)
- 桥1检测自己的转发表中有没有B的记录,没有的话就通过另一个接口,即右边的接口转发该帧.
- 桥2也收到了桥1广播的A发送的帧.它也检测自己的转发表发现没有A这个记录,于是记录下A是通过左边的接口进来
- 桥2检测自己的转发表中有没有B的记录,于是网桥2按照另外的接口,即右边的接口转发该帧.
基本上网桥使用这种算法进行自学习的,不过这存在两个问题.A和C换位置了怎么?由网桥连接起来的以太网有回路,形成了无限转发怎么办?所以一般网桥采用以下的办法解决
- 如果网桥太久没有收到一个站的消息的时候,它就把这个站的地址从自己的转发表中删除.
- 网桥中存在着一种生成树的算法.我们都知道树是不会有回路的,于是这个问题就解决了.可是具体使用的是何种生成树的算法,书中并没有提及
- 源路由网桥
它采用的是发现帧的办法去发现这个网络中的其他网桥.即新插入的源路由网桥转发表中没有任何地址,这个时候源路由网桥向这个以太网广播一个发送帧,这些发送帧经过所有可能的路由并记录,最后到达目的地时就返回.这个时候发现帧携带者经过多少路由的信息,源路由网桥就根据这些信息找出最优的路径.
- 以太网交换机
这个东西就像是网桥和集线器的结合体.因为它也是工作在数据链路层的,所以它很好的解决了集线器的问题.
这里我们介绍一个概念VLAN虚拟局域网,它存在于交换机中才有的概念.它将交换机连接的用户在进行第二划分(注意也是从数据链路层上面进行划分的,并非是在物理层).这样A虚拟局域网的广播信号就传播不到B虚拟局域网.实现原理也很简单,只需在MAC帧的首部,类型与源地址之间插入一个VLAN标记就可以.拥有相同标记的用户就属于相同VLAN.