目录
链路是一条无源的点到点的物理线路,中间没有任何其他的交换节点
(如果有交换就到网络层)
数据链路 = 物理链路+ 控制链路的软硬件(依据通信链路协议)(适配器 即 网卡,一般网卡都包括了物理层和链路层的功能)
数据链路层的具体任务:
- 成帧:将网路层接收到bit流划分为帧 packet,以便于处理
- 寻址:增加头部 规定发送方 和接受方的地址 ,这里的地址指的是物理地址
- 流量控制: 如果数据接收方 接收速率 < 数据发送方的 发送速率,数据链路层就会实行流量控制机制,防止数据大量涌入接受方
- 差错控制:检测和重传被损坏帧,防止重复和丢失帧
- 介质访问控制:多个设备链接到一条线路上时,数据链路层就会根据数据链路层协议来决定任一给定时刻具体哪个设备控制线路
数据链路控制 = 成帧+流量控制+差错控制
0x00 成帧
成帧:将一组比特位组成帧,以便帧和帧之间可以识别
#固定长度成帧:
不需要定义帧的边界,长度本身就可以作为分隔符
#可变长度成帧
需要定义帧的边界,两种方法:
1.面向字符的方式
数据段是字符
选择文本通信中 不使用的字符 (Flag)作为 帧的开始 和帧的结尾
并且在 数据前 加上头部(源端地址 和 目的端地址)
在数据的后边 加上 尾部 一般为 检错纠错冗余位
如果数据中含有 Flag ,则将其转义 (ESC)
2.面向位的方式
数据段式二进制位
一边用 0111 1110 作为 帧的开始 和帧的结尾 (Flag)
如果数据段 含有 0111 1110 那么就使用 位填充:
即遇到一个0之后由5个1,那么就在1之后加一个0,使得接收方不会误认为0111 1110
接收方会自动将该0移除
0x01 流量控制 和差错控制
流量控制 就是一系列程序,用来限制发送方 在等到确认之前 发送的数据数量
差错控制 :数据链路层的差错控制 基本上都是用 重传 数据 来实现纠错
0x02 五个数据链路层的协议
## 无噪声通道:假设有一个通道 不会出现丢帧,重复帧,损坏帧的情况
两种协议:
1. 最简单的协议
无流量控制和差错控制
发送方:
不断轮询,直到从网络层get到Data,然后成帧,交给物理层发送帧
接受方:
不断轮询,直到从物理层收到帧,然后从帧中取出数据,交给网络层
2.停止-等待协议 stop-and-wait protocol
有流量控制,但是无差错控制
计算机网络中流量控制的基本方法:由收方控制发方的数据流
停止等待协议,即发送方发出一个帧后必须停下来 知道接受到 接收方的确认,然后
才可以发送下一个帧
#差错控制:
发送方 发完一个帧就启动一个 定时器 ,如果在限定时间内 没有收到ack
那么就会重传
#解决重复帧问题:
给每个数据帧带上一个不同的编号,如果接受方收到两个序号相同的帧,那么就
会丢弃重复帧
## 有噪声信道的三种协议
(其实滑动窗口主要是用于流量控制 而不是 差错控制)
(1)停等ARQ(auto repeat request 自动重复请求):
发送方保留已经发送的帧的副本 并 当定时器 到时 的时候重传这个帧
(2) 后退N帧 ARQ
#滑动窗口:用来定义发送方 和接收方关心的序列号的范围
发送滑动窗口:发送方关心的序列号范围,
发送方可以连续发送滑动窗口大小个帧(不用等待),
也就是说如果发送的帧的数量达到了
当前窗口的大小,那么就会进入等待。
当窗口收到一个ack时就移动一个帧的时隙。
如果某个帧超时了,就从该帧开始重发已经发过的N个帧
接受滑动窗口:接受方关心的序列号范围
有效确认到达时,发送窗口能滑动一个或者多个时隙
发送窗口:
接受窗口:
只有一个帧那么大,始终指向它期待要收到的序号
当一个正确的帧到达时,窗口滑动,并发送ACK,但每次只滑动一个时隙
总结:后退N帧ARQ中
1.当用m个比特进行编号时,一共有2^m 次方种编号
也就是说每2^m个帧,编号就会从头循环一次。
所以发送窗口的大小必须小于2^m,否则一个发送窗口的中编号就失去了
唯一性。
而接收窗口的大小始终是1
2.只有当接受窗口向前滑动时,发送窗口才有可能向前滑动
3.当发送窗口 和 接收窗口 的大小 都等于1 时,就是停止等待协议。
(3)选择性重传ARQ
如果用m比特来表示序号 ,那么一共可以有2^m次方个序号
每2^m次方个帧,序号就会循环一次。
发送窗口大小=接受窗口大小 = 2^(m-1)
接受窗口允许帧乱序到达,并被保留直到有一组有序帧能交付给
网络层。
(也就说 只要是接受窗口中有的帧 就可以收)
例如:用2bit来表示序号,则一共有4 个序号,窗口大小必须为2
捎带技术:
B 给 A发送数据的时候 可以捎带着将ACK 发送过去
0x03 HDLC 高级数据链路控制协议
以上讲的5种协议都是 理论协议,HDLC 具体实现了以上讨论的各种ARQ协议。
HDLC是面向比特/位/连接的通信控制协议,支持点到点链路和多点链路。
#传输模式:
正常响应方式:
一个主站,若干个从站,主站只能发送命令,从站只能响应
异步平衡方式:
主站和从站 既能发指令 也能发应答
#HDLC的帧结构
三种类型的帧:
信息帧:用来传输 来自网络层的数据 以及 控制信息(捎带技术)
管理帧:只用来传输 控制信息
无编号帧:系统管理自用,用来管理链路自身
0x04 PPP 协议(点到点协议)
面向字节的协议
帧格式:
注意下面的单位是字节,而不是bit
因为PPP协议是面向字节的,所以 当信息部分遇到 0111 1110 时,就会进行字节填充,而不是位填充
即将 一个 0111 1101 的字节 填充到 0111 1110 之前 进行转义。
#传输阶段
#多路复用:
即在一路之中传好几路的信息。
这里PPP的多路复用是指 PPP的帧的信息部分可以 装 其他协议