Java教程

计算机网络-3-1-数据链路层基本概念

本文主要是介绍计算机网络-3-1-数据链路层基本概念,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据链路层使用的信道主要有一下两种类型

  1. 点对点信道

    • 这种信道使用一对一的点对点通信方式。
  2. 广播信道

    • 这种信道主要是用一对多的广播通信方式。
  3. 从整个互联网上来看,局域网中仍然属于数据链路层的范围。

  4. 本章最主要的知识点

    • 熟路链路层的点对点信道和广播信道的特点,以及这两种信道使用的协议PPP协议和CSMA/CD协议的特点

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

      • 封装成帧

      • 透明传输

      • 差错检测

    • 以太网MAC层的硬件地址

    • 适配器,转发器,集线器,网桥,以太网交换机的作用以及使用场合。

  5. 我们观察一下两台主机通过互联网进行通信时数据链路层所处的地位

    图3-1(a)表示主机H1通过电话线上网,中间经过三个路由器(R1,R2,R3)连接到远程主机H2,所经过的网络是多种的,如电话网,局域网,广域网等。当主机H1向主机H2发送数据时,从协议的层次上来看,数据流动如图3-2(b)所示,主机H1和主机H2都有完整的五层协议栈,单路由器在转发分组时使用的协议栈只有下面三层。数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳地址后,再下到物理层转发出去。当我们专注于研究数据链路层的问题时,我们可以这样研究

    H1的链路层->R1的链路层->R2的链路层->R3的链路层->H2的链路层。

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

  1. 链路指的是从一个结点到相邻结点的一段物理线路(有线或无线)

  2. 数据链路:当在一条线路上传输数据时,除了必须要有一条物理线路外,还必须要有一些必要的通信协议来控制数据的传输,若把实现这些协议的硬件和软件加到链路上。就构成了数据链路。现在最常用的就是网络适配器来实现这些协议。

  3. 点对点信道的数据链路层协议:帧

    • 数据链路层把把网络层交下来的数据构成发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。

    • 在网络层中,网络层协议数据单元就是IP数据报。

    • 数据链路层通信图

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

      *   结点A的数据链路层把网络层交下来的IP数据报文**添加首部和尾部**封装成帧。
      
      *   结点A把封装好的帧发送给结点B的数据链路层
      
      *   若结点B的数据链路层接收到的帧无差错则从接收到的帧**提取出IP数据报**上交给网络层;否则丢弃这个帧。
      
  4. 三个基本问题:封装成帧,透明传输,差错检测

    • 封装成帧

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

      • 如图就是一个添加帧首和帧尾封装成帧

      • 我们知道,分组交换的的一个重要概念就是:所有在互联网上传送的数据都是以IP数据报文为传送单位,网络层的IP数据报传送到数据链路层就成为了帧的数据部分。在帧的数据部分的前部和后部分别加上首部和尾部,就构成了一个完整的帧。这样的帧就是数据链路层的数据传送单元。

      • 一个帧的长度等于数据部分的长度+帧首+帧尾的长度,首部和尾部的重要作用就是帧定界(确定帧的界限)。

      • 在发送帧的时候,是从帧的首部开始送的。各种数量居链路层协议都要对帧首部和帧尾部的格式都有明确的规定。为了提高帧的传输效率,应该使帧的数据部分尽可能的大于帧的首部和尾部的长度。但是呢,每一种数据链路层协议都规定了所能传送的帧的数据部分长度上限------最大传输单元MTU。如图给出了MTU与帧的数据部分和帧的首部和尾部的关系。

      • 帧首部使用SOH(start of head)十六进制编码01作为帧的开始控制字符,帧尾部使用EOT(end of transmission)十六进制编码04作为帧的结束控制字符。

    • 透明传输

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

      • 当我们不管在键盘上输入什么字符都可以放单帧上传输,因此这样的传输就是透明传输。

      • 但是当数据并不是键盘上普通的ASCII码时候,而是例如像二进制代码或者图像,音乐等数据流时,情况就有可能变得不一样,如果数据中的某个字节的二进制比特刚好和帧定界符的控制字符SOH(01)或者EOS(04)重合,如图数据链路层可能会错误的找到帧界定符。这样的错误传输情况显然并不是透明传输。

      • 为了解决透明传输问题,就必须设法使数据中可能出现的控制字符SOH,EOT在接收端不被解释为控制字符,具体的方法是:发送端的数据链路层如果在数据传输中出现SOH或者EOT,就在前面插入一个转义字符ESC(十六进制编码为1B),而且在接收端删除这个转义字符,这样的方法称之为字节填充或者是字符填充。如图所示

  • 差错检测
    * 现实中的通信链路都是不理想的。也就是说,比特在传输的过程当中,可能1会变成0,0或者变成1,这就叫做比特差错
    * 在一段时间内,传输错误的比特总数占传输所有比特总数的比值,称之为误码率
    * 因此呢,在计算机网络传输数据的时候,必须采用各种校验,在数据链路层广泛的采用了CRC循环冗余检验技术。
    * 在接收端对收到的每一帧经过CRC检验后,会有以下两种情况
    * 若得出余数为0,就判定这个帧没有出现差错,接受
    * 若得到余数不为0,则判断这个帧有差错(但是并不知道哪里错了),丢弃
    * 在数据链路层,发送端帧检测序列FCS的生成和接收端的CRC检验都是硬件完成的,因此处理速度很快并不会影响数据的传输。
    * 数据链路层不使用确认和重传机制,也就是不要求数据链路层向上册提供可靠服务,如果在数据链路层传输数据出现了错误,那么交给上层去解决,数据链路层都是不可靠的传输协议
这篇关于计算机网络-3-1-数据链路层基本概念的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!