计算机网络-----数据链路层
Posted 胜天半月子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络-----数据链路层相关的知识,希望对你有一定的参考价值。
文章目录
概述
- 数据流动
主机H1将待发送的数据逐层封装,通过物理层将构成数据包的各比特装换为电信号发送到传输媒体。数据包进入路由器后,由下往上逐层解封到网络层。路由器根据数据包的目的网络地址和自身转发表确定数据包的转发端口。然后从网络层向下逐层封装数据包并通过物理层将数据包发送到传输媒体。数据包最终达到主机H2时,还要由下往上逐层解封,最终解封出主机H1所发送的数据。
从数据链路层上来看,从主机H1到主机H2可以看成是在4段不同的链路上的通信组成的。
- 链路
就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
要在链路上传输数据,仅需链路还不够,还需要一些通信协议来控制这些数据的传输
- 数据链路
是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路上传输的数据包称为“帧”。数据链路层以帧为单位传输和处理数据。
数据链路层的三个重要问题“
- 封装成帧
- 差错检测
- 可靠传输
封装成帧
两台主机通过一段链路互联,两台主机都会对所发送或接收的数据包进行五个层次的封装或解封。
- 具体过程
发送方将发送的数据通过应用层封装称为应用协议数据单元,然后交付给运输层,运输层为其添加运输层协议首部,使之成为运输层协议数据单元,然后交付给网络层。网络层为其添加网络层协议首部,使之称为网络层协议数据单元,然后交付给数据链路层,数据链路层给网路曾协议数据单元添加一个数据链路层协议首部,简称为帧头。还要给其添加一个帧尾,我们将数据链路层给网络层交付的协议数据单元,添加帧头和帧尾的操作称为封装成帧。,添加帧头和帧尾的目的都是为了在链路上以帧为单元来传送数据。
差错检测
发送方将封装好的帧通过物理层发送到传输媒体。帧在传输过程中遭遇干扰后可能出现误码。
也就是比特0可能变成了比特1,反之亦然。
- 接收方主机如何判断是否出现误码?
这可以通过检错码来发现。
发送方在发送帧之前,基于带发送的数据和检测苏纳法计算出检错码,并将其封装在帧尾。接收方主机接受到帧后,通过检错码和检错算法,就可以判断出帧在传输过程中是否出现了误码。
可靠传输
接收方主机在接收到由误码的帧后,是不会接收该帧的会将其丢弃
- 如果数据链路层向其上层提供的是不可靠服务,丢弃就是丢弃,不会再有更多措施。
- 如果数据链路层向其上层提供的是可靠服务,需要其他措施确保接收方主机重新收到被丢弃的帧的正确副本。
封装成帧,差错检测、可靠传输这三个问题使用的是点对点信道的数据链路层
广播信道(共享式局域网)
不止包含封装成帧,差错检测、可靠传输这三个问题,还有其他需要解决的问题。
编址问题
主机A、B、C、D、E通过一根总线互联。主机A要给主机C发送帧,即帧的信号会通过总线传输到总线上的其他各主机。
主机B、D、E是如何知道所收到的帧不是发送给他们的,同样主机C如何知道所接收到的帧是传送给它的?
编址,将帧的目的地址添加到帧中一起传输。
当总线上多台主机同时使用总线进行传输帧时,传输信号就会发生碰撞。这是采用广播信道的共享式局域网不可避免的。
以太网采用方式 CSMA/CD:载波监听多点接入/碰撞检测
交换式局域网
无线局域网
使用共享信道技术
例如 802.11局域网采用的媒体接入控制协议CSMA/CA:载波监听多点接入/碰撞避免
- 重点问题总结
后续篇幅会逐一介绍
一、封装成帧
- 封装成帧
是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头帧尾包含重要的控制信息
封装成帧后,还要通过物理层将构成帧的各比特转换成电信号发送到传输媒体。
- 接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
实际上,帧头和帧尾的作用之一就是帧定界。
透明传输
是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
帧定界标志也就是一个特殊数值。
- 情况1
如果在上层协议数据单元中恰好也包含了这个特定数值,接收方就无法接收该帧。导致接收方误认为该帧结束了。如果数据链路层不采取其他措施来避免接收方对帧是否结束的误判,就不能称为透明传输。
- 结论
数据链路层对上层交付的协议数据的单元有限制,其内容不能包含帧定界符。显然这样的数据链路层没有什么使用价值。
- 解决
发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符就在前面插入一个转义字符。
- 情况2
上层交付给数据链路层的协议数据的单元中即包含了界定字符又包含了转义字符
- 解决
发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符就在前面插入一个转义字符。
转义字符:一种特殊的控制字符,其长度为1字节,十进制值为27.
以上是面向字节的物理链路使用字节填充(或字符填充)方式实现透明传输
同理,面向比特的物理链路使用比特填充方法实现透明传输
- 零比特填充法
接收方从物理层交付的比特流中提取帧时,将帧的数据部分中的每5个连续的比特1后面的那个比特0剔除即可。
练习题
- 总结
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
帧的数据部分的长度应远大于帧头和帧尾的长度,这样才能提高帧的传输效率。(仅从数据链路层来看,帧的数据部分才是真正要传输的数据,帧头和帧尾是为了实现数据链路层的功能而额外添加的)
二、差错检测
- 比特差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER。
- 接收方的数据链路层如何知道是否出现差错?
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
奇偶校验
- 举例
- 总结
如果又奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
如果偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检);
一般不采用该方法:漏检率高
循环冗余检验CRC⭐
- 发送方处理
- 接收方处理
练习
- 练习1
- 构造被除数
- 构造除数
- 做“除法”
- 异或运算
- 1:够除 0:不够除
- 检查余数
- 练习2
三、可靠传输
-
基本概念
-
不可靠传输服务
-
可靠传输服务
-
若通知帧也出现了误码,怎么办?
此处,将帧的称呼改成了分组。这意味着传输差错不仅仅局限于数据链路层的比特差错。
- 举例
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层而是出现在其上层。
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
- 可靠传输机制
三种可靠传输机制的基本原理不仅限于数据链路层,可以应用到计算机网络体系结构的各层协议中。
- 停止-等待协议SW
- 回退N帧协议GBN
- 选择重传协议SR
停止-等待协议SW⭐
如下图,收发双方基于互联网进行通信,而不是点对点的通信线路。纵坐标为时间。发送方给接收方发送数据分组,接收方收到后进行差错检测,若没有误码,则接收该数据分组,并给发送方发送确认分组,简称ACK。发送方接受到所发送数据分组的确认分组后,才能发送下一个数据分组。
假设这个数据分组在传输过程中出现了误码,接收方收到后对其进行差错检测,发现了误码,则丢弃该数据分组,并给发送方发送否认分组,简称为NAK。发送发收到对所发送数据分组的否认分组后,就知道了之前自己所发送的数据分组出现了差错而被接收方拒绝,于是立刻重传该数据分组。
因此,发送方每发送完一个数据分组后,并不能立刻将该数据分组从缓存中删除,只有收到针对该数据分组的确认分组后,才能将其从缓存中删除。
这样就实现了发送方发送什么,接收方就接收什么,也就实现了所谓的可靠传输!
实际情况远比我们想象的复杂!!!
- 情况1
发送方给接收方发送数据分组,然而该数据分组在传输过程中丢失了,【需要说明的而是,对于数据链路层点对点信道而言,不太容易出现这种情况。但对于多个网络通过多个路由器互联的复杂互联网环境而言,这种情况经常出现。】
- 情况2
接收方发送的确认分组丢失,这就会触发超市重传机制。假设重传的数据分组也正确到达了接收方。
接收方如何判断该数据分组是否是一个重复的分组呢?
这样接收方根据数据分组的信号,就可以判断出该数据分组是否是重复的。接收方丢弃重复的数据分组,并给发送方发送针对该数据分组的确认分组,以免发送方对该数据分组的再次超时重传。
我们通过确认分组丢失的情况,引出了数据分组编号的问题。那确认分组是否需要编号?
- 情况3
发送方发送0号数据分组,接收方正确接收后给发送方发送确认分组。由于某些原因,该确认分组迟到了。这必然会导致发送方对0号数据分组的超时重传。在重传0号数据分组的传输过程中,发送方收到了迟到的确认分组,于是发送1号数据分组。接收方收到重传的0号数据分组后,发现这是一个重复的数据分组,将其丢弃。并针对该丢弃的0号数据分组给发送方发送确认分组。以免发送方再次超时重传该数据分组。
现在问题来了,我们非常清楚的看到,这是一个对0号数据分组的重复确认。但是发送方又如何知道呢?
如果不采取措施。发送方会误认为这是对1号数据分组的确认。如果对确认分组也进行编号,就可以使发送方避免这种误判。
发送方通过确认分组的序号,知道这是一个重复的确认分组,忽略即可,接收方正确接收1号数据分组后,给发送方发送针对该数据分组的确认分组。
我们用给确认分组编号的方法解决了确认迟到所导致的重复确认的问题。
说明:对于数据链路层的点对点信道,往返时间比较固定,不会出现确认迟到的情况。因此,如果只在数据链路层实现停止-等待协议,可以不用给确认分组编号
- 总结
信道利用率
TD:发送方发送数据分组所耗费的发送时延
RTT:收发双方之间的往返时间
TA:接收方发送确认分组所耗费的发送时延
图中忽略了接收方对数据分组的处理时延和发生方对确认分组的处理时延
Ta一般远小于Td,可以忽略。
当RTT远大于Td时,信道利用率会非常低。
- 练习题
回退N帧协议GBN
该协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。
- 举例
发送方要维持一个发送窗口,序号落在发送窗口内的数据分组可被连续发送,而不必等收到接收方的相应确认分组后再发送。
当Wt=1时,为停止–等待协议
无差错情况
累计确认
从本例可以看出,使用累计确认的其中一个优点,即使确认分组丢失,发送方也可能不必重传。
例如,本例中ACK1丢失了,但并没有造成1号数据分组的超时重传。
使用累计确认还有其他好处。如减少接收方的开销,减少对网络资源的占用。
缺点:不能像发送方及时反映出接收方已经正确接收的数据分组信息。
有差错情况
- 发送窗口Wt超过取值 范围
- 总结
练习题
选择重传协议SR
- 注意
选择重传协议为了使发送方重传出现差错的分组,接收方不能再采用累计确认,而需要对每一个正确接收到的分组进行逐一确认!
- 举例
发送方将序号落在发送窗口内的4个数据分组依次连续发送出去。它们经过互联网的传输依次到达接收方,但其中的2号数据分组丢失了。只要序号落入接收窗口内且无误码的数据分组,接收方都会接收。接收方接收0号、1号数据分组,并发送0号、1号确认分组,接收窗口向前滑动两个位置,这样4和5这两个新的序号落入接收窗口。接收方接收3号数据分组,并发送3号确认分组,但接收窗口不能向前滑动,因为3号数据分组是未按序到达的数据分组。这些确认分组经过互联网的传输陆续到达发送方。发送方每按序收到一个确认分组,发送窗口就向前滑动一个位置。
发送方接收0号、1号确认分组,发送窗口向前滑动两个位置,这样就有4和5两个新的序号落入发送窗口。发送方将序号落入发送窗口的4号和5号数据分组发送出去。发送方现在可以将已经收到确认的0号和1号数据分组从发送缓存中删除了。而接收方则可以择机将接受到的0号和1号数据分组交付上层处理。发送方接收3号数据分组,但发送窗口不能向前滑动。因为这是一个未按序到达的确认分组,发送方还未收到它之前的2号确认分组。需要记录3号数据分组已经收到确认,这样数据分组就不会超时重发。
4号和5号数据分组到达接收方,接收方接收它们,并发送4号和5号确认分组,但接收窗口不能向前滑动,因为它们是未按序到达的数据分组,接收方还未收到它们之前的2号数据分组。
- Wr和Wt的尺寸问题
发送窗口和接收窗口的尺寸出现超过取值范围的情况
- 总结
练习题
四、点对点协议PPP
点对点协议PPP是目前使用最广泛的点对点数据链路层协议。
-
PPP协议帧格式
-
PPP协议解决透明传输问题
-
- 字节填充法:
- 字节填充法:
-
- 比特填充法:
- 比特填充法:
-
- 差错检测
- 差错检测
PPP协议工作状态
- 总结
以上是关于计算机网络-----数据链路层的主要内容,如果未能解决你的问题,请参考以下文章
计算机网络(谢希仁 第七版) 第三章(数据链路层)-- 3.1 使用点对点信道的数据链路层(数据链路层概述 & 数据链路和帧 & 三个基本问题(封装成帧透明传输差错控制))