数据链路层的功能
接收网络层传输过来的数据分组加上首部和尾部,然后封装成一个帧,交给物理层
接受物理层的比特流,还原出IP数据报的内容交给网络层
物理链路:输出介质和物理层实现的相邻节点的链接
逻辑链路:数据链路层基于物理链路实现的相邻节点之间的逻辑上的无差错的逻辑连接
功能总结:帧的封装,差错控制,可靠传输,流量控制,介质访问控制
1,帧的封装(组帧)
解决的问题:
(1)哪里是数据信息,哪里是控制信息:帧定界
(2) 让接受方感知不到帧定界的额外信息:透明传输
Way1:字符计数法
在每个帧的开头,都使用一个定长的字段去表示一个帧的长度(如果一个计数数段出问题,那么全盘都会出问题)
Eg:如果一开始的定长计数字段表示的数据长度是6,8,14,10,如果第一个6的数据传输错误,传输成为了30,那么8,14,10这几个分组的数据的定界都会出错
Way2:字节填充法
首位都加入一个控制字符:SOH(开头 :01H)和尾部EOH(04H)
为了防止出现数据内容中出现控制字符的内容,使用转义字符来规避( 在数据内容和控制字符一致时,在前面加入一个转义字符,表示这个是内容,而非控制信息)
如果转义字符也是内容的一部分,那么就去前面再加一个转义字符
Way3: 0比特传输法
使用01111110(连续的6个1)当作特殊字符表示分组的开始和结束
问题和Way2一样,如果出现数据部分和控制信息一致,导致定界失败
解决方法:
发送方:发送之前再数据内部每5个连续的1就加入一个0
接收方:接受后,对数据内容每遇到连续的5个1,就消去一个这后面的0(如果是0的话)
Way4:违规编码法(基于曼彻斯特编码):
因为曼彻斯特编码是在每个周期的中间一定会发生跳变,那么我们就可以利用违规当作控制信号,表示一个信息的开始和结束
2,差错控制
解决的问题:
发现帧内位错误
方法一:检错编码,
发现错,不改,让其重传
奇偶检验码(冗余码),使得1的数量保持在奇/偶的校验码
比如:100110 的奇校验是 0 偶校验是1
如果使用的是奇校验,那么所有的位异或和为1,偶校验所有的位异或和为0
循环冗余校验码:数据的发送和接受方,会规定一个二进制的除数,这里的校验位是拼接在信息位的后方,使得整个二进制串可以模2被除数整除
多项式m(x),除数是系数组成的二进制串,余数为最高项的次数数
如果2^r>=k+r+1 就可以纠错 (k是信息位位数,r是校验位位数)
作用:检查奇数个错误,双比特错误,检测连续的错误(<=r)
方法二:纠错编码,
发现,并修改错误
海明校验码:多个校验码组合来标记错误位的位置
k位信息码,n位校验码 2^k>=n+k+1
在2^i-1上(1,2,4,8挖坑)
检测n个,隔n个,依次偶校验(让检测的所有数中保持偶数个1)
检验错误就是看检测位是不是一一对应相等
纠错就是 1,将传输过来的数据在进行生成检测位
2.将两个校验码从右向左写
3,按位异或得到错误的位置,然后取反
实现找到一位,纠正一位
3,流量控制with可靠传输
解决的问题:
(控制发送速率)和(解决帧丢失,帧重复,帧失序)
滑动窗口为基础来实现的:有发送窗口(WT)和接受窗口(WR),接受方通过确认机制来控制发送窗口的滑动
(S-W)停止等待协议:
1,滑动窗口(不是滑动窗口协议)
WT=1,WR=1
2,确认机制
对于发送方发送i帧的数据帧DATAi,接受方会返回一个确认帧ACKi;(帧定界,校验码,帧类型,帧序号)
情况1:正常情况:数据帧正确,发送给网络层,同时返回确认帧,接受窗口后移,发送窗口接收确认帧后,后移,并继续发送数据帧
情况2:数据帧丢失:超时重传,移步重传机制
情况3:确认帧丢失:发送方因为超时而重发一个重复的数据帧,接收方接收后会丢弃这个确认帧,然后返回重复帧的ACK(i-1)信息
这里的情况3就体现出了编号的重要性,如果出现了确认帧丢失的情况,那么发送窗口不会移动,但是接受窗口一直移动,导致接受不到完整的信息
情况4:数据帧有问题:丢弃数据帧,不发送确认帧,等待重传
3,重传机制:
发送发设计一个计时器,如果计时器超时没有返回确认帧,就会重传数据帧
4,帧编号机制
对于帧编号n要求 2^n>=WT+WR, 所以这里只需要1位来编号 0->1->0->1
这里的解决了帧丢失,帧错误,重复帧的问题,因为这里是一个一个的传输的,不存在帧失序的情况,同时也不会出现流量过大的情况
(GBN)后退N帧协议
1,滑动窗口(是滑动窗口协议)
WT>1,WR=1
2,确认机制
当接收方接受了第i号帧,且没有差错,就会发送ACK_i,这里的ACK_i表示第i个位置及之前都确认接受,(累计确认)
情况1:正确接收,假设WT=3,会在第3个接受完成后发出ACK_i,每接受一个就后移一个, 发送方接受ACK_i后,后移
情况2:数据帧丢失/差错.如果是第i个传送失败,但是之后的都是成功的,因为之后的不在窗口内,会直接丢失,然后返回最后成功接收的ACK_(i-1),然后控制发送窗口后移距离,然后等待超时重传
情况3:确认帧丢失,会超时重传,因为重传的帧不在窗口内,所以会丢弃,然后返回最近的ACK_i
3,重传机制:超时重传机制
同时因为WR只有1个大小的原因,也控制了传输的速度不会太快
4,帧编号,需要n位 ,其中n满足 2^n>=WT+WR, (防止同一个序号对应了不同的两个帧)
5,特殊规则:
关于确认帧:接收方是累计确认的,即连续接受多个数据帧率后返回最后一个帧的ACK
关于超时重传,如果没有接收到i的确认信息,会重传i及其后面所有的帧
缺点:因为频繁的后退,如果信道的误码率很高,就会导致很低的传输效率
(SR)选择重传协议
1,滑动窗口:(是滑动窗口协议)
WT>1,WR>1
2,确认机制:接收方正确接受后会给发送方发送一个ACK_i(不支持累计确认)
情况1:正确情况,每正确接受一个,就会一个一个的去返回ACK_i,然后接收窗口向后滑动,发送方接受信息后也会向后滑动
情况2:数据帧丢失:如果滑动窗口是4,,保证的是从左边出去的都是接受成功的帧,所以如果第i个数据帧丢失,那么滑动窗口滑倒第i个就会停下,然后等待超时重传,接受成功后会向后滑动到末尾位置
情况3:数据帧异常:假设第i个检测出异常,其他发送正常的i+k会发出ACK_i+k,但是i号会发出NAK_i,滑动窗口最左侧会停在异常处,发送窗口也会停在异常处,然后重传.
情况4:确认帧丢失:新进入发送窗口的会立马发送,窗口内异常的会超时重传,如果接受的是异常的,会发送异常位置的ACK_i,补齐一开始的确认帧丢失
3,重传机制:
超时重传,请求重传
4,帧编号:
需要n位 ,其中n满足 2^n>=WT+WR, (防止同一个序号对应了不同的两个帧)
5,特殊规则:
否认帧:如果接收方接收到了非法的(有差错的帧),丢弃后,向发送方发送一个NAK_i,请求重发
请求重传,当发送方接受了NAK_i,会重传窗口内的i号帧
WR<=WT,不然的话,每次发送都会让接受窗口的后几个是空的,效率不高
信道利用率的总结
S-W:一发一接受.
假设数据帧的长度是m,确认帧长度是n,传输速率是v,信道传输耗时是T
每次耗时:t1=m/v+2*T+n/v
发送信道利用率是:(m/v)/t1 * 100%
接受信道利用率是:(n/v)/ t1 * 100%
GBN/SR:多发->1/多接受
假设WT=N,数据帧的长度是m,确认帧长度是n,传输速率是v,信道传输耗时是T
信道利用率=(时间内经过数据总时间)/m/v+2*T+n/v
理想情况下是 min((N*m/v)/(m/v+2*T+n/v) , 1)
滑动窗口协议:GBN,SR
(ARQ)自动重传协议:S-W,GBN,SR
(连续ARQ):GBN,SR