网络层讨论的问题是分组从一个网络通过路由器转发到另一个网络,数据链路层研究的是在局域网中分组怎样从一个主机传送到另一个主机(不经过路由器)。
数据链路层属于计算机网络的低层,数据链路层使用的信道主要有以下2种类型:
- 点对点信道
这种信道使用一对一的点对点通信方式。 - 广播信道
这种信道使用一对多的广播通信方式,广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调数据发送。
使用点对点信道的数据链路层
链路 就是从一个结点到相邻另一个结点的一段物理线路(有线或无线),而中间没有任何其他的交换结点。
数据链路 是另一个概念,除了必要的物理线路外,还必须有必要的通信协议来控制这些数据的传输。
点对点信道的数据链路层的协议数据单元帧。
数据链路层协议有许多种,但有3个基本问题是共同要解决的。
-
封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,首部和尾部的一个重要作用是进行帧定界。
显然为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是每一种链路层协议都规定了所能传送的帧的数据部分长度上限 -- 最大传输单元MTU(Maximum Transfer Unit)。 -
透明传输
帧的开始和结束的标记是使用专门的控制字符,因此传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
为了解决这一问题,发送端的数据链路层在数据中出现控制字符"SOH"和"EOT"前面插入一个转义字符"ESC",而在接收端的数据链路层在把数据送给网络层之前删除这个插入的转移字符。 -
差错检测
现实的通信链路不一定是理想的,比特在传输过程中,有可能会产生差错,比如1可能会变成0,而0可能会变成1,这就是比特差错。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。误码率与信噪比有很大关系。为了保证数据传输的可靠性,必须采取差错检测措施,在链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。- 循环冗余检验
虽然数据链路层可以检测出比特差错。但我们并不要求数据链路层向网络层提供可靠传输的服务。通常传输差错可分为2类,一类是比特差错,另一类是帧丢失,帧重复,帧失序。而后者问题是靠更上层的网络协议保障的。
点对点协议PPP
使用广播信道的数据链路层
局域网最主要的特点:网络为一个单位所拥有,且地理范围和站点数目均有限。局域网使用的就是广播信道。局域网可按照网络拓扑进行分类:星形网,环形网,总线网。
图
共享信道要考虑的一个问题就是如何使众多用户能够合理而方便地共享通信媒体资源。这在技术上有2种方法:
- 静态划分信道
包括频分复用,时分复用,波分复用和码分复用,用户只要分配了信道就不会和其他用户发生冲突。 - 动态媒体接入控制
- 随机接入
随机接入的特点是所有的用户可随机的发送信息。但如果恰巧有2个或更多的用户在同一时刻发送信息,那么在共享媒体上就要产生碰撞,使得这些用户的发送都失败,因此,必须有解决碰撞的网络协议。 - 受控接入
受控接入的特点是用户不能随机地发送信息而必须服从一定的控制,这个在局域网使用较少。
- 随机接入
网卡的作用
计算机与外界局域网的连接时通过通信适配器,又称为网络接口卡(NIC,Network Interface Card),在适配器上装有 处理器 和 存储器(RAM 和 ROM),适配器实现了数据链路层和物理层的功能。
适配器有以下作用:
进行数据串行传输和并行传输的转换
适配器和局域网的通信是串行传输,而适配器和计算机的通信时通过主板上的I/O总线以并行传输方式进行的。对数据进行缓存的存储芯片
网络上的数据率和总线上的速率并不相同,因此适配器上必须装有对数据进行缓存的存储芯片。在计算机的操作系统安装设备驱动程序
-
实现以太网协议
适配器接收和发送各种帧时不使用计算机的CPU,当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机。
CSMA/CD协议
最早的以太网是将许多计算机连接到一根总线上。总线的特点是:当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。每一台计算机的适配器都拥有一个与其他适配器都不同的地址(MAC 地址),在发送数据帧时,在帧的首部写明接收者的地址,仅仅当接收者的适配器地址和这个地址一致时,该适配器才会接受这个帧,否则就丢弃。这样,在广播特性的总线上也实现了一对一通信。
总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,在同一时间只能允许一台计算机发送数据,否则各计算机之间就会相互干扰。因此必须协调好各总线上的计算机。以太网采用的是协议是CSMA/CD,也就是载波监听多点接入/碰撞检测。
【1】多点接入,意指总线网络,许多计算机以多点接入的方式连接在一起。
【2】载波监听,意指检测信道,不管在发送前,发送中,每个站都必须不停地检测信道。
【3】碰撞检测,意指边发送边监听,适配器一边发送数据,一边检测信道上的信号电压的变化情况,以便判断自己在发送数据时,其他站点是否也在发送数据。当几个站点同时发送数据时,总线上的信号电压会增大。当适配器检测到信号电压变化幅度超过门限值时,就认为总线上至少有2个站点同时在发送数据。
电磁波在1km电缆的传播时延约为 5μs,总线单程端到端的传播时延为τ,则A发送数据后,最多经过多长时间才知道自己发送的数据和其他站发送的数据发生了碰撞。从图中可以看出来这个时间最多是两倍端到端的传播时延。
由此可见,每一个站点在自己发送数据后的一小段时间内,存在着遭遇碰撞的可能性,这一小段时间是不确定的。因此以太网端到端的往返时间2τ,称为争用期(碰撞窗口),只有通过了争用期这段时间没有检测到碰撞,才能肯定这次发送不会发生碰撞。
以太网使用截断二进制指数退避算法来确定碰撞后的重传时机。
从离散的整数集合 [0,1,...,(2^k-1)]中随机取出一个数,记为r,重传应推后的时间是 r 倍争用期。k=Min[重传次数,10]
,可见,当重传次数不超过10时,参数k等于重传次数,但当重传次数超过10时,k就不再增大而一直等于10。
MAC地址
MAC地址是指局域网上每一台计算机中固话在适配器的ROM中的地址,一共48位6字节。MAC地址实际上是适配器地址,当这块适配器插入到某台计算机后,适配器的标识符也就成了这台计算机的MAC地址了。
现在的IEEE的注册管理机构RA是局域网全球地址的法定管理机构,它负责分配地址字段的6个字节中的前3个字节(即高位24位)。世界上凡是要生产局域网适配器的厂家都必须向IEEE购买由这3个字节构成的这个号(即地址块),这个号的正式名称是组织唯一标识符OUI,通常也叫做公司标识符。剩下的3位则是由厂家自行指派,称为扩展标识符。
同时IEEE还规定地址字段的第一字节的最低位为I/G位,I/G表示Individual/Group,当I/G位为0时,地址表示单个地址,I/G位为1表示组地址,用来进行多播。
同时,地址字段第一字节的最低第二位规定为G/L位,G/L表示Global/Local,G/L位为0时是全球管理(保证全球没有相同的地址),G/L位为1时,表示本地管理,用户可任意分配网络上的地址。
MAC帧格式
常用的以太网有2种,一种是 DIX Ethernet V2 标准,另一种是 IEEE 的 802.3 标准。现在使用的最多的以太网是 DIX Ethernet V2 标准。
- 目的地址
6位目的主机MAC地址。 - 源地址
6位源主机的MAC地址。 - 类型
用来标志上一层使用的是什么协议,以便把接收到的MAC帧的数据交给上一层相应的协议处理。 - 数据
网路层的数据,其长度在46字节到1500字节之间,当数据字段小于46字节时,会在其后加入整数字节的填充字段。 - FCS
帧校验序列,通常用CRC校验。
扩展的以太网
在许多情况下,我们希望把以太网的覆盖范围扩大,这种扩展即可以在物理层把以太网扩展,也可以在数据链路层扩展把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。
在物理层扩展以太网
在数据链路层扩展以太网
在数据链路层扩展以太网要使用网桥。网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发和过滤。
当网桥收到一个帧时,并不是像所有的接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口,或者是把它丢弃(过滤)。
2个以太网通过网桥连接起来后,就成为了一个覆盖范围更大的以太网,而原来每一个以太网就可以称为一个网段。网桥通过转发表来转发帧。
使用网桥可以带来以下好处:
-
过滤通信量,增大吞吐量。
网桥工作在MAC子层,可以使以太网各网段称为隔离开的碰撞域(?)。
- 扩大了物理范围
增加了整个以太网上工作站的数量 - 可互连不同的物理层
当然,网桥也有很多缺点:
网桥对接收的帧要先存储和查找转发表,然后再转发。转发之前还要执行 CSMA/CD 算法(发生碰撞要退避),这就增加了时延。
在MAC层并没有流量控制功能,当网络上的负荷很重时,网桥中的缓存的存储空间可能不够而溢出,以致产生丢帧的现象。
网桥只适合用户数不太多和通信量不太大的以太网,否则会因传播过多的广播信息而产生网络拥塞,也就是广播风暴。
透明网桥
网桥的转发表并不需要人工配制,在刚刚连接到以太网时,转发表是空的,网桥按照自学习算法处理收到的帧。其原理是:若从某个站A发出去的帧从接口X进入了某网桥,那么从这个接口出发沿相反的方向一定可把一个帧传送到A。在建立转发表时是把帧首部的源地址和从哪个接口来的记录下来,在转发帧时,根据收到的帧首部的目的地址来转发。
A 向 B 发送帧,连接在同一个局域网上的站点 B 和 网桥1 都能收到A发送的帧。网桥1先按源地址A查找转发表,网桥1的转发表中没有A的地址,于是把A的地址和收到此帧的接口 1 写入转发表中。这就表示以后若收到要发给A的帧,就应当从这个接口1转发出去。接着再按目的地址B查找转发表。转发表中没有B的地址,于是就通过除收到此帧的接口1以外的所有接口(接口2)转发该帧。
网桥2按同样的方式处理收到的该帧,网桥2的转发表中没有A的地址,因此在转发表中写入地址A和接口1,网桥2的转发表中没有B的地址,因此网桥2通过接收此帧的接口1以外的所有接口(接口2)转发这个帧。F 向 C 发送帧,网桥2从其接口2收到这个帧,网桥2的转发表中没有F,因此在转发表写入地址F和接口2,网桥2的转发表中没有C,因此要通过网桥2的接口1把帧转发出去,现在C和网桥1都能收到这个帧,在网桥1的转发表中没有F,因此要把地址F和接口2写入转发表,并且还要从网桥1的接口1转发这个帧。
B 向 A 发送帧,网桥1从其接口1收到这个帧,网桥1的转发表中没有B,因此在转发表写入地址B和接口1。再查找目的地址A,现在网桥1的转发表中可以查到A,其转发接口是1,和这个帧进入网桥1的接口一样,于是就把这个帧丢弃,不再转发。
多接口网桥 -- 以太网交换机
网桥的接口数很少,一般只有 2 ~ 4 个,而以太网交换机通常有十几个接口,因此,以太网实质上就是个多接口网桥。
以太网交换机的每个接口都直接与主机相连,并且一般工作在全双工方式。
交换机能同时连通许多对的接口,使每一对相互通信的主机都能像独占通信媒体那样,进行无碰撞地传输数据。
虚拟局域网
利用以太网交换机可以很方便的实现虚拟局域网VLAN(virtual LAN)。虚拟局域网是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求,每一个VLAN的帧都有一个明确的标识符。
vlan 可以隔绝广播域
广播域,指的是广播帧(目标MAC地址全为1)所能传递的范围。实现vlan机制
在一台没有设置VLAN的二层交换机上,任何广播都会被转发给除接受端口以外的所有其他端口。
这时,如果设置红,蓝两个VLAN,端口1,2属于红色VLAN,端口3,4属于蓝色VLAN,再从A发出的广播帧,交换机只会把它转发给同属于一个VLAN的其他端口。
就这样,VLAN通过限制广播帧转发的范围分割了广播域
- 需要VLAN间通信
VLAN是广播域。而通常两个广播域之间由路由器连接,广播域之间来往的数据包都是由路由器中继的。因此,VLAN间的通信也需要路由器提供中继服务,这被称作“VLAN间路由”。