@TOC
目录
一.链路,数据链路和帧
1.链路
2.数据链路
3.帧
二.数据链路层的三个重要问题
1.封装成帧和透明传输
1.1封装成帧
1.2透明传输
1.2.1字节填充
1.2.2比特填充
2.差错检测
2.1奇偶效验
2.2循环冗余校验
3.可靠传输
3.1基础概念
3.2可靠传输的实现机制————停止-等待协调SW
3.3回退n帧协议
3.3.1特点
3.3.2具体流程
3.3.3优点
3.3.4缺点
3.4选择重传协议
三.点对点协议
PPP的帧格式
PPP的透明传输
PPP帧的透明传输
PPP帧的差错检测
PPP的工作状态
链路是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
当在一条链路上传送数据时,出需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
帧是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。
(注:实体是指任何可发送或接收信号的硬件或软件进程
对等实体是指通信双方相同层次中的实体。)
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加帧头和帧尾使之成为帧。
帧的首部和尾部中包含有一些重要的控制信息。
接收方的数据链路层如何从物理层交付的比特流中提取出一个个帧?
答:帧头和帧尾的作用就是帧定界
上图是PPP协议帧的格式,在帧头和帧尾会有1B的标志。但是并不是所有的帧的首部和尾部都具有帧定界标志。如图:
以太网封装好MACz帧之后会交付给物理层,物理层会给帧添加8字节的前导码,然后转化成电信号传输出去,需要注意的是在这8字节的前导码中,前7个字节是前同步码,目的是为了使接收方的时钟同步,之后的1个字节位帧开始的定界符,表示其后面紧跟的就是MAC帧。因为以太网规定帧间间隔位96个比特时间,所以MAC帧不需要帧结束定界符。
为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
如图,发送方发送一个帧,但是在该帧的数据部分含有一串数据和帧定界符相同,为了避免接收方在接收数据时,将该串数据误认为时帧定界符,可以通过了两种方法来进行透明传输。
在使用面向字节的物理链路时,使用字节填充法来实现透明传输,在发送帧之前,应该在传输之前先对帧进行扫描,在数据载荷出现和帧定界符一致的数据时,通过转义字符(十六进制的值为1B)进行修饰,同时如果出现和转义字符相同的数据时,应该在该数据前面继续添加转义字符。
在使用面向比特的物理链路时,使用比特填充法来实现透明传输。比如当某个数据链路层协议采用8个比特构成的特定位串0111 1110作为帧定界符,那么发送方在发送帧之前,先就扫描帧的数据载荷一旦出现5个连续的比特1时就在其后添加比特0,这样就确保其不会包含帧定界符。
当接收方的数据链路层在把数据载荷向上交付给网络层之前,对数据进行扫描,每次出现5个连续的比特1时,就把其后面的一个0删除,从而还原原始的数据载荷。
实际的通信链路都不是理想的, 比特在传输中可能会产生差错(称为比特差错)。
即:比特1可能变成比特0
比特0可能变成比特1
奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数;
偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。
在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码。
在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检测出误码(漏检)。
很显然,奇偶校验这种方法太过局限性,所以很少见,在实际数据链路层广泛使用漏检率极低的循环冗余校验验错技术。
收发双方约定好一个生成多项式G(x);
发送方基于待发送的数据和生成多项式计算出差错检验测码(冗余码),将其添加到待传输数据的后面一起传输;
接收方通过生成多项式来计算收到的数据是否产生了误码。
举个简单的例子:
待发送数据为101001,生成多项式G(x) = x^3 + x^ 2 + 1,计算冗余码
第一步:构造被除数,待发送数据后面添加生成多项式最高次数个0,即101001000
第二步:构造除数,生成多项式各项系数构成的比特串作为除数,即1101
第三步:做“二进制模2除法”:相当于对应位进行逻辑异或运算
第四步:检验“余数”,余数的位数应与生成多项式最高次数相同,如果位数不够,则在余数前补0来凑足位数
接收到的信息为101101001,生成多项式为G(X)= X^3+ X^2+1,判断传输是否误码?
接收方与发送方计算的前三步都相同,但是第四步不同。
接收方的第四步:余数为0 , 可认为传输过程无误码
余数不为0,可认为传输过程产生了误码
注意:差错校验只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
使用差错检测技术,接收方的数据链路层就可检测出帧在传输过程中是否产生误码,接下来根据数据链路层向上层提供的服务类型,分为2种传输服务:
(1)不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
(2)可靠传输服务: 想办法实现发送端发送什么,接受端就收到什么
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
注:可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
停止等待协议的实现原理
(1)假如发送方数据在传输过程中出现误码时
(2)假如发送方数据未到达接收方(超时重传)
接收方收不到数据分组,就不会无缘无故地传输相应的ACK,如果不采取措施,发送方会一直处于等待接收方ACK的状态。
为了解决这个问题,发送方可以在发送完一个数据分组时就启动一个超时计时器,如果超时计时器到达设置的时间,但是未收到接收方的确认分组ACK,那么发送方会重传已发送过的数据分组
(3)接收方的确认分组信息丢失(确认丢失)
这里确认分组丢失,在超过超时计时器设立的时间时,发送方会重复发送该分组,但是接收方如何知道这个分组和之前接受的是否一样呢?这时候就得给数据分组进行编号,只需要一个比特来表示,这个分组和之前的分组是否相同就行了,序号只需要0和1。
(4)确认分组迟到
注意事项:
1. 使用超时重传机制后,就可以不使用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器超时前就尽快重传。
2.为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的特性,只需1个比特编序号即可,即序号0和序号1。
3.为了让发送方能够判断所收到的确认分组是否是重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样。
(1)数据链路层一般不会出现确认分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给确认分组编号。
4.给超时计时器设置的超时重传时间RTO应当仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT。
5.停止-等待协议属于自动请求重传协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
发送方需要维护一个发送窗口W_T ,在未收到接收方确认分组的情况下,发送方可将序号落入W_T内的所有数据分组连续发送出去采用n个比特给分组编序号,则W_T的取值范围是1 接收方需要维护一个接收窗口Wr,只有正确到达接收方(无误码)且序号落到Wr内的数据分组才能被接收方接收。 注:这个Wr的却只只能是1,这一点和停止等待协议一样。 接收方每正确收到一个序号落到接收方窗口的数据分组,就将接收窗口向前滑动一个位置,这样就有一个新的序号落到接收窗口,与此同时,接收方还要给发送方发送针对该数据分组的确认分组。 发送方每收到一个数据分组的确认分组就会让发送窗口向前滑动·一个位置,这样就会有新的序号进入发送窗口,序号进入发送窗口就可以进行发送。 在回退N帧协议中,发送方的发送窗口和接收方的接收窗口按照上述的规则不停地向前滑动,因此,这类协议就成为滑动窗口协议。 1. 减少向网络中注入确认分组的数量 2.即使确认分组丢失,也可能不必重传数据分组 因为回退N帧协议的接收方采用累积确认方法,接受方不必对收到的每一个数组分组都发送确认分组,而是在收到几个序号连续的数据分组后,对按需到达的最后一个数据分组发送确认分组。确认分组ACKn表明序号n和以前的数据都被正确接收。 不能向发送方及时准确地反应出接收方已正确接收的所有数据分组的数量 这就造成了一个很难受的问题,那就是当我传输的一串数组分组时,假如序号5的分组出现误码 ,那么将其舍弃,其他的数据分组和接收窗口内的数据不匹配,那么就会把这些分组全部舍弃,最后发送n个ACK5,请求重发, 一个数据分组的差错就可能引起大量数据分组的重传。 在信道质量较差(容易出现误码)的情况下,回退N帧协议的信道利用率并不比停止-等待协议的信道利用率高。 注意:发送窗口W_T的尺寸不能超过取值范围,一旦出错就很难判断。 发送方发送0到7号分组,接受方接收并发送ACK7确认分组,将接收窗口向前移动8位,指向下一个0,但是ACK7在传输过程中丢失,发送窗口未收到确认分组,就会从0号分组开始进行超时重传。但这时候接收窗口正好待在0号分组位置,这样就无法判断该分组是新的分组还是之前超市重发的分组。 选择重传协议比回退N帧协议优化就在他在处理分组误码时,效率更高,接收窗口会直接跳过误码分组对其他的分组进行接收并依次发送他们的确认分组,发送分组在未收到该分组的确认分组时,接收窗口就不会往前移动,而是跳过该分组将窗口内的其他分组进行确认,在误码分组序号未收到确认分组时间过长就会造成超时重传,这时候会单独发送该分组,在接收方接收并收到接收方发送过来的确认分租后,接收窗口才会重传。 点对点 (Point-Point Protocol)[简称PPP]协议是目前使用最广泛的点对点数据链路层协议。 标志字段:是PPP帧的定界符,取值为:从字节角度来看,取值为0x7E,从比特角度看,取值为01111110. 发送方的处理: (1)将数据载荷中出现的每一个0x7E减去0x20( 相当于异或0x20),然后在其前面插入转义字符0x7D。 (2)若数据载荷中原来就含有0x7D,则把每一个0x7D减去0x20,然后在其前面插入转义字符0x7D。 (3)将数据载荷中出现的每一个ASCII码控制字符(即数值小于0x20的字符), 加上0x20(相当于异或0x20,将其转换成非控制字符),然后在其前面插入转义字符0x7D。 接收方的处理: 进行与发送方相反的变换,就可以正确地恢复出未经过字节填充的原始数据载荷。 在说数据链路层常见问题时,我们就是在以PPP帧为例,每出现5个连续的比特1,就在其后面填充一个比特0 这边的知识在前面的差错检测中有提到,重要的是看FCS的计算范围除了帧定界符和帧检测序列外,都在FCS的计算范围。 这篇文章的插图来自: 湖科大教书匠的个人空间-湖科大教书匠个人主页-哔哩哔哩视频 (bilibili.com) 复制已被授权3.3.2具体流程
3.3.3优点
3.3.4缺点
3.4选择重传协议
三.点对点协议
PPP的帧格式
PPP的透明传输
PPP帧的透明传输
PPP帧的差错检测
PPP的工作状态