本笔记结合《2023王道计算机网络考研复习指导》食用🔥
数据链路层
1.1、功能概述
1.2、基本概念
结点:主机、路由器
链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
数据链路:网路中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
帧:链路层的协议数据单元,封装网络层数据报。
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
1.3、功能概述
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,使之队网络层表现为一条无差错的链路。
我们来看上图:大Boss是网络层,小秘书是数据链路层,物理层是小傻子。网络层给数据链路层5份文件,数据链路层将5份文件编号给物理层,物理层传输给B公司的数据链路层,B公司的数据链路层发现文件缺失,于是让小傻子去找,小傻子将文件找全之后再给B公司数据链路层,数据链路层再交给网络层。
所以数据链路层的功能如下:
- 为网络层提供服务。无确认无连接服务,有确认无连接服务,有确认面向连接服务。(有连接一定有确认)
- 链路管理,即建立的连接、维持、释放(用于面向连接的服务)
- 组帧
- 流量控制(限制发送方)
- 差错控制(帧错/位错)
1.3.1、封装成帧
封装成帧就是在一段数据的前后部分添加首部贺尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。首部和尾部包含许多的控制信息,它们的一个重要作用:帧定界(确定帧的界限)
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的其实和终止。
组帧的四种方法:
- 字符计数法
- 字符(节)填充法
- 零比特填充法
- 违规编码法
1、透明传输
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就"看不见"有什么妨碍数据传输的东西。
当所传数据中的比特组合恰巧与某一控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
数据链路层实现透明传输,可以理解为数据链路层不会关心所传内容的信息,没有什么可以妨碍数据链路层的数据传输。
例如我们的小秘书,可能大Boss要传输的内容是解雇小秘书的文件,小秘书也不会去看文件内容,而是完整的传输给B公司的数据链路层。
2、字符计数法
帧首部使用一个计数字段(第一个字节,八位)来标明帧内字符数。
缺点:鸡蛋装在一个篮子里了。假如我们的第一个帧首部出错了,那么接收方对帧的判断就全部出错了。
3、字符填充法
接收方看到这样的比特组合,就知道帧什么时候开始,什么时候结束。
- 当传送的帧是由文本文件组成时(文本文件的字符都是从键盘上输入的,都是ASCII码)、不管从键盘输入什么字符都可以放在帧里传过去,即透明传输
- 当传送的帧是由非ASCII码的文本文件组成时(二进制代码的图像或图像等)。就要采用字符填充方法实现透明传输。否则会错误的找到帧的边界。
字符填充法如下:在原始数据中的除帧首尾部之外的其他帧标记前加上转义字符(也就是字节填充),对于和转义字符相同的帧标记前也加上转义字符,这样接收方碰到这样的转义字符就知道这里不是帧的结束部分,会忽视从而进行透明传输直到帧结束,最终接收端将转义字符删去就是接收到的数据。
4、零比特填充法
例如上图,我们在帧首部和帧尾部使用相同的比特进行标记,如果在帧中的数据部分也出现了相同的比特串,那么我们就需要使用零比特填充法了。零比特填充法(5110)
5、违规编码法
在曼彻斯特编码中只会出现前高后低、前低后高的编码,违规编码就将用不到的编码高高、低低来定界帧的起始和终止。
由于字节计数法Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较为普遍使用的帧同步法是比特填充和违规编码法。
1.3.2、差错控制(检错编码)
1、差错从何而来
概括的说,传输中的差错都是由于噪声引起的。
全局性:1.由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。
? 解决办法:提高信噪比来减少或避免干扰.(对传感器下手)
局部性:2.外接特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
? 解决办法:通常利用编码计数来解决
差错主要分为两种:
链路层为网络层提供服务:无确认无连接服务,有确认无连接服务,有确认面向连接服务。
我们对于通信质量好的一般采取无确认无连接服务,也就是不使用确认和重传机制
我们对于通信质量差的无线传输链路一般采取有确认无连接服务、有确认面向连接服务,也就是使用确认和重传机制
2、基础知识
这里我们解释一下物理层的编码和数据链路层的编码:
数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,例如曼彻斯特编码。而数据链路层的编码针对的是一组比特。它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错。
冗余编码:在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到码字是否仍符合原规则,从而判断是否出错。
举个例子:我想给你两串骨肉相连,为了方式服务员偷吃,所以我告诉你肉块是偶数个,这样你拿到骨肉相连之后可以检测肉是否为奇数个来判断是否出错。当然这里有局限性,2、4、6、8块肉都是偶数个,要是数目不对岂不是也是错误。这就是下面的奇偶校验码了。
3、检错编码-奇偶校验码
奇校验码:奇校验码就是在 n-1 位的信息元之前加上1位校验元,使得 “1” 的个数是奇数
偶校验码:偶校验码就是在 n-1 位的信息元之前加上1位校验元,使得 “1” 的个数是偶数
来看上题,奇校验只需要让1的个数为奇数就行,那么A、B、C都可以检测出错误,对于D虽然1的个数确实为奇数,但是如果有两位比特码发生了错误,也不能保证说D就一定是正确的。(意思也就是如果正确的比特1的个数是3个,可是传输过来有比特码发生错误,导致1的个数变成了5个,虽然仍然符合奇校验码的规则,但是它就是错误的)
奇偶校验码特点:只能检查出奇数个比特错误,检错能力为50%
4、检错编码-CRC循环冗余码
- 准备待传的有效数据
? 在发送端将要发送的数据切割成一段又一段的小的比特组合,每一个小的组合都是等长的,假设是d位,每一段都叫做一个组
- 每个组都加上冗余码构成数据链路层的传输单元帧再进行发送
? d位后面加r位帧检验序列FCS或者说是冗余码要如何确定呢?首先我们要引入规则,规则就是双方商定的除数/生成多项式,位数是r+1位的,基本上题当中给出的生成多项式是 1101 形式,当然有时候也会直接给一个多项式的形式,例如 X3+X2+1 ,我们要将这个多项式看破本质,将其转换为比特组合的形式,只需要添上系数并且将其他阶数的X补齐,1 *X3+1 *X2+0 *X1+1 * X0 ,我们将前面的系数提出来就是 1101 。有时候对于这个多项式也会提到一个词:阶 ,阶数指的就是最高位的X右上角的幂
? 那么我们接下来已经拿到了除数也拿到了d位数据,怎么计算r位FCS呢?
? 我们在要发送的d位数据后面加上r位0(r位是取决于生成多项式的位数-1),再去除以生成多项式。这个除法不是十进制的除法,是模二除法,模二指的就是加法不进位,减法不退位,等同于异或(同0异1)。之后得到商和余数,我们要重点看余数,最后的余数其实就是r位的FCS,直接将r位FCS添到前面的r位0上面,也就是补成了d位+r位FCS的帧,再把这个帧发送到链路上面。
- 接收方检验
? 接收方收到d+r位数据,要怎么检验呢?我们要用d+r位数据除以我们约定的生成多项式(r+1位),看其结果,若余数为0则认为正确接收,余数不为0则丢弃。
我们来看一道例题:
例:要发送的数据是1101011011,采用CRC校验,生成的多项式是10011,那么最终发送的数据应该是?
最终发送的数据:要发送的数据+帧检验序列FCS(冗余码)
- 计算冗余码
- 加 0 :假设生成多项式G(x)的阶为r,则加r个0。
- 模2除法:数据加0后除以多项式,余数为冗余码/FCS/CRC检验码的比特序列
10011 表示成多项式为:1 * X4+0 * X3+0 * X2 +1 * X1 + 1 * X0 = X4+X1+X0 = X4+X1+1 。阶为4
小结论:多项式为N位,阶为N-1位。例如10011多项式为5位,阶为4位。
-
加0:所以多项式的阶为4,则加4个0。则要发送的数据加0之后为 11010110110000 -
模2除法:得到最终的余数,将余数加到要发送的数据后,得到最终发送的数据为: 11010110111110
接收端检错过程:把收到的每一帧都除以同样的除数,然后检查得到的余数R
- 余数为0,判定这个帧没有差错,接收。
- 余数不为0,判定这个帧有差错(无法确定到位),丢弃。
FCS的生成以及接收端CRC检验都是由硬件实现,处理很迅速,因此不会延误数据的传输。
在数据链路层仅仅使用循环冗余检验CRC差错检测奇数,只能做到对帧的无差错接收,即"凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错"。接收端丢弃的帧虽然曾收到了,但是最终还是因为有差错被丢弃。“凡是接收端数据链路层接收的帧均无差错”。
链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。可靠传输指的是数据链路层发送端发送什么,接收端就收到什么。
1.3.3、差错控制(纠错编码)
奇偶校验码只能发现位置,而海明码可以发现错误、找到位置、纠正错误。
1、海明距离
两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距),一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的海明距离(码距)
举个例子:一个队伍中四个男生,表示1111,另一个队伍中一个男生三个女生,表示1000。这两只队伍位数不一样的共3位,那么这也就是两个编码的海明距离。
对于有效编码集我们计算码距,比较简单的就是看是否有海明距离为1的,有则海明距离为1。没有就看是否有海明距离为2的,有则海明距离为2。
对于上图:码距为1的的有效数据集,例如000出错变成了001,001仍然属于有效数据集,所以码距为1是无法检测出错误,更别提纠正错误了。码距为2的有效数据集,例如0000变成了0001,0001不属于有效数据集,因此1位错误是可以检测出来的,但是无法纠正,例如0000变1位变成0001,1001变1位也可以变成0001,所以无法纠正。
小结论:如果海明码要检测d位错的话,需要的码距是d+1。如果海明码要纠正d位错的话,需要的码距是2d+1
2、确定校验码位数r
对于m位数据,校验码有r位。如果有r位的校验码,那么校验码一共有2r种取值。我们之所以在海明码这用了校验码可以纠正错误,就是因为校验码在这的组合,或者说不同的取值可以代表不同的位数,不同的位置发生了错误,除了发生错误还有一种情况就是没有错误,也就是1。剩下的情况就是 m+r 位发生错误,所以就会有 m+r 种错误,因此会有海明不等式。
来看一个题:例如我们要发送的数据D=1100
数据的位数m=4,满足不等式的最小r为3,也就是D=1100的海明码应该有4+3=7位,其中原数据4位,校验码3位。
3、确定校验码和数据的位置
数据自低向高位,第一步已经知道4位数据需要3位的校验码,所以共7位。将校验码放在 20、21、22的位置上,分别为X1、
X2、X4,再将1100添上即可
4、求出校验码的值
多了一行二进制,也就是将序号转换为二进制的形式
海明码会采用一个通配符的形式,在X4也就是4号校验码的位置通配符是100 ,我们写成1** 其实就是为了表示此校验码是能管所有1** 的数据位的,4、5、6、7都是1** 的形式,都是由4号校验码来校验。在X2也就是2号校验码的位置通配符是 010 ,我们写成 *1* 为了表示此校验码能管所有*1* 的数据位的,2、3、6、7是*1* 的形式,所以是由2号校验码来校验。
所以我们相当于根据不同的校验位对所有的数据进行了一个分组,分完组就可以求出X1、X2、X4 分别是多少了。我们采用奇偶校验,通常会采用偶校验。如果采用奇校验,题目也会给出说明的。所以为了保证偶数个1,先看4号检验码负责的4、5、6、7要出现偶数个1,所以X4=0,再看2号校验码负责的2、3、6、7要出现偶数个1,X2=0,再看1号校验码负责的1、3、5、7要出现偶数个1,X1=1。将其填入得到完整的海明码
5、检错并纠错
接收方收到数据,写出负责校验的校验码对应负责的校验码,使用偶校验看是否符合规则,可以看到接收方在第5号位发生了错误,我们检查完就开始纠错。
将负责校验的校验码写一列,并将其收到的校验写在其后面,使用偶校验或者异或为0来求出X4、X2、X1的值 ,将其转置横着写,101对应的十进制数是5,所以第5位错了。
1.4、流量控制与可靠传输机制基础知识
1.4.1、数据链路层的流量控制
较高的发送速度和较低的接受能力不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
我们之前讲的中间系统,包括路由器、交换机,它们所在的层次只有网络层以下三层(网络层、链路层、物理层),但是在两端也就是发送端和接收端两个主机是7层或者是5层全部有的,它们有传输层。传输层的流量控制是端到端的,也就是传输层的流量控制是在两个主机之间的。而链路层的流量控制是每两个相邻结点之间的。
数据链路层流量控制手段:接收方收不下就不回复确认
传输层流量控制手段:接收端给发送端一个窗口公告。
举个例子:我养了一条猫(虽然我更喜欢狗),我将猫粮给小猫,小猫吃完了若还想吃就把空碗发送给我,若吃饱了就不会把空碗给我。这个空碗就相当于链路层的一个确认帧,如果接收到了数据同时还有足够的空间去容纳新的数据,就会从接收端发送一个确认帧发给发送端,这个时候发送端就知道接收端还是有空间的,那我就继续给接收端发送数据。
1.4.2、流量控制的方法
停止-等待协议很简单,我们看一下滑动窗口协议
发送窗口有6个,接收窗口只有1个,此时此刻发送窗口的6个全都可以一个接着一个发送,假如说发送方现在发送了0号序列帧给接收方,接收方收到0号帧之后就返回给发送方一个确认帧,同时接收方的窗口向前移动一位。也就是说接收方已经准备好来接收1号帧了。
那发送方收到0号确认帧,就继续向前移动开始发送1号帧
当然也有可能发送方发送1号帧没有接收到返回的确认帧,那么发送方就连续发送2、3、4、5、6号帧,直到收到确认帧之后才会向前移动一格
在数据链路层窗口的大小是固定的,在传输层窗口的大小是不固定的
1.4.3、可靠传输、滑动窗口、流量控制三者关系
1.4.4、停止-等待协议
-
为什么要有停止-等待协议? 除了比特出差错,底层信道还会出现丢包问题。为了实现流量控制。 丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失 -
研究停止-等待协议的前提? 虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。"停止-等待"就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。 -
停等协议有几种应用情况? 无差错情况和有差错情况
1、停等协议-无差错情况
2、停等协议-有差错情况
- 数据帧丢失或检测到帧出错
发送方首先发送0号帧,接收方收到0号帧并且回复一个确认,发送方收到确认就可以发送1号帧,在发送1号帧时线路故障导致帧丢失,那么接收方就不能发送确认帧(所以是虚线),发送方不会一直等,而是启动一个超时计时器,时间结束就会重传1号帧
注意:
- 发送方发送完一个帧,必须保留它的副本。(例如发送方发送完0号帧,要保留一个0号帧的副本,方便重传)
- 数据帧和确认帧必须编号。如果接收端收到连续编号的帧,那么就说明发送端进行了超时重传,连续出现编号相同的确认帧,就表明接收方收到了相同的重复的帧,编号可以解决帧的丢失,帧的重复等问题
RTT(往返传播时延):就是帧放到链路上之后开始传播到收到确认帧为止,这样一段时间。
- ACK丢失(确认帧丢失)
如上图,发送1号帧,但是返回确认帧ACK1丢失,那么发送方超时仍会重传1号帧,接收方因为已经收到两份1号帧,所以会丢弃第二次重复的1号帧,再重传确认1号帧。
- ACK迟到(确认帧迟到)
发送方发送0号帧,接收方返回确认帧迟迟不到,发送方等一个超时计时器之后会再次重传0号帧,因为接收方会收到两个0号帧,就会丢弃重复发送的0号帧,然后就会返回一个0号确认帧,接着发送方再发送1号帧。若此时收到接收方的的第一次0号确认帧,则发送方会丢弃
3、停等协议性能分析
TD 表示发送方发送一个数据帧的发送时延
RTT 表示往返时延
TA 表示确认帧的发送时延
从上图可以看到我们的信道利用率是比较低的,因为大部分时间都在路上,发送和接收时间相对来说占比很小
4、信道利用率
发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率
信道利用率
=
(
L
/
C
)
/
T
信道利用率 = (L/C)/T
信道利用率=(L/C)/T
- L : T内发送L比特数据
- C : 发送方数据传输率
- T :发送周期(从开始发送数据,到收到第一个确认帧为止的时间)
信道吞吐率
=
信道利用率
?
发送方的发送速率
信道吞吐率 = 信道利用率 * 发送方的发送速率
信道吞吐率=信道利用率?发送方的发送速率 我们来看一道题:
例:一个信道的数据传输率位4kb/s,单向传播时延位30ms,如果使停止-等待协议的信道最大利用率达到80%,要求的数据帧长度至少为()
答案:
1.4.5、后退N帧协议(GBN)
先来回顾停等协议,发送方每发送一个帧,就要一直处于等待的状态,直到接收方接收方发送给它一个确认帧,发送方才可以发送一个新的数据帧。这样就会使得发送方发送数据的时间很小。我们可以让发送方发完一个帧立马接着发第二个、第三个帧,接着等三个确认帧,这种技术叫做流水线技术,我们了解就行,不是考研重点。
我们要改进流水线技术,可以增加序号范围,传送的数据帧必要有一个唯一的序号,例如上图中三个数据帧的序号都要是不同的,这样接收方才能返回每一个唯一对应的确认帧。这样的话,如果帧丢失,我们也能根据序号找。第二个改进就是发送方需要缓存多个分组,停止等待协议中发送方可能只需要缓存一个分组,但是流水线技术中需要缓存多个分组。当然,帧丢失、帧迟到的问题我们也要通过**后退N帧协议(GBN)、选择重传协议(SR)**来改善。
1、后退N帧协议中的滑动窗口
发送窗口发送0号帧,将0号帧放到链路上,发送方同时还会copy一个0号帧副本(橙色标识 ),在0号帧发送时,1号帧也是可以发送的,同时copy一个1号帧副本。
接收方收到0号帧,就会返回给发送方一个确认帧,确认帧的编号就是发送0号帧的编号,
接下来发送方和接收方都会进行窗口前移(因为发送方收到0号确认帧,接收方收到0号帧),至此这个0号帧就可以说是交易成功了。1号帧和0号帧一样,也是这样。
注意 :为了使得效率更快一些,不会依次确认收到确认帧,而是可以累积确认。(假如发送方1、2、3号帧全部发送,接收方不用逐一的确认,只需要对3号帧确认即可,也就是说只需要返回3号确认帧即可,这样发送窗口就可以前移3位了)
发送窗口这可以被分为四个区域:发完被确认的帧、已经发送但等待确认的帧、还能发送的帧、还不能发送的帧
- 停等协议:发送窗口和接受窗口数量都为1
- 后退N帧协议:发送窗口是N个,接受窗口只能有1个
- 选择重传协议:发送窗口和接受窗口数量都为N个
2、GBN发送方必须响应的三件事
-
上层的调用 上层要发送数据时,发送方先检查发送窗口是否已满,如果未满 ,则产生一个帧并将其发送;如果窗口已满 ,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会再发送。(实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧) -
收到了一个ACK GBN协议中,对n号帧的确认采用累积确认 的方式,标明接收方已经收到n号帧和它之前的全部帧。 -
超时事件 协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧。
停等协议当中每一个定时器超时之后都会重传一个帧,在GBN协议当中重传的是连续的几个帧。
假如发送方给接收方发送0号帧,接收方收到0号帧就会返还一个ACK0。GBN协议强就强在它发完0号帧,就可以发送1号帧,如果1号帧很不幸在路上丢失了,因此接收方就收不到1号帧,但是接收方很专一,它知道自己要等的就是1号帧,所以对于之后到来的2、3、4号帧接收方都会丢弃掉,发送方过了定时器时间还未收到1号帧的确认帧便会重新发送1号帧以及所有已发送但是未收到确认的帧(例如2、3、4号帧)
3、GBN接收方要做的事
- 如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。
- 其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个按序接收的帧序号)
4、运行中的GBN
发送0帧,接收方收到0号帧返回ACK0,之后发送方连续发送1号帧,接收方收到1号帧返回ACK1,发送2号帧时路上丢失。
5、滑动窗口长度
例如我们采用2个比特对帧编号,那么窗口帧的编号为 0、1、2、3、0、1、2、3…。因为帧的序号是可以重复利用的。我们可以算一下发送窗口的尺寸为[1,3] 。 如果我们让发送窗口为4,那么我们让0、1、2、3号帧一个接一个发送出去,然后很不幸这四个帧全部丢失,因此计时器超时之后发送方会再次重传,这个时候接收方就不知道重传的0、1、2、3号帧到底是新的帧,还是旧的帧,就无法区分了。
6、GBN协议重点总结
- 累积确认(偶尔捎带确认)
- 接收方只按顺序接收帧,不按序号则无情丢弃
- 确认序列号最大的、按序到达的帧(如果出现帧的差错问题,比如我们收到1、2号帧之后,又收到了4号帧,我本来是要收3号帧的你给我来个4号帧,那么我会将4号帧丢弃,返回给你一个
ACK2 ) - 发送窗口最大为2^n-1,接收窗口大小为1
7、习题练习
- 数据链路层采用了后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到了0、2、3号帧的确认,啧啧发送方需要重发的帧数是()
答案:
重新发送4、5、6、7帧
- 主机甲和主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口尺寸为1000,数据帧长为1000字节,信道带宽为100Mb/s,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲、乙之间的单向传播时延是50ms,则甲可以达到的最大平均数据传输率约为
答案:
- 确认帧的发送延迟被忽略
- 带宽是发送方发送数据的理想状态的速度,我们要考虑甲发送数据的理想状态是一直发送,发送窗口一直前移,这样数据传输率自然可以向带宽速度趋近
- 还有一种情况就是甲将发送窗口的数据全部发送出去了,但是还没有等待第一个帧的确认帧,所以甲发送完所有数据就要先等一会,等到接收方发送第一个帧的确认帧,收到之后甲才可以滑动窗口前移,进而再发送第二批数据,我们来计算是否会出现这种情况呢。
首先我们计算甲将发送窗口数据全部发送出去的时间:
(1000 × 1000 × 8b)/(100 × 10^6 b/s) = 80ms
我们再来计算甲将数据发送之后再收到确认帧的时间:双向传播时延 + 甲发送第一个帧的发送时长
2 × 50ms + (1000 × 8b / 100 × 10^6 b/s) = 100.08 ms
这我们就可以看出甲发送完自己窗口的所有数据之后,还没有收到第一个帧的确认帧,因为还没有到100.08ms这个时间,因此需要再等待然后才能收到确认帧。收到确认帧之后甲发送窗口就前移,接下来的流程如上。所以我们使用 发送数据的大小/从开始发送第一个帧到收到第一个帧的确认帧这一段时间:
(1000 × 1000 × 8b)/100.08ms ≈ 80Mb/s
8、GBN协议性能分析
优点:因连续发送数据帧而提高了信道利用率
缺点:在重传时必须把原来已经正确传送的数据帧重传,是传送效率降低。
1.4.6、选择重传协议
1、GBN协议的弊端
举个例子:在GBN协议中,接收方收到一个面包片可以吃,也收到了一个火腿片也可以吃, 但是他马上收到了一个牛排,那么他是不会吃的,因为一直在等他的番茄。而且他收到的牛排也会丢弃掉,所以资源就被浪费了。
解决办法:只重传出错的帧
- 设置单个确认:逐一对帧进行确认,错的帧重传,对的帧就不重传
- 同时加大接受窗口:例如发送方乱序发送了0、2、3号帧,接收窗口虽然一直在等1号帧,但是对于到来的2、3号帧会先存储而不丢弃。(这也就是接收缓存,缓存乱序到达的帧)
2、选择重传协议中的滑动窗口
如上图,发送窗口我们设置4个,接收窗口我们也设置了4个,我们来看一下分成了几个部分:
发送方:
接收方:
- 滑动窗口内的帧
- 5:希望收到但没有收到的帧,窗口下界没有收到帧,所以滑动窗口不能前移
- 6:收到了且返回确认的帧,这个时候将6号帧要放到
缓存 里(目的就是不丢弃6号帧,等待收到5号帧且返回5号帧的确认帧,然后将滑动窗口向前移动两个格子) - 0、7:等待接受的帧,也就是接下来发送0、7号帧,接收方都有空间来接收
- 后面剩下的部分因为滑动窗口没有到达,所以不能接收
- 前面剩下的部分就是已经接收完而且也返回确认了
3、SR协议发送方必须响应的三件事
- 上层的调用
- 从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBM一样,要么将数据缓存,要么返回给上层之后再传输
- 收到了一个ACK(确认帧)
- 如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。
- 超时事件
- 每个帧都有自己的定时器,一个超时事件发生后只重传一个帧。
4、SR协议接收方必须要做的事
SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧(收谁确认谁),直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
如上图:
- 5号帧:等待接收5号帧
- 6号帧:已经收到了6号帧并且正确返回了一个确认
- 7、0号帧:7、0号帧还未接收到
假如此时来了7号帧,我们就会将7号帧缓存起来,暂时存储下来,直到5号帧到来并返回确认帧。此时5、6、7号帧均正确接收且返回确认帧,那么我们就将滑动窗口向前移3位。
5、运行中的SR
来仔细分析一下上图:发送窗口和接收窗口的尺寸都是4
发送方开始发送0号帧,接收方接收0号帧并返回0号确认帧,之后接收方的滑动窗口前移一位。发送方接着发送1号帧,接收方接收1号帧并返回1号确认帧,之后接收方的滑动窗口前移一位。发送方接着发送2号帧,但是发送2号帧时在路上丢失了,于是进入定时器计时状态,接着发送方继续发送3号帧,接收方接收3号帧并返回3号确认帧,接收方知道自己要接收的其实是2号帧,于是会将3号帧进行缓存。发送方继续发送4号帧,此时刚好接收到0号帧的确认帧,所以发送方滑动窗口前移一位,接收方接收4号帧进行缓存并返回4号确认帧,发送方继续发送5号帧,此时刚好接收到1号帧的确认帧,所以发送方滑动窗口继续前移一位,接收方接收5号帧进行缓存并返回5号确认帧。此时2号帧的定时器超时,于是发送方重传2号帧,接收器接收2号帧并返回2号确认帧,此时接收方2-5帧就可以进行交付(交给网络层),滑动窗口前移三位。
6、滑动窗口长度
窗口就是为了解决流量控制的问题,发送窗口过大就会导致接收方来不及接收造成溢出的现象,发送窗口过小就没啥意义了,倒不如不传输数据罢了。
在SR协议中,窗口的上限值:WTmax=WRmax=2(n-1)
n就是多少比特来编号,例如下图的例子,用0、1、2、3来编号,其实是用了2个比特就可以满足,n就是2。
看两个例子:
左边接收方接收的是重传的0号帧,右边接收方接收的是新的0号帧。对于接收方是不清楚接收的帧是重传的还是新的帧。这里的发送窗口和接收窗口是3,但是窗口的上限值为 2(2-1)=2,超过了2就会出现问题。
7、SR协议重点总结
- 对数据帧逐一确认,收一个确认一个
- 只重传出错帧
- 接收方有缓存
- 窗口的上限值:WTmax=WRmax=2(n-1)
8、习题
- 数据链路层采用了选择重传(SR)协议,发送方已经发送了编号为0~3的帧。现已收到1号帧的确认,而0、2号帧依次超时,则发送方需要重传的帧数是()
答案:重新发送0、2号帧
1.4.7、信道划分介质访问控制
1、传输数据使用的两种链路
举个例子:
我们和美国的朋友进行通话,这种通话没有第三者,我们的通话内容只有我们自己知道,这就是点对点链路,适用于范围更大、距离更远的广域网。
但是如果如果我们在班级里喊话:“姓秦的过来一下”,这种通话内容全班都可以听见的,就是广播式链路。适用于范围小、距离近的局域网。类似于我们的对讲机。
如上图,A发信号给B,但是C也可以收到信号,只是C接收到信号发现不是发给他的,他就会丢弃。这就是总线型结构。缺点就是如果B链路出错,那么C也就收不到消息。
例如A要给B发信号,经过集线器时其余主机也可以收到信号,这就是星型(逻辑上也是总线型)。优点是即使B链路出错,不影响其余主机之间的通信。
需要记住的是总线型、星型是广播室链路的拓扑结构。
2、介质访问控制
介质访问控制的内容就是,采取一定的措施,使得两对节点之间的通信不会发生相互干扰的情况。
英文记得记住,这特么考研就爱这么考
3、信道划分介质访问控制
信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备。
多路复用技术大白话:把多个信号拧成一捆,然后发送,到接受端再将信号分离开来。
3.1、频分多路复用FDM
用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。频分复用的所有用户在同样的时间占用不同的带宽(频率带宽)资源。
如上图:每个用户占一个频带,借着这个频带将数据发送出去,这样就可以使所有用户在传输数据的时候不交缠。
每个频率对应的波形如上图,随着频率的降低,频率的波形宽度会增加,每一个频带我们对应一个主机,因此即使我们把这些信号放到一个信道上面进行传输,我们也能区分开到底谁是谁,而且他们互相之间不会纠缠。
频分多路复用FDM的优点:充分利用传输介质带宽,系统效率较高。由于技术比较成熟,实现也比较容易。
3.2、时分多路复用TDM
时分多路复用TDM:将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个TDM帧中占用固定序号的时隙。比如说A占用时隙1号,B占用时隙2号,C占用时隙3号,D占用时隙4号。而且都是有规律可循的,每一个主机都是轮流占用信道。
注意:TDM帧和链路层传输的帧不一样,TDM帧是在物理层传送的比特流所划分的帧,标志一个周期。
频分复用很类似我们OS中的"并行":同一时间,大家一起向前走
时分复用很类似我们OS中的"并发":一个人占用一段时间片,一个人占用一段时间片
思考:如果A主机休息一会,B主机休息一会,C主机休息一会,信道上只有D在传输数据。可是D并不是所有时间都占用着信道,D也是等三个时间片A、B、C之后才能占用信道,再等三个时间片才能占用信道,所以D等待的时间会比较久,因此造成信道利用率比较低。所以我们的改进时分复用->统计时分复用STDM
3.3、改进的时分复用-统计时分复用STDM
如上图:A、B、C、D四台主机,他们发送数据,但是并不是连续发送,可以看到A发送一格,停一格再停一格又发送一格,B发送两格停两格,C停一格发送两格再停一格,D停三格再发送一格。所以他们发送数据的频率比较低,歇一会发送歇一会发送,对于这种情况我们使用统计时分复用STDM来管理。
统计时分复用STDM就是有一个集中器,集中器的功能就是将四台主机连接起来,然后通过高速链路发送到目的地。集中器就是收集所有的数据再在一条信道上面发送出去。
可以看到每个用户并不是轮流占用一个信道、也不是周期性的占用一个信道。
STDM帧:每一个STDM帧中的时隙数小于连接在集中器上的用户数。各用户有了数据就随时发往集中器的输入缓存,然后集中器按顺序依次扫描输入缓存,把缓存中的输入数据放入STDM帧中,一个STDM帧满了就发出。STDM帧不是固定分配时隙,而是按需动态分配时隙。
这里就有这么一个问题,若线路的传输速率是8000b/s,那对应于时分多路复用TDM中,每一个用户分到的平均速率可能只有2000b/s,但是对应于统计时分多路复用STDM中,每一个用户就可以达到最高8000b/s。所以统计时分多路复用STDM可以使得信道的利用率大大提高。
3.4、波分多路复用WDM
波分多路复用WDM就是光的频分多路复用,在一根光纤中传输多种不同波长(频率)的光信号,由于波长(频率)不同,所以各路光信号互不干扰,最后再用波长分解复用器将各路波长分解出来。
我们知道光有各种各样的频带,因此我们把光的频带放到一块在线路上进行传输,这个传输的过程中高频带和低频带是不会互相干扰的。
只需要记住大概原理,不太会去考
3.5、码分多路复用CDM
A、B是源站,C是目的站。A、B是轮流占用信道,A、B两个发送方共享了时间,但是没有共享空间,因为同一时刻只有一个可以发送。其实和频分多路复用很像,都是将发送方集在一起,在接收方拆离。现在我们看看怎么拆离。
码分多址(CDMA)是码分复用的一种方式。1格比特分为多个码片/芯片(chip),每一个站点被指定一个唯一的m位的芯片序列
发送比特1时站点发送芯片序列,发送比特0时发送芯片序列反码。
具体操作方式:将一个比特分成多个码片/芯片,因为我们发一个比特是有一定时间的,我们可以将发送一个比特的时间分割成n位的芯片序列,那么就分割成了n位微小的时隙。在发送的时候,芯片序列的0通常会写成-1的形式,然后我们用向量S、T来表示这个芯片序列。
C站拿到的是混合的数据,它需要在混乱的数据中分离出不同站点,所以我们就需要先做一个操作,将A、B的芯片序列进行一个设置,步骤如下:
-
多个站点同时发送数据时,要求各个站点芯片序列相互正交,也就是规格化内积为0. 通过计算可知,S、T向量规格化内积为0,确实是相互正交。可是在芯片序列中,不光有比特1,还有比特0。如何表示呢?很简单,在发送比特1时站点发送芯片序列,发送比特0时发送芯片序列反码(也就是将时隙0变成1,时隙1变成0,之后将时隙0变成-1,1变为+1的形式)。
那么我们现在让A主机发送比特1,B主机发送比特0。
- 两个向量到了公共信道上,线性相加
- 数据分离:合并的数据和源站规格化内积。
如果要分离A站点的数据,只需要用A站点的序列S * (S-T) = 1,得到的结果是1,那么就说明A站点发送的是比特1,对于B站点同样类似,最终的结果是-1,也就是比特0
选择题当中,常会出现CDMA和CSMA的混淆,具体怎么区分呢?
CS这款枪战游戏要玩就要让人物"动起来",所以说CS所对应的动起来就是动态分配信道,因此只要是动态分配信道,它里面都用了CS**协议,但是CD就不是CS,所以就是静态划分信道。这样就能区分开静态划分信道和动态划分信道。
1.4.8、随机访问介质访问控制
静态划分信道是在用户通信之前预先的把信道按照时间/空间把信号进行划分,使得用户在通信过程中信号不会发生碰撞。那这种预先分配信道的方式我们称为静态划分信道。接下来我们来看动态分配信道,也叫动态媒体接入控制/多点介入,特点是信道并非在用户通信时固定分配给用户。
用户随机发送信息,如果我们不协调的话,也会产生冲突问题,所以会有这些协议来解决这些冲突问题。
1、ALOHA协议
ALOHA协议分为纯ALOHA协议,时隙ALOHA协议两种。
1.1、纯ALOHA协议
纯ALOHA协议思想:不监听信道,不按时间槽发送,随机发送。想法就发
T0指的就是一个数据帧的从开始发送到发送成功的时间,我们假设每一个站点发送每一个数据帧的时间都是相同的。我们来解析上图:
首先在站点1处发送了一个1号数据帧,T0时间内并没有发生冲突(因为只有它一个在发送),所以它是发送成功的。
之后站点2开始发送2号数据帧,前半段时间很顺利,但是在后半段站N-1开始发送3号数据帧,这个时候信道上有两个站点在发送数据,这就一定会造成冲突。冲突怎么检测出来呢?如果发生冲突,接收方就会检测出差错,然后不予确认,发送方在一定时间内收不到就判断发生冲突。**冲突如何解决呢?**超时后等一随机时间再重传。
ALOHA协议发送成功的概率很低
1.2、时隙ALOHA协议
时隙ALOHA协议的思想:把时间分成若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道,若发生冲突,则必须等到下一个时间片开始时刻再发送。控制想发就发的随意性
如上图:每一个站点只能在时间片的开始发送,第一种情况就是只有一个帧发送,没有其他帧跟他发生冲突,那么这个帧就是发送成功了。另一种情况就是发生冲突,那么会经过一个T0之后发送方就会发现发生冲突了(因为接收方没有给发送方确认帧),这样发送方就会进行超时重传。
1.3、关于ALOHA要知道的事
-
纯ALOHA比时隙ALOHA吞吐量更低,效率更低。 吞吐量:在一段时间内,成功发送的平均帧数 -
纯ALOHA想发就发,时隙ALOHA只有在时间片段开始时才能发送。
2、CSMA协议
载波监听多路访问协议CSMA
CS:载波侦听/监听,每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据。
当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞,即发生了冲突。
MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上。
协议思想:发送帧之前,监听信道。
2.1、1-坚持CSMA
坚持指的是对于监听信道忙之后的坚持。
1-坚持CSMA思想:如果一个主机要发送消息,那么它先监听信道。
- 空闲则直接传输,不必等待。
- 忙则一直监听,直到空闲马上传输。
- 如果有冲突(一段时间内未收到肯定回复),则等待一个随机长的时间再监听。重复上述过程
优点:只要媒体空闲,站点就马上发送,避免了媒体利用率的损失。
缺点:假如有两个或两个以上的站点有数据要发送,冲突就不可避免。
2.2、非坚持CSMA
非坚持指的是对于监听信道忙之后就不继续监听。
非坚持CSMA思想:如果一个主机要发送消息,那么它先监听信道。
- 空闲则直接传输,不必等待
- 忙则等待一个随机的时间之后再进行监听
优点:采用随机的重发延迟时间可以减少冲突发生的可能性
缺点:可能存在大家都在延迟等待过程中,使得媒体仍可能处于空闲状态,媒体使用率降低。
2.3、p-坚持CSMA
p-坚持指的是对于监听信道空闲的处理。
p-坚持CSMA思想:如果一个主机要发送消息,那么它先监听信道。
优点:既能像非坚持算法那样减少冲突,又能像1-坚持算法那样减少媒体空闲时间的这种方案。
2.4、三种CSMA对比总结
| 1-坚持CSMA | 非坚持CSMA | p-坚持CSMA |
---|
信道空闲 | 马上发 | 马上发 | p概率马上发 1-p概率等到下一个时隙再发送 | 信道忙 | 继续坚持监听 | 放弃监听,等一个随机时间再监听 | 持续监听,直到信道空闲再以p概率发送 | | | | |
3、CSMA/CD协议🔥
载波监听多点接入/碰撞检测CSMA/CD(carrier sense multiple access with collision detection)
CS:载波侦听/监听,每一个站在发送数据之前以及发送数据时都要检测一下总线上是否有其他计算机在发送数据。
MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上。 总线型网络
CD:碰撞检测(冲突检测),“边发送边监听”,适配器边发送数据边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。 半双工网络
思考:为什么我们先监听信道后发送数据还会发生冲突呢?
答案:因为电磁波在总线上总是以有限的速率传播的。电磁波可能还没传播过来,所以我们没有收到信号。
3.1、传播时延对载波监听的影响
有两台主机A、B,他们连接在同一条总线上。之间的直线距离是1KM,目前A要给B发送信息,B也要给A发送信息。 A给B发送的数据到达上图,此时B监听信号,因为并没有发现信号进入B的主机内,所以B就认为这个信道是空闲的,因此B发送数据这样就会发生碰撞冲突。
最迟多久才能知道自己发送的数据没和别人碰撞呢?
答案:最多是两倍的总线端到端的传播时延(2τ),也叫做总线的端到端往返传播时延,也叫做争用期/冲突窗口/碰撞窗口。只要经过2τ的时间还没有检测到碰撞,就能肯定这次的发送不会发生碰撞。
因为δ是不固定的,但是τ是固定的,从上图可以看出A检测到发生碰撞的时间t=2τ-δ,B检测到发生碰撞的时间t=τ,δ最小是0,所以说最多是两倍的总线端到端的传播时延(2τ),我们才能知道自己发送的数据贺别人碰撞了。
3.2、如何确定碰撞后的重传时机
截断二进制指数规避算法
- 确认基本退避(推迟)的时间为争用期2τ
- 定义参数k,它等于重传次数,但k不超过10,即 k=min[重传次数,10]。当重传次数不超过10时,k等于重传次数;当重传次数大于10时,k就不再增大而一直等于10。
- 从离散的整数集合[0,1,…,2k-1]中随机取出一个数r,重传所需要退避的时间就是 r倍的基本退避时间,即 2rτ
- 当重传达16次仍不能成功时,说明网络太拥挤,认为此帧永远无法正确发出,抛弃此帧并向高层报告出错。
- 第一次重传,k=1,r从{0,1}选;重传推迟时间为0或2τ,在这两个时间中随机选一个。
- 若再次碰撞,则在第二次重传时,k=2,r从{0,1,2,3}选;重传时间为0/2τ/4τ/6τ,从这四个时间中随机选一个
- 若再次碰撞,则第三次重传时,k=3,r从{0,1,2,3,4,5,6,7}选…
我们可以看到,随着重传次数的增加,r的取值范围也就越大,推迟的平均时间也会更久,减少再次发生碰撞的概率。
例题:在以太网的二进制回退算法中,在11次碰撞之后,站点会在0~?之间选择一个随机数。
- k = min [11,10] = 10
- 210-1=1023
- 所以r的取值集合为[0,1,2,…,1023]
3.3、最小帧长问题
CSMA/CD协议的诞生就是为了发生碰撞时能及时的叫停,这种帧长小的情况咋办?
4、CSMA/CA协议
载波监听多点接入/碰撞避免CSMA/CA(carrier sense multiple access with collision avoidance)
CA和CD使用的场景不一样,CA使用在无线局域网当中,CD只能用于总线式以太网(有线网络)。
我们之所以在无线局域网中使用CA协议而不使用CD协议,是因为无线局域网很大,CD无法做到360°全面检测碰撞。第二个问题就是隐蔽站问题。当A和C都检测不到信号,认为信道空闲时,同时向终端B发送数据帧,就会导致冲突,A向B发送数据,C对于A就是一个隐蔽站。为了解决隐蔽站问题,让C能知道A和B要发送数据,CSMA/CA协议就可以解决这个问题。
有礼貌的CSMA/CA:例如我们在开会说话的时候,我先说"大家好",然后我空一小段时间,如果没人与我发生冲突,那么我再说一句话,然后再空一小段时间,然后再看是否有人与我发生冲突。
4.1、CSMA/CA协议工作原理
发送数据前,先检测信道是否空闲。
空闲则发出RTS(request to send),RTS包括发射端的地址、接收端的地址、下一份数据将持续发送的时间等信息;信道忙则等待。
接收端收到RTS后,将响应CTS(clear to send)
发送端收到CTS后,开始发送数据帧(同时预约信道:发送方告知其他站点自己要传多久数据)
接收端收到数据帧后,就用CRC来检验数据是否正确,正确则响应ACK帧。
发送方收到ACK就可以进行下一个数据帧的发送,若没有则一直重传至规定重发次数为止(采用二进制指数退避算法来确定随机的推迟时间)。
- 预约信道
- ACK帧
- RTS/CTS帧(可选)
通俗点来说:A给B发送数据,A先给B发送RTS,B收到RTS就返回给A响应CTS。这个时候C给B发送RTS,B是不会处理这个请求的,因为B先收到A发送的RTS,这样C收不到返回的CTS就不会向B发送数据而是等待,A开始发送数据帧的同时预约信道,这样就告诉了C自己要传多久时间的数据,接收方B收到数据帧后进行检错并返回ACK确认帧。
5、CSMA/CD与CSMA/CA
相同点:
- CSMA/CD 与 CSMA/CA 机制都从属于CSMA的思路,其核心是先听再说。换言之,两个在接入信道之前都必须要进行监听。当发现信道空闲后,才能进行接入。
不同点:
- 传输介质不同:CSMA/CD用于总线式以太网【有线】,而CSMA/CA用于无线局域网【无线】
- 载波检测方式不同:因传输介质不同,CSMA/CD与CSMA/CA的检测方式也不同。
- CSMA/CD通过电缆中电压的变化来检测,当数据发生碰撞时,电缆中的电压就会随着发生变化,而CSMA/CA采用能量检测(ED)、载波检测(CS)和能量载波混合检测三种检测信道空闲的方式
- CSMA/CD检测冲突,CSMA/CA避免冲突,二者出现冲突后都会进行有上限的重传。
1.4.9、轮询访问介质访问控制
1、介质访问控制
信道划分介质访问控制协议(MAC Multiple Access Control)协议:
- 基于多路复用技术划分资源。
- 网络负载重:共享信道效率高,且公平
- 网络负载轻:共享信道效率低
随机访问MAC协议:冲突
- 用户根据意愿随机发送信息,发送信息时可独占信道带宽
- 网络负载重:产生冲突开销
- 网络负载轻:共享信道效率高,单个节点可利用信道全部带宽
轮询访问MAC协议/轮流协议/轮转访问MAC协议:
2、轮询协议
主结点会轮流问从属结点:“你要不要发送数据?”,要发送就说要,在某个从属结点发送数据时,其他从属结点是不能发送数据的,因为主结点还未问到你。
这种轮询协议是不会发生任何冲突的,同时每一次只能允许一台主机发送数据,这台主机就可以占用全部带宽。
这种轮询协议也有一定问题:
- 产生轮询开销。每次主结点询问都会发送一个小数据帧,如果有多个从属结点,那么就会发送很多个小数据帧进行询问,这样就产生比较大的轮询开销。
- 等待延迟。靠后的一些从属结点被问到的时间比较久。
- 单点故障。如果主节点芭比Q了,那其他从属结点也就都over了。
3、令牌传递协议🔥
令牌:其实就是一个特殊格式的MAC控制帧,不含任何信息。主要是控制信道的使用,确保同一时刻只有一个结点独占信道(结合了随机访问协议中独占带宽的优点,同时也会结合信道划分协议的优点,就是不会发生碰撞,不会发生冲突,主要是因为每次只有一个主机可以掌握令牌)。
如上图:A、B、C、D四台主机,TCU转发器就是我们在传递数据帧时一个转发接口。如果此时4台主机都不发送数据,那么令牌就会在4台主机之间循环看是否有要发送数据的主机。假如主机D要发送数据给主题A,那么它就拿到令牌,修改令牌的标志位,将令牌的状态由空闲变为繁忙,然后再在令牌的后面加上数据,就构成了数据帧。然后令牌携带数据传递到主机C,主机C发现不是给自己的不予理会,令牌携带数据传递到主机B,主机B发现不是给自己的不予理会,令牌携带数据传递到主机A,主机A发现是给自己的就会将数据拷贝一份,令牌携带数据传递到主机D(相当于逆时针传一圈)。主机A返回给主机D确认帧,主机D检错之后发现没问题,就将令牌的状态由繁忙转变为空闲。
注意:每个结点只能在一定的时间内持有令牌,获得发送数据的权力,并不是无限制地持有令牌。假如主机D要发送很长一段数据,协议是不能让你占用很长时间的令牌的,这样不公平,只能等令牌再转一圈转到主机D的时候,主机D才能继续发送数据。
令牌传递协议同样有一定问题:
- 令牌开销。令牌有时候就没掉了,需要产生新的令牌。
- 等待延迟。主机A若也想发送数据,需要等到D、C、B传递过后才能到达A。
- 单点故障。如果其中主机C宕机了,那么这个路就断了。
令牌传递协议应用领域:
- 应用于令牌环网(物理星型拓扑,逻辑环形拓扑)
- 采用令牌传送方式的网络常用于负载较重、通信量较大的网络中。
1.5、局域网基本概念和体系结构
1.5.1、局域网
局域网(Local Area Network):简称LAN,是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。
特点:
- 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。
- 使用专门铺设的传输介质(双绞线、同轴电缆)进行联网,数据传输率高(10MB/s ~ 10Gb/s)
- 通信延迟时间短,误码率低,可靠性较高
- 各站为平等关系,共享传输信道
- 多采用分布式控制和广播式通信,能进行广播和组播
决定局域网的主要因素为:网络拓扑、传输介质和介质访问控制方法。
1、局域网拓扑结构
星型拓扑:中心节点是控制中心,任意两个节点间的通信最多只需两步,传输速度快,并且网络构形简单、建网容易、便于控制和管理。但这种网络系统,网络可靠性低,网络共享能力差,有单点故障问题。
总线型拓扑:网络可靠性高,网络节点间响应速度快、共享资源能力强、设备投入量少、成本低、安装使用方便,当某个工作站节点出现故障时,对整个网络系统影响小。👍
环形拓扑:系统中通信设备和线路比较节省。有单点故障问题,由于环路是封闭的,所以不便于扩充,系统响应延时长,且信息传输效率相对较低。
树形拓扑:易于扩展,易于隔离故障,也容易有单点故障。
2、局域网传输介质
3、局域网介质访问控制方法
- CSMA/CD :常用于总线型局域网,也用于树型网络
- 令牌总线 :常用于总线型局域网,也用于树形网络
- 它是把总线型或树形网络中的各个工作站按一定顺序如按接口地址大小排列形成一个逻辑环。只有令牌持有者才能控制总线,才有发送信息的权力。
- 令牌环:用于环形局域网,如令牌环网
4、局域网的分类
- 以太网:以太网是应用最为广泛的局域网,包括标准以太网(10Mbps)、快速以太网(100Mbps)、千兆以太网(1000Mbps)和10G以太网,它们都符合IEEE802.3系列标准规范。逻辑拓扑总线型,物理拓扑是星型或扩展星型。使用CSMA/CD
- 令牌环网:物理上采用了星型拓扑结构,逻辑上是环形拓扑结构。已是"明日黄花"(现实中基本不用)
- FDDI网:物理上采用了双环拓扑结构,逻辑上是环形拓扑结构。
- ATM网:较新型的单元交换技术,使用53字节固定长度的单元进行交换。
- 无线局域网:采用IEEE802.11标准。
IEEE802.3、IEEE802.11 这些数字也是要记的,谁让特么考研要考呢
5、IEEE 802标准
IEEE 802系列标准是IEEE 802 LAN/MAN 标准委员会制定的局域网、城域网技术标准(1980年2月成立)。其中最广泛使用的有以太网、令牌环、无线局域网等。这一系列标准中的每一个子标准都由委员会中的一个专门工作组负责。
要记忆的是上面划线的4个标准
6、MAC子层和LLC子层
IEEE 802标准所描述的局域网参考模型只对应OSI参考模型的数据链路层与物理层,它将数据链路层划分为逻辑链路层LLC子层和介质访问控制MAC子层。
1.5.2、以太网
以太网(Ethernet指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带总线局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术。
以太网在局域网各种技术中占统治性地位:
-
造假低廉(以太网网卡不到100块) -
是应用最广泛的局域网技术 -
比令牌环网、ATM网便宜,简单 -
满足网络速率要求:10Mb/s ~ 10Gb/s
1、以太网两个标准
DIX Ethernet V2:第一个局域网产品(以太网)规约。
IEEE 802.3:IEEE 802 委员会 802.3工作组制定的第一个IEEE的以太网标准。(帧格式有一丢丢改动)
只要符合上述两个标准的任何一个我们都称之为以太网,因此我们通常也把以太网叫做802.3局域网。
2、以太网提供无连接、不可靠的服务
无连接:发送方和接收方之间无"握手过程"
不可靠:不对发送方的数据帧编号,接收方不向发送方进行确认,差错帧直接丢弃,差错纠正由高层(传输层)负责。
以太网只实现无差错接收,不实现可靠传输。
3、以太网传输介质与拓扑结构的发展
以太网传输介质:由 粗同轴电缆 -> 细同轴电缆 -> 双绞线+集线器
以太网物理拓扑:由 总线型 -> 星型。星型是以太网目前的物理拓扑结构。
传统的以太网物理和逻辑都是总线型,随着技术的发展,物理会进行改良,因此物理拓扑由原来的总线型改为了星型,但是逻辑上仍然保持和原来一样的总线型。
以太网拓扑:逻辑上是总线型,物理上是星型。
4、10BASE-T以太网
10BASE-T以太网是传输基带信号的双绞线以太网,T表示采用双绞线,现10BASE-T采用的是无屏蔽双绞线(UTP),传输速率是10Mb/s。
5、适配器与MAC地址
计算机与外界有局域网的连接是通过通信适配器的。
通信适配器是在主板插入的网络接口板,也叫做网络接口卡NIC,也就是我们常说的网卡,但是现在计算机主板上都潜入了适配器,适配器上装有处理器和存储器(包括RAM和ROM)。ROM上有计算机硬件地址MAC地址。MAC地址就是在数据链路层上标识每一个设备的独立标识符。
在局域网中,硬件地址又称为物理地址,或MAC地址。(实际上是标识符)
6、以太网MAC帧
最常用的MAC帧是以太网V2的格式。
如上图,有网络层的IP数据报,到链路层就需要对数据报进行封装,链路层的封装过程是要加头(目的地址、源地址、类型)加尾(FCS)的。链路层到物理层要插入前导码,前导码的前面7个字节叫做前同步码,
以太网MAC帧包括目的地址、源地址、类型、数据、FCS
目的地址:接收方的地址。分为三种:1.单波地址:专有的MAC地址。2.广播地址:发送给所有主机。3.多波地址
源地址:发送方的地址
类型:指明上面的网络层使用的什么协议,以便将收到的MAC帧数据上交给网络层的协议
数据:长度46B~1500B
FCS:CRC帧检验序列
以太网V2与IEEE 802.3的区别:
- 802.3的第三个字段是长度/类型
- 当长度/类型字段值小于0×0600时,数据字段必须装入LLC子层。
7、高速以太网
速率≥100Mb/s 的以太网称为高速以太网。
1.5.3、IEEE 802.11无线局域网
IEEE 802.11是无线局域网通用的标准,它是由 IEEE 所定义的无线网络通信的标准。
1、802.11的MAC帧头格式
地址1:RA接收端(基站AP2的MAC地址)
地址2:TA发送端(基站AP1的MAC地址)
地址3:DA目的地址(用户B的MAC地址)
地址4:SA源地址(用户A的MAC地址)
如上图,离用户A最近的基站是AP1,离用户B最近的基站是AP2,如果A要给B通信,A就要把他的信息先发给基站AP1,然后基站AP1再发给基站AP2,解析来AP2再传给B。
解释一下短信"北京欢迎您":我目前在西安,离我的手机最近的基站在西安,但是我嗖的一下飞到了北京,还未下飞机就收到了短信"北京欢迎您"。这是因为我们的手机号离北京比较近,将手机号注册到北京某个基站当中,存储在了基站的数据库中。
我们会将802.11标准中的帧分为上图四类,刚才的4种帧的格式就是第4种AddRess1到AddRess4都有。我们来看一下其他三种:
To AP:发往AP的帧,AddRess1是接收端的地址,也就是AP基站的地址,AddRess2是发送端的地址,AddRess3是目的地址,也即是AP的地址,没有使用AddRess4源地址
From AP:由AP基站发来的帧,AddRess1是接收端的地址,AddRess2是发送端的地址,也就是AP基站的地址,AddRess3是源地址
2、无线局域网的分类
无线局域网分为:
- 有固定基础设施无线局域网
- 无固定基础设施无线局域网的自组织网络
基本服务集BSS:一台基站无线连接很多主机,主机之间可以实现通信,要实现和其他基本服务器通信,通过基站上的有线连接到另一台基站,然后实现有线+无线进行通信。
冷知识:你家WIFI密码是多少 = 你家服务集标识符是多少🆒
1.6、广域网
广域网(WAN,Wide Area Network),通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。
广域网的通信子网主要使用分组交换技术。广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的局域网或计算机系统互联起来,达到资源共享的目的。如因特网是世界范围内最大的广域网。
如上图,广域网连接两个局域网,实现两个局域网之间的互连通信。广域网中有很多结点,叫做结点交换机,这个结点交换机其实是链路层的设备,和路由器的功能很像,都是用来转发分组的,区别就是这个结点交换机只能在单个的网络当中转发分组,而路由器(网络层设备)是可以在多个网络之间转发分组的。
1.6.1、PPP协议
点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的数据链路 层协议,用户使用拨号电话接入因特网时一般都是用PPP协议。只支持全双工链路
1、PPP协议应满足的要求
简单:对于链路层的帧,无需纠错,无需序号,无需流量控制。
封装成帧:帧定界符
透明传输:与帧定界符一样比特组合的数据应该如何处理:异步线路用字节填充,同步线路用比特填充(异步线路指的就是发送当中逐个字节发送,同步线路指的就是发送当中逐个比特发送)
多种网络层协议:封装的IP数据报可以采用多种协议
多种类型链路:串行/并行,同步/异步,电/光……
差错检测:错就丢弃
检测连接状态:链路是否正常工作。
最大传送单元:数据部分最大长度MTU
网络层地址协商:知道通信双方的网络层地址
数据压缩协商
2、PPP协议无需满足的要求
-
纠错 -
流量控制 -
序号 -
不支持多点线路
3、PPP协议的三个组成部分
- 一个将IP数据报封装到串行链路(同步串行/异步串行)的方法
- 链路控制协议LCP:建立并维护数据链路连接。身份验证(比如在拨号上网的时候,要输入账号和密码,如果密码输的不对,就上不了网)
- 网络控制协议NCP:ppp可支持多种网络层协议,每个不同的网络层协议都要一个相应的NCP来配置,为网络层协议建立和配置逻辑连接。
4、PPP协议的状态图
如上图:首先设备之间无链路,也就是还没有连上网。那我们点开宽带连接,输入账号密码,正确就建立好了一条物理链路,这个时候LCP登场将物理链路构造成LCP链路,接下来LCP链路再经过NCP的配置协商,形成一个NCP链路。
5、PPP协议的帧格式
ppp协议的帧是以字节为单位的,第一个字节和最后一个字节是7E,标志字段是帧定界符。当然很有可能在信息部分当中就存在和帧定界符一样的字节,这个时候为了实现透明传输,就需要插入转义字符7D,只要在信息部分遇到了帧定界符,我们就在其前面插入转义字符。
1.6.2、HDLC协议
高级数据链路控制(High-Level Data Link Control 或简称HDLC),是一个在同步网上传输数据、面向比特的数据链路层协议,它是由国际标准化组织(ISO)根据IBM公司的SDLC(SynchronousData Link Control)协议扩展开发而成的,数据报文可透明传输,用于实现透明传输的"0比特插入法"易于硬件实现。
采用全双工通信,所有帧采用CRC检验,对信息帧进行顺序编号,可防止漏收或重份,传输可靠性高。
1、HDLC的站
主站:主站的主要功能是发送命令(包括数据信息)帧、接收响应帧,并负责对整个链路的控制系统的初启、流程的控制、差错检测或恢复等。
从站:从站的主要功能是接收由主站发来的命令帧,向主站发送响应帧,并且配合主站参与差错恢复等链路控制
复合站:复合站的主要功能是既能发送,又能接收命令帧和响应帧,并且负责整个链路的控制。
三种数据操作方式:
- 正常响应方式(也就是说如果从站要发送消息,要先经过主站的同意)
- 异步平衡方式(每一个复合站都可以进行对别的站的数据传输,不需要经过其他站的征求)
- 异步响应方式(从站胆肥了,可以不经过主站的同意,就可以进行数据的传输)
2、HDLC的帧格式
首尾都加了标识符段,如果在透明传输区间出现相同的标识符段,我们就在当中插入一个0,实现零比特传输。
控制字段C我们只看前两位:
- 信息帧(I): 第1位为0,用来传输数据信息,或者使用捎带技术对数据进行确认
- 监督帧(S):第1位是1,第二位是0,用于流量控制和差错控制,执行对信息帧的确认、请求重发和请求暂停发送等功能
- 无编号帧(U) :第1位是1,第二位是1,用于提供对链路的建立、拆除等多种控制功能
考试不会考这么细,顶多会问你HDLC帧的类型,就要知道信息帧、监督帧、无编号帧(记忆:无奸细)
1.6.3、PPP协议和HDLC协议
-
HDLC、PPP只支持全双工链路。 -
都可以实现透明传输
- PPP协议既可以实现0比特填充的比特填充方法,也可以实现字节填充
- HDLC协议只能实现0比特填充的比特填充方法(0比特填充法:5个1插入0,接收端遇到5个1去掉0)
-
都可以实现差错检测,但不纠正差错
PPP协议 | 面向字节 | 2B协议字段 | 无序号和确认机制 | 不可靠 |
---|
HDLC协议 | 面向比特 | 没有 | 有编号和确认机制 | 可靠 |
PPP协议是面向字节,而HDLC协议是面向比特。是因为PPP协议帧格式是以字节为单位,而且在传输的过程中也是逐个字节的发送,所以说每个PPP帧都是整数个字节。但是HDLC协议是以每一个比特为单位的,而且发送的时候是一连串连续的比特位,这个是可以任意位的,HDLC帧的长度就应该是8的整数倍。
1.7、链路层设备
1.7.1、物理层扩展以太网
集线器和主机:集线器连接多台主机,但是两者之间的距离不能超过100m,超过100m信号失真严重。为了使得距离比较远的主机之间通信,我们就要在物理层次上扩展以太网。
第一种方法就是使用光纤的方式扩展以太网的范围,因为光纤的方式比较长,而且光纤信号损耗小。
第二种方法就是使用集线器把很多个集线器连接起来。每一个集线器所构成的区域叫做冲突域,冲突域指的就是集线器所连接的主机同一时间只能有一台主机发送信息,如果有两台主机同时发送信息,就会造成冲突碰撞。这种方法的缺点是很多台主机共享同一信道,使得发送冲突的概率变大,发送信息效率低。
为了改进这种方式,我们在链路层扩展以太网。
1.7.2、链路层扩展以太网
网桥根据MAC帧的目的地址对帧进行转发和过滤。当网桥收到一个帧时,并不向所有接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口,或者是把它丢弃(即过滤)。
网桥优点:
- 过滤通信量,增大吞吐量。(网桥分割冲突域,冲突域我们也叫网段,不同网段之间的通信是不会干扰的,例如A和B通信,那么同时C和D也是可以通信的)
- 扩大了物理范围(A可以和E通信)
- 提高了可靠性(当网络出现故障的时候,通常只会一个网段受到影响)
- 可互联不同物理层、不同MAC子层和不同速率的以太网。
1.7.3、网桥分类-透明网桥
透明网桥:"透明"指以太网上的站点并不知道所发送的帧将经过哪几个网桥,是一种即插即用设备-自学习。
如上图,A、B、C、D、E、F经过两个网桥进行连接, 插上网桥后网桥会产生转发表,包括地址和接口。
自学习算法:假如A要给B发送数据帧,那么A所发送的数据帧会在这个信道上广播出去,网桥1接口收到数据帧,他会根据转发表来找转发接口,网桥1接口先按A的MAC地址查找转发接口,发现转发表中并没有A的地址,那么就会将A的地址和收到帧的接口一一写入到转发表中。接下来再按照目的地址B来查找转发表,发现转发表中并没有B的地址,于是通过2接口转发出去,数据帧传到C、D,CD发现不是给自己的便直接丢弃。到了第二个网桥按照第一个网桥的方式写入转发表。
1.7.4、网桥分类-源路由网桥
源路由网桥:在发送帧时,把详细的最佳路由信息(路由最少/时间最短)放在帧的首部中。
方法:源站以广播方式向欲通信的目的站发送一个发现帧。
迷宫类比我们的复杂网络,起点为源站,终点为目的站。源站以广播的方式放在链路上,可通过多种方式。到了目的站之后发现帧会原路返回。返回来的发现帧会告诉起点有多少种路由选择的方案。
1.7.5、多接口网桥-以太网交换机
1.8、(新考点)VLAN基本概念与原理
22大纲新要求,这部分请看书。
|