网络层次划分-数据链路层
2026/7/28 9:24:16 网站建设 项目流程

目录

什么是数据链路

数据链路层主要作用

数据链路层的信道类型

数据链路层协议的共性

封装成帧

透明传输

差错检测

链路层的载体——适配器

局域网

局域网分类

局域网-以太网

重新理解数据链路层

MAC-CSMA/CD协议

碰撞检测

碰撞处理-截断二进制指数退避

强化碰撞

LLC-以太网中的MAC帧

使用集线器的星形以太网

在数据链路层扩展以太网

虚拟局域网


数据链路层主要作用

网络层是进行网络与网络之间的通信,即:将数据报路由到目标网络。而到达目标网络后,数据报需要根据局域网的类型不同把数据报转发给目标主机,这个工作是交由每个网络自己的链路层协议去做的。

在数据链路层保障可靠传输是可行的(现在是传输层),尤其是在一些质量差(频繁出错)的链路上,数据链路层能更快处理错误,但是随着链路质量的提高,错误发生的不再那么频繁在数据链路层实现可靠性就显得太浪费了,因为你需要在每段链路(转发)都执行保证可靠性的逻辑。因此可以把大部分可靠性的保证交给传输层,提高效率。而数据链路层只负责处理简单的比特差错(就算出处理比特差错也是直接丢弃报文,最终还是得由传输层重传来保证可靠性)。综上所述,当前的数据链路层只是辅助传输层更快的发现比特差错,不保证可靠性


数据链路层的信道类型

尽管信道貌似是物理层的概念,但是物理层只是关注信道的流通性等物理性质,而在数据链路层关心的则是如何使用信道,不同的使用方式可以抽象为不同的逻辑信道

  • 点对点信道:使用一对一的通信方式,其它主机不会被通信双方造成影响。即通信双方逻辑上独占一条信道。
  • 广播信道:使用一对多的通信方式,一个主机发送消息,其他主机都可以收到,在这种情况下,所有主机逻辑上共享信道。

之所以说是逻辑上,是因为逻辑和物理是不一样的:

  • 我可以把多个信道的数据互相传递,那么即使它是多个主机之间物理上使用的是不同信道,我们也说他们在逻辑上共享一条信道;
  • 而即使只有一根信道,我们通过复用技术使不同主机的消息被隔离,这也叫做逻辑上独占一条信道。

数据链路层协议的共性

封装成帧

给上层下来的数据封装一层控制信息,才可以在数据链路层控制数据的传输。这样的封装可能是给IP数据报的添加一个首部和尾部,也可能是仅仅给它添加一个首部,这取决于数据链路层的具体协议,总之,只要能控制数据传输就好。

帧定界就是封装成帧的重要作用之一(也就是回答“完整吗”这个问题)。例如,帧的首部和尾部可以各是一个特殊字符,分别叫做帧开始符和帧结束符(当然,实际上还有别的东西,这里只是举例子),代表这个帧的区域(边界),接收方通过比对特殊字符来判断帧接收结束了,以及帧开始接收了

帧的数据部分/(帧的首部+尾部)越小,数据传输效率就越低,因此应该尽可能让帧的数据部分长一点,但长也是有限度的,这个限度就是MTU(减少出错重传的开销,减少帧太长导致的延迟,适配物理介质比如路由器缓存等)。

除了帧定界,知道这些还有什么用呢?假如发送端在发送一个帧时突然终止发送,并且又开始发送新的帧,那么在接收端就可以发现上一个帧的结束符还没收到,下一个帧的开始符就来了,说明上一帧不完整,那么我就把他丢弃。

透明传输

透明传输就是虽然数据链路层对数据做了协议控制,但是收发双方看不到数据链路层对他的任何干扰,像是没有一层一样,他们只能看到数据

上述我提到过,帧的首部是帧开始字符,尾部是帧结束字符就可以规定出某帧的范围,但我们使用的是特殊字符作为帧开始(结束)字符,那么假如数据的内容就有特殊字符呢?这样的话帧定界作用就会消失,帧会被胡乱截断,导致的结果就是,帧包裹的数据也四分五裂了。

当然,上面的问题也有解决方法。那就是在把IP数据报封装成帧之前,对它做一些小小的改动,使它不会影响帧定界,等接收方接收之后再还原IP数据报即可。具体来说,在IP数据报中的帧开始(结束)符前面都添加转移字符,假如本身IP数据报中有转义字符,那就在它之前也添加转义字符,这种方法叫做字节填充或者字符填充。这样一来就成透明传输了。

差错检测

首先必须区分比特差错传输差错

  • 比特差错指的就是在数据传输过程中,可能发生的0变成1,1变成0的错误(传输错误的bit占传输bit总数的比率称为误码率(BER)),目前广泛使用的比特差错检验方式是循环冗余检验(CRC)。
  • 而传输差错指的是传输过程中帧丢失,帧重复,帧失序(帧到达的顺序乱了)的错误(这可以由上层来解决)。而链路层的差错检测一般来说解决的是比特差错。

但追根究底,无论是比特差错还是传输差错,可靠性还是由上层保证,数据链路层只是更快的发现错误,触发上层的可靠性保证机制。


链路层的载体——适配器

适配器是计算机与外界局域网连接的桥梁,也称为网卡,其上装有处理器和存储器(RAM和ROM)。计算机的硬件地址(MAC地址)就储存在网卡的ROM中,这个地址具有唯一性。网卡的一些功能如下:

  1. 适配器和局域网之间的通信是通过电缆或者双绞线以串行方式传输的,而适配器和计算机之间的通信是通过主板上的IO总线以并行方式传输的,所以,适配器的一个重要功能就是进行并行传输和串行传输的转换
  2. 适配器还有存储功能来协调网络数据率和计算机数据率的不一致
  3. 过滤功能,过滤掉不是发给自己的帧。帧大致包括三种:单播帧(发给某人),广播帧(发给所有人),多播帧(发给一些人)。对于单播帧,网卡只需要对比自己的MAC和帧的目的MAC即可过滤;对于广播帧,网卡可以规定一个特殊的MAC,只要目的MAC是这个就一概接受;对于多播帧,可以在操作系统启动的时候初始化网卡,使网卡能识别某些MAC地址。
  4. 适配器有自己的处理器,在收发各种帧时不需要使用计算机的CPU,他自己就能对帧的差错进行判断和处理,发送,接收以及交付帧
  5. 当网卡处于特殊的工作方式中时(混杂方式),他可以接收到所有发过来的帧,这其实属于“窃听”,但是对于网络的维护和管理统计一些信息还是有用的。

局域网

在这局域网中,所有用户是互通的,一台计算机发送数据,局域网内的所有用户都能收到消息,然后各用户判断帧内的目的MAC地址与自己网卡储存的硬件地址是否一致,是就接收,不是就丢弃

局域网分类

按照网络拓扑可以分为星型网,环形网,总线网等:

局域网-以太网

  • 以太网采用简单灵活的无连接的工作方式,即不用建立连接(检查链路的连通性等)就直接发送数据,这和PPP协议繁琐的连接建立过程有明显的区别,这是它不可靠交付的一个原因。
  • 以太网中不对帧进行编号,也不要求对方进行回复,它只管收发帧,唯一保证的就是会丢弃出现比特差错的帧。这是它不可靠交付的另一个原因。
  • 对于解决多用户共享信道导致的用户信息之间的干扰问题,以太网使用CSMA/CD协议(载波监听多点接入/碰撞检测)
  • 以太网规定了最小帧的间隔是9.6微秒,这样做是为了让收到数据帧的站点来得及清理缓存,做好接受下一次帧的准备。

重新理解数据链路层

了解了局域网我们可以发现,两台主机之间同时发送信息是会冲突的,因此数据链路层不仅有控制数据的协议,还可能有协调各台主机发送的协议

在OSI七层模型中,数据链路层被划分为两个子层:

  • 逻辑链路控制子层(LLC,Logical Link Control): 负责建立和维护网络连接,以及差错控制。
  • 介质访问控制子层(MAC,Medium Access Control): 负责控制物理介质(如同轴电缆、双绞线)的访问方式。

MAC-CSMA/CD协议

碰撞检测

简单讲这个协议做的事情,就是让网卡不断进行碰撞检测:当两个站点同时发出信息时,总线上的信号电压变化幅度会变大,而网卡一但检测到这个幅度超出了一定的门限值,就认为在发送消息的过程中发生了碰撞,并停止继续发送消息,等待一段时间。

具体来说,在发送消息之前,发送方网卡首先在发送之前检测信道是否空闲(即信道是否有电压变化),如果信道空闲,他就会发送消息,不空闲他就会等待一会直到信道空闲再发送消息。在理想状况下,CSMA/CD协议只做这一步似乎就够了。

然而,信号的传输速率是有上限的,当一个站点发送数据的时候,我们不可能立即检测到电压变化,有可能在信号没传播到其他站点的时候,其他站点检测到信道空闲因此就也发送了信号,这样,两种信号就会在信道中间发生碰撞:

那么如果这样的话,发送方就不得不做另外的事情来避免这一情况的发生,因此,就算发送出数据后,发送方网卡也会一直检测其周围电压变化幅度(检测碰撞),一但遇到碰撞传播到发送方,发送方就会检测到碰撞并立即停止发送数据,而已经发送的错误的数据会被接收方检测到并丢弃:

如图,B检测到了传播过去的碰撞。

说到碰撞的传播,这就不得不提到碰撞最长需要多长时间才能传播过来:

假设两个站点A,B在一个局域网内,A首先发送数据。我们知道,站点在发送数据之前会检测信道是否空闲,只要检测出不空闲,就不会发送数据,因此,如果A传送数据的过程中发生了碰撞,那么碰撞最迟会发生在A发送的第一个bit到达B之前,因为如果第一个bit到达B,B就不会发送数据,也就没有碰撞这一说了。所以如果有碰撞,则最迟发生在T(传播时延)后。而碰撞传播过来最长也需要T,因此假设2T后我们还没有检测到碰撞,那说明这次发送数据没有碰撞发生!(当然一个局域网中站点的距离是不同的,T的取值也不同,我们肯定是以最大的为准)。这个2T叫做争用期,也叫做碰撞窗口,本质上是局域网中距离最远的两端的端到端的往返时间

一直到现在,可能你以为这个碰撞检测策略已经结束了,但实际上,虽然我可以控制发送方的网卡让它最少也得检测碰撞2T时间以至于不漏掉传播中间碰撞的情况,但是,假设碰撞还没有传播到发送方,发送方已经把数据发送完了,那网卡怎么能检测到碰撞的产生呢?:

上面的情况翻译为,没等到2T时间,A就已经发送完数据了从而检测不出碰撞。解决方法出乎意料的明了,那就是保证发送方发送数据的大小一定是:带宽(bit/s)*2T,也就是限制帧的最小长度,如果帧太小,就填充字节进去(因此,帧长度不仅有最大值,也有最小值)。那么假设接收方收到了不够带宽(bit/s)*2T大小的帧,就可以直接丢弃了,这也是接收方判错的一种方式。

至此,碰撞检测策略才结束了。

注:在以太网中,标准争用期是51.2微秒,这是根据以太网的最长长度,和速率等相关信息计算出来的。落实到具体的信道上,也可以用比特数来表示争用时间,51.2微秒可以在该信道发送的bit数是512比特,那么该以太网的争用期就可以用512比特代替。、

碰撞处理-截断二进制指数退避

发生碰撞的几个站如果同时检测到信道空闲就会再次重新发送,这样就会再次碰撞,因此碰撞后不是立即重新发送数据,也不是信道一空闲后就发送据,而是每个站点随机选择一个时间去等待(退避),时间一过就尝试发送(这依赖于网卡暂存上一次发出的帧)。这样一来,幸运地选到最小退避时间的站点就率先发送数据。

为了尽可能减少重传时再次发生冲突的概率,截断二进制退避算法做出如下规定:

  • 基本退避时间为一个争用期。
  • 碰撞后发送方从【0,1,...,(2^K-1)】之中随机选一个数记作r,退避时间就是r倍的争用期。而k的取值为Min【重传次数,10】。可以发现碰撞后尝试重传的次数越多,发送方越可能等待更长时间,这叫做动态退避
  • 当重传次数达16次仍不成功时,就丢弃该帧,向上禀告。

强化碰撞

碰撞发生后,为了让局域网所有的主机都知道碰撞产生了,检测到碰撞的发送方需要发送一段认为干扰信号,用以强化碰撞效果,增强碰撞传播距离等。


LLC-以太网中的MAC帧

  • 类型字段:表示上一层使用的是什么协议,以便把帧的数据部分交给目标主机上一层的这个协议来处理(这意味着,以太网协议支持多种上层协议,即一个主机可以同时存在几种同一层的协议,即两个主机可以使用不同的协议通信,但是主机双方的协议类型必须一致。数据链路层会根据MAC帧中的类型字段来交付数据给上层,非常灵活)
  • FCS字段:CRC帧检验序列,检验范围是整个MAC层的帧(不包括物理层添加的8字节字段)。
  • 填充字段:以太网保证传输的帧不小于最小值的方法就是在IP数据报的后面添加填充字段(图中没有显示),而不是在整个MAC帧后面。因为如果放在整个MAC帧后面,我们明显需要在MAC帧中添加一些字段来保证我们能区分哪些是填充的无用字段并剥离它。然而如果我们将填充字段放到IP数据报里面,我们就可以利用IP数据报中的数据报长度字段在上层(网络层)剥离填充字段而不用在MAC帧中新增字段。
  • 前同步码:在发送MAC帧前,会给MAC在包一层字段,来实现物理层的一些目的。前同步码是用于在传输真正的帧之前给接收方一些时间去把时钟同步起来(利用曼彻斯特的自同步能力),我们的宗旨是,在传第一个bit之前就同步好时钟,一个bit都不有偏差。
  • 帧开始界定符:告诉接收方真正的帧从哪儿开始。

注:上面并没有提到帧开始界定符(前同步码中有,但是另有用途)和帧结束界定符,接收方如何判定接收的帧的开始和结尾?依靠两点:

  1. 曼彻斯特编码,传输每个比特的时候都会有跳变,接收方可以通过判断电压变化来感知一个帧的结束和开始:有跳变帧就开始了,没跳变帧就结束了。(对比不归零制编码,假设接收方感知到连续的低电平,那么这个低电平到底代表连续的0还是根本没有数据传输是不清楚的)
  2. 帧不是连续发送的,每发送一个帧都要停几秒,即以太网中的最小帧间隔时间,这让接收方能区分帧与帧。

使用集线器的星形以太网

集线器是一种具有少量容错能力(比如断掉和一个不断发废物消息的主机的联系,以保证整个网络的稳定)和少量网络管理能力(比如端口状态流量统计碰撞统计错误帧统计等)的转发器。说他是转发器也就意味着他只是无脑转发帧,对碰撞的阻止等功能一概没有。总之,它目的在于让网络不在那么复杂(每两个主机都要接一根线),它链接的网络逻辑上仍然是然是是总线型以太网,因此,这种以太网依然是同一时刻只允许一个站点发送数据的网络。


在数据链路层扩展以太网

交换机不像集线器,他是工作在数据链路层的机器,因为它有对帧的处理功能,不再是无脑转发。

交换机主要的功能如下:

  • 相通信的主机独占传输媒体,无碰撞地传输数据
  • 全双工通信
  • 从广播到点对点转发(即自学习功能,广播一次就能记住映射关系,下次就是点对点转发)

注:交换机消除碰撞的前提是所有主机都有单独的信道与交换机相连,而如果是像下图这种情况,交换机只能缓解碰撞:

它的工作原理是这样的:在交换机上有左右两个接口(实际上就是交换机只有两个端口,这两个端口分别被左右两侧的主机共享了),每次有数据报经过的时候,他会分析数据报的源mac地址,从而得知这个mac地址的主机在交换机的左(右)侧。一段时间后,交换机就知道了每台主机在交换机的左侧还是右侧,他就可以选择性转发数据报,如果确定数据报的目的MAC在右边,他就不会把数据报转发到左边。除此之外,一但一侧发生碰撞,交换机也能得知,他就会阻止碰撞扩散,两侧互不影响。


虚拟局域网

简单来讲局域网就是实现一种划分机制(通常需要协议和交换机配合完成),将一个局域网再划分为多个小的逻辑上的局域网。说它是逻辑上的局域网就是说,实际上他们还是一个局域网,只是逻辑上我们给他们不同的身份。

具体实现就是再MAC帧中再插入一个字段VLAN标签,它相当于每台主机的令牌,令牌一样的就是一个局域网内的,而交换机呢,他只会给与发送方身份一样的的主机端口广播或者点对点转发帧,这样就在逻辑上隔绝开了两组主机。

虚拟局域网不只是可以由一个局域网得到主机划分得到,即,一个虚拟局域网的主机可以是不同属于局域网的主机。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询