数据链路层

参考资料: https://b23.tv/VRo4pKX

数据链路层

数据链路层的本质是帮助物理层无差错地传输数据。
数据链路层的功能:

  • 封装成帧
  • 流量控制
  • 建立、维持、释放连接
  • 为网络层提供服务(无连接无确认、有确认无连接、有确认有连接)
  • 差错、位错控制

1. 帧的封装

在帧的开始和结尾加上定界符,来告诉接收方如何判断已经发来一个帧,和帧何时结束。组成帧的方法有以下几种。

1.1 字符计数法

使用一个字节标明帧的字节数,垃圾方法

1.2 字符填充法

我们可以规定某个SOH(start of head)字符为开始字符。EOT(End of tail)字符为结束字符。但是如果原始数据里也有SOH,EOH怎么办。我们就定义一个ESC字符作为转义字符。
在原始数据中如果遇到和“开始字符、结束字符、转义字符”相同的字符,我们一律在前面添加转义字符,来告诉接收方,这不是特殊字符,就把后面这个数据当成原始数据处理就行。
总结:实现复杂,不兼容性,不常用。

1.3 零比特填充法(常用)

在发送端,扫描整个信息字段,只要连续5个1,就立即填入1个0。111110
然后将开始字符和结束字符定为01111110.封装成帧。
在接受端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描,发现连续5个1时,就把后面的0删除,还原原始数据。

1.4 违规编码法(常用)

比如曼彻斯特编码,所有的字符都是高-低和低-高。
高-高和低-低都是违规编码,可以把违规编码作为起始和结束位。

2. 校错方法

线路的电气特性造成的噪声,只能通过提高信噪比和改进传感器来解决。
外界特定的短暂原因造成的冲击噪声,得使用编码问题解决。
链路层是为网络层服务的,如果通信质量好的有线传输链路,那么链路层可以采用无确认无连接的服务,将校错机制交给上层的传输层;如果是通信质量差的无线传输链路,那链路层就会使用有确认无连接和有确认面向连接的服务来做出错重传。

2.1 检错编码

2.1.1 奇偶校验码

奇校验码——“1”的个数为奇数
偶校验码——“1”的个数为偶数

2.1.2 循环冗余码CRC

1.将待传数据分成很多个组,每个组长度为d位
2.每个组(d位)都加上冗余码(FCS)构成帧再发送
d位的原始数据 + r位的FCS

r位的FCS是怎么确定的呢?

  • 首先约定一个生成多项式(某个双方商定好的除数,位数为r+1位, r 3 + r + 1 r^3+r+1 r3+r+1,就是1011)。
  • d位原始数据+r位0 / 生成多项式=商 余上 r位的FCS。这里的/运算指的是异或运算。
  • 将d位原始数据+r位FCS作为最终发送的校错编码。

3.接收方检验
d+r位数据 / 生成多项式, 若余数为0,则认为是正确接收,若余数不为0,则丢弃。

总结:可以对帧无差错接受,但不能检查哪一位错了。
和r位0异或,你会成为你自己,和你自己异或,如果你不是r位0,你就错了。

2.2 纠错编码-海明码

两个合法编码的对应比特取值不同的比特数称为两个码字的海明距离(码距)。一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的海明距离。
如,110,111 码距为1, 111,000,码距为3.

0000,1001,1010,0011,1100.这个编码集的码距为2,
如果添加一个0001,会发现该码字报错,因为它码距为1,大于该编码集的海明距离,那能否校错呢,不能。
码距为2,可检测出1位错,但不可被纠正。

以此类推,要检测d位错,需要的是d+1的海明码,要纠正d位错,需要的是2d+1的海明码。

海明码的确定过程:

  • 首先,确定海明码的位数r。
    数据有m位,冗余码有r位。校验码有 2 r 2^r 2r种取值。
    那就需要满足 2 r > = m + r + 1 2^r>=m+r+1 2r>=m+r+1,确保校验码的取值种类可以大于等于所有位的位数,可以充分表示每一位出错的可能。(确定r可以使用暴力穷举法)

  • 其次,确定海明码的位置和值。我们会在2的幂次方的位置放置海明码(1,2,4,8……),每一位的海明码会管辖一组数的校验,比如4号校验码负责4,5,6,7的校验。同时,为了满足偶校验,即4,5,6,7有偶数个1,就可以确定4号校验码的值。
    数据链路层_第1张图片

  • 检错并校错
    接收方收到数据为1110001,我们根据偶校验,就能判断出接收的数据是否有错,同时能得出校验码的值,将校验码的值按序排好,就可以得出哪一位错了。
    数据链路层_第2张图片

3. 流量控制

3.1 停止-等待协议

每发送一个帧就停止发送,等待对方确认,在收到确认后再发送下一个帧。
总结:在往返时延RTT》发送时延的链路通信,非常不适用。

3.2 后退N帧协议(GBN)

超时记录器:每发送一个帧就启动一个计时器,此处设置的重传时间大于帧传输的平均RTT。
发送一个帧,也必须保留它的副本,直到收到它的确认帧。

数据链路层_第3张图片

发送窗口的大小必须小于 2 n − 1 2^n-1 2n1, 其中n是构成帧序号的比特数量。

数据链路层_第4张图片

举个特殊例子,如图,当我们将发送窗口大小取为4时,发送窗口发送给接收方帧序号位0-3的位数据后,接收方成功接收并返回确认帧,同时接收窗口前进至第4位,也就是帧序号为0的下一位。但意外的是,接收方发回的确认帧没有被发送方接收到,此时,发送方会超时重传数据0~3,那么接收方该怎样确定发送方发送的是旧的0-3还是新的0-3呢?
总结:如果帧序号的比特数为n,则帧序号会在0 - 2 n − 1 2^n-1 2n1间不断重复,而滑动窗口过大的话,接收方没有办法确定发送方发的是哪一批0 - 2 n − 1 2^n-1 2n1,因为接收方事实上只认帧序号。当帧序号在滑动窗口中重复,接收方就无法辨析新旧数据的区别。

3.3 选择重传协议(SR)

比起后退N帧协议的特殊性:

  • 发送方窗口的大小 W T W_{T} WT满足 1< W T W_{T} WT ≤ \leq 2 n − 1 2^{n-1} 2n1
  • 接收方窗口大小 W R W_{R} WR必须满足 1< W R W_{R} WR ≤ \leq W T W_{T} WT
  • 发送方只重传出现差错的数据帧或重传计时器超时的数据帧。
  • 接收方可接收序号不连续但仍处在接收窗口内的数据帧,等到所需序号的数据帧收到后再一并上交应用进程。
  • 接收方一旦收到误码的数据帧或怀疑数据帧丢失,会立即发送相应的否认帧NAK,发送方收到NAK后,立刻重发误码的数据帧,而不必等到该数据帧的重传计时器超时再重发。
    举例 1 :
    当发送方发来的0,1,3位正确,2错误,接收方就先接收0,1,3,然后给发送方发回2的否认帧,告诉发送方重发2,等2也收齐了,就一起上交进程。
    举例 2 :
    当发送方发来的0,1,2,3正确,接收方会发回3的确认帧,并将接收窗口移到4,5,6,7,但发送方因为意外没有收到3的确认帧,因为重传计时器超时,会重新发送0,1,2,3,接收方收到后会意识到之前发送的确认帧发送方并没有收到,所以会重新发送3的确认帧。

提问:为什么发送窗口的尺寸必须小于等于 2 n − 1 2^{n-1} 2n1呢?
当采用n个比特给帧编号时,那么帧序号就会为 0 —— 2 n − 1 0——2^{n}-1 0——2n1,而当发送窗口大于 2 n − 1 2^{n-1} 2n1时,就会出现接收方无法分辨新、旧数据帧的问题。
比如下图中,当发送方发送0,1,2,3,4给接收方时,接收方会移动滑动窗口到5,6,7,0,1,并返回确认帧,但确认帧却丢失了,发送方会再次重传0,1,2,3,4,但此时发来的0,1,接收方就分不清是旧的0,1,还是新的0,1了。所以窗口的大小需要小于等于帧序号最大值的一半,才能够在确认帧丢失时,也能分清新旧数据。

数据链路层_第5张图片

数据链路层的可靠传输总结:
数据链路层_第6张图片

4.信道划分介质访问控制

信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备。
多路复用技术:把多个信号在一条物理信道上传输,同时又不互相干扰,共享信道资源。
介质访问控制分为静态划分信道和动态划分信道:

4.1 静态划分信道

静态划分信道分为:

  • 频分多路复用:同时传输,所有用户占用不同带宽。
  • 时分多路复用:各自占用被分为等长的时间间隙,轮流占用信道。
    • 统计时分复用SDM 将根据各个数据流的实际需求和到达率,在不同的时间段内为各个数据流分配适当的带宽。
  • 波分多路复用:在一根光纤传输不同波长(频率)的光信号,由于频率不同,各路光信号互不干扰,最后用波长分解复用器将各路波长分解出来。
  • 码分多路复用:如果有多个站同时发送数据,则信道中的信号就是这些站各自所发送的码片序列或反码序列的叠加。为了方便从信道中分离出每个站的信号,需确保每个站的码片序列各不相同,且相互正交(规格化内积为0)。
    数据链路层_第7张图片

数据链路层_第8张图片

数据链路层_第9张图片

总结:基于多路复用技术划分资源的方法,网络负载重时:共享信道效率高,且公平,网络负载轻时:共享信道效率低。

4.2 动态分配信道

动态分配信道分为:

  • 轮询访问介质访问控制:令牌传递协议
  • 随机访问介质控制(所有用户可根据意愿随机发送信息,发送时占全部带宽):
    • ALOHA协议:
    • CSMA协议
    • CSMA/CD协议
    • CSMA/CA协议
      在网络负载重时,产生冲突开销,在网络负载轻时,共享信道效率高,单个结点可利用信道全部带宽。
4.2.1 ALOHA

ALOHA协议包括纯ALOHA协议和时隙ALOHA协议。
其中,纯ALOHA协议的过程为:

  1. 发送:当用户或设备有数据要发送时,它就立即发送数据包。
  2. 冲突检测:发送数据包后,发送方监听网络以确认是否成功接收数据包。如果数据包在一定时间内没有被成功接收(通常是因为与其他用户的数据包发生了冲突),发送方就知道发生了冲突。
  3. 重发策略:当检测到冲突时,发送方会在随机延迟后重发数据包,以减少再次冲突的可能性。

时隙ALOHA对纯ALOHA进行了改进,以提高通道的利用率。

  1. 时间分隙:整个通信时间被分割成等长的时隙,每个时隙的长度等于一个数据包的发送时间。
  2. 发送规则:用户必须等到下一个时隙开始时才能发送数据包,这减少了冲突的可能性,因为冲突只能在时隙的开始时刻发生。
  3. 冲突检测与重发:如果发生冲突,发送方会在随机数目的时隙后重试发送数据包。

4.2.3 CSMA协议:

CSMA(载波监听多址接入)协议是一种用于改善网络通信效率的协议,主要应用于有线和无线网络环境中,以减少数据包之间的冲突。CSMA协议的核心思想是,在发送数据之前先检测信道是否空闲,从而降低数据包冲突的可能性。
CSMA协议的过程为:

  1. 载波监听:在发送数据之前,设备首先检测通信信道是否被其他设备使用。这一步被称为“载波监听”。

  2. 信道状态判断

    • 如果信道空闲,设备将开始发送数据。
    • 如果信道忙,设备将等待一段随机时间后再次检测信道。
  3. 随机退避算法:当检测到信道忙时,设备使用随机退避算法来决定等待的时间长度,以减少再次发生冲突的概率。

  4. 数据发送与冲突检测

    • 数据发送后,设备可能需要确认数据包是否成功到达目的地。
    • 如果发生冲突(例如,在无线CSMA/CA中),设备将执行退避算法,并在随后的尝试中重新发送数据。

tip:有一种p-坚持CSMA算法,会持续监听,直到信道空闲时再以p概率马上发送,1-p的概率等到下一个时隙再发送。这样做的目的就是尽一切可能避免碰撞。

4.2.4 CSMA的几种变体:

  • CSMA/CD(碰撞检测):常用于总线式以太网(有线网络),在发送数据之前和发送数据的同时都会检测总线上是否有其他计算机在发送数据从(通过检测信道上电压变化来判断),如果发生碰撞,则停止传输数据。
    为什么发送数据之前已经检测了没有其他计算机发送数据,还是会发生碰撞呢?
    是因为传输数据是有时延的,可能你发送前还检测不出有其他计算机在发送数据,发到一半,就发现有冲突了。
    只要经过2 τ \tau τ时间就可以确定这次发送没有发生碰撞了( τ \tau τ是单程端到端的传播时延)
    那么如何判断碰撞后的重传时机呢?即如何重传才可以避免重传后再次碰撞?
    数据链路层_第10张图片

有些帧的帧长特别短,往往还没识别出碰撞,数据帧已经发送成功了,那么我们希望在数据发送结束前检测碰撞,就要设定最小帧长。
帧的传输时延至少要两倍于信号在总线中的传播时延。
帧长(bit)/ 数据传输速率 ≥ \geq 2 τ 2\tau 2τ
最小帧长 = 总线传播时延 × 数据传输速率 × 2
在以太网中,规定最短帧长为64B,凡是长度小于64B的都是由于冲突而异常终止的无效帧。

  • CSMA/CA(碰撞避免)

CSMA/CA是一种在无线网络(如Wi-Fi)中广泛使用的媒介访问控制方法,旨在减少数据包之间的冲突并提高网络效率。与CSMA/CD(碰撞检测)主要用于有线网络不同,CSMA/CA通过预防冲突来优化无线信道的使用,因为在无线环境中检测冲突要困难得多。CSMA/CA的基本工作过程包括以下几个步骤:

  1. 载波监听:设备在发送数据前先监听无线信道以确认信道是否空闲。
  2. RTS发送:信道空闲,发送方则发送RTS帧(request to send,包括发射端的地址、接收端的地址、下一份数据将持续发送的时间等)请求发送数据。,信号忙,则发送方等待。
  3. CTS广播:接收方收到RTS后,如果信道空闲,广播CTS帧以清除信道。
  4. 数据发送:发送方收到CTS后,开始发送数据帧。(同时预约信道:发送方告知其他站点自己要传多久的数据)
  5. 确认接收:接收方收到数据后,用CRC来检验数据是否正确,通过发送ACK包给发送方确认数据接收。
  6. 重试发送:如果发送失败(即未收到ACK),设备将增加退避时间并重新尝试发送数据,直到数据成功发送或达到最大重试次数。(采用二进制指数退避算法来确定随机的推迟时间)

总结

  • 效率:通过避免冲突的发生,CSMA/CA提高了无线网络的通信效率,尤其是在网络负载较高时。
  • 局限性:尽管CSMA/CA减少了冲突,但是由于需要等待ACK和执行随机退避算法,可能会引入额外的延迟,特别是在网络拥塞时。

CSMA/CA协议对于提高无线网络环境中的数据传输效率至关重要,是Wi-Fi网络通信的核心组成部分。

4.2.5 轮询访问MAC协议

既不产生冲突,发送时也可以占用全部带宽。
轮询访问MAC协议分为轮询协议和令牌传递协议。
轮询协议的主要过程是主结点轮流“邀请”从属结点发送数据。
它的主要问题是轮询开销、等待延迟、单点故障。

另一种是令牌传递协议,它的工作过程是

  • 令牌生成
    网络初始化时,令牌由网络中的一个设备或中心控制站生成。
  • 令牌传递
    令牌按照一定的顺序(例如,环形网络中的顺时针方向)从一个设备传递到下一个设备。
  • 数据发送
    设备接收令牌:当一个设备接收到令牌时,它获得了发送数据的权限。
    发送数据:持有令牌的设备可以在一个或多个数据帧中发送数据。
    令牌释放:数据发送完成后,设备释放令牌,将其传递给网络中的下一个设备。

5.局域网基本概念

你可能感兴趣的:(网络,服务器,网络协议)