- 局域网的链路层
局域网是个可以实现一对多广播特性的网络。
以太网是局域网的代名词,可以认为以太网就是局域网。
局域网的主要特点是:网络为一个单位所拥有,且地理范围和站点数目有限。局域网内的所有主机可共享该局域网的所有硬件和软件资源。
局域网按网络拓扑可分为如下几种:总线网(早期的局域网)、星型网(现在的局域网)和环形网。
适配器(网卡)
计算机是怎么连接到局域网上的?答案是通过适配器,也就是网卡。
适配器装有处理器和存储器(包括RAM和ROM),适配器和局域网的通信是通过电缆以串行传输方式进行,适配器和计算机的通信是通过计算机主板的IO总线以并行传输方式进行。因此适配器的重要功能是要实现数据串行传输和并行传输的转换。
由于网络上的数据速率和计算机总线的数据速率不相同,因此适配器中必须有对数据进行缓存的缓冲区。计算机还要安装控制该适配器的设备驱动程序。
适配器在接收和发送各种帧的时候不使用CPU,当适配器收到有差错的帧或目标MAC地址与本机MAC地址不同的帧时,就丢弃这个帧而不必通知CPU。当收到正确的帧时,适配器会将数据交付给协议栈的网络层,并中断CPU(网卡设备发起的中断),调用中断处理程序来接收和处理这些数据。
计算机的硬件地址MAC就在适配器的ROM中,而计算机的软件地址IP则在计算机的RAM存储器(在内存)中。
CSMA/CD协议和局域网演进
早期局域网将多个计算机连接到一根总线上,便于实现广播通信。当局域网中的某个主机想发送分组给局域网的另一个主机的时候,只需将分组发送到这个局域网中,局域网会将这个分组广播给总线上其他所有的主机。
如上图,B向局域网内的D发送数据信号,该信号会被广播给总线上所有的主机,所有主机会检查帧首部的目标MAC地址,只有D的硬件地址和这个MAC地址一致,D接收成功,其他主机检测后会丢弃这个帧。通过这种方式在具有广播特性的总线上实现了一对一的通信。
为了实现一对一通信,发送方需要把接收方的硬件地址写入帧首部的目的地址字段中。
总线通信的缺点是如果多个设备在共享的广播信道上同时发送数据,会造成彼此干扰冲突导致发送失败。
为了避免这个问题,提出了CSMA/CD协议,该协议具有3个特性:
载波监听(CS):指每一个设备在发送数据前要先检测一下信道上是否有其他计算机在发送数据,有则暂时不发送数据避免信号碰撞。
多点接入(MA):指多个计算机连接到一根总线上通信。
碰撞检测(CD):指计算机边发送数据边检测信道上的信号电压大小,如果多个计算机同时在总线上发送数据,总线上的信号会互相叠加导致电压增大。如果设备检测到信号电压超过一个门限值就认为有多个设备在发送数据,即产生碰撞。
一旦发现碰撞,设备会立刻停止发送,以免继续浪费网络资源,然后等待一段时间后再发。CSMA/CD协议由主机上的适配器执行。
CSMA/CD协议总结:先听后说、边说边听、冲突停止、延迟重发。
使用多设备共享一条总线的方式实现的局域网是一种半双工通信,也是以前传统局域网的设计。
之后局域网的拓扑从总线型改为星形网络,它和总线型局域网相比不同:增加了具有多个端口的集线器,局域网的所有设备都会连接到这个集线器。
使⽤集线器的以太⽹在物理上是一个星形网,但逻辑上仍是⼀个总线⽹,依旧使用半双工通信,会发生信号碰撞,⼯作站使⽤ CSMA/CD 协议,并共享逻辑上的总线,同一时刻只允许一个站发送数据;
一个集线器的端口有限,而且由于会发生碰撞,因此无法扩大网络(因为一旦扩大网络,碰撞的情况会更严重)。为了能将以太网扩展,交换式集线器就出现了,又称为以太网交换机。
扩展的以太网
首先需要提出碰撞域的概念,任何一台设备发送数据时其他设备再发送数据就会与之产生冲突,这些设备的集合称为碰撞域。例如上面用一个集线器连接而成的多个设备就是一个碰撞域。
交换机可以将多个主机、集线器、路由器和另外的交换机连接起来,交换机上的每一个端口连接着一个碰撞域,从而实现以太网的扩展。如下所示:
交换机的特点
1、交换机没有碰撞问题(帧在碰撞域和碰撞域之间经过交换机时不会发生碰撞,这是因为交换机是全双工通信的,通信的主机都是独占信道的,而每个碰撞域内部才会有碰撞),不使用CSMA/CD协议;集线器连接的多个主机组成的碰撞域会有碰撞问题,会用CSMA/CD协议。
2、交换机实现并行通信,可以使连接在端口上的主机同时通信。
3、交换机是工作在数据链路层的设备,能够识别帧。集线器是工作在物理层的设备,只能传输比特,无法识别帧(无法识别帧边界和MAC地址、无法做FCS检验)。
4、集线器收到信号之后会转发给所有连接在集线器上的主机,而交换机收到一个帧后会先根据目的MAC地址查MAC转发表,如果存在对应记录则直接发送到目的主机,否则才广播。
5、交换机的每个接口有存储器,能在输出端口繁忙时把帧缓存,解决了不同碰撞域之间传输速率不匹配的问题。
6、交换机将多个碰撞域隔离开来,它在扩大了以太网的同时没有扩大碰撞域。这是交换机的一个优点,试想一下,如果把这个交换机换成一个集线器,那么A~N就会组成一个庞大的碰撞域。如果A~N是一整个大的碰撞域,那么A发数据给H,B想要发数据也要进行碰撞检测。
一个问题:假如C和E同时发送一个帧给B,是否会发生冲突和碰撞?
不会,首先这两个帧从主机到交换机用的是独立的信道(各自有网线连到交换机的不同端口),而且帧到达交换机后,这两个帧不会同时输入到通往B的输出信道上,而是会先放入交换机的输出缓存队列,一个一个帧的发送,因此不存在信道冲突。就像路由器的缓冲队列那样。
广播域的概念
一个设备发送的报文能通过广播到达的所有设备的集合就是一个广播域,例如上面的A~N就是一个广播域。如果有两个交换机相连,那么这两个交换机的所有设备都是一个广播域。
交换机的交换方式
存储转发方式:
数据到达后先缓存,检测正确性(FCS检验)再转发。所以延迟大,但可靠性高。支持不同速率的端口交换。
直通方式:
检查数据帧的⽬的 MAC 地址之后⽴即转发(查转发表转发,但不做FCS校验),延迟⼩,可靠性 低,不⽀持不同速率的端⼝交换;有可能转发⼀些⽆效的帧查转发表
一般使用直通方式,某些情况下使用存储转发。
- 以太网的MAC层
在局域网中,每一个主机都有一个硬件地址(物理地址),又称为MAC地址,一个硬件地址作为一个适配器(网卡)的唯一标识。
如果连接在局域⽹上的主机或路由器安装有多个适配器,那么这样 的主机或路由器就有多个“地址”。
MAC地址
以太⽹MAC地址共 6 字节 ( 48 bit):
IEEE 的注册管理机构 RA 负责向⼚家分配MAC地址的前三个字节 (即⾼位 24 位),称为组织唯⼀标识符;
MAC地址的后三个字节 (即低位 24 位) 由⼚家⾃⾏指派,称为扩展 唯⼀标识符,必须保证⽣产出的适配器没有重复地址。
MAC帧
数据链路层的网络有多种类型,如以太网、PPP、无线通信网等等,每种网络在链路层上都有着属于自己的链路层协议和帧类型。
以太网使用MAC帧作为链路层传输的单位。MAC帧如下所示:
其中类型字段标识上一层使用什么协议(0x0800是IP协议)。MAC帧的最小长度为64字节,因此数据部分最小为 64 - 18 = 46字节,如果小于46字节会在数据后面加一个整数字节的填充字段。
前导码是为了让接收方的时钟与到达的比特流达成同步,简单的说是告诉接收方,帧已经到达,请提前准备好接收,否则接收方会错过帧前面的若干位。
FCS的校验范围是不含前导码的整个帧的部分。
MAC帧的首部定界符是 10101011。
以太网交换机转发过程
交换机包含一个自学习算法建立起来的MAC地址表。
1. 刚开始时,以太⽹交换机⾥⾯的交换表是空的;
2. 假设A发送数据帧给C,此时,交换机只能⼴ 播,并记下源站A的MAC地址及连接的接口到MAC表中。
3. C之外的主机收到A的帧后检查目的MAC地址后丢弃这个帧,只有C接收成功。C发送数据帧给A,交换机根据帧的目的MAC地址(MAC-A)查MAC表并从接⼝ 1 转发给A, 并记下C的MAC地址及连接的接⼝3。
4. 之后的帧经过这个交换机都会去查表直接找到转发接口,如果找到有记录则无需广播,直接转发。
交换机收到⼀帧后查找交换表中与收到帧的源MAC地 址有⽆相匹配的行:
• 如没有,就在交换表中增加⼀个行(源地址、进⼊的接⼝和 有效时间);
• 如有,则把原有的对应行进⾏更新并转发帧,同时查找交换表中 有无⽬的MAC地址相匹配的行:
• 如没有,则向所有其他接⼝(进⼊的接⼝除外)转发;
• 如有,则按交换表中给出的接⼝进⾏转发;
• 若交换表中给出的接⼝就是该帧进⼊交换机的接⼝,则应丢 弃这个帧(因为这时不需要经过交换机进⾏转发,已经在自己的碰撞域中广播了,如下图中A发送帧给M就是这种情况)。
MAC记录有效时间
考虑到交换机的端口可能会更换主机,就需要更改MAC表的记录字段,所以每生成一个MAC记录就记下当时的时间,如果该记录超过有效期(如300秒)则自动删除。MAC表的第三列应该是写入时间。
生成树协议 STP
交换机之间可能会增加冗余链路,以保证网络的可靠性,防止一条交换机或者一个端口故障导致通信瘫痪。但是如果两个交换机中有多条链路可以连通就可能发生循环转发。
如下图所示:有两台交换机,用两条链路相连接(#1的端口1和#2的端口1,#1的端口8和#2的端口8)。
假如A要发送一个帧给D,而且#1和#2的MAC地址表都没有记录D的记录,就会无限循环的转发。
1、假设A是连着#1的1号端口,D是连着#2的7号端口,A的帧在#1中把帧广播给2~8号端口。
2、帧从#1的8端口进入#2,#2把帧广播给#2的1~7号端口,D收到了帧。但是之前广播的帧又从端口1进入到#1,并重复上述的过程,无限广播。
如果是3个交换机A,B,C,A连向B,B连向C,C连向A,也会发生这个问题。
为了解决这个问题,提出了生成树协议,其原理是:不改变网络的实际拓扑(不改变物理链路),但在逻辑上切断某些链路,使所有路径是无环路的树状结构,不再成环。交换机转发的时候只往生成树留下的那条链路发送。
例如上面的图,我在逻辑上让交换机广播时只能通过#1-1把帧传到#2,而#1-8端口不传,但在物理上#1-8和#2-8依旧相连,#1-1故障时,#1-8就能顶替其工作。
一个问题:D的MAC地址会不会记录在#1的交换机MAC表中?
答案是会的,只要D发送帧数据到#1交换机的主机上就会记录,发送方的帧只要路过这个交换机就会记录到这个交换机上。
- 虚拟局域网 VLAN
如果一个广播域中的设备太多,就会出现大量的广播帧(尤其是当MAC表是空的情况下),会消耗大量的网络资源,并造成链路拥塞。
另外,如果不同主机的用途和机密程度不同,也需要将一个局域网内的设备划分为多个虚拟局域网以隔离通信。
VLAN技术的出现可以将一个较大的广播域分隔为多个小的广播域,将一个大的局域网分隔为多个小的虚拟局域网。广播只会发生在同一个虚拟局域网之内,不同虚拟局域网的主机通信需要经过路由器。
虚拟局域网是局域⽹给⽤户提供的⼀种服务,⽽并不是⼀种新 型局域⽹。
为了支持支持VLAN协议,允许在以太⽹的帧格式中插⼊⼀个4字节的标识符,称为 VLAN 标记 (tag),⽤来指明发送该帧的计算机属于哪⼀个虚拟局域 ⽹;
插⼊ VLAN 标记得出的帧称为 802.1Q 帧 或 带标记的以太⽹帧。
VLAN字段长4个字节,其中前两个字节固定为 0x8100,我们只需关注最后的12位,它标志了这个帧属于哪一个虚拟局域网,即虚拟局域网的ID。
普通的MAC帧和802.1Q帧的区别在于后者比前者多了一个VLAN标志字段。
下面我们看看同一个虚拟局域网的机器是如何通信的:
需要注意,同一个VLAN下的不同主机可能连接不同的交换机,如下图:A1~A4是同一个虚拟局域网的主机,但他们分别连接着3个不同的交换机。
10 台计算机划分为三个虚拟局域网(3个广播域): VLAN1, VLAN2 和 VLAN3。
并且假设是基于交换机端口来划分的局域网,此时三个交换机需要有一个维护交换机端口和虚拟局域网ID(简称VID)的配置表(不是MAC表,因为MAC表为空的情况下也要有这样的一个配置表)。
1、现在如果A1向A2发送帧,如果交换机1的MAC转发表有A2的表项,交换机1能直接依据帧首部的目的MAC地址(同时也会检查帧的VLAN ID知道A1的虚拟局域网是哪个)单点转发普通的MAC帧给A2。
如果交换机1的MAC转发表没有A2的表项,交换机1检查帧的VLAN ID知道A1位于ID为1的虚拟局域网,因此会向这个虚拟局域网转发这个帧(帧会被发到A2~A4,而不会发到B1、B2这样的主机,因为交换机可以根据帧的VLAN ID控制广播的对象)。
2、如果A1向A3发送帧,交换机1查配置表查到A3不在本交换机中,于是向A1两个交换机广播(帧首部带了VLAN ID字段 = 1)。交换机2根据帧的VLAN ID = 1 向本交换机的VID=1的虚拟局域网下所有主机广播帧,而不会向其他虚拟局域网这个广播帧。
3、如果A1向B1或者B2发送帧,由于A和B1/B2处于两个不同的局域网,于是需要交给路由器转发。
VLAN的优点
增强⽹络的安全性,敏感⽤户与普通⽤户隔离。
限制了⼴播报⽂的洪泛,抑制⼴播⻛暴。减少了不必要的⽹络流量。
主机网卡的压力也减轻,无需接收和检验大量的广播帧。
总结:
交换机的出现将一个大的碰撞域划分为多个小的碰撞域,减少了信号碰撞从而提高了局域网内主机的并行通信。
虚拟局域网的出现将一个大的广播域划分为多个小的广播域,减少了广播的范围和次数,节省网络资源,且增强了网络安全。