数据链路层
使用点对点信道的数据链路层
这种信道使用一对一的点对点通信方式
链路
是一条无源的点到点的物理线路段,中间没有任何其他的交换结点
类型:
物理链路
逻辑链路-->物理链路加上必要的通信协议
数据链路
把实现通信协议的软件硬件加到链路上就构成了数据链路
数据链路层的协议数据单元---帧
功能
基本功能(三个问题)
封装成帧 : 最大的传输单元:MTU,帧开始符SOH,帧结束符号EOT
透明传输 : 转义字符ESC
差错检测 : 误码率BER,循环冗余检测CRC
封装成帧
定义:就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧
方法:字符计数法、字符填充法、零比特填充法、违规编码法
透明传输:是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西
SOH:十六进制编码01(二进制00000001)
EOT:十六进制编码04(二进制00000100)
ESC:十六进制编码1B(二进制00011011)
方法:字节填充 (byte stuffing) 或字符填充
差错检测:在发送的码序列(码字)中加入适当的冗余度以使得接收端能够发现传输中是否发生差错的技术
检错编码:奇偶校验码、循环冗余码(CRC)
纠错编码:海明码
补充
这里需要多提一点:循环冗余检验的原理
首先,在发送之前,需要把数据划分为 m 组,假设每组有 k 个比特
其次,假设 m 组中的其中 1 组的数据为M=101001,设k=6
然后,用 冗余码的计算 算出 n 位的冗余码
最后,我们在 M 的后面再添加供差错检测用的 n 位冗余码一起发送
(以上的的符号m,n,k是提供理解用的)
以上用到的:冗余码的计算
用二进制的模2运算:进行 2的n次方 乘 M 的运算,这相当于在 M 后面添加 n 个0
假设M=101001,生成多项式:P(X)=X^3 + X^2 + 1 = 1*X^3 + 1*X^2 + 1*X^0
我们可以得到除数p=1101(除数是4位,那就在M后面添加3个0
这个 3 也可以理解为生成多项式的最高项,(或许也可以这么想,假设n=3,就是在M的后面增加三个0,2^n就可以理解为二进制上的右移,了解即可)
所以我们得到的M=101001000
我们进行模2运算:
110101
p(1101) M=101001000
1101
--> 1110
1101
--> 01110
1101
--> 01100
1101
--> 001 -->(余数R)
其中可以理解为二进制中的异或(^)
1^1=0
0^0=0
1^0=1
0^1=1
即把余数 R 就是作为冗余码添加在数据 M 的后面发送出去
发送的数据是:2^n*M + R (此处的 “+” 是拼接的意思)
即:101001001,共 (k + n) 位
补充:帧检验序列 FCS
在数据后面添加上的冗余码称为帧检验序列 FCS
循环冗余检验 CRC 和帧检验序列 FCS 并不等同
CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法
3-07中接有问到有关检测的问题:
这个还是要用到 CRC检验,求出余数R
举个例子:3-07求得的商M=1101011011,Q=1100001010,除数p=10011,n=4(M后面加4个0),余数R=1110
现在我们检验 传输过程中最后一个1变成了0
则为未拼接冗余码的M=1101011010
拼接了冗余码的M=11010110101110
然后进行CRC检验:
1100001011
p(10011) M=11010110101110
10011
--> 10011
10011
--> 000010101
10011
--> 011011
10111
--> 11000
10111
--> 0011 -->(余数R)
若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。
若得出的余数 R != 0,则判定这个帧有差错,就丢弃。
显然这个帧就被丢弃了
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受
凡是接收端数据链路层接受的帧都没有传输差错(有差错的帧就丢弃而不接受)
⭐要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制
⭐《计算机网络 第七版 谢希仁》第三章课后习题3-07/3-08做一下,加深理解,下面的内容可以等你做完题之后再看
点对点协议 PPP
互联网用户通常需要连接到某个ISP才能接入到互联网。
PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
为在点对点连接上传输多协议数据报提供了一个标准方法。
PPP 协议的特点
简单
只检错,不纠错
不使用序号
不进行流量控制
可同时支持多种网络层协议
在因特网环境,PPP的数据字段放入的是IP数据报,为网络层的IP协议协议提供服务,而IP协议是不可靠的数据报服务
思考一:PPP不可靠,为什么还用它?
思考二:PPP IP都不可靠,谁来保证数据传输的可靠性?
PPP 协议需要满足的需求
简单,PPP协议没有流量控制
封装成帧
透明性
多种网络层协议
多种类型链路
差错检测
检测连接状态
最大传送单元
网络层地址协商
数据压缩协商
PPP 协议不需要的功能
纠错、流量控制、序号、多点线路、半双工或单工链路
PPP 协议的组成
一个将IP数据报封装到串行链路的方法
一个用来建立,配置和测试数据链路连接的链路控制协议LCP
一套网络控制协议NCP
PPP 协议的帧格式
F:标志字段(0x7E)(01111110),表示一个帧的开始或结束。连续两帧之间一个标志字段。连续两个标志字段表示空帧,丢弃
A:地址字段(0xFF),有规划但并不起任何作用
C:控制字段(0x03),有规划但并不起任何作用
协议:
0x0021:信息字段是IP数据报
0xC023,信息字段是鉴别数据
0x8021:信息字段是网络控制数据
0xC021:信息字段是PPP链路控制协议LCP的数据
信息部分:可变不超过1500字节
FCS:使用CRC的帧检验序列(存CRC检验的校验码)
思考一:对于很多协议来说,地址字段都非常有用,但是为何PPP的地址字段没有作用?
答:因为作用于点对点链路,不存在共享链路的问题,不需要地址字段。
PPP协议怎么解决透明传输的问题呢
PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节
当 PPP 用在同步传输链路时,协议规定采用硬件来完成 比特填充
当 PPP 用在异步传输时,就使用一种特殊的 字符填充 法
字符填充
将信息字段中的0x7E转换为2字节序列(0x7D,0x5E)
如信息字段出现0x7D的字节,则将其转换成为2字节序列(0x7D,0x5D)
若出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面加入一个0x7D字节,同时该字符的编码加以改变
是不是感觉摸不到头脑?这是什么东西,7E转换为7D,5E;7D转换为7D,5D的
所以,下面用一道题 3-09 来讲解一下字符填充,加深理解
可以先自己研究下再看下面的解释
详解:PPP帧的数据部分:7D 5E FE 27 7D 5D 7D 5D 65 7D 5E
在读数据的时候,识别到7D会自动跟后面的进行拼接
按着上面的叙述: 7E(标志字段)转换为7D,5E
7D转换为7D,5D
把转义字符7D开始的2字节序列用下划线标出:
7 D 5 E ‾ F E 27 7 D 5 D ‾ 7 D 5 D ‾ 65 7 D 5 E ‾ \underline{7D\space\space5E}\space\space FE \space\space 27 \space\space \underline{7D\space\space5D} \space\space \underline{7D\space\space5D} \space\space 65 \space\space\underline{7D\space\space5E} 7D 5E FE 27 7D 5D 7D 5D 65 7D 5E
还原之后的数据:7E FE 27 7D 7D 65 7E
还算可以吧,感觉自信又回来了
但是在想这个题的时候看到拼接的字节序列,突然想到了两个问题
思考一:接收端如何处理这些填充的字符?
思考二:加上字符后超出MTU怎么办?
比特填充
零比特填充:
在发送端,连续五个1后要插入一个0
在接收端,5个连续1后的删除一个0
思考一:为什么发送端,连续5个1后要插入一个0;接收端,5个连续1后的删除一个0,就能实现透明传输?
答案:这就要想到前面的 标志字段 0x7E,它的二进制01111110,中间有6个1,所以以防标志字段 F,所以5位(脑瓜子嗡嗡的吧)
3-10小试牛刀
这个比较简单,直接写答案:
经过零比特填充后变为:011011111 0 11111 0 00
删除零比特填充的后为:000111011111-11111-110
PPP 协议的工作状态
用户拨号接入ISP后,建立了一条由用户到个人电脑的物理连接
用户通信完毕时,NCP释放网络层连接,收回分配的IP地址,接着释放数据链路层连接,最后释放物理层连接
使用广播信道的数据链路层
这种信道使用一对多的广播通信方式,因此过程比较复杂。
广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
局域网的数据链路层
局域网最主要的特点
网络为一个单位所拥有
地理范围和站点数目均有限
局域网具有如下主要优点
具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源
便于系统的扩展和演变,设备的位置可灵活调整和改变
提高了系统的可靠性、可用性和生存性
局域网的拓扑
信道共享技术
静态划分信道:
频分复用、 时分复用、波分复用、码分复用
动态媒体接入控制(多点接入)
随机接入
受控接入 ,如多点线路探询 (polling),或轮询
信道共享带来的两个问题
问题一:访问控制机制,协调用户使用信道的机制(CSMA/CD)
问题二:如何标示通信双方(MAC地址及其帧格式)
数据链路层的两个子层
IEEE 802 委员会就将局域网的数据链路层拆成两个子层:
逻辑链路控制 LLC 子层 (局域网对 LLC 子层是透明的)
媒体接入控制 MAC 子层
适配器的作用
进行串行/并行转换
对数据进行缓存
在计算机的操作系统安装设备驱动程序
实现以太网协议
CSMA/CD 协议
载波监听多点接入/碰撞检测
MA: “多点接入” 表示许多计算机结点连接在一根总线上
CD:“载波监听” 是指每一个结点在发送数据之前先要监听一下总线上是否有其他计算机发送数据,有则等待
为什么叫广播通信
1.最初的以太网时将许多计算机连接到一根总线上,认为这样的连接方法既简单又可靠,因为总线上没有源器件
2.当一台计算机发送数据时,总线上的所有计算机都能检测到这个数据。这就是广播通信的方式
思考一下:总线上的某一接收方节点D怎么知道数据是节点A给它发的呢?
答:1.让每一台电脑的适配器有一个各不相同的地址
2.在发送数据帧的时候,在帧的首部写明接收站的地址
产生冲突
就是两个节点A,B都要给节点C发送数据,就会产生数据冲突
解决方法:
1.在发送数据前,检测一下总线有没有被占用,空闲再发
两种重要的措施
为了通信的简便,以太网采取了两种重要的措施
(1)采用较为灵活的 无连接 的工作方式:
a:不必先建立连接就可以直接发送数据。
b:对发送的数据帧不进行编号,也不要求对方发回确认。
c:这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。
(2)以太网发送的数据都使用曼彻斯特
a:缺点:它所占的频带宽度比原始的基带信号增加了一倍
以太网提供的服务
以太网提供的服务是不可靠的交付,即尽最大努力的交付
差错的纠正由高层来决定
CSMA/CD 协议的要点
多点接入 : 表示许多计算机以多点接入的方式连接在一根总线上。
载波监听 : 指每一个站在发送数据之前先要用电子技术检测总线上有没有其他计算机发送的数据信号
碰撞检测 : (冲突检测)边发送数据边检测信道上的信号电压大小
争用期
作用:
定义最小帧长
二进制指数类型退避算法
强化碰撞和最小帧间隔
CSMA/CD协议的要点
(1) 准备发送。但在发送之前,必须先检测信道。
(2) 检测信道。若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在 96 比特时间内信道保持空闲(保证了帧间最小间隔),就发送这个帧。
(3) 检查碰撞。在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性:
发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到 (1)。
发送失败:在争用期内检测到碰撞。这时立即停止发送数据,并按规定发送人为干扰信号。适配器接着就执行指数退避算法,等待 r 倍 512 比特时间后,返回到步骤 (2),继续检测信道。但若重传达 16 次仍不能成功,则停止重传而向上报错。
路漫漫其修远兮,吾将上下而求索。
喜欢的话关注一下,一起进步啦~~~