文章目录
数据链路层功能
数据链路层的研究思想
数据链路层的基本概念
数据链路层功能概述
封装成帧和透明传输
封装成帧
透明传输
字符计数法
字符填充法
零比特填充法
-
不管是
5个1
还是
大于5的数字个1
,只要
≥5
就要在
5个1
的末尾填充一个
0
违规编码法
差错控制
检错编码
差错从何而来?
数据链路层的差错控制
检错编码——奇偶检验码
检错编码——CRC循环冗余码
-
生成多项式如1101可表示为:1X
3
+1X
2
+0X
1
+1X
0
- 生成多项式的阶指的就是最高位的X右上角的幂
- 模2除法:加法不进位,减法不退位,等同于异或(同0异1)
- 我们为了求帧检验序列FCS,一开始会在每组数据后面加上一系列的0,0的个数等于生成多项式的阶,也就是等于生成多项式的总位数减1
- 链路层不能算作是可靠传输,因为发送端发送的数据接收端并没有全部接收,有一些帧丢弃了,没有对这些帧进行处理
- 一般来说可靠传输是由运输层实现的
纠错编码——海明码
海明距离(码距)
- 如果此时比特位数是3,码距为1,当000跳变成了001,我们是检测不出发生了比特错的,因为001也是合法的编码,因此如果编码系统的码距是1的话是无法检测出来一位比特错的,更别说纠正错误了
- 但是如果此时我们的比特位数是4,码距为2,当0000跳变成了0001的话我们是可以知道此时发生了比特跳变的,因为0001不是合法的编码,因此如果编码系统的码距是2的话我们是可以检测出来一位比特错的,但是仍然没办法纠正错误
-
编码系统的码距为
n
的话可以检测出
n-1
位的比特错 - 所以如果此时编码系统码距为3的话,我们既可以检测出1位比特错,也可以检测出2位比特错;而且此时这个编码系统的任何两个编码只发生一位错,最后得到的结果肯定不会一样,那么接收方也就可以确定这个编码是由谁发生一位比特错才导致的,所以码距如果为3的话是可以纠正1位比特错的,但无法纠正两位比特错
-
如果海明码要检测
d
位错的话,那么它的码距就需要为
d+1
-
如果海明码要纠正
d
位错的话,那么它的码距就需要为
2d+1
工作流程
确定校验码位数r
- 校验码不同的取值可以表示不同的位置发生了错误的这样一种情况
-
2
r
≥m+r+1,最后这个1表示的是整体无差错的这样一种情况
确定校验码和数据的位置
求出校验码的值
- 关键思想——分组
- 这里把序号写成了二进制的表示形式
检错并纠错
方法一
- 首先把3位校验码对应的序号写到三个圆圈的外侧部分
- 接下来做加法,把每两个相邻圆圈的值相加写到它们重叠的那部分区域,中间就是三个圆圈的重叠部分也就是三个圆圈的值加起来
- 我们通过上面可以知道4、5、6、7和1、3、5、7出错了,我们可以在图中用红圈把对应的区域圈起来,可以发现重合的部分是5、7,也就是说这里可能出错的是5或者7,但是这里还有一个条件2、3、6、7是没错的,我们在图中用绿色的圆圈圈起来,则7也没错,所以就可以确定出错的位数是5
方法二
流量控制与可靠传输机制
链路层的流量控制
流量控制的方法
- 停止-等待协议
-
滑动窗口协议
- 后退N帧协议GBN
- 选择重传协议SN
- 这里要注意一点:在数据链路层的滑动窗口协议当中这个发送窗口和接收窗口大小在传输过程当中是固定的,注意和传输层出现的不固定的窗口进行区分
可靠传输v.s.滑动窗口v.s.流量控制
停止等待协议
停止-等待协议——无差错情况
停止-等待协议——有差错情况
数据帧丢失或检测到帧出错
ACK丢失
ACK迟到
停止-等待协议性能分析
信道利用率
后退N帧协议GBN
停止-等待协议的弊端以及改进思路
后退N帧协议中的滑动窗口
-
GBN还有一个特点,就是为了使得效率更快,GBN不会对每一个帧都返回一个确认帧,而是一种
累计确认
的机制,比如现在1、2、3号帧全部都发送出来,接收方收到之后不用返回ACK1、ACK2、ACK3逐一确认,只需要对3号帧进行确认返回一个ACK3就可以了,ACK3表示的是3号帧及其前面发送的帧我都已经全部正确接收了,发送方接收到ACK3之后只需要把滑动窗口前移3个格子即可
GBN发送方必须响应的三件事
GBN接收方要做的事
运行中的GBN
滑动窗口长度
-
比如现在用2个比特对帧编号,那么数据帧就是0、1、2、3;如果我们的发送窗口大于2
2
-1来到4的话,假设现在0、1、2、3号帧全部丢失的话,当我们超时重传的时候接收方就无法分辨新接收的0、1、2、3号帧是原来的帧还是后面新发送的帧
GBN协议重点内容
- 偶尔捎带通信:发送方和接收方可以是双方向进行通信,所以接收方同时可以发送一些数据给发送方,接收方在发送数据的时候它也可以把这个确认帧放到它要发的数据里面
- 注意这道题:如果主机甲在接收到0号帧的确认帧ACK0之后或者刚好接收到0号帧的确认帧ACK0的时候才能发送完数据,那么理论上来说最大平均数据传速率是可以达到信道带宽的,但是这里主机甲在接收到0号帧的确认帧ACK0之前已经把数据发送完了,因此主机甲需要等待一段时间等ACK0到来才可以继续发送数据,因此平均数据传输率就降低了
GBN协议性能分析
选择重传协议SR
GBN协议的弊端及其改进
选择重传协议中的滑动窗口
SR发送方必须响应的三件事
SR接收方要做的事
运行当中的SR
滑动窗口长度
SR协议重点总结
信道划分介质访问控制
传输数据使用的两种链路
- 总线型拓扑结构的弊端就是假如发送主机到各个主机的公共通路出现了问题,那么信息就哪里都到不了了;但是星型拓扑结构就比较灵活,其中一条链路断了不会影响其他链路的正常工作
介质访问控制
信道划分介质访问控制
频分多路复用FDM
时分多路复用TDM
- TDM帧和数据链路层的帧并不是同一个
-
TDM帧是在物理层传送的比特流所划分的帧,标志是一个周期(一个周期标志的是在一段时间内主机能够发送多少的比特,这就是一个周期所要标识的内容)
改进的时分复用——统计时分复用STDM
- 集中器:收集A、B、C、D这4个低速用户的数据然后在一条高速线路上面发送到计算机上去
- 这里的帧我们称为STDM帧,同样的STDM帧也不是数据链路层的帧,而是在物理层传送的比特流所划分的一个帧
-
每一个STDM帧当中的时隙数是小于连接在集中器
波分多路复用WDM
码分多路复用CDM
- 码片/芯片:我们可以称发一个比特所需要的时间为1比特的时隙时间,我们可以把这1比特的时隙时间分割成n位的芯片序列,形成了n个微时隙
- 同一个站点比特1和比特0会被对应到2个不同的码片序列,它们是互为反码的关系的,即(1对应-1,-1对应1)
- 不同站点的比特1的码片序列是不一样的
-
发送数据时的过程:
- 先用两个站点比特1所对应的两个不同的码片序列做内积,务必保证1码片序列的规格化内积为0
- 把两个站点待发送的比特数据转化为对应的码片序列,然后线性相加,得到一个用于在信道上传输的码片序列
- 数据分离,把用于在信道上传输的码片序列和源站点的对应的码片序列分别做规格化内积,内积结果为1则源站点发送的是1,内积结果是-1则源站点发送的是0
CS还是CD???
- CS?CSGO!必须给我动起来,自然就是动态分配信道了,CD自然就是静态划分信道了
随机访问介质访问控制
ALOHA协议
纯ALOHA协议
- 随性,想发就发,不需要管别人
时隙ALOHA协议
- 控制想发就发的随意性
关于ALOHA协议要知道的事
CSMA协议
- carrier sense multiple access,载波监听多路访问协议CSMA
1-坚持CSMA
非坚持CSMA
p-坚持CSMA
三种CSMA对比总结
CSMA/CD协议
- 半双工、总线型网络
传播时延对载波监听的影响
如何确定碰撞后的重传时机?——截断二进制指数规避算法
最小帧长问题
- 以太网为了达到这个最短帧长,对于一个比较短的帧会对其进行填充直到64B以达到最短帧长的要求才可以放到链路上面进行传送
CSMA/CA协议
CSMA/CD与CSMA/CA
轮询访问介质访问控制
回顾介质访问控制
轮询协议
令牌传递协议
- TCU(转发器)其实就是我们在传递数据帧时的一个传递的接口,它可以传递所有经过的帧,而且为接入站和接收数据提供一个接口,总之就是一个转发的作用
- 现在我们假设主机是空闲的,没有主机要发送数据,那么令牌就会在各个主机之间进行传递
- 此时主机D要发送数据,它就会手持令牌,拿到令牌的第一件事就是修改令牌的标志位,意义在于把令牌从闲的状态变成忙的状态,然后在令牌的控制帧后面加上数据,因此就构成了一个数据帧发送出去
- 此时D主机发出的数据帧是要给A主机的,即使数据帧会经过C主机,但是C主机发现数据帧并不是给自己的所以不会复制,A主机接收到数据帧之后发现数据帧是给自己的,A主机就会复制一份这样的一个数据,再发送给主机D主机
- D主机接收到自己发来的数据帧之后它会先检查一下数据帧是否出错,如果出错则再重传一次,否则回收数据帧,不再对这个数据帧进行转发了,同时令牌也空闲了,把令牌标志位再次设置为空闲,再把令牌传递出去
- 注意:假如D主机要发送的数据过长,D主机也不可以一直发送数据的,这样会导致不公平,所以我们会有一个限定的时间,如果发送数据的时间超过了这个限定时间那么即使有未发送完的数据,也不能继续发送了,要再等一波,等令牌再次转到D主机的时候再把其它数据发送出去
局域网基本概念和体系结构
局域网LAN
局域网拓扑结构
局域网传输介质
局域网介质访问控制方法
局域网的分类
IEEE 802标准
- IEEE 802.3:以太网
- IEEE 802.5:令牌环网
- IEEE 802.8:光纤
- IEEE 802.11:无线局域网WLAN
MAC子层和LLC子层
- LLC:逻辑上的链路控制子层,为网络层提供服务
- MAC:跟物理层相关
以太网
- 我们可以说一个局域网使用了CSMA/CD的技术就可以称之为以太网
以太网提供无连接、不可靠的服务
- 无差错接收:假如你要给我发送的数据是1010,那我也会根据1010接收,如果我通过差错检测方法发现你发的帧出错了,我就直接拒收并丢弃,但这并不是可靠传输
- 可靠传输:只要是你发给我的帧,我都要接收,但是如果帧丢失、重复、失序这都是可靠传输要解决的问题,由传输层处理
- 可靠传输由传输层实现,无差错接收由以太网实现
- 以太网主要负责物理层和链路层两个层次
以太网传输介质与拓扑结构的发展
10BASE-T以太网
适配器与MAC地址
以太网的MAC帧
- 我们为了使接收端可以迅速实现位的同步,使发送方和接收方能够保持一个发送接收同步,我们需要把从MAC层往物理层传递的帧前面插入一个8字节的前导码(前同步码+帧开始定界符),但是前导码并不属于以太网MAC帧的一部分
- 目的地址:1、单播地址,发送给固定具体的一台主机,其MAC地址就是目的地址;2、广播地址,全1全F,发送给所有的主机,所有的主机接收到之后都会保存下来;3、多播地址
- 类型:指明上面的网络层使用的是什么协议,以便把收到的MAC的数据上交给上一层的协议
- 数据:46~1500字节,1500是数据链路层规定好的最大数据传送单元MTU,46涉及到CSMA/CD中的最小帧长,以太网中的最小帧长是64B,减去目的地址、源地址、类型、FCS所占的6+6+2+4=18字节,就剩下46字节了
- 为什么以太网MAC帧有真开始定界符但是没有帧结束定界符呢?原因在于以太网使用的编码形式是曼彻斯特编码,在每一个比特内都会有两个码元。当我们发送数据的时候发送方网络适配器接口上会有电压变化,当数据发送完毕之后就不会再发送其它码元了,因此网络适配器的接口上的电压不会变化,这样我们就可以很清楚地确定出以太网帧结束的一个位置,此时我们再往前推4个字节就是数据结束的位置
-
与IEEE 802.3的区别:
- 第三个字段是长度/类型
- 当长度/类型字段值小于0x0600时,数据字段必须装入LLC子层
高速以太网
无线局域网
IEEE 802.11
802.11的MAC帧头格式
- 假如现在有两台主机A和B要进行通信,主机A附近有一个基站AP1,主机B附近有一个基站AP2,AP指的是无线接入点,也称作基站
- 如果主机A要给主机B通信,那么主机A就要先把它的信息通过电磁波发给AP1,然后AP1再发给AP2,然后AP2再把信息通过电磁波的形式发给主机B,这就是主机通过基站进行通信的过程
- 此时,目的地址DA是主机B的MAC地址,源地址SA是主机A的MAC地址
- 接收端指的就是AP2基站,发送端指的就是AP1基站,因为我们的数据要从AP1基站发送到AP2基站,因此我们就可以把发送端和接收端简单记为实际通信过程当中实现发送和接收数据的两个基站
- To AP,指的就是要发往基站AP的帧,Address1 – AP基站的MAC地址BSSID,Address2 – 发送端的MAC地址,Address3 – 目的地址DA
- From AP,就是由AP基站发来的帧,Address1 – 要发往的那个目的MAC地址,Address2 – 基站AP的MAC地址BSSID,Address3 – 源MAC地址
- IBSS(Independent Basic Service Set)独立基本服务集,Address1 – DA,Address2 – SA,Address3 – BSSID,相当于DA是个热点服务器,我们的主机SA通过DA发送数据给基站AP和外面通信
无线局域网的分类
有固定基础设施无线局域网
无固定基础设施无线局域网的自组织网络
VLAN基本概念与基本原理
传统局域网的局限性
- 在一个广播域当中,如果一个主机发送一个广播帧,那么这个广播域里面的所有主机都可以收到这个广播帧,当其中的主机发送了一个广播帧,那么这个网络当中的主机都可以收到广播帧,会导致洪泛/泛洪现象
- 广播域的隔离需要有路由器的支持
VLAN基本概念
- 本质上还是局域网
- 每个VLAN是一个单独的广播域/不同的子网
VLAN实现
- 交换机会有一个转发表,记录基于MAC地址和端口的映射
- 由于此时交换机还支持VLAN,所以还会有一个VLAN的表,记录基于VLAN ID和端口的映射
- A主机发送了一个广播帧,交换机收到这个广播帧之后一查VLAN表就知道A主机对应的是VLAN1,并给这个帧打了个标签tag,记录其是来自于VLAN1的,如果要转发只能转发到VLAN1的广播域当中,然后交换机查看自己的VLAN表,发现只有端口1和端口2是属于VLAN1的,所以广播帧就会从2号端口转发出去,但是不会从3和4号端口转发出去
- 如果此时是A只想给B发送一个数据帧的话,而不是广播帧,那么交换机首先会查看转发表,发现B的端口对应的是2号端口,加下来交换机再去确认一下VLAN表,确认下2号端口是否和A处在同一个VLAN当中,处于的话就把数据帧转发给B
- VLAN表中左边不是端口号而是MAC地址,这是一种更加具体更加写死的一种方法
- 在交换机和交换机之间如果我们想要发送一个数据帧,想发送到另外一个相同的VLAN当中,或者我不确定是否会发到哪里我就想发送出去,这个过程是怎么使用虚拟局域网的技术来实现的呢?——贴标签tag
- 比如A主机要发送给E主机,首先A主机就会准备好一个帧(普通的以太网帧),交换机1接收到了这个帧会知道这个主机A的帧是从VLAN1发过来的,交换机1就会给这个帧附加一个字段/标签tag,标明从A主机1号端口发过来的这样一个以太网数据帧是属于VLAN1的,这个tag是4字节的VLAN标记
- 接下来包含了这个VLAN1的新的数据帧就会通过这个链路发送给交换机2,为什么在交换机之间的链路中没有把tag标签去掉,是因为这个端口(trunk端口)/主干线端口/交换机和交换机之间连接的端口,trunk端口不需要去掉tag标签,直接把包含tag的数据发送到交换机2
- 交换机2收到这个数据帧之后会根据tag标签识别出这个标签是来自VLAN1的,那么接下来交换机就只会把数据帧转发给VLAN1当中的主机,再结合MAC地址字段就会转发给E主机
- 关键步骤就是贴标签tag,有了tag标签才能标识这个主机是属于哪个VLAN
IEEE 802.1Q帧
- 用户主机和交换机之间的通信一定是普通的MAC帧,只有经过交换机之后,交换机内部会给其打一个标签tag,并通过主干线端口trunk发送给另一个交换机,这个过程中的帧就是802.1Q帧,然后交换机发送给目的主机的时候就要把tag标签去掉,此时就是普通的MAC帧了
练习
- Q1:可以。
-
Q2:不可以。由于标签的存在,交换机查VLAN表后不同的VLAN的数据不会相互转发
广域网及相关协议
广域网
- 结点交换机和路由器一样都是用来转发分组的,但是结点交换机只能在单个的网络中转发分组
PPP协议的特点
PPP协议应满足的要求
PPP协议无需满足的要求
PPP协议的三个组成部分
PPP协议的状态图
PPP协议的帧格式
HDLC协议(大纲已删)
HDLC的站
HDLC的帧格式
PPP协议 v.s. HDLC协议
数据链路层设备
物理层扩展以太网
链路层扩展以太网
- 网桥和集线器的主要区别:集线器接收到一个帧之后会朝所有的端口转发帧,但是网桥不会向所有的端口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口或者将其过滤丢弃
- 网桥“稍微有些智商”,会根据MAC帧的目的地址对帧进行转发和过滤
- 如何理解网桥增大了吞吐量?网桥过滤了通信量,划分出了不同的冲突域,使得原先处于同一冲突域的不能同时进行通信的不同网段的主机此时可以同时通信了
- 如何理解网桥提高了可靠性?当一个网段发生故障的时候其它的网段通常不会受到影响
网桥分类
透明网桥
- 自学习算法:在通信的过程中逐步地填满转发表
- 现在A要给B发送数据帧,那么A所发送的数据帧会在这个网段当中广播出去,因此和A同处在同一网段下的主机B和其它主机也能收到A发出的数据帧,当然数据帧也会传到1号网桥的接口1,网桥是“有智商的”,它会根据收到的帧来判断这个数据帧应该从哪个接口转发出去或者是直接丢弃
- 所以1号网桥现在就先按源地址,也就是按照A的MAC地址查找转发表,发现转发表当中并没有A的地址,于是就把地址A和收到这个帧的接口1写入到转发表当中,也就是说明如果以后你要给A发送一个数据,那么经过我这个1号网桥我就应该从1号接口转发出去,发到这个对应的网段当中
- 接下来按照目的地址B来查找转发表,发现转发表当中没有B的地址,于是通过除了1接口之外的所有接口转发出去,也就是从2号接口转发出去,转发出来的这个帧到C也到D,但是C和D根据目的地址发现这个帧并不是给自己的,所以它们不予处理直接丢弃
-
同样的这个帧也会转发到了2号网桥的1号接口,2号网桥按照同样的方式会处理这个帧,首先2号网桥的转发表当中,找不到源地址A的MAC地址,于是就把A和接口1写进转发表,表示如果以后经过2号网桥的数据这有要发往A地址的这样的我们应该从2号网桥的1号接口转发出去
- 接下来2号网桥查找自己的转发表当中有没有目的地址是B的,发现转发表当中没有B的地址,于是通过除了1接口之外的所有接口转发出去,也就是从2号接口转发出去,转发出来的这个帧到E也到F,但是E和F根据目的地址发现这个帧并不是给自己的,所以它们不予处理直接丢弃,到目前为止A和B的通信过程就已经结束了
- 为什么A和B在一个网段不直接发送,还要通过网桥转发出去呢?因为这两个网桥是不知道当时网络的一个拓扑情况的,所以我们需要这种自学习的算法来构建我们的转发表,这样就方便以后我们在发送数据的时候能够找到应该从哪个接口转发出去这个帧或者是对这个帧进行一个什么样的处理
- 假如现在是主机F要给主机C发送一个数据帧,当然E会收到,也会从2号网桥的2号接口被收到,开始“有智商”地处理这个帧,它会先看这个帧的源MAC地址,发现没有F,于是会把F和接口2写入转发表当中,接下来就看转发表当中有没有包含目的地址C的,发现这个转发表当中没有,那它直接就把这个数据帧转发出去,通过2号网桥的端口1转发到中间网段当中
-
C和D同时受到了这个数据帧,同时1号网桥的2号端口也会受到这个数据帧,到目前为止这个C是已经正确接收到了这个数据帧了,但是发送还没有停止,这个帧经过了1号网桥的2号端口进入了1号网桥,1号网桥再对这个数据帧进行一个处理,首先看这个数据帧的源MAC地址,发现是F但是转发表当中没有F,于是把F和端口2写入转发表,再来看目的地址C,发现没找到,于是继续转发出去,但是A和B根据目的地址发现这个帧并不是给自己的,所以它们不予处理直接丢弃,到目前为止F和C的通信过程就已经结束了
-
假如现在B要给A发送这个数据帧,B发送的数据会广播到它这个网段当中的所有的主机,那自然A就收到了,同时这个数据帧会传给1号网桥,从1号网桥的1号端口进入,现在1号网桥就会查询转发表看有没有包含源地址B的,没有则把B和端口1写入转发表当中,接下来看这个数据帧的目的地址A有没有在这个转发表当中,发现是有的,而且接口还是接口1,于是1号网桥就知道我不用转发这个帧了,A和B都在我左边端口1所在的网段内,所以网桥只需要把这个帧丢弃就不用继续再转发了,所以在本次通信中1号网桥的转发表添加了一行但是2号网桥的转发表没有变化,因为这个数据帧压根就没有转发出去到达2号网桥
- 显然如果这个网络上的每一个站都发送帧的话,那么每一个站的地址最终都会被记录在这两个网桥的转发表当中
- 当然这个转发表并不是一成不变的,它会在几分钟就刷新一次,每刷新一次就会把之前所有的记录全部删除,然后再通过自己的自学习算法机制再次完善转发表,所以转发表的更新速度还是很快的,因此就可以很好地反映出当前的最新的网络拓扑状态
源路由网桥
- 发送的发现帧会通过各种路径到达目的站点,进行全图的搜索,肯定会有一条符合条件的最优路径,所有发现帧到达目的站点之后会原路返回,网桥根据所需要的最佳路由信息选择一条最佳路径,把选择的路径作为最佳路由信息放在帧的首部,以后我们发送的数据帧只要源站和目的站和这个路由信息是相符的,那我们就会采用方案5的这种路由选择方案,把数据帧发送出去
多接口网桥——以太网交换机
以太网交换机的两种交换方式
直通式交换机
存储转发式交换机
交换机的自学习功能
- 假设交换机此时维护的转发表此时空空如也
- 现在A要给B发送一个MAC帧,首先A发送的MAC帧进入交换机的时候交换机会先看转发表中有没有发往B的,发现没有,那交换机就会全部转发出去,并且会把A地址和1端口记录到转发表当中,交换机就知道以后要发给A的话就从1号端口中走出来,交换机一定不会放过转发表中没有的“新的知识”
- B、C、D都能都收到交换机转发出去的A发送的MAC帧,但是C、D发现此时的MAC帧不是发给自己的,所以直接丢弃,但是B的MAC地址是match的,所以B直接收下MAC帧
- 现在B要给A发送一个MAC帧,首先B发送的MAC帧进入交换机的时候交换机会把B地址和2端口记录到转发表当中,交换机就知道以后要发给B的话就从2号端口中走出来,交换机一定不会放过转发表中没有的“新的知识”,接下来交换机就发现B要发给的是A,在转发表中刚好有这么一个表项A地址和1接口,非常果断地把MAC帧从1号接口当中转发出去,3、4号就没啥动作了,这就是一整个自学习的功能
- 显然如果这个网络上的每一个站都发送帧的话,那么每一个站的地址最终都会被记录在这个交换机的转发表当中
- 当然这个转发表并不是一成不变的,它会在几分钟就刷新一次,每刷新一次就会把之前所有的记录全部删除,然后再通过自己的自学习算法机制再次完善转发表,所以转发表的更新速度还是很快的,因此就可以很好地反映出当前的最新的网络拓扑状态
冲突域 v.s. 广播域