精华内容
下载资源
问答
  • 数据链路层三个基本问题

    万次阅读 多人点赞 2016-01-30 21:58:54
    数据链路层三个基本问题1. 封装成帧 封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。 接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的...

    数据链路层的三个基本问题

    1. 封装成帧

    • 封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
    • 接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
    • 分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位。
    • 网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。
    • 帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。
    • 首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。
    • 各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。
    • 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)。
      这里写图片描述
    • 当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符
    • 控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。他们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。
      这里写图片描述
    • 当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发完一个帧时突然出现故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据时个不完整的帧(只有首部SOH,没有传输结束符EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。

    2. 透明传输

    • 由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
    • 当传送的帧使用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输
    • 问题:当数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了,如果数据中的某个字符的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地找到帧的边界,把部分帧收下(误认为是完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。这样的帧的传输显然就不是透明传输。
      这里写图片描述
    • 问题分析:为了解决透明传输的问题,就必须设法使数据中可能出现的控制字符”SOH”和”EOT”在接收端不被解析为控制字符。
    • 解决方法:发送端的数据链路层在数据中出现控制字符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
      这里写图片描述

    3. 差错检测

    • 传输差错:可分为两大类,一类就是最基本的比特差错,另一类就是收到的帧并没有出现比特错误,但却出现了帧丢失、帧重复或帧失序。
    • 比特差错:就是比特在传输过程中可能会产生差错,即1可能会变成0,0可能会变成1。比特差错是传输差错中的一种。
    • 三个帧:[#1]-[#2]-[#3],假定在接收端收到的却有可能出现的情况:
      (1)帧丢失:收到[#1]-[#3](丢失了[#2])。
      (2)帧重复:收到[#1]-[#2]-[#2]-[#3](收到两个[#2])。
      (3)帧失序:收到[#1]-[#3]-[#2](后面发的帧反而先到达了接收端,这与一般的数据链路层传输概念不一样)。
    • 误码率BER(Bit Error Rate):就是在一段时间内,传输错误的比特占所传输比特总数的比率。例如,误码率为10^(-10)时,表示平均每传送10^10个比特就会出现一个比特的差错。误码率与信噪比有很大的关系,如果提高信噪比,就可以使误码率减小。
    • 问题:实际的通信链路并非理想的,它不可能使误码率下降到零。
    • 问题分析:为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种检测措施。
    • 解决方法:目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检测技术。
    • 注:在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。

    补充: OSI的观点是必须把数据链路层做成是可靠传输的。因此在CRC检测基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认为止。
    这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。
    因特网广泛使用的数据链路层协议都不适用确认和重传机制,即不要求数据链路层向上层提供可靠传输的服务(因为这要付出的代价太高,不合算)。如果在数据链路层传输数据时除了差错并且需要进行改正,那么改正差错的任务就由上层协议(如,运输层TCP协议)来完成。实验证明,这样可以提高通信效率。


    参考文献:
    [1]《计算机网络(第5版)》谢希仁——第三章 3.1

    展开全文
  • 数据链路层三个问题

    千次阅读 2017-03-01 19:05:37
    今天学习了关于数据链路的知识,数据链路使用的信道主要有以下的两种类型: 1. 点对点信道。这种信道使用一对一的点对点信道方式。 2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。通常...

    今天学习了关于数据链路层的知识,数据链路层使用的信道主要有以下的两种类型:
    1. 点对点信道。这种信道使用一对一的点对点信道方式。
    2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。

    通常我们使用的更多的是点对点的信道,所以在这里我们需要了解一些相关的概念。

    点对点信道的数据链路层在进行通信的时步骤如下:
    1. 节点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
    2. 节点A把封装好的帧发送给节点B的数据链路层。
    3. 若节点B的数据链路层收到的帧无差错,则从收到的帧当中提取出IP数据报上交给上面的网络层,否则丢弃这个帧。

    数据链路层的三个基本问题:
    封装成帧、透明传输、差错检测。

    封装成帧


    在进行数据链路层传输的时候存在一个问题,我们需要对饮数据链路层的协议对应将有效的数据封装成一个帧,封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成一个帧。这个时候我们就需要考虑,我们如何来识别一个帧,所以这里提出了一个帧定界的概念,使用两个控制字符,一个控制字符SOH放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT标识帧的结束。
    ![enter description here][1]

    所以简单的说第一步就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是起到帧定界的作用。

    透明传输


    关于透明传输,我们主要目的是因为,在帧的有效数据当中,可能出现和帧定界的控制字符一样的字符,为了防止将这些字符当中帧定界的字符,错误的处理帧,所以我们采方法使得数据当中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。

    方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符”ESC”。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。我们把这种方法叫做字节填充法。当然如果转义字符”ESC“也出现在数据当中,那么解决的方法仍然是在转义字符的前面插入一个转义字符,所以,当接受到连续的两个转义字符的时候,就去删除其中前面的一个。
    ![enter description here][2]

    差错检测


    数据链路层点对点传输的第三个问题就是差错检测。就是我们所说的比特在传出过程当中可能会产生差错,1可能会变成0,0可能会变成1.这就是比特差错。而这种差错对于我们来说是不希望发生这种状况的,所以为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前广泛运用的是循环冗余检验CRC

    CRC的基本思想就是将传输的数据当作一个位数很长的数,将这个书除以另外的一个数。得到的余数作为校验数据附加到原数据后面。

    原理:
    首先把数据M划分为组,每个组k个比特。CRC运算就是在数据M后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,所以一共就是(k+n)位。这样虽然是增加了数据传输的开销,但是却可以进行差错检测。为了避免传输差错,这种效率上的损失是值得的。

    重点就是这n位冗余的计算方法。
    用二进制的模2运算再进行2^n乘M运算,模2运算相当于是二进制的不进位加法,其实也就是异或运算,而2^n乘M运算相当于是进行在M后面加上n个0。
    ![enter description here][3]

    这种添加冗余码的方法叫做帧检验序列FCS,而CRC循环冗余差错检测和这个并不是一个概念,然后我们可以对上面最后的数据进行CRC检验,方法就是把收到的每一帧都除以相同的除数,然后检查得到的余数。如果没有差错,那么得到的余数一定是0。

    ![enter description here][4]

    所以总的来说,就是每一个接受到的帧经过了CRC检验后,只会有两种情况:
    1. 余数为0,表示结果是正确的,这个时候自然就接收这个帧。
    2. 余数不为0,这样标识这个帧是有问题的,这样就丢弃这个帧。

    另外一种就是使用多项式的方法进行循环冗余检验过程。用多项式P(x)=x^3+x^2+1表示除数P=1101。这个多项式称作生成多项式。生成多项式的选取是有难度的,如果选的不好,那么检测出错误的概率就会很低。现在常用的几种多项式有:

    CRC8=X8+X5+X4+X0
    CRC-CCITT=X16+X12+X5+X0
    CRC16=X16+X15+X2+X0
    CRC12=X12+X11+X3+X2+X0
    CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0

    最后需要说一下,数据链路层如果仅仅使用CRC循环冗余检验,则只能对帧做到无差错接受,但是,当数据链路层向网络层提供传输的时候,这个时候就不一定是可靠的传输了,数据链路层不确保这个。所以数据链路层协议不适用确认和重传机制,不向上层提供可靠传输的服务。所以保证可靠传输就需要让上层协议(TCP)来做了。这样的目的,也是为了更好的提升通信的效率。

    展开全文
  • 数据链路层的主要功能

    万次阅读 多人点赞 2019-05-28 11:03:46
    数据链路层主要功能数据传输差错控制数据链路层三个基本问题1.封装成帧2. 透明传输3. 差错检测 数据传输 透明传输其实就是指无论是什么报文都可以传输。在数据链路层将网络层协议封装成帧时,会在首部和尾部分别...

    主要功能概述

    数据链路层最基本的服务是将源计算机网络层来的数据可靠的传输到相邻节点的目标计算机的网络层。为达到这一目的,数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块(在数据链路层中将这种数据块称为帧,帧是数据链路层的传送单位);如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使之与接收方相匹配;在两个网路实体之间提供数据链路通路的建立、维持和释放管理。这些功能具体表现在以下几个方面。

    数据链路层的三个基本问题

    1. 封装成帧

    为了向网络层提供服务,数据链路层必须使用物理层提供的服务。而物理层我们知道,它是以比特流进行传输的,这种比特流并不保证在数据传输过程中没有错误,接收到的位数量可能少于、等于或者多于发送的位数量。而且它们还可能有不同的值,这时数据链路层为了能实现数据有效的差错控制,就采用了一种“帧”的数据块进行传输。而要采帧格式传输,就必须有相应的帧同步技术,这就是数据链路层的“成帧”(也称为“帧同步”)功能。

    • 封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
    • 分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位。
    • 网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。
    • 帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。
    • 首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。
    • 各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。
    • 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)。
      在这里插入图片描述
    • 当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。
    • 控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。他们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。
      在这里插入图片描述
    • 采用帧传输方式的好处是,在发现有数据传送错误时,只需将有差错的帧再次传送,而不需要将全部数据的比特流进行重传,这就在传送效率上将大大提高。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据时个不完整的帧(只有首部SOH,没有传输结束符EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下

    但同时也带来了两方面的问题:(1)如何识别帧的开始与结束;(2)在夹杂着重传的数据帧中,接收方在接收到重传的数据帧时是识别成新的数据帧,还是识别成已传帧的重传帧呢?这就要靠数据链路层的各种“帧同步”技术来识别了。“帧同步”技术既可使接收方能从以上并不是完全有序的比特流中准确地区分出每一帧的开始和结束,同时还可识别重传帧。

    2. 透明传输

    在上面提到了在数据链路层实现透明传输和封装成帧时,使用到了转义字符。在假设没有使用转义字符的前提下我们来分析一下存在的问题:

    • 由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
    • 当传送的帧使用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。

    问题:当数据部分是非ASCII码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了,如果数据中的某个字符的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地找到帧的边界,把部分帧收下(误认为是完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH)。这样的帧的传输显然就不是透明传输。

    在这里插入图片描述

    • 问题分析:为了解决透明传输的问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收端不被解析为控制字符
    • 解决方法:发送端的数据链路层在数据中出现控制字符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个
      在这里插入图片描述

    3. 差错检测

    传输差错:可分为两大类,一类就是最基本的比特差错,另一类就是收到的帧并没有出现比特错误,但却出现了帧丢失帧重复帧失序

    • 比特差错:就是比特在传输过程中可能会产生差错,即1可能会变成0,0可能会变成1。比特差错是传输差错中的一种。
    • 三个帧:[#1]-[#2]-[#3],假定在接收端收到的却有可能出现的情况:
      (1)帧丢失:收到[#1]-[#3](丢失了[#2])。
      (2)帧重复:收到[#1]-[#2]-[#2]-[#3](收到两个[#2])。
      (3)帧失序:收到[#1]-[#3]-[#2](后面发的帧反而先到达了接收端,这与一般的数据链路层传输概念不一样)。
    • 误码率BER(Bit Error Rate):就是在一段时间内,传输错误的比特占所传输比特总数的比率。例如,误码率为10 ^ (-10)时,表示平均每传送10^10个比特就会出现一个比特的差错。误码率与信噪比有很大的关系,如果提高信噪比,就可以使误码率减小

    问题:实际的通信链路并非理想的,它不可能使误码率下降到零。
    问题分析:为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种检测措施。
    解决方法:目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检测技术。
    注:在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输

    补充:
    OSI的观点是必须把数据链路层做成是可靠传输的。因此在CRC检测基础上,增加了帧编号、确认和重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因而就进行重传,直到收到对方的确认为止。
    这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。

    因特网广泛使用的数据链路层协议都不适用确认和重传机制,即不要求数据链路层向上层提供可靠传输的服务(因为这要付出的代价太高,不合算)。如果在数据链路层传输数据时除了差错并且需要进行改正,那么改正差错的任务就由上层协议(如,运输层TCP协议)来完成。实验证明,这样可以提高通信效率。

    MAC寻址

    这是数据链路层中的MAC子层主要功能。这里所说的“寻址”与“IP地址寻址”是完全不一样的,因为此处所寻找地址是计算机网卡的MAC地址,也称“物理地址”、“硬件地址”,而不是IP地址。在以太网中,采用媒体访问控制(Media Access Control, MAC)地址进行寻址,MAC地址被烧入每个以太网网卡中。这在多点连接的情况下非常必需,因为在这种多点连接的网络通信中,必须保证每一帧都能准确地送到正确的地址,接收方也应当知道发送方是哪一个站。

    链路层向网络层提供的服务

    数据链路层的设计目标就是为网络层提供各种需要的服务。实际的服务随系统的不同而不同,但是一般情况下,数据链路层会向网络层提供以下三种类型的服务:

    1. 无确认的无连接服务

    “无确认的无连接服务”是指源计算机向目标计算机发送独立的帧,目标计算机并不对这些帧进行确认。这种服务,事先无需建立逻辑连接,事后也不用解释逻辑连接。正因如此,如果由于线路上的原因造成某一帧的数据丢失,则数据链路层并不会检测到这样的丢失帧,也不会恢复这些帧。出现这种情况的后果是可想而知的,当然在错误率很低,或者对数据的完整性要求不高的情况下(如话音数据),这样的服务还是非常有用的,因为这样简单的错误可以交给OSI上面的各层来恢复。如大多数局域网在数据链路层所采用的服务也是无确认的无连接服务。

    2. 有确认的无连接服务

    为了解决以上“无确认的无连接服务”的不足,提高数据传输的可靠性,引入了“有确认的无连接服务”。在这种连接服务中,源主机数据链路层必须对每个发送的数据帧进行编号,目的主机数据链路层也必须对每个接收的数据帧进行确认。如果源主机数据链路层在规定的时间内未接收到所发送的数据帧的确认,那么它需要重发该帧。 这样发送方知道每一帧是否正确地到达对方。这类服务主要用于不可靠信道,如无线通信系统。它与下面将要介绍的“有确认的面向连接服务”的不同之处在于它不需要在帧传输之前建立数据链路,也不要在在帧传输结束后释放数据链路。

    3. 有确认的面向连接服务

    大多数数据链路层都采用向网络层提供面向连接确认服务。利用这种服务,源计算机和目标计算机在传输数据之前需要先建立一个连接,该连接上发送的每一帧也都被编号,数据链路层保证每一帧都会被接收到。而且它还保证每一帧只被按正常顺序接收一次。这也正是面向连接服务与前面介绍的“有确认无连接服务”的区别,在无连接有确认的服务中,在没有检测到确认时,系统会认为对方没收到,于是会重发数据,而由于是无连接的,所以这样的数据可能会复发多次,对方也可能接收多次,造成数据错误。这种服务类型存在3个阶段,即:数据链路建立、数据传输、数据链路释放阶段。每个被传输的帧都被编号,以确保帧传输的内容与顺序的正确性。大多数广域网的通信子网的数据链路层采用面向连接确认服务。

    以太网采用无连接的工作方式,读发送的数据帧不进行编号,也不要求对方发回确认。目的站收到有差错的帧就把他丢弃,不采取其他行为。

    其他知识点

    • 局域网的优点:具有广播功能,从一个站点可以很方便的访问全网;便于系统的扩展和逐渐演变;提高了系统的可靠性、可用性和生存性。
    • 以太网采用的协议是具有冲突检测的载波监听多点接入CMSA/CD。协议的要点是:发送前先监听,便发送边监听,一旦发现总线上出现了碰撞,就立即停止发送。然后按照退避算法等待一段随机时间后再次发送。因此,每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。以太网上各站点都平等的争用以太网信道。
    展开全文
  • 透明传输中的“透明”是一很重要的术语,它表示某一实际存在的事物看起来却好像不存在一样,在数据链路透明传送数据表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路。...

    参考资料:《计算机网络》第七版(谢希仁著)

    一、封装成帧

    封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧,接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

    分组交换的一个重要概念就是:所有在互联网上传送的数据都以分组(即IP数据报)为传送单位,网络层的IP数据报传送到数据链路层就成为帧的数据部分,在帧的数据部分的前面和后面分别添加上首部和尾部,构成了一个完整的帧,这样的帧就是数据链路层的数据传送单元,因此一个帧的帧长等于帧的数据部分长度加上帧首部和帧尾部的长度

    在发送帧时,是从帧首部开始发送的,到帧尾部结束,首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限),此外,首部和尾部还包括许多必要的控制信息,因此各种数据链路层协议都对帧首部和帧尾部的格式有明确的规定。

    为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度,但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU(Maximum Transfer Unit)。
    在这里插入图片描述
    当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符,ASCI码是7位编码,一共可组合成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个,注意,这里可打印的字符是指可以从键盘上输入的字符,我们使用的标准键盘有47个键可输入94个字符(包括使用Shift键),加上空格键,一共可输入95个可打印字符。

    控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始,另一个控制字符EOT(End Of Transmission)表示帧的结束,需注意的是,SOH和EOT都是控制字符的名称,当数据是由可打印的ASCII码组成的文本文件时,SOH和EOT的十六进制编码分别是01(二进制是0000001)和04(二进制是00000100)。
    在这里插入图片描述
    当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发送完一个帧时突然出故障,中断了发送,但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧,由于使用了帧定界符,接收端就知道前面收到的数据是个不完整的帧(只有首部开始符SOH而没有传输结束符EOT),必须丢弃,而后面收到的数据有明确的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。

    需注意的是,不同的协议使用的帧定界符也并不相同,但是它们的思想是相同的,都是对SOH和EOT的某种实现

    二、透明传输

    由于帧的开始和结束的标记使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。

    当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符,可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。

    但是,当数据部分是非ASCI码的文本文件时(如二进制代码的计算机程序或图像等),情况就不同了,如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地找到帧的边界,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制字符SOH),如下图所示:
    在这里插入图片描述
    透明传输中的“透明”是一个很重要的术语,它表示某一个实际存在的事物看起来却好像不存在一样(例如,你看不见在你前面有块100%透明的玻璃的存在),在数据链路层透明传送数据表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层,因此,对所传送的数据来说,这些数据就看不见数据链路层有什么妨碍数据传输的东西,或者说,数据链路层对这些数据来说是透明的。

    为了解决透明传输问题,就必须设法使数据中可能出现的与控制字符SOH或EOT相同的二进制代码在接收端不被解释为控制字符。

    具体的方法是:发送端的数据链路层在数据中出现“SOH"或“EOT"的前面插入一个转义字符“ESC(其十六进制编码是1B,二进制是00011011),而接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。 如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
    在这里插入图片描述

    三、差错检测

    现实的通信链路都不会是理想的,因此数据帧在传输中通常可能发生以下两种错误:

    • 比特差错:比特在传输过程中可能会产生差错,1可能会变成0,而0也可能变成1。

      在一段时间内,传输错误比特的数量占所传输比特总数的比率称为误码率BER(Bit Error Rate),例如,误码率为0.1时,表示平均每传送10个比特就会出现一个比特的差错。误码率与信噪比有很大的关系,信噪比越高,误码率越低,因此如果设法提高信噪比,就可以使误码率减小。

      但是,实际的通信链路并非是理想的,它不可能使误码率下降到零,因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施,目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。

      下面通过一个简单的例子来说明循环冗余检验的原理,现假定待传送的数据M = 1101011011(k=10)。

      CRC的基本原理:

      1. 在发送端,先把数据划分为组,假定每组k个比特。

      2. 通过CRC运算,在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测,当传输可能出现差错时,付出这种代价往往是很值得的。

        CRC运算的过程:

        用二进制数的模2乘法进行2ⁿ乘M的运算,这相当于在M后面添加n个0,得到的(k+n)位的数使用模2除法除以收发双方事先商定的长度为(n+1)位的除数P,得出商是Q而余数是R(n位,比P少一位),关于模2运算的具体内容请参照:模2运算

        假定除数P= 10011(即n = 4),则经模2除法运算后的结果是:商Q = 1100001010(这个商并没有什么用处),而余数R = 1110,这个余数R就作为冗余码拼接在数据M的后面发送出去。

        这种为了进行检错而添加的冗余码常称为帧检验序列FCS(Frame Check Sequence),因此加上FCS后发送的帧是11010110111110(即2ⁿ × M + FCS,这里的×是模2乘法),共有(k + n)位。需注意的是,循环冗余检验CRC和帧检验序列FCS并不是同一个概念,CRC是一种检错方法,而FCS是添加在数据后面的冗余码,在检错方法上可以选用CRC,但也可不选用CRC。

        在这里插入图片描述

      3. 在接收端,先从接收的数据帧中提取出n位冗余码,进行CRC检验,如果检验的结果正确,则接受(accept)数据帧,如果检验的结果不正确,则直接丢弃,可见,CRC检验不能确定错误发生的原因,只能判断数据帧是否正确

        CRC检验的过程:

        把收到的每一个帧都除以同样的除数P(模2除法),然后检查得到的余数R,如果在传输过程中无差错,那么经过CRC检验后得出的余数R肯定是0,但如果出现误码,那么余数R仍等于零的概率是非常非常小的。

        在接收端对收到的每一帧经过CRC检验后,一般有以下两种情况:

        1. 若得出的余数R=0,则判定这个帧没有差错,就接受(accept);

        2. 若得出的余数R≠0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。

      徐注意的是,在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。

      从以上不难看出,如果我们在传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验,因此,如果要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。

    • 传输差错:收到的帧没有出现比特差错,但却出现了帧丢失、帧重复和帧失序。

      例如,发送方连续传送三个帧: ABC,假定接收端收到的每一个帧都没有比特差错,但却出现下面的几种情况:

      1. 帧丢失:收到AC(丢失B);

      2. 帧重复:收到ABBC(收到两个B);

      3. 帧失序:收到ACB(后发送的帧反而先到达了接收端,这与一般数据链路层的传输概念不一样)。

      因此,我们应当明确,“无比特差错”与“无传输差错”并不是同样的概念,在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输

    强调一下,在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受(即认为:凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错),接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受,以上所述的可以近似地表述为(通常都是这样认为):“凡是接收端数据链路层接受的帧均无差错”。

    需注意的是,通常并不要求数据链路层向网络层提供可靠传输的服务,所谓可靠传输就是数据链路层的发送端发送什么,在接收端就收到什么,一般有以下两种情况:

    • 对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务,如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成。

    • 对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务。

    展开全文
  • 过去OSI的观点是:必须让数据链路层向上提供可靠传输。因此在CRC的基础上,增加了帧编号、确认和重传机制。 而现在的互联网采用了区别对待的方法: 对于通信质量良好的有线传输链路,数据链路层协议不使用确认...
  • 数据链路层的数据传输

    千次阅读 2016-12-22 12:02:40
    数据链路层的数据传输 在数据链路层,数据是以帧的形式传输的。帧由帧首部、数据部分、帧尾部这三个部分组成。帧的数据部分是从网络层传送到数据链路层的IP数据报,为了提高帧的传输效率,应当使数据部分的长度尽...
  • 数据链路层的成帧方法

    万次阅读 多人点赞 2018-01-09 13:15:54
    之前说过,数据链路层一很重要的功能就是成帧和拆帧,因为帧是数据链路层的一单元,数据链路层是对于帧进行处理的。那么这里就具体讲一讲数据链路层是怎么成帧的。  首先我们应该想想成帧所涉及的问题。第一...
  • 数据链路层的作用

    千次阅读 2020-02-04 20:25:36
    为达到这一目的,数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块(在数据链路层中将这种数据块称为帧,帧是数据链路层的传送单位);如何控制帧在物理信道上的传输,包括如何处理传输差错,...
  • 数据链路层的差错控制ARQ

    千次阅读 2018-01-09 15:27:13
     差错控制时链路层非常重要的功能,链路层需要在不太可靠的物理层来尽量实现可靠的链路层传输,靠的就是差错控制。所谓差错控制,就是对传输的数据信息进行错误检测,并加以恰当的处理。这其中就包含了多方面...
  • 数据链路层的流量控制

    万次阅读 2018-01-09 13:52:54
    数据链路层的协议一很重要的功能就是进行流量控制,那么链路层是怎么进行流量控制的呢?  首先什么是流量控制?为什么要进行流量控制?  我们看下面链路的一跳。发送发给接受方发送数据,如果发送方每...
  • MAC层是数据链路层的两子层之一。 MAC层的硬件地址 在局域网中,硬件地址又称为物理地址,或 MAC 地址。802 标准所说的“地址”严格地讲应当是每一站的“名字”或标识符。但鉴于大家都早已习惯了将这种 48 位...
  • 15、第数据链路层习题及参考答案

    万次阅读 多人点赞 2018-12-23 19:46:10
    如果数据链路协议没有提供错误控制,试问,该报文平均需要发送多少次才能完整地到达接收方? 答:一次发送成功的概率是0.810=0.107,所以大约需要10次。 2、数据链路协议使用了下面的字符编码:A:01000111 B:...
  • 计算机网络原理实验实验:分析数据链路层帧结构 一、实验名称 分析数据链路层帧结构 二、实验目的: 掌握使用Wireshark分析俘获的踪迹文件的基本技能; 深刻理解Ethernet帧结构。 深刻理解IEEE 802.11帧结构。...
  • 数据链路层的基本概念

    千次阅读 2018-05-30 16:43:27
    1、链路与数据链路的区别链路是从一节点到相邻节点的一段物理线路,中间没有任何其他的交换节点。数据链路是除了一条物理线路之外,还必须有一些必要的通信协议来控制这些数据的传输。也就是说数据链路等于链路...
  • 计算机网络的数据链路层与网络层

    千次阅读 2019-05-05 21:36:00
    数据链路 数据链路使用的主要两种信道:点对点信道,广播信道,分别使用点对点协议ppp以及CSMA/CD协议 一、使用点对点信道的数据链路 ...3、 数据链路协议解决的三个基本问题:封装成帧,透明...
  • 如果数据链路协议没有提供错误控制,试问,该报文平均需要发送多少次才能完整地到达接收方? 答:一次发送成功的概率是0.810=0.107,所以大约需要10次。 2、数据链路协议使用了下面的字符编码:A:01000111 B:...
  • 滑动窗口:数据链路层与传输层

    千次阅读 2020-03-28 21:49:15
    文章目录1 数据链路的滑动窗口1.1 连续ARQ协议1.2 SR协议(选择重传)1.3 GBN(回退N帧)2 TCP滑动窗口TCP滑动窗口定义TCP滑动窗口的大小TCP滑动窗口工作过程模拟TCP滑动过程 滑动窗口既用于数据链路,又用于...
  • 数据链路知识点总结 数据链路...数据链路把实现控制数据传输的通信协议的硬件和软件都加到链路上 构成的也称逻辑链路 2数据链路协议的基本传输单元帧 3数据链路协议解决的三个基本问题封装成帧透明传输差错控
  • 数据链路层传播相关时间计算

    万次阅读 多人点赞 2016-09-15 21:11:03
    一般这种题目会让我感觉很是煎熬,不知道怎么算。终于打通这类题目,总结到这里。先看这类题目的常见表述:如图所示,图...本篇文章会说到不忽略也不影响宏观的数据传递时间,只在最后一分组稍有影响。根据拓扑图,求
  • 数据链路三个基本问题

    千次阅读 2015-11-24 17:47:02
    本文主要介绍数据链路层传输数据需要注意的最基本的三个问题  当我们需要传输数据的时候,我们应该这考虑:首先,将数据封装成帧(帧是数据链路层的基本单位),考虑去怎么封装,才能让接受端识别一个完整的帧,...
  • 链路层数据帧结构分析

    千次阅读 2017-11-26 18:31:49
    链路层数据帧结构
  • wifi物理层数据链路层的直观理解

    千次阅读 2018-03-24 18:35:50
     1 wifi信号调制Wifi用的是无线信号,通过电磁波在周围传播,他一般是使用大名鼎鼎的802.11系列标准的技术,这标准对网络中物理数据链路(部分)做了详细的规定,第三层之上跟以太网,一模一样,这一点可以...
  • 数据链路层的几种协议

    千次阅读 2016-09-14 16:25:49
    网络通信分为学习研究的方便分为5,即:物理数据链路、网络、传输、应用。 在数据链路主要是负责传输数据,有很多种协议,用的最多的是局域网中的以太网协议,和广域网中的PPP协议,HDLC协议。 ...
  • 而MAC地址专注于数据链路,将一个数据帧从一节点传送到相同链路的另一节点。定位网络中的计算机的位置,最常用的有域名地址、Ip地址、MAC地址种方式,它们分别对应于OSI模型中的应用、网络数据链接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,822
精华内容 46,728
关键字:

数据链路层的三个问题