数据链路层

数据链路层属于计算机网络中个的底层,数据链路层使用的信道主要有两种:

1.点对点信道  这种信道使用一对一的点对点通信方式。

2.广播信道  这种信道使用一对的光通信方式,因此过程比较复杂。

一、使用点对点信道的数据链路层

  数据链路和帧

  所谓链路就是指从一个节点到相邻节点的一段物理链路,而且中间没有任何的其它的交换结点。在进行数据通信时,两个计算机之间的通信路劲往往要经过许多这样的链路,可见链路只是一天路径的组成部分。

  数据链路  当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输,将实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方式是使用网络适配器,如拨号上网的拨号适配器,以及通过以太网上网使用的局域网适配器。一般的适配器都是包含数据链路层和物理层这两层的功能。

  数据链路层的协议数据单元是

  数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。在因特网中,网络层协议数据单元就是IP数据报,或者简称为数据报、分组或包。

  点对点信道的数据链路层在进行通信时主要的步骤如下:

  1.发送端的数据链路层把网络层交下来的IP数据报添加首部和尾部进行封装。

  2.发送端把封装好的帧发送给接收端的数据链路层。

  3.若接收端的数据链路层收到的帧无差错,则从收到的帧中提取IP数据报上交给上面网络层,否则丢弃这个帧。

  数据链路层不必考虑物理层如何实现比特传输的细节,我们还可以更简单的设想好像是沿着两个数据链路层之间的水平方向把帧直接发送给对方。

二、三个基本问题

  数据链路层协议有许多种,但是三个基本问题是共同的。这三个基本问题是:封装成帧,透明传输和差错检测。

  1.封装成帧

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

  所有在因特网上传送的数据都是以分组,即IP数据报作为基本传送单位的。网络层的IP数据报传送到数据链路层就称为帧的数据部分,在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。因此,帧长等于数据部分的长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界。此外,首部和尾部还包括许多必要的控制信息。在发送帧时,是从帧首部开始发送的,各种数据链路层协议都要对帧首部和尾部的格式有明确的规定。显然,为了提高帧的传输效率,应当是帧的数据部分远远大于首部和尾部的长度。而每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum TransferUnit)

  当数据时由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASCII码是7为编码,一共可以组成128种不同的ASCII码,其中可以打印的有95个,而不可打印的控制符有33个。控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另外一个控制字符是EOT(End Of Transmission)表示帧的结束。其中SOH和EOT都是控制字符的名称,他们是十六进制编码的01和04。

  2.透明传输

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

  为了解决透明问题,就必须设法是数据中的可能出现的控制字符SOH和EOT在接收端不被解释为控制字符。具体的方法是:在发送端的数据链路层在数据中出现的控制字符SOH和EOT的前面加上转义字符ESC,其十六进制编码是1B,而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字符填充或者字节填充。

  3.错检测

  通信的链路层都不会是理想的。这就是说,比特在传输中可能会产生差错:1可能变成0,而0有可能变成1,这就叫比特差错。比特差错是传输差错中的一种。在一段时间内,传输错误的比特占所传输比特总数的比特率称为误码率BER(Bit Per Rate)。误码率跟信噪比有很大的关系,如果设法提高信噪比,就可以是误码率减小。实际的通信链路并非理想的,它不可能使误码率下降到0。因此,为了保证数据传输的可靠性,在计算机网路传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC的检错技术。

  在数据链路层若仅仅使用循环冗余检测CRC差错检测技术,则只能做到对帧的无差错接收:即凡是接收端数据链路层接受的帧,我们都已分厂接近于1的概率认为这些帧在传输过程中都没有产生差错。接收端丢弃的帧虽然层收到了,但最终还是因为有差错而被丢弃,即没有接收。凡是接收端数据链路层接收的帧均无差错。

  在实际的数据传输过程中,还有另一类复杂的错误出现在数据链路层,那就是:帧丢失、帧重复、帧失序,以上三种情况都属于出现传输差错。

原文地址:https://www.cnblogs.com/dacuotecuo/p/3438188.html