您的位置:首页 > 理论基础

计算机网络——数据链路层

2019-07-13 16:10 260 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u011700339/article/details/95743066

数据链路层简介

数据链路层使用的信道主要有两种

  • 点对点信道(PPP 协议)
  • 广播信道 (CSMA/CD 协议)
    数据链路层主要研究的是在同一个局域网中,分组怎样从一个主机传输到另一个主机(不经过路由器);
    网络层主要讨论的问题是分组怎样从一个网络通过路由器转发到另一个网络;
    数据链路层的三个基本问题:封装成帧,透明传输和差错检测
    数据链路层涉及到设备:适配器,转发器,集线器,网桥,以太网交换机(二层交换机2)

点对点信道的数据链路层

数据链路和帧

点对点信道数据链路层的协议数据单元(PDU):

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

三个基本问题

封装成帧

在数据链路层,一个帧的帧长等于数据部分长度加上首部和尾部的长度,首部和尾部最重要的作用就是帧定界, 首部和尾部还包含一些控制信息。每一种链路层协议都规定了所能传输的帧的数据部分长度的上限——最大传输单元MTU(Maximum Transfer Unit)。 为了提高帧的传输效率,应该使数据部分的长度尽可能大于首部和尾部的长度之和。

透明传输

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

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

但是当数据部分是二进制数据时,数据中就可能包含帧定界符,数据链路层就会错误的判断帧定界。也即出现和帧定界符一样的二进制数据时,就不能做到透明传输了,那么如何解决这个问题呢?

在数据链路层透明传输数据表示无论什么样的比特组合的数据都能够通过这个数据链路层。“透明” 他表示某个实际存在的事物看起来好像不存在一样,透明传输可以简单的理解为数据链路层好像不存在一样,对于传输的数据是完全透明的,不妨碍任何数据的传输。

为了解决透明传输的问题,通常采用字节填充或字符填充方法,即: 发送端的数据链路层在数据中出现的控制字符(帧定界字符,SOH,EOT等)前面插入一个转义字符"ESC", 而在接收端的数据链路层再删除这个转义字符

用字节填充方法解决透明传输问题

差错检测

目前在数据链路层广泛使用了循环冗余校验CRC的检错技术,在数据链路层是比特级的检错技术。

使用CRC 校验的例子

**在数据链路层仅仅使用CRC 差错检测技术(没有纠错技术),**只能做到对帧的无差错接受,即:“凡是接收端数据链路层接受的帧,我们都以非常接近于1的概率认为这些帧在传输的过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。即我们可以简单的理解为:凡是接收端数据链路层接受的帧均无差错。

数据链路层并不能保证向网络层提供**“可靠传输”**服务。所谓“可靠传输”就是:数据链路层的发送端发送什么,在接收端就接收到什么。传输差错可以分为两大类:

  • 一类就是上述所说的最基本的比特差错
  • 另一类就是帧丢失,帧重复和帧失序

“无比特差错”与“无传输差错”是两个不同的概念,在数据链路层使用CRC校验,能够实现无比特差错传输,但这还不是可靠传输。

通过增加 帧编号,确认和重传机制能偶使得数据链路层向上层提供可靠传输服务。这个方法曾在历史上起到很好的作用。但现在的通信链路的质量已经大大提高了,由于通信链路质量不好而引起的差错高概率已大大降低了,因此现在的因特网采用区别对待的方法:

  • 对于通信质量好的有线链路,数据链路层不使用确认和重传机制,即数据链路层不向上层提高可靠传输服务;
  • 对于通信质量较差的无线链路,数据链路层采用确认和重传机制,即数据链路层向上层提高可靠传输服务;

PPP 协议

PPP 协议是IETF在1992年制定的,经过1993和1994年的修订,现在已成为因特网正式标准(RFC 1661),PPP协议最早用于计算机和ISP通信。PPP协议不需要进行纠错,不需要设置序号,不需要进行流量控制,不支持多点线路,只支持全双工链路。

PPP协议应该满足的要求

  • 简单
  • 封装成帧
  • 透明传输
  • 支持多种网络层协议(IP,IPX等)
  • 支持多种类型链路(并行,串行,高速,低速,同步,异步等)
  • 差错检测
  • 检测链路连接状态
  • 最大传输单元
  • 支持网络层地址协商
  • 支持数据压缩协商

PPP 协议的帧格式

PPP帧的格式

F: 0x7E ,标识字段,标识一个帧的开始或结束
A: 0xFF, 地址字段,暂时没有定义
C: 0x03, 控制字段,暂时没有定义
协议字段:2bytes, 0x0021 表示PPP的信息字段就是IP数据报,0xC021表示PPP的信息字段是链路控制协议LCP的数据,0x8021表示PPP的信息字段是网络层的控制数据
信息字段:MTU=1500 bytes
FCS: 2 bytes,帧校验序列

PPP协议采用字节填充或零比特填充来实现透明传输。

广播信道的数据链路层

局域网的数据链路层

为了使数据链路层能够更好的适应多种局域网标准(802.4令牌总线网,802.4令牌环网,DIX Ethernet V2等)。IEEE 802标准委员会把数据链路层分为了两个子层,即:逻辑链路控制(LLC,Logic Link Control)子层和媒体接入控制(Media Access Control)子层。与媒体接入有关的都放在MAC层,LLC子层则与传输媒体无关。

局域网对LLC 子层是透明的

随着局域网的发展,DIX Ethernet V2(最早是一种基带总线局域网)很快发展为TCP/IP体系中经常使用的局域网,而不是IEEE 802.3中定义的局域网标准。LLC子层的作用已经消失,所以后面介绍中我们主要关注MAC子层。

CSMA/CD 协议

为了通信方便以太网采用了以下两种措施:

  • 采用较为灵活的无连接的工作方式, 即不必先建立连接就可以发送数据。适配器对发送的数据帧不进行编号,也不要求对方进行确认。以太网提供的服务是尽最大努力交付,即不可靠的交付。以太网采用采用最简单的随机接入,并采用CSMA/CD协议来解决冲突问题。
  • 以太网发送的数据都使用曼彻斯特编码的信号。

CSMA/CD 协议(载波监听,多点接入,碰撞检测):

  • 多点接入: 总线型网络。
  • 载波监听:载波监听就是检测信道(这里只是借用一下“载波”这个词,总线上并没有什么载波)。 不管在发送前,还是发送中,每个站都必须不停的检测信道。 发送前检测信道是为了获得发送权,发送中 检测信道是为了及时发现有没有其他的站的发送和本站发送的碰撞,这就称为“碰撞检测”。
  • 碰撞检测: 也即“边发送边监听”。
传播时延对载波监听的影响

使用广播信道的以太网

使用集线器的星型拓扑以太网

集线器的一些特点:

  • 使用集线器的局域网在物理上是一个星型网,但由于集线器使用电子器件来模拟实际电缆的工作,整个系统仍然像一个传统以太网那样运行。也就是说,使用集线器的以太网在逻辑上仍然是一个总线网,使用的还是CSMA/CD协议,在同一时刻只允许同一个站发送数据。
  • 一个集线器有多个接口,是一个多接口转发器。
  • 集线器工作在物理层,它的每个接口仅仅是简单的转发比特,不进行碰撞检测。若有多个接口同时收到信号,即发生碰撞,那么所有的接口都将收到不正确的帧。

以太网的信道利用率

以太网的MAC 层

MAC层硬件地址

MAC层的硬件地址是一个固化在适配器的ROM中的48位全球地址。
发往本站的帧可以分为以下三种:

  • 单播帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同。
  • 广播帧(一对全体),即发送给本局域网上所有站点的帧(全1 的地址)。
  • 多播帧(一对多),即发送给本局域网上一部分站点的帧。

MAC 帧的格式

常用的MAC帧的格式有两种:一种是DIX Ethernet V2标准,另一种是802.3的标准。这里介绍DIX Ethernet V2标准的MAC 帧。图中假定网络层使用的协议是IP协议。

以太网V2标准的MAC帧格式
  • 目的地址: 6字节,目的主机的MAC地址
  • 源地址: 6字节,源主机的MAC地址
  • 类型: 2字节,标识上一层使用的是什么协议,当该字段是0x0800时表示网络层使用的IP协议,当该字段是0x8137表示网络层使用的Novell IPX协议
  • 数据字段:46~1500 字节。46=64-18, 64表示MAC帧的最小长度,18=6+6+2+4 表示MAC帧首部和尾部的字节总数。MAC帧的有效长度为64–1518字节
  • FCS: 4字节,采用CRC校验

问题1:在V2的MAC帧格式中并没有帧长度这样一个字段,那么MAC子层又怎样知道从接收到的以太网帧中取出多少字节的数据交付给上一层协议呢?
以太网传输的数据都是采用曼侧斯特编码,每个码元(不论是1还是0)的正中间一定有一次高低电压的转换。当发送方把一个以太网帧发送结束后,就不在发送其他码元了,因此发送方的适配器的接口电压也就不再变化了,这样接收方就可以很容易的找到以太网帧的结束位置。在这个位置往前倒数4个字节就能确定数据字段的结束位置。

问题2:当数据字段的长度小于46字节时,MAC子层需要在数据字段后面进行填充保证MAC帧不小于64字节。那么,在有填充字段的情况下,MAC子层把带有填充字节的数据字段交给上层后,上层协议是如何确定填充字节的长度的呢?
上层协议必须具有识别有效数据字段长度的功能。例如,IP数据报的首部就有一个总长度的字段,表示IP数据报的总字节数,因此总长度加上填充字段的长度就应该等于MAC帧数据字段的长度。

从上图可以看出在传输媒体上实际传输的要比MAC帧还多8个字节。这是因为当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧最前面的若干位就无法接收。为了使得接收端迅速实现位同步,从MAC层向下传到物理层时,还要在帧的前面插入8个字节(7字节前导码 + 1字节帧开始定界符10101011),它的作用是使得接收端的适配器在接收MAC帧时能够迅速调整其时钟频率,使它和发送端的时钟同步,也即实现位同步.MAC帧的FCS校验不包含前导码和帧开始定界符。

在以太网上传输数据是以帧为单位传输的,在以太网传输帧时,各帧之间还必须有一定的间隙。因此接收端只要找到帧开始定界符,其后面连续到达的比特流就属于同一个MAC帧。 可见以太网不需要帧结束定界符,也不要使用字节插入来保证透明传输。

扩展的以太网

高速以太网

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: