【计算机网络】数据链路层 : 总结 ( 封装成帧 | 流量控制与可靠传输 | 差错控制 | 介质访问控制 | 局域网 | 广域网 | 数据链路层设备 ) ★★★





一、数据链路层 功能



"数据链路层" 功能 :

① 可靠性服务 : “数据链路层” 在 物理层 提供的服务的基础上 , 提供可靠性服务 ;

② 服务内容 : 将 网络层 下发的数据 , 可靠地 传输给 相邻节点的 网络层 ;

③ 逻辑上无差错链路 : “数据链路层” 加强了 物理层 传输 比特流 的能力 , 物理层传输可能出错 , 数据链路层可以将 物理连接 改造成 逻辑上无差错 的数据链路 ;



"数据链路层" 功能 列举 :

① 为网络层 提供服务

  • 无确认无连接服务
  • 有确认无连接服务
  • 有确认有连接服务

② 链路管理 , 面向连接的服务中 , 建立连接 , 维持连接 , 释放连接 ;

③ 将 数据报 组成 数据帧

④ 流量控制 , 主要是 限制 发送方的数据率 ;

⑤ 差错控制 , 帧错误处理 ( 重发 ) , 位错误处理 ( 纠正 ) ;


参考博客 : 【计算机网络】数据链路层 : 概述 ( 基本概念 | 功能 | 为 “网络层“ 提供的服务 )





二、封装成帧 ★



1 . 数据帧透明传输需求 :

① 数据帧封装 : 数据帧 添加 帧首部 , 和 帧尾部 ; 帧首部 和 帧尾部 之间的部分就是实际的数据 ;

② 传输 文本文件 : 数据帧 的数据 是 文本文件组成时 , 数据都是 ASCII 码 , 键盘上传输的任何字符 , 都 可以透明传输 ;

③ 传输 非文本文件 : 如果传输的文件是 非 文本文件 , 如 图像 , 音频 , 视频 等 , 此时 文件中的数据可能是任意值 , 就有可能与 帧尾部 或 帧首部 相同 , 此时就需要 采用 字符填充法实现 透明传输 ;



2 . 字符填充法 :

① 数据的随机性 : 原始数据中 , 存在 与 帧首部 , 帧尾部 相同的数据 ;

② 发送端填充转义字符 : 在这些 数据中的 帧首部 / 帧尾部 相同的数据前 , 填充一个转义字符 , 告诉接收端 , 转义字符后的后续数据作为帧数据 , 不当做 帧首部 / 帧尾部 使用 ;

③ 接收端接收数据 : 接收端 接收到的数据中有 转义字符 + 帧首部 / 尾部 样式的信息时 , 将转义字符后的数据当做帧数据 ; 当接收到 单独的 帧首部 / 尾部 时 ( 没有转义字符 ) , 才将其当做数据帧的首部 / 尾部 ;




3 . 零比特填充法 :

① “数据帧” 首部尾部设定 : 数据帧首部尾部 都设定成 01111110 01111110 01111110 , 解决 数据中出现 01111110 01111110 01111110 数据的情况 , 实现透明传输 ;

② 发送端 : 扫描发送数据 , 发现有连续的 5 5 5 1 1 1 , 就在后面加上一个 0 0 0 ; 这样 帧数据 永远不会出现 6 6 6 1 1 1 的数据 ;

③ 接收端 : 扫描接收数据 , 发现有连续的 5 5 5 1 1 1 , 就将后面的 0 0 0 删除 ; 对应 发送端的操作 ;


这样在比特流中可以传输任意比特组合 , 不会引起 数据帧 边界判定错误的问题 , 实现了透明传输 ;



参考博客 : 【计算机网络】数据链路层 : 封装数据帧 ( 附加信息 | 帧长度 | 透明传输 | 字符计数法 | 字符填充法 | 零比特填充法 | 违规编码法 )





三、流量控制 和 可靠传输 ★★





1、停止等待协议 ★



1 . 停止等待协议

停止-等待 协议 解决的问题 :

  • 可靠传输 : 解决 由于 物理线路 , 设备故障 , 路由错误 等各种问题导致的 丢包问题 ;
  • 流量控制 : 实现 发送端 与 接收端 的 流量控制 ;

停止-等待 协议 讨论场景 : 只考虑 一方为发送方 , 一方为接收方 ; 相当于 单工通信场景 ;


停止-等待 协议内容 : 发送方 每 发送完一个 数据帧 ( 分组 / 数据报 ) , 就停止发送 , 等待接收端确认 , 接收到 接收端 确认信息后 , 再发送下一个分组数据 ;


停止-等待 协议 应用场景 :

  • 无差错情况
  • 有差错情况


2 . 信道利用率 :

"停止-等待协议" 性能分析 :

优点 : 简单

缺点 : 信道利用率 低 ;



信道利用率 :

U = T D T D + R T T + T A U = \cfrac{T_D}{T_D + RTT + T_A} U=TD+RTT+TATD

U U U 是信道利用率 ;

T D T_D TD 是发送方发送延迟 , 即发送方用了多长时间将数据帧发送完毕 ;

R T T RTT RTT 是往返时延 ;

T A T_A TA 是接收方 发送 A C K ACK ACK 确认帧 的时延 ;


"停止-等待协议" 信道利用率很低 , 大部分事件都在 传输的延迟上 , 用于发送接收的时间很少 ;



3 . 停止等待协议 信道利用率 计算示例 :

信道传输速率 4000b/s , 单向传播时延 30ms , 使 “停止-等待” 协议 信道利用率达到 80% , 数据帧长度至少是多少 ? ? ?


信道利用率公式为 :

U = T D T D + R T T + T A U = \cfrac{T_D}{T_D + RTT + T_A} U=TD+RTT+TATD


先把数据单位收拾下 , 传输速率 4000 比特 / 秒 , 单向传播时延 0.03 秒 , RTT 是 0.06 秒 ; 设 数据帧长度是 L L L 比特 ; 这里没有给出 ACK 发送延迟 , 当做 0 0 0 ;

L 4000 L 4000 + 0.06 + 0 = 0.8 \cfrac{\dfrac{L}{4000}}{\dfrac{L}{4000} + 0.06 + 0} = 0.8 4000L+0.06+04000L=0.8


分子分母都乘以 4000 4000 4000 ;


L L + 240 = 0.8 \cfrac{L}{L+ 240} = 0.8 L+240L=0.8

L = 0.8 L + 192 L= 0.8 L + 192 L=0.8L+192

0.2 L = 192 0.2L= 192 0.2L=192

L = 960 L= 960 L=960 单位是 比特 ;

数据帧的长度至少是 960 960 960 比特 ;



参考博客 : 【计算机网络】数据链路层 : 停止-等待协议 ( 无差错情况 | 有差错情况 | 帧丢失 | 帧出错 | ACK 确认帧丢失 | ACK 确认帧延迟 | 信道利用率公式 | 信道利用率计算 )★



2、后退 N 帧 ( GBN ) 协议 ★



"停止-等待" 协议 弊端 : 信道利用率低 , 发送完一帧后等待 , 这个时候信道完全是空闲的 ;


为了提高信道利用率 , 发送端 发送完一帧后 , 不用等待 接收端的 ACK 确认帧 , 立刻发送 第二帧 , 第三帧 , 这样信道的利用率就提高了 ;


相应协议也要做一些更改 :

① 增加 发送方 的 帧 序号范围 ;

② 发送方 缓存 多个 帧分组 ; 连续发送 N N N 帧 , 其中某一帧 可能需要重传 , 但不知道哪一帧需要重传 , 这里 需要将这 N N N 帧全部缓存下来 ;


这里有引出了两个在 “停止-等待” 协议基础上 , 改进的两个协议 :

  • 后退 N N N 帧协议 ( GBN )
  • 选择重传协议 ( SR )


2 . 后退 N 帧协议 重点

发送方 累计确认 机制 : 收到 ACK N N N , 就表示 N N N 号帧及之前的帧 , 全部正确 ;


接收方 按序接收 : 接收方 只能 按照顺序接收 , 人如果中间有帧丢失 , 那么后续帧全部丢弃 ;


接收方 确认帧 : 接收方 如果 收到错误帧 , 失序帧 , 那么查找最近成功接收的正确的帧的最大的 , 按序到达的帧 序号是多少 , 发送该帧对应的 ACK 确认帧 ;


发送窗口 : n n n 是帧序号编码长度 , 发送窗口大小 最大是 2 n − 1 2^n - 1 2n1 , 最小 1 1 1 ;



3 . 后退 N 帧协议 计算示例 :

数据链路层 采用 后退 N N N 帧协议 , 发送方 发送了 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 编号的数据帧 , 当计时器超时时 , 只接收到了 0 , 2 , 3 0 , 2, 3 0,2,3 帧的确认帧 , 发送方需要重发的帧数时 4 , 5 , 6 , 7 4,5,6,7 4,5,6,7 帧 ;


计时器超时 , 发送方 发送 已发送 , 但是没有被 确认 的帧 ;

确认机制 是 累计确认 的 , 发送方 接收到了 3 3 3 确认帧 , 说明 3 3 3 之前的帧已经成功接收了 , 虽然没有收到 1 1 1 确认帧 , 但是该帧已经默认接收成功 ;

重发 没有被确认的帧 , 即 4 , 5 , 6 , 7 4,5,6,7 4,5,6,7 帧 ;



参考博客 : 【计算机网络】数据链路层 : 后退 N 帧协议 GBN ( 滑动窗口 | 发送窗口长度 | “发送方“ 累计确认、超时机制 | “接收方“ 按序接收、确认帧发送机制 | 计算示例 )★



3、选择重传 ( SR ) 协议 ★



1 . 选择重传协议 SR 重点 :

① 数据帧 逐一确认 , 接收方收到一个帧 , 就会单独发送该帧的确认帧 ;

② 重传 出错 的 单个帧 ;

③ 接收方 有缓存 ;

④ 滑动窗口大小 : W T = W R = 2 n − 1 W_T = W_R = 2^{n - 1} WT=WR=2n1 ;


发送窗口 与 接收窗口 大小相等 , 便于流量控制 ;


使用 n n n 比特 对 帧进行编号 , 发送窗口的尺寸 W T W_T WT 和 接收窗口尺寸 W R W_R WR满足如下公式要求 :

W T = W R = 2 n − 1 W_T = W_R = 2^{n - 1} WT=WR=2n1



2 . 选择重传协议 计算示例

数据链路层 使用 选择重传协议 SR , 发送方发送了 0 , 1 , 2 , 3 0 , 1, 2,3 0,1,2,3 帧 , 当前时刻 , 收到了 1 1 1 号确认帧 , 0 , 2 0, 2 0,2 号帧出现超时 , 则需要重发哪些帧 ? ? ?


SR 协议是收到一帧 , 确认一帧 ;

1 1 1 号帧 已经确认 , 不用重发 ;

0 , 2 0 , 2 0,2 帧 超时 , 必须重发 ;

3 3 3 号帧 等待确认 , 当前时刻不用管 , 如果超时 , 就需要重发 , 当前没有超时 , 等待即可 ;

因此最终只需要重发 0 , 2 0 , 2 0,2 数据帧 ;



参考博客 : 【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★





四、差错控制 ( 检错 | 纠错 ) ★



生成多项式 最高次幂 = FCS 帧检验序列个数

上述数值 加上 1 1 1 等于 生成多项式二进制 个数


1 . 奇偶校验码 组成 :

① 信息元 : n − 1 n-1 n1 位 ; 要发送的有效数据 ;

② 校验元 : 1 1 1 位 ; 冗余码 ;

③ 奇校验码 : 1 1 1 的个数为 奇数 ; 冗余位 1 1 1 ;

④ 偶校验码 : 1 1 1 的个数为偶数 ; 冗余位 0 0 0 ;



2 . CRC 循环冗余码

发送数据 1101011011 1101 0110 11 1101011011 , 使用 CRC 循环冗余码 , 生成多项式是 10011 10011 10011 , 求最终的发送数据 ? ? ?


最终发送的数据组成 : 原始数据 1101011011 1101 0110 11 1101011011 + 帧检验序列 FCS ;

计算 帧检验序列 FCS :

① 数据加 冗余码 位数个 0 0 0 : 首先确定 冗余码 位数 , 冗余码的位数是 生成多项式的 阶 , 即 生成多项式 10011 10011 10011 的 总位数 减去 1 1 1 , 相当于 离散数学 中的生成函数的 最高位次幂 ; FCS 的位数是 4 4 4 位 ;

生成多项式 是 N N N 位 , 那么阶 就是 N − 1 N-1 N1 位 , FCS 帧检验序列就是 N − 1 N-1 N1 位 ;

数据加 4 4 4 0 0 0 后为 11010110110000 1101 0110 11 0000 11010110110000


② 模 2 2 2 除法 : 数据 加上 0 0 0 后 , 除以 生成多项式 , 余数就是 FCS 帧检验序列 ;

二进制除法 , 与十进制除法不同的是 , 每个除法相除的计算是 异或操作 ;

异或运算 : 同 0 0 0 , 异 1 1 1 ;

在这里插入图片描述
2 2 2 除法计算过程分析 :

  • 11010 11010 11010 异或 10011 10011 10011 计算得到 1001 1001 1001 , 然后下一位 1 1 1 落下来 , 得到 10011 10011 10011 ;
  • 10011 10011 10011 异或 10011 10011 10011 计算得到 00000 00000 00000 , 然后下面 5 5 5 位 落下来 , 得到 10110 10110 10110 ;
  • 10110 10110 10110 异或 10011 10011 10011 计算得到 101 101 101 , 然后下 2 2 2 位落下来 , 得到 10100 10100 10100 ;
  • 10100 10100 10100 异或 10011 10011 10011 计算得到 1110 1110 1110

最终计算出来的 帧检验序列 是 1110 1110 1110 ;

最终发送的数据是 : 1101011011 1101 0110 11 1101011011 1110 1110 1110



接收端接收数据并校验 :

① 检验过程 : 接收端接收 上述 1101011011 1101 0110 11 1101011011 1110 1110 1110 数据 , 将上述数据 与 生成多项式 10011 10011 10011 相除 , 如果余数为 0 0 0 说明该数据帧没有差错 ;

② 结果判定 : 如果余数不为 0 0 0 , 说明数据帧错误 , 而且不知道哪里出现错误 , 丢弃该数据帧 , 重新发送 ;



3 . 生成多项式 : G ( x ) = x 3 + x 2 + 1 G(x) = x^3 + x^2 + 1 G(x)=x3+x2+1

相当于 : G ( x ) = x 3 + x 2 + 0 x 1 + x 0 G(x) = x^3 + x^2 + 0x^1 + x^0 G(x)=x3+x2+0x1+x0

对应的模二运算的除数 : 1101 1101 1101 ;

  • x x x 0 0 0 次幂系数为 1 1 1 , 对应第 0 0 0 位 为 1 1 1 ;
  • x x x 1 1 1 次幂系数为 0 0 0 , 对应第 1 1 1 位 为 0 0 0 ;
  • x x x 2 2 2 次幂系数为 1 1 1 , 对应第 2 2 2 位 为 1 1 1 ;
  • x x x 3 3 3 次幂系数为 1 1 1 , 对应第 3 3 3 位 为 1 1 1 ;

生成多项式对应的 二进制数 , 总位数是最高次幂加一 , 每一位是对应位前的系数 0 0 0 1 1 1 ;



参考博客 : 【计算机网络】数据链路层 : 差错控制 ( 检错编码 | 奇偶校验码 | CRC 循环冗余码 )★



4 . 纠错编码 海明码

参考博客 : 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★





五、介质访问控制 ★★





1、介质访问控制 ★



介质访问控制 : 使 广播网络 中 , 两个节点之间的通信不会发生干扰的措施 ; 可以划分为以下两种类型 :

  • 静态划分信道
  • 动态划分信道


静态划分信道 : 信道划分 介质访问控制 ;

① 频分多路复用 FDM ( Frequency )

② 时分多路复用 TDM ( Time )

③ 波分多路复用 WDM ( Wave )

④ 码分多路复用 CDM ( Code )



动态分配信道 :

① 轮询访问 介质访问控制 : 令牌环传递协议 ;

② 随机访问 介质访问控制 :

  • ALOHA 协议
  • CSMA 协议
  • CSMA / CD 协议
  • CSMA / CA 协议


参考博客 : 【计算机网络】数据链路层 : 信道划分 介质访问控制 ( 数据链路 | 介质访问控制分类 | 频分多路复用 FDM | 时分多路复用 TDM | 波分复用 WDM | 码分多路复用 CDM 计算 )★



2、静态划分信道 ★



1 . 频分多路复用 FDM :

① 一直持有频带 : 用户 分配到 频带 后 , 通信过程中 一直占用该 频带 ;

② 频率带宽资源 ( Hz ) : 频分复用 所有用户 , 同样式样 占用 不同的 频率带宽 资源 , 频率带宽是 赫兹 单位 ;


频分多路复用 FDM 优点 :

① 效率高 : 充分利用 介质 带宽 , 传输 效率 较高 ;

② 实现简单 : 该技术比较成熟 , 实现简单 ;



2 . 时分多路复用 TDM :

① 划分等长帧 : 将 时间 划分为 若干 等长 的 时分复用帧 ( TDM 帧 ) ;

② TDM 帧 : 是在 物理层 传送的 比特流 所划分的帧 , 标志一个周期 ;

③ 固定时隙 : 每个 时分复用 用户 , 在每个 TDM 帧 中 , 占用 固定序号的时隙 ;

④ 轮流使用 : 所有用户 轮流 占用信道 ;


整个信道的速率是 8000 比特 / 秒 , 如果将信道划分为 4 4 4 个 TDM 帧 , 那么每个用户的速率最高是 2000 比特 / 秒 ;



3 . 波分复用 WDM :

① 本质 : 光的 频分多路复用 ;

② 不同波长光 : 在光纤中 , 传输 多种 不同 波长的 光信号 , 波长不同 , 各路光信号互不干扰 ;

③ 分离信号 : 使用 波长分解复用器 将 各路播放分解出来 ;



4 . 码分多路复用 CDM :

码分多址 ( CDMA ) 是 码分多路复用 CDM 的一种重要形式 ;

1 1 1 个 比特 分为 多个 码片 ( 芯片 ) , 每个站点被指定一个唯一的 m m m 位 芯片序列 ;

发送 1 1 1 时 , 站点发送 芯片序列 , 发送 0 0 0 时 , 站点发送 芯片序列 反码 ;



A , B A , B A,B 两个主机 , 发送数据到 C C C 主机 ;

主机 A A A 发送 0 0 0 数据 , 主机 B B B 发送 1 1 1 数据 , 其发送的每个 比特 , 都对应一个 m m m 位的 芯片序列 , 一般情况下 芯片序列的长度是 64 64 64 128 128 128 位 , 这里为了方便演示 , 设置芯片序列 长度为 8 8 8 位 ;


数据不冲突 前提 ( 芯片序列正交 ) : 多个站点 , 同时发出数据时 , 各个站点 , 芯片序列 必须满足 相互正交 的前提 ; 只要芯片正交 , 就不会出现冲突 ;

芯片序列正交 计算 : 芯片序列 对应位 相乘 , 然后相加 , 除以总位数 ;

数据合并 : 将信道中的 芯片序列 按位 线性相加 , 合并后的芯片序列位数相同 ;

数据分离 : 合并的数据源站芯片序列 规格化内积 ;

规格化内积计算 : 合并后的数据 与 源站芯片序列 , 按位相乘 , 再相加 , 最后除以 芯片序列位数 , 如果得到 + 1 +1 +1 说明是数据 1 1 1 , 如果得到 − 1 -1 1 说明是数据 0 0 0 ;


芯片序列 与 芯片序列 反码 :

A A A 主机中的 1 1 1 数据 , 对应 芯片序列 ( + 1 , − 1 , − 1 , + 1 , + 1 , + 1 , + 1 , − 1 ) ( +1 , -1 , -1 , +1 , +1 , +1 , +1 , -1 ) (+1,1,1,+1,+1,+1,+1,1) ;
A A A 主机中的 0 0 0 数据 , 对应 芯片序列 ( − 1 , + 1 , + 1 , − 1 , − 1 , − 1 , − 1 , + 1 ) ( -1 , +1 , +1 , -1 , -1 , -1 , -1 , +1 ) (1,+1,+1,1,1,1,1,+1) , 0 0 0 数据的芯片序列是 1 1 1 数据芯片序列的反码 ;


B B B 主机中的 1 1 1 数据 , 对应 芯片序列 ( − 1 , + 1 , − 1 , + 1 , − 1 , + 1 , + 1 , + 1 ) ( -1 , +1 , -1 , +1 , -1 , +1 , +1 , +1 ) (1,+1,1,+1,1,+1,+1,+1) ;
B B B 主机中的 0 0 0 数据 , 对应 芯片序列 ( + 1 , − 1 , + 1 , − 1 , + 1 , − 1 , − 1 , − 1 ) ( +1 , -1 , +1 , -1 , +1 , -1 , -1 , -1 ) (+1,1,+1,1,+1,1,1,1) , 0 0 0 数据的芯片序列是 1 1 1 数据芯片序列的反码 ;



芯片序列正交 验证 计算 : 如果 A , B A,B A,B 两台主机之间的芯片序列可以正交 , 那么其发送数据就不会冲突 ;

主机 A A A 1 1 1 数据 芯片序列 ( + 1 , − 1 , − 1 , + 1 , + 1 , + 1 , + 1 , − 1 ) ( +1 , -1 , -1 , +1 , +1 , +1 , +1 , -1 ) (+1,1,1,+1,+1,+1,+1,1) , 与
主机 B B B 1 1 1 数据 芯片序列 ( − 1 , + 1 , − 1 , + 1 , − 1 , + 1 , + 1 , + 1 ) ( -1 , +1 , -1 , +1 , -1 , +1 , +1 , +1 ) (1,+1,1,+1,1,+1,+1,+1) 正交 ;

正交计算 : 每个对应位 按位相乘 , 然后相加 , 除以位数 ; 如果为 0 0 0 , 说明两个芯片序列正交 ;

( + 1 × − 1 ) + ( − 1 × + 1 ) + ( − 1 × − 1 ) + ( + 1 × + 1 ) + ( + 1 × − 1 ) + ( + 1 × + 1 ) + ( + 1 × + 1 ) + ( − 1 × + 1 ) 8 = − 1 + ( − 1 ) + 1 + 1 + ( − 1 ) + 1 + 1 + ( − 1 ) 8 = 0 \begin{array}{lcl} \\\\ \cfrac{( +1 \times -1 ) + ( -1 \times +1 ) + ( -1 \times -1 ) + ( +1 \times +1 ) + ( +1 \times -1 ) + ( +1 \times +1 ) + ( +1 \times +1 ) + ( -1 \times +1 ) }{8} \\\\ =\cfrac{-1 + (-1) + 1 + 1 + (-1) + 1 + 1 + (-1)}{8} \\\\ = 0 \end{array} 8(+1×1)+(1×+1)+(1×1)+(+1×+1)+(+1×1)+(+1×+1)+(+1×+1)+(1×+1)=81+(1)+1+1+(1)+1+1+(1)=0



数据合并 : 将 芯片数据 线性相加即可 ;

A A A 主机发送 0 0 0 数据 , B B B 主机发送 1 1 1 数据 , 那么对应的合并的数据是 :

A A A 主机 0 0 0 数据对应芯片序列 ( − 1 , + 1 , + 1 , − 1 , − 1 , − 1 , − 1 , + 1 ) ( -1 , +1 , +1 , -1 , -1 , -1 , -1 , +1 ) (1,+1,+1,1,1,1,1,+1)
B B B 主机 1 1 1 数据对应芯片序列 ( − 1 , + 1 , − 1 , + 1 , − 1 , + 1 , + 1 , + 1 ) ( -1 , +1 , -1 , +1 , -1 , +1 , +1 , +1 ) (1,+1,1,+1,1,+1,+1,+1)

( − 1 − 1 , + 1 + 1 , + 1 − 1 , − 1 + 1 , − 1 − 1 , − 1 + 1 , − 1 + 1 , + 1 + 1 ) = ( − 2 , + 2 , 0 , 0 , − 2 , 0 , 0 , + 2 ) \begin{array}{lcl} \\\\ ( -1 -1 , +1 + 1, +1 - 1 , -1 + 1, -1 - 1, -1 + 1, -1 + 1 , +1 + 1) \\\\ =( -2 , +2 , 0, 0 , -2, 0 , 0 , +2) \end{array} (11,+1+1,+11,1+1,11,1+1,1+1,+1+1)=(2,+2,0,0,2,0,0,+2)



数据分离 :

C C C 设备收到 ( − 2 , + 2 , 0 , 0 , − 2 , 0 , 0 , + 2 ) ( -2 , +2 , 0, 0 , -2, 0 , 0 , +2) (2,+2,0,0,2,0,0,+2) 芯片序列 , 将该序列与 A A A 主机 芯片序列 进行 规格化内积 ;

规格化内积 : 对应位相乘 , 求总和 , 然后除以 芯片序列 总的位数 8 8 8 ;


规格化内积 计算过程 : 对应位相乘 , 然后将 8 8 8 个相乘结果相加 , 最后除以 8 8 8 ;

主机 A A A 芯片序列是 ( + 1 , − 1 , − 1 , + 1 , + 1 , + 1 , + 1 , − 1 ) ( +1 , -1 , -1 , +1 , +1 , +1 , +1 , -1 ) (+1,1,1,+1,+1,+1,+1,1) ;

规 格 化 内 积 = ( − 2 , + 2 , 0 , 0 , − 2 , 0 , 0 , + 2 ) ∙ ( + 1 , − 1 , − 1 , + 1 , + 1 , + 1 , + 1 , − 1 ) = ( − 2 × + 1 ) + ( + 2 × − 1 ) + ( 0 × − 1 ) + ( 0 × + 1 ) + ( − 2 × + 1 ) + ( 0 × + 1 ) + ( 0 × + 1 ) + ( + 2 × − 1 ) 8 = − 2 − 2 + 0 + 0 − 2 + 0 + 0 + − 2 8 = − 1 \begin{array}{lcl} \\\\ 规格化内积 = ( -2 , +2 , 0, 0 , -2, 0 , 0 , +2) \bullet ( +1 , -1 , -1 , +1 , +1 , +1 , +1 , -1 ) \\\\ = \cfrac{ ( -2 \times +1) + ( +2 \times -1) + ( 0 \times -1) + ( 0 \times +1) + ( -2 \times +1) + ( 0 \times +1) + ( 0 \times +1) + ( +2 \times -1) }{8} \\\\ = \cfrac{ -2 - 2 + 0+0 - 2 +0 + 0+ - 2 }{8} \\\\ = -1 \end{array} =(2,+2,0,0,2,0,0,+2)(+1,1,1,+1,+1,+1,+1,1)=8(2×+1)+(+2×1)+(0×1)+(0×+1)+(2×+1)+(0×+1)+(0×+1)+(+2×1)=822+0+02+0+0+2=1


计算结果是 − 1 -1 1 , 说明 主机 A A A 发送的数据是 0 0 0 ;



参考博客 : 【计算机网络】数据链路层 : 信道划分 介质访问控制 ( 数据链路 | 介质访问控制分类 | 频分多路复用 FDM | 时分多路复用 TDM | 波分复用 WDM | 码分多路复用 CDM 计算 )★



3、动态划分信道 ( 轮询访问 ) ★



令牌传递协议 :

① 令牌帧 : 特殊格式的 MAC 控制帧 , 没有任何信息 ;

② 令牌 作用 : 控制信道使用 , 确保 同一时刻 , 只有一个站点 独占信道 ;

③ 发送数据前提 : 每个节点 都可以在 令牌持有时间内 , 获得发送数据的权利 , 该时间并不是无限持有的 , 有时间限制 ;



令牌传递协议 特点 :

① 优点 : 令牌环网 没有 数据碰撞冲突 ;

② 缺点 :

  • 令牌开销
  • 等待延迟
  • 单点故障


令牌传递协议 应用场景 : 令牌传递协议 应用于 令牌环网 ;

  • 物理上是 星型拓扑 结构
  • 逻辑上是 环形拓扑 结构

令牌传递协议 , 常用于负载较重 , 通信量较大的网络 ;



参考博客 : 【计算机网络】数据链路层 : 轮询访问 介质访问控制 ( 轮询协议 | 令牌传递协议 )



4、动态划分信道 ( 随机访问 ) ★



1 . ALOHA 协议


( 1 ) 纯 ALOHA 协议 :

  • 不 监听 信道 ;

  • 随机发送 : 不按照 时间槽 发送 , 也就是随机发送 ;

  • 想发就发 ;


冲突检测、处理 :

① 出现冲突 : 如果发送时 , 出现了冲突 , 数据被丢弃 , 或部分出错 , 发送失败 ;

② 接收方处理 : 接收方没有收到数据 , 或 收到错误数据 , 那么向发送方 发送 错误信息 , 或者 干脆 不回送 确认信息 ;

③ 发送方处理 : 如果 发送方在 超时时间 内 没有收到 接收方的 确认信息 , 那么就重传之前的数据 ;


( 2 ) 时隙 ALOHA 协议 :

① 时间片分割 : 将 时间 分成 若干 相同的时间片 ;

② 接入信道 : 所有 用户 在 每个时间片开始时 , 同步接入网络信道 ;

③ 冲突机制 : 如果 接入信道时 某 用户 与 其它用户 发生冲突 , 那么 等到下一个时间片再开始发送 ;



参考博客 : 【计算机网络】数据链路层 : ALOHA 协议 ( 纯 ALOHA 协议 | 时隙 ALOHA 协议 )



2 . CSMA 协议 ( 载波监听多路访问协议 )

CSMA 协议 :

① 全称 : Carrier Sense Multiple Access , 载波监听多路访问协议 ;

② CS : Carrier Sense , 载波监听 , 每个站点 发送数据前 , 先检测总线上是否有其它 站点 在发送数据 ;

③ MA : 多点接入 , 多个 主机 连接在同一条 总线 上 ;


ALOHA 协议 与 CSMA 协议 对比 :

  • ALOHA 协议 , 不听就说 ;

  • CSMA 协议 , 先听再说 ;


参考博客 : 【计算机网络】数据链路层 : CSMA 协议 ( 载波监听多路访问协议 | 监听 | 1-坚持 CSMA | 非坚持 CSMA | p-坚持 CSMA )



3 . CSMA/CD 协议

CSMA/CD 协议 :

① 全称 : Carrier Sense Multiple Access With Collision Detection , 载波监听多点接入 / 碰撞检测 协议 ;

② CS : Carrier Sense , 载波监听 , 每个站点 发送数据前 , 和 发送数据过程中 , 先检测总线上是否有其它 站点 在发送数据 ;

③ MA : Multiple Access , 多点接入 , 多个 主机 连接在同一条 总线 上 ; 该协议 应用于 总线型网络 中 ;

④ CD : Collision Detection , 碰撞检测 , 适配器 一边发送 , 一边监听 , 检测信道上电压变化 用于 判断本站点发送数据 时 , 其它站点是否也在发送你数据 ; 由此可以看出 , 该协议用于 半双工网络 中 ;


电磁波传输时间导致冲突 : 先监听了信道 , 但是还是会发生冲突 , 电磁波在信道上是以有限速度传播的 , 如果电磁波没有到本站点 , 当时检测肯定是没有信号 , 但是等到本站点向外发出数据时 , 突然检测到有信号 , 这里电磁波传输的时间差 , 就造成了这种误差 ;


ALOHA 协议 与 CSMA 协议 对比 :

  • ALOHA 协议 , 不听就说 ;

  • CSMA 协议 , 先听再说 ;

  • CSMA/CD 协议 , 先听再说 , 边听边说 ;


参考博客 : 【计算机网络】数据链路层 : CSMA/CD 协议 ( 载波监听多点接入 / 碰撞检测 协议 | 单程端到端传播时延 | 截断二进制指数规避算法 | 计算示例 | 最小帧长问题 )★



4 . CSMA/CA 协议 : ( 仅作了解 )

① 全称 : Carrier Sense Multiple Access With Collision Avoidance , 载波监听多点接入 / 碰撞避免 协议 ;

② CS : Carrier Sense , 载波监听 , 每个站点 发送数据前 , 和 发送数据过程中 , 先检测总线上是否有其它 站点 在发送数据 ;

③ MA : Multiple Access , 多点接入 , 多个 主机 连接在同一条 总线 上 ; 该协议 应用于 总线型网络 中 ;

④ CA : Collision Avoidance , 碰撞避免 ;



随机访问 介质访问控制 协议 对比 :

  • ALOHA 协议 , 不听就说 ;

  • CSMA 协议 , 先听再说 ;

  • CSMA/CD 协议 , 先听再说 , 边听边说 ;

  • CSMA/CA 协议 , 先听再说 , 边听边说 ;


参考博客 : 【计算机网络】数据链路层 : CSMA/CA 协议 ( 载波监听多点接入 / 碰撞避免 协议 | CSMA/CA 协议工作原理 | CSMA/CD 协议 与 CSMA/CA 协议对比 )



5、CSMA/CD 相关计算 ★



1 . 引入一组概念 :

① 单程端到端传播时延 : 记作 τ \tau τ ;

② 碰撞检测最长时间 : 站点发出数据后 , 最多 两倍的 单程端到端时延 2 τ 2\tau 2τ 后就可以得知出现了碰撞 ;

2 τ 2\tau 2τ 概念 : 又称为 , 总线端到端往返传播时延 , 争用期 , 冲突窗口 , 碰撞窗口 ;


只要经过 2 τ 2\tau 2τ 没有检测到碰撞 , 本次发送 , 一定没有碰撞 ;



2 . 截断二进制指数规避算法 :

① 争用期 : 确定基本退避时间 , 也就是争用期 , 两倍的 单程端到端传播时延 2 τ 2\tau 2τ ;

② 重传次数 : 定义参数 k k k , 一定程度上相当于重传次数 ;

  • k k k 公式 : k k k 取值不超过 10 10 10 , 公式为 k = m i n ( 重 传 次 数 , 10 ) k=min( 重传次数 , 10 ) k=min(,10) ;
  • 当重传次数 不超过 10 10 10 时 : k = 重 传 次 数 k = 重传次数 k=
  • 当重传次数 大于 10 10 10 时 : k = 10 k=10 k=10 ;

③ 取随机数 : 从整数集合 [ 0 , 2 k − 1 ] [0, 2^k - 1] [0,2k1] 中 , 取出随机数 r r r , 重传时间就是 r × 2 τ r \times 2\tau r×2τ ;

④ 重传次数限制 : 当重传 16 16 16 次都失败时 , 说明网络拥塞严重 , 直接丢弃该帧 , 向上层报告出错 ;



示例 :

① 第 1 1 1 次重传 , k = 1 k=1 k=1 , 从

[ 0 , 1 ] [0, 1] [0,1] 区间中 , 即 { 0 , 1 } \{ 0 , 1\} {0,1}

中随机取一个值 , r r r ;

  • 如果 r = 0 r = 0 r=0 , 重传时间是 0 0 0 ;
  • 如果 r = 1 r = 1 r=1 , 重传时间是 2 τ 2\tau 2τ ;

② 第 1 1 1 次重传 , k = 2 k=2 k=2 , 从

[ 0 , 3 ] [0, 3] [0,3] 区间中 , 即 { 0 , 1 , 2 , 3 } \{ 0 , 1 , 2 ,3\} {0,1,2,3}

中随机取一个值 , r r r ;

  • 如果 r = 0 r = 0 r=0 , 重传时间是 0 0 0 ;
  • 如果 r = 1 r = 1 r=1 , 重传时间是 2 τ 2\tau 2τ ;
  • 如果 r = 2 r = 2 r=2 , 重传时间是 4 τ 4\tau 4τ ;
  • 如果 r = 3 r = 3 r=3 , 重传时间是 6 τ 6\tau 6τ ;

③ 第 3 3 3 次重传 , k = 3 k=3 k=3 , 从

[ 0 , 7 ] [0, 7] [0,7] 区间中 , 即 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 } \{ 0 , 1 , 2 ,3 , 4, 5, 6, 7\} {0,1,2,3,4,5,6,7}

中随机取一个值 , r r r ;

  • 如果 r = 0 r = 0 r=0 , 重传时间是 0 0 0 ;
  • 如果 r = 1 r = 1 r=1 , 重传时间是 2 τ 2\tau 2τ ;
  • 如果 r = 2 r = 2 r=2 , 重传时间是 4 τ 4\tau 4τ ;
  • 如果 r = 3 r = 3 r=3 , 重传时间是 6 τ 6\tau 6τ ;
  • 如果 r = 4 r = 4 r=4 , 重传时间是 8 τ 8\tau 8τ ;
  • 如果 r = 5 r = 5 r=5 , 重传时间是 10 τ 10\tau 10τ ;
  • 如果 r = 6 r = 6 r=6 , 重传时间是 12 τ 12\tau 12τ ;
  • 如果 r = 7 r = 7 r=7 , 重传时间是 14 τ 14\tau 14τ ;


3 . 截断二进制指数规避算法 计算示例 :

在 以太网 二进制回退算法中 , 碰撞 11 11 11 次后 , 随机数 r r r 的选择范围是多少 ? ? ?

随机数 r r r 是根据 参数 k k k 确定的 , 参数 k k k 是重传次数 和 10 10 10 中较小的值 , 重传次数 小于等于 10 10 10 次时 , k = 重 传 次 数 k = 重传次数 k= , 重传次数大于等于 11 11 11 次时 , k = 10 k = 10 k=10 ;


随机数 r r r 的取值范围是 [ 0 , 2 k − 1 ] [0, 2^k - 1] [0,2k1] , 代入 k = 10 k=10 k=10 ;

取值范围是 [ 0 , 2 10 − 1 ] [0 , 2^{10} - 1] [0,2101] , 随机数 r r r 的 范围 是 [ 0 , 1023 ] [0 , 1023] [0,1023] 之间的值 ;



4 . 最小帧长问题

检测到碰撞时 , 需要暂停帧的发送 , 如果帧太短 , 就会导致一次性发送完毕 , 无法暂停 , 这里需要在检测到碰撞时 , 帧还没有发送结束 ;


帧的传输时延 至少要 大于 2 τ 2\tau 2τ ;

帧 的 传 输 时 延 = 帧 长 度 ( 比 特 ) 数 据 传 输 速 率 帧的传输时延 = \cfrac{帧长度 ( 比特 )}{ 数据传输速率 } =()


帧 长 度 ( 比 特 ) 数 据 传 输 速 率 ≥ 2 τ \cfrac{帧长度 ( 比特 )}{ 数据传输速率 } \geq 2\tau ()2τ


帧 长 度 ( 比 特 ) ≥ 2 τ × 数 据 传 输 速 率 帧长度 ( 比特 )\geq 2\tau \times 数据传输速率 ()2τ×


最小帧长度是 2 τ × 数 据 传 输 速 率 2\tau \times 数据传输速率 2τ× 比特 ;


以太网 规定 最短帧长度是 64 字节 , 小于 64 字节的帧都是由于冲突终止的无效帧 ;





六、局域网



参考博客 :





七、广域网



参考博客 :





八、数据链路层设备



冲突域 : 同一个 冲突域 中 , 每个节点都能收到被发送的 数据帧 ; 同一时间 只能有一台设备 发送信息 的范围 ;

广播域 : 网络中能收到任何一台设备发出的广播帧的 设备的集合 ; 某站点发出一个广播信号 , 所有能接受这个信号的设备范围 , 称为广播域 ;

物理层设备 : 中继器 , 集线器 ;

  • 不能隔离冲突域
  • 不能隔离广播域

数据链路层设备 : 网桥 , 交换机 ;

  • 能隔离冲突域
  • 不能隔离广播域

网络层设备 : 路由器 ;

  • 能隔离冲突域
  • 能隔离广播域

参考博客 : 【计算机网络】数据链路层 : 数据链路层设备 ( 物理层扩展以太网 | 网桥 | 透明网桥 | 源路由网桥 | 交换机 | 以太网交换机 | 冲突域 | 广播域 | 各层设备隔离冲突域广播域情况 )★

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值