数据链路层
1)数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输,若把这些协议的软件和硬件加到链路上,就构成了数据链路
数据链路层传输的数据单位:帧
帧从生成到发送的一个过程:由应用层,传输层,网络层形成的数据报,在数据链路层封装成帧,然后通过数据链路传输到另外一个结点
链路层的基本功能:
1)封装成帧
加头:在哪里开始(开始标志)
加尾:在哪里结束(结束标志)
首尾还包含控制信息和最大传输单元(最大传输长度)
SOH:首部
EOT:尾部
规定首尾头的长度加起来要小于原始报文的长度(软性规定)
2)透明传输(理解透明二字,表示无论什么样比特组合的数据都能通过数据链路层)
字符填充发保证数据链路传输的透明性
以下是字符填充法:
如果数据报文中由和头SOH,尾(EOT)相同的部分怎么办?
答:数据报文中出现的SOH和EOT(不代表头尾的)前面一个转义字符ESC
如果由ESC这个数据的话,也是在ESC前面加ESC
这样无论什么样的数据,数据链路层都能传输
3)差错检测
数据可靠性的保证
循环冗余校验CRC
1)在发送端,数据报文后面加冗余码
n位数据+k位冗余码生成完整的一个帧
冗余码的生成:
数据m:1010001101(10位)
假设n=5,p=110101
然后用二进制的模2运算进行2的n次方乘以m的运算
具体:m后面加n个0,得到n+k位除数除以p得到余数r
如果r不够n位,则前面补0
二进制的除法:和十进制的除法(竖式)不同在于没有减法,而是直接异或
异或:相同为0,不同为1
在接收端:
CRC校验:把收到的每一个帧都除以相同的除数p(模2运算),然后检测余数r,r=0,则数据无误
即a/b 商c余d 那么 b*c+d==c
帧检验序列:是数据+冗余码生成的序列
注意帧检验序列和循环冗余校验的区别,一个是序列,一个是方法
CRC是无差错接受:凡是接收的帧都没有传输差错,由差错的帧就丢弃而不接受
确认和重传机制:流量控制
4)流量控制(确认和重传机制)
弥补主机a,b之间的带宽差异
发送下一个帧之前先确认上一个帧传输成功(等待接收端发送过来的接收成功信号)
(ack信号)
发送方:
1. 从主机中取一个帧
2. 进数据帧发送到数据链路层的发送缓存里
3. 将发送缓存里的数据帧发送出去
4. 等待
5. 若收到ack信号,则跳转到1
接收方:
1. 等待
2. 若收到数据帧,则放入接收缓存中
3. 先进行冗余校验,正确则上交给主机
4. 向发送端发送ack信息
5. 跳转到1
没有流量控制的话,就是不停的发不停的发,由流量控制的话,就发送一个帧,收到ack信号再发
可靠性的保证
采用流量控制的时候数据传输可能出现的四种情况:
1)正常情况
2)数据帧出错:接收端进行CRC校验之后发现数