3.1 数据链路层的功能
从这节课开始,我们会进入第三章数据链路层的学习,在这个小节中,我们先认识数据链路层需要实现哪些功能?
首先我们从一个比较宏观的视角回顾一下数据链路层在计算机网络体系结构当中所处的地位。主机这一类的节点需要实现第一层到第五层的功能,而路由器这种节点只需要实现第一层到第三层的功
能。在计算机网络当中,除了主机和路由器之外,还有其他类型的节点,所需要实现的功能层次也
各不相同。在这一章中,我们主要探讨第二层数据链路层的功能。现在假设左边这个用户要给右边这个用户发送一串数据,这些数据会经过上面这些层次的逐层处理到网络层这一块,会把数据拆分成IP 数据报,也就是拆分成分组。接下来,网络层会把分组交给数据链路层进行传输,也就是说,数据链路层需要为网络层提供服务,需要把网络层的分组数据加上首部和尾部的控制信息封装成一个帧。紧接着,数据链路层又会请求物理层的服务,让物理层把这个帧也就是这些二进制数据传输给下一个相邻的节点(也就是图中的路由器)。下一个相邻节点的物理层会收到这些二进制比特串,并把这些二进制比特串交给第二层数据链路层进行处理,这个数据链路层实体需要还原出 IP 数据报的信息,并且把 IP 数据报交给第三层的实体。接下来的处理就不再赘述。
总之数据链路层的对等实体之间以帧为单位进行数据传输,但是帧的传输依赖于物理层提供的比特传输服务,另一方面数据链路层又会为上一层网络层提供服务。把网络层的 IP 数据报,也就是分组加上一些控制信息封装成帧,然后以帧为单位传输给下一个相邻结点的对等实体。
这儿我们引入两个概念,分别是物理链路和逻辑链路。所谓物理链路就是指第0层和第1层实现的这种相邻节点之间的物理连接,相邻结点之间有了物理链路,就可以实现二进制比特的传输。数据链路层需要基于已经实现的物理链路进一步的去实现相邻节点之间,逻辑上无差错的数据链路,有的教材也会把数据链路称为逻辑链路。一条物理电路受到环境噪声的干扰,有可能在传输的过程中发
生比特跳变,比如说,1跳变成0或者0跳变成1。我们的数据链路层需要确保这种比特错误,可以被发现。只有确保了帧的传输没有比特错误,才可以进一步的保证这个第二层的实体给第三层的实体递交的数据报没有错误。这是物理电路和逻辑电路的概念。
接下来,我们对数据链路层需要支持哪些功能进行总结。这页是对本章即将要学习的各种功能先进行总览。我们先尽量用大白话去理解各个功能是什么含义。这样有助于大家建立起对数据链路层这些功能的框架。我们一起来梳理一下,首先数据链路层需要实现的第一个功能叫做组帧,又可以称为封装成帧,也就是把网络层交给他的一坨数据封装成一个帧,那么封装成帧主要需要解决两个问题。首先是帧定界,也就是如何让接收方确定一个帧的界限从哪儿开始,从哪儿结束。因为数据的接收方,它的物理层只会传输二进制比特串,这些二进制比特串当中有可能只包含一个帧,有可能会包含多个帧。所以,当数据接收方的物理层实体把一系列二进制比特串交给第二层的时候。第二层就需要从一系列二进制串当中分辨出帧和帧之间的边界在哪儿,这就是帧定界要解决的问题。如何实现帧定界?我们会在之后的小节中进行探讨。
除了帧定界之外,还需要实现透明传输。所谓透明传输,指的是接收方的链路层需要能够从帧里边恢复原始的SDU,还记得SDU的概念吗?某一层的SDU加上这一层的协议控制信息等于这一层的协议数据单元。对于数据链路层来说,网络层委托给它传输的数据,就是数据链路层的SDU,SDU的数据被封装成帧后,首先会增加首部尾部这些控制信息。另外,这个SDU数据的内部有可能需要进行一些改造。对于数据的接收方来说,他需要从这个帧当中把SDU的数据恢复原样,然后再交付给第三层的实体。对于网络层的实体来说,他们并不能感知到数据链路层对这个数据分组做的这些处理。也就是说,组帧和拆帧的这个过程,对于网络层来说是透明的,因此我们把这个功能称为透明传输。
接下来数据链路层还需要实现差错控制的功能。数据的接收方需要能够发现并且解决一个帧里边的位错误。比如说零变一,一变零这种位错误。想要发现一个帧的位错误很简单,可以采用检错编码的技术,解决这种位错误可以有两种方案。第一种最常用的方案就是如果发现了比特错误之后,就直接把这个帧丢弃,然后想办法让发送方重新传输这个帧。而第二种方案更复杂一些,由接收方的数据链路层发现并且纠正比特错误。如果要纠正某些比特的错误的话,需要采用纠错编码的技术,纠错编码技术是检错编码技术的进阶。前者只能检测出比特错误,后者既能检测出比特错误,还能找到是哪些比特发生了错误,然后对这些比特进行纠正。检错编码和纠错编码的相关技术,我们会在之后的小节进行学习。这是差错控制的功能。接下来,数据链路层还需要实现可靠传输的功能,这个功能要求数据的接收方能够发现并且解决帧错误。帧错误有三种情况,分别是帧丢失、帧重复和帧失序。
首先看帧丢失,假如发送方要发送四个帧编号,分别为一二三四,但是接收方只收到了一二四,也就是三号帧丢失了。那么,数据的接收方要能够发现三号帧的丢失,并且需要让发送方重发三号帧。再来看帧重复的情况。假设发送方要发送的是一二三四几个帧,由于某些原因,接收方可能会收到一二三三四,也就是收到两个三号帧。那么,接收方需要能够发现这种帧重复的情况,并且把重复的帧给丢弃。
最后一种帧错误叫做帧失序,如果发送方要发送的是一二三四这几个帧。由于某些原因,接收方收到的帧是一三二四,那么接收方需要对这些帧进行排序,让它恢复到正确的顺序。这是可靠传输这个功能要解决的问题。
接下来数据链路层还需要实现流量控制的功能。流量控制这个功能主要是要控制发送方,发送帧的速率别太快,让接收方来得及接收。这是流量控制要解决的问题。
最后数据链路层还需要实现介质访问控制的功能。这儿的介质指的就是物理传输介质。通常来说,广播信道就需要实现介质访问控制的功能。因为广播信道在逻辑上是总线型的拓扑,而总线型的拓扑会出现多个节点争抢着使用传输介质的情况。多个节点同时争抢这个传输介质使用权的时候,就需要通过数据链路层的某些协议。去决定这个传输介质的使用权或者说访问权到底要先分配给哪个节点。这就是介质访问控制要解决的问题。
相比于广播信道,点对点的信道通常来说不需要实现介质访问控制的功能。因为点对点的信道意味着两个节点之间会有专属的传输介质。比如你的电脑通过网线和你们家的路由器进行连接。此时这根网线只为你的电脑和路由器服务。并且现在的网线通常都支持全双工通信。也就是说你的电脑给路由器发送数据的同时,路由器也可以给电脑发送数据。因此,在这种点对点的信道当中,就不需要考虑介质访问控制的问题,两个节点可以同时使用这个信道,不用抢。这就是数据链路层要实现的主要功能,我们会在这一章后续的小节逐一展开探讨。如果大家使用的是2025的王道计网教材,可以把3.1.2和3.1.3这两个小部分直接跳过不看。明年的图书会把这两个部分给删掉。
以上就是这一小节的全部内容。