一、数据链路层概述
一、基本概念
实际上的数据传输需要在每个结点中通过特定的各层,但是在单独考虑数据链路层的内容时,我们只需要将数据链路层想象成水平传输的即可,数据链路层完成它自己部分的功能。数据链路层将从网络层下来的数据协议单元封装成帧,实现自己的功能。
数据链路层可以为网络层提供的服务有:
①无确认的无连接服务②有确认的无连接服务③有确认的面向连接的服务
数据链路层是解决相邻两个结点(主机、交换机、路由器)之间的数据通信问题。
数据链路就是相邻两个结点之间的物理线路(链路)加上实现通信协议的硬件和软件构成的逻辑链路。
二、三个重要问题
理解:以以太网MAC帧为例,数据链路层为上层交付的协议数据单元封装成帧(添加帧头和帧尾),帧尾包含检错码FCS,当接收方可以通过FCS判断接受到的帧是否误码(差错检测)。
一、封装成帧
将网络层交付的协议数据单元,添加帧头和帧尾。数据链路层以帧为单元传输数据。
一般在帧头和帧尾添加定界符,表示帧的开始和结束。
二、差错检测
发送方会用待发送的数据和检错算法计算出检错码,放入帧尾。
接收方根据帧尾中的检错码就可以检测帧中是否有误码。
三、可靠传输
如果数据链路层提供的是不可靠服务,那么检测出差错的帧直接被丢弃。
如果提供的是可靠服务,检测出差错的帧丢弃后还能再重新收到这个帧的正确副本。
二、数据链路层功能
一、封装成帧
①帧头和帧尾的作用之一是帧定界。
②透明传输
也即是数据链路层可以传输任何数据内容,它自己的帧头帧尾不会对数据内容产生限制。
(1)面向字节的物理链路:
字节填充法:添加转义字符。
(2)面向比特的物理链路:
零比特填充法:五1 ,一0。
(HDLC协议)
二、差错检测
①CRC循环冗余校验
这里的除法并不是除法,这里是进行异或运算,如果位数够就商上1,不够就商上0。
检错码只能检测错误,没有纠错功能。(计算机网络很少纠错)
三、可靠传输(实现流量控制和差错控制)
可靠传输并不是仅数据链路层中有的,而且也并非需要数据链路层实现。
①停等协议
信道利用率是指,传输并确认整个需要传输的数据,真正发送数据的时间与整个过程的比值。
②回退N帧协议
发送窗口1<Wt<=2^n-1
接收窗口Wr=1
(1)累计确认
(2)超时重传:若发送方已经发送的某个帧超时,那么发送窗口内已经发送的帧要全部重传。
(3)接收方只接收窗口内的帧,对于窗口外的帧,没接收一个就发送一个最近的ACK
(4)发送方接收到已经确认的ACK,会根据具体实现来选择是否提前进行“超时重传”,即提前将已经发送的帧全部重传。
(5)移动窗口并不一定立马进行传帧。
③选择重传协议SR
发送窗口1<Wt<=2^(n-1)
接收窗口1<Wr1<=Wt
选择重传是对回退N帧协议的改进。
(1)超时重传,只重传超时的即可。<回退N帧全都重传是因为接收方只需要一个,这一个是谁呢,很难评,所以干脆全都发了算了,但是选择重传可以乱序收,只需要传超时的这个就行了>
(2)乱序接收,每接收一个就发送一个
【SR只需要管住自己的那一个就行了,我接受了我就ACK,我超时了我就重传这个。
但是回退N帧不一样,接收方只要一个,不然就不行,那么发送方一次重传全都得传。】
【窗口大小的限制,都是看是否会出现问题,比如SR中的发送窗口必须是小于等于编号数的一半,因为超过一半的话,要是这一半接收方已经接受,准备接受下次的,下次的必然会包含之前已有的编号,而此时ACK失效了,那么就超时重传,问题出现了,之前已有的编号这次又有了。】
四、媒体接入控制
共享信道的问题。
七、总结
数据链路层学习时,是学习了一个整体框架,如数据链路层的封装成帧,差错检测,透明传输,可靠传输等,但是具体数据链路层的哪个协议用的是什么方法,对上层是否可靠传输等,因协议而定!
一、数据链路层协议总结
广域网的数据链路层协议:HDLC协议、PPP协议
以太网(局域网)的数据链路层协议:无名=-=
<广域网和局域网就是分布范围不一样而已!广域网可以包含若干个局域网>
一、以太网(局域网)
以太网采用曼彻斯特编码,接入控制协议CSMA/CD
MAC帧格式:
没有帧定界标志,但是物理层会加入前导码,前导码中有帧开始定界符,但是以太网MAC帧不需要结束定界符,因为它规定了一个帧间间隔。
二、PPP协议(广域网)
点对点PPP协议是目前使用最广泛的点对点数据链路层协议。不向上提供可靠传输服务!
①帧格式:
②透明传输的方法:
以吉大的PPT来看,PPP协议是面向字节的链路协议,采用字节填充法
③差错检测:
CRC循环冗余
八、王道习题补充内容
(1)流量控制限制的是发送方的数据流量
(2)在封装成帧的题目中,给出传送的字符,那么这些字符就是当做需要传送的数据,我们对其封装成帧发送,添头添尾增加定界符,然后使用透明传输方法修改帧。
题中A、B、ESC、FLAG是需要传输的数据
我们在这个数据前后添加定界符flag
即最终为01111110 01000111 11100011 11100000 01111110 01111110。
字符填充法,在数据的每个转义字符和FLAG之前加入转义字符
01111110 01000111 11100011 11100000 11100000 11100000 01111110 01111110。
比特填充法:
01111110 01000111 110100011 111000000 011111010 01111110 (前两个0别忘了填)
(3)数据链路层是有纠错功能的,比如海明码
(4)回退N帧是累计确认。