1.链路、数据链路及数据帧
在学习其他内容之前,本节先介绍数据链路层的三个基本概念,即“链路”“数据链路”和“帧”。
1)链路
链路是指从某一结点出发到另一相邻结点的物理线路段。这个线路段可以是有线线路,也可以是无线线路,是网络连接最基本的物理单元。“相邻”是指在这段线路上没有其他中间结点。在网络中,进行数据通信的两个结点通常并非是相邻结点,所以,一条数据传输通道往往是由多个链路和中间结点组成的。
2)数据链路
相对于链路而言,数据链路则要复杂得多。一条完整的数据传输通道,除要有链路外,还必须要辅以一些必要的通信协议,把这些协议加载到相应的链路上,就构成了数据链路。从这个角度来看,可以将链路视为数据链路的组成部分,它解决了数据链路的物理连接问题;而数据链路则是硬件和软件的综合统一。
那么,接下来的问题是:这些数据通信协议是如何加载到链路上的呢?首先,我们需要明确一点,那就是这些协议需要加载到网络结点上而不是传输介质上。当结点是一台网络连接设备时(如交换机、路由器等),这些协议被直接写入设备的内存上。当结点是一台网络终端的计算机时,协议主要由网络适配器来实现。在今天的计算机网络里,网络适配器是一个非常重要的角色,它不但为网络的连接提供了物理接口,同时又为网络协议的安装提供了载体。网络适配器既工作在物理层,又工作在数据链路层,具有双重角色。
3)帧
在物理层,数据以比特为单位,逐位进行传输。在数据链路层,数据以“帧”为基本的数据传输单元。帧主要由三部分组成,一是首部,二是数据部分,三是尾部。在数据发送方的数据链路层中,通信协议利用首部和尾部将网络层交付的IP数据报进行封装,得到帧。装载着IP数据报的帧由数据链路层向下进入物理层后,被转换为原始比特流,沿着链路传输到接收方。在数据接收方的数据链路层,通信协议需要从比特流中“取出”完整的帧并对其进行差错检测。如果帧无差错,则去掉帧首部和帧尾部,将其还原成IP数据报,并向上递交给网络层;如果帧有错误,则将其丢弃。为了保障数据的完整性,被丢弃的数据帧需要进行重发,但这并不是数据链路层需要关心的问题,而是由其他高层负责。链路、数据链路及帧之间的关系如图3-1所示。
图3-1给出了由结点A向结点B发送数据时,数据在网络体系结构下三层中的变化过程,也就是在IP数据报、数据帧和比特流三者之间的转换。为了便于理解,本节仅以两个相邻结点为例,对链路、数据链路的关系,以及数据帧的形成、发送过程加以描述。在现实的数据传输中,参与的结点数量往往有多个,但也都是上述过程的不断重复。
图3-1 链路、数据链路及帧之间的关系
若仅考虑数据链路层的数据传输,则其过程示意如图3-2所示。
图3-2 数据链路层的数据传输过程示意
2.帧结构及帧长度
1)帧结构(www.xing528.com)
帧由首部、数据部分及尾部三个部分构成。其中,首部和尾部是数据链路层自行添加的部分,各自具有不同的字段结构。不同的数据链路层协议规定的首、尾部字段结构(数量及内容)各不相同,例如,PPP帧的首部有4个字段,尾部有2个字段。数据帧的首部和尾部有着重要的作用,它往往包含帧边界信息、地址信息、控制信息及协议类型等内容,在数据帧的传输中发挥着不可替代的作用。数据部分由网络层交付下来的IP数据报组成,这里的IP数据报即数据分组,具体的内容将在第4章网络层中进行介绍。
利用帧首部和帧尾部将网络层交付的IP数据报“封装”在一起,就形成了数据链路层的帧。正如写信一样,数据部分是信件,而首部和尾部是信封,将信件装进信封里的过程即所谓的封装。
2)帧长度
一个帧的长度等于帧首部、数据部分及帧尾部三个部分长度的和。一般来说,在数据链路层协议确定的前提下,帧首部和帧尾部的长度是固定的,而数据部分的长度则是可变的,由网络层交付的IP数据报的长度决定,因此,帧的总长度也是可变的。
对于使用者而言,帧中的数据部分是真正需要传输的内容,而帧的首部和尾部是为了保障数据的有效传输而不得不额外增加的内容,它们的存在造成了数据传输的冗余,降低了数据传输效率。从这一角度来看,应当尽量增大数据部分和首尾部长度的比例,以提高数据传输效率。当数据链路层协议确定后,帧的首尾部长度就已经固定了,因此,可以通过尽可能增加数据部分长度的方法来提高数据传输效率,但是,过长的数据帧也会带来一些其他问题。例如,在存储转发工作模式下,过长的数据帧会给每个传输结点的缓存空间带来更高的要求。每种数据链路层协议都规定一个数据帧的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。因为帧的首部和尾部始终存在,所以帧的数据部分的长度一定不能超过MTU。如果网络层的IP数据报长度超过了MTU规定的值,那么这个数据报在发送时,就需要进行分片处理。
帧的结构及长度如图3-3所示。
图3-3 帧的结构及长度
3.封装成帧
数据链路层协议在网络层递交的IP数据报的前、后分别添加首部和尾部,从而将IP数据报封装成帧。帧的首部和尾部各自包含多个字段,每个字段都发挥着不同的作用,其中的一个重要作用就是进行帧定界,也就是确定帧的边界。具体的做法是,在首部和尾部字段中分别设置一个标志位,然后在这个标志位中填充某一类特殊字符,作为一个数据帧的起始和结束标志。需要注意的是,这个标志位需要分别放置在帧首部的第一个字段和帧尾部的最后一个字段,从而保证数据帧从起始标志开始传输,以结束标志作为传输的结束(此处认为,帧的“左侧”就是“前面”,数据帧的传输都从“左侧”开始)。在数据传输过程中,帧的发送是连续进行的,这些连续的帧进入物理层后,会被转换成连续的比特流,而当这些比特流传送到接收端时,接收端的数据链路层必须将独立的帧从连续的比特流中被正确识别出来。此时,帧首部和尾部中所设置的帧起始和帧结束标志就显得尤为重要,接收方的数据链路层就是根据这些标志来实现对帧的识别,进而才能完成后续的接收工作(将帧完整取出后,去掉首部和尾部,将其还原成IP数据报,然后上交给网络层)。由此可见,在封装成帧的处理过程中,有一项工作尤为重要,就是确定帧的起始和结束标志位中填充的字符内容,即要确定帧定界符。
ASCII采用7位编码,共有128种不同的组合,同时对应确定了128个不同的编码,其中有33个编码代表着控制命令,不可显示,而可显示的编码共95个。可以选择两个特殊的控制字符作为帧的起始和结束标志,分别放置在帧首部的第一个字段和帧尾部的最后一个字段,如图3-4所示。
图3-4 用定界符标识帧的起始和结束
选择SOH(Start Of Header)和EOT(End Of Transmission)两个控制字符作为帧的起始和结束标志(即帧的定界符),分别放置在帧首部和帧尾部的标志字段中(标志字段就是前文提到的帧首部的第一个字段和帧尾部的最后一个字段),作为一个帧的起始和结束标志。需要注意的是,SOH和EOT是两个控制字符的名称,而并非字母S、O、H和E、O、T的组合。这两个控制字符的十六进制编码分别是01和04,对应的二进制编码分别是00000001和00000100。
当数据在网络中正常传输时,帧定界符发挥着重要的作用,可以有效保障帧传输的完整性。当数据传输出现差错时,帧定界符的作用更加明显。例如,若数据发送方在一个帧没有被完整发送之前偶发故障,中断了数据发送,随后又很快排出了故障,于是重新发送之前的帧。此时,网络中就存在着一个不完整的数据帧,当这个不完整的数据帧到达接收方时,接收方的数据链路层根据帧定界符,就可以判断出这是一个出错的帧(因为接收方只收到了帧的起始标志SOH,却没有收到帧的结束标志EOT),进而将其丢弃。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。