第三章 - 数据链路层

来源Bilibili湖科大教书匠计算机网络教程:计算机网络微课堂(有字幕无背景音乐版)

数据链路层概述

数据链路层在网络体系结构中的地位

1651044818965

1651044854271

数据链路层的三个问题

封装成帧

就是将上层 ,也就是网络层交付下来的 协议数据单元(PDU),添加 帧头和帧尾 使之成为 称为 封装成帧 。就是本层的协议数据单元。

1651045179494

**差错检测 **

1651045272907

接收方在收到数据后,通过检错码和检错算法检测是否有误码。

可靠传输

接受方在收到有误码的主机后,是不会接受该帧的,将其丢弃。

如果是 不可靠服务 ,那么丢弃后就不会有更多措施。

如果是 可靠服务 ,那么会采取措施,让接收方重新接收到正确的 帧 。

1651045513731

封装成帧

含义

所谓封装成帧,是指数据链路层将 上层交付的协议数据单元 添加帧头和帧尾使之成为帧

  • 帧头和帧尾中包含有重要的控制信息

1651109042505

  • 帧头和帧尾的作用之一就是帧定界,方便 确定 物理层送上来的 服务数据单元——比特流 的帧范围

    ppp 帧的标志

1651114625129

​ MAC帧

1651114679959

1651114693955

帧间间隔 时间为96比特的时间,表明 帧结束

透明传输

是指数据链路层 对上层交付的传输数据没有任何限制 ,就好像数据链路层不存在一样。

由于开始和结束的标记使用了 专门指明的控制字符 ,故所传输的数据中任何 8 比特的组合 不允许和用作帧定界的控制字符的比特编码一样

  • 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输

    1651115215899

    flag为 1字节 的标志位 ,ESC 为 1字节 转义字符 十进制值27 0001 1011

  • 面向比特的物理链路使用比特填充的方法实现透明传输

    1651115381732

    每 五个连续的比特1后 填充0

为了提高帧的传输效率,应当使 帧的数据部分长度尽可能大些

为了考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限。

即最大传送单元MTU。

1651115603759

差错检测

1651115843989

奇偶校验

1651116376741

1651116469225

1651116486631

对于 偶校验码的生成 可以通过 对帧 进行逐位异或 获得;检验是否误码 ,则也可以通过 对带有校验码的 帧进行 逐位异或,若为0则 没有检测出错误,若为1 则检出错误 .

tip : 对一串比特而言,将其各个比特位进行异或运算 ,若结果为0 可得出 其中 比特1 的个数为偶数,反之为奇数

循环冗余校验

1651116947418

1651117265093

1651117303824

1651117353115

可靠传输

可靠传输的基本概念

1651117543739

1651117680616

可靠传输得实现比较复杂,开销比较大,是否选择实现取决于应用需求。

可靠传输的实现机制 — 停止-等待协议

1651220058328

1651220296925

1651220432679

1651224216667

1、第一种情况

发送方发送数据,接受方收到 ,返回 ACK分组 表示收到,接收方发送下一个分组

发送方发送数据,接收方检测出误码,返回 NAK分组 表示数据有误需重传。

2、第二种情况

发送方发送数据,数据在传输过程中丢失,接收方无法返回 ACK 或者 NAK 标识,

发送方触发 超时重传机制 ,再次发送。一般超时时间 略大于 平均往返时间。

3、第三种情况

发送方发送数据,接收方收到数据,在返回 ACK分组的过程中,数据丢失,

发送方会触发重传机制,那么接收方会收到重复分组,解决办法是 给 每个分组带上序号

4、第四种情况

发送方发送数据,接收方收到数据 ,并返回 ACK ,但是由于一些原因,ACK 到达时间超过了 超时时间,导致发送方 重复发送了数据,并在二次发送之后,再次接收到 ACK 分组,又会发送下一个数据分组,接收方在接收到重复数据后 丢弃重复分组,又返回 ACK ,此时发送方又收到了对于重复数据的 ACK 回应 ,但无法辨别,又会继续发送下边的数据,此时无法做到可靠传输。

解决办法是,把 ACK分组 也进行标识,接收方在发现 ACK重复时,就忽略重复 ACK 分组。

注意事项:

1651224626753

停止等待协议的信道利用率

1651224767999

可靠传输的实现机制 — 回退N帧协议

停止等待协议的信道利用率很低,但也有相应的解决办法:一次发送多个 有序分组 和接收 多个有序 ACK

1651496796370

回退N帧协议:

  1. 采用三个比特给分组编序号,即 序号 0~7;
  2. 发送窗口的尺寸 Wt 的 取值 1<Wt<2^3-1,图中取 Wt=5
  3. 接收窗口的尺寸为 Wr 的取值为 1 ;
  4. 在发送窗口的分组允许发送,在发送之外的不允许发送;
  5. 由于 接收窗口的 尺寸为 1 ,故一次只能接收一个分组;

1651497148667

  1. 无差错情况

    1651497277185

    1651497286719

    1651497295729

    1651497312528

  2. 累计确认

    接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个分组发送确认,ACKn 表示序号为 n 及以前的所有数据分组都被正确接收。

  3. 有差错情况

    1651497507990

    1651497523729

    1651497536085

    会丢弃之后的所有的数据,并返回 所丢弃分组个数 的 上一个正确接收的分组序号 ACK

    1651497557351

    发送方收到重复的确认,就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻重传!

    由于 前边的分组不被接收导致后边的分组 也受牵连 ,导致重传这些分组,这就是所谓的 回退 N 帧

  4. Wt发送窗口的大小超过 分组最大序号

    1651498036597

    1651498050135

可靠传输的实现机制 — 选择重传协议

回退 N 帧的缺点 以及 选择重传协议的出现:

1651498312270

选择重传协议:

1651498395119

​ 其中 1< Wr <= Wt

1651498511248

流程:

  1. 发送方准备发送序号为 0 1 2 3 的分组

1651498534696

  1. 接收方准备接收

1651498588344

  1. 逐个返回 ACK

1651498614536

  1. 返回 ACK 的同时 滑动接收窗口,图中 2号ACK 由于一些原因 没有发送

1651498649350

  1. 接收方接收 ACK

1651498669424

  1. 由于 2 号 ACK 没有收到,发送方滑动窗口不会继续向后滑动,但是会发送已经在窗口内的分组 4 ,5

1651498800903

  1. 接收方接收4,5,并返回,但发送方和接收方的窗口均没有滑动

1651498863767

  1. 2号分组 超时重发

1651498895986

  1. 接收方重新接收2号分组 并返回 ACK

1651498957695

  1. 成功后,滑动窗口 一次性向后滑动 4 个

1651498991896

规律:

1651499035350

当窗口大小不符合规定时

1651499110863

接收方无法辨别新旧数据分组。

点对点协议PPP

ppp协议是目前使用最广泛的数据链路层协议

ppp协议为点对点链路传输各种协议数据报提供了一个标准方法,主要有三个部分组成:

  • 对各种协议数据报的封装方法(封装成帧)
  • 链路控制协议LCP (用于建立、配置以及测试数据链路的链接)
  • 一套网络控制协议NCPs (其中的每一个协议支持不同的网络层协议)

1651634070727

帧格式

1651634104548

透明传输

1651634160563

面向字节的异步链路采用字节填充法

1651634200024

面向比特的同步链路采用采用比特填充法

1651634286972

工作状态

1651634347647

媒体接入控制MAC

媒体接入控制的基本概念

共享信道要着重考虑的一个问题就是如何 协调 多个 发送和接收站点一个共享传输媒体 的占用,即媒体接入控制

  • 媒体接入控制
    • 静态划分信道
      • 频分多址
      • 时分多址
      • 码分多址
    • 动态划分信道
      • 受控接入
        • 集中控制
        • 分散控制
      • 随机接入

静态划分信道:

1651646906218

通常在 物理层 中使用

受控接入: 现在已经被淘汰

随机接入:

1651647003631

媒体接入控制 — 静态划分信道

信道复用

复用:复用就是通过一套物理链路同时传输多路用户的信号。

1651647144473

频分复用FDM

1651647169326

不同用户通过 各自的 调制解调器 将数字信号 调制成 不同频率的 模拟信号 使各个信号 占用不同的频带,实现信道复用。

时分复用TDM

1651647300620

波分复用WDM

1651647349818

码分复用CDM

  • 码分复用 是另一种共享信道的方法。由于该技术主要用于多址接入,故也称为 码分多址CDMA
  • 同理 频分复用 和 时分复用 也可多址接入 也可称为 频分多址时分多址
  • 与FDM 和 TDM 不同,CDM 的每一个用户可以 在同样的时间使用同样的频带 进行通信
  • 个用户使用特殊挑选的 不同码型 ,因此各用户之间 不会造成干扰

1651799028077

1651799039937

1651647770902

1651647796538

媒体接入控制 — 动态接入控制 — 随机接入 — CSMA/CD协议

发生碰撞的两种情况:

1651647856747

协议理解:

1651647904346

多址接入:就是 同时存在 多个用户连接在一条总线上。

载波监听:在发送帧之前,先检验总线是否空闲,若在96个比特时间内,没有收到别的主机发来的帧,则认定主机空闲,否则 就重新等待96比特时间。

碰撞检测:是在帧发送的过程中,检测帧是否发生碰撞,若帧已经发送完毕,则无法在进行碰撞检测,若检测出碰撞,则先退避一段随机时间再次发送。

争用期:以太网的 端到端往返传播时延 称为争用期

最小帧长:

1651649415500

1651649424116

1651649430818

1651649457588

最大帧长:

1651649688463

截断二进制指数退避算法:

1651649727754

信道利用率:

1651649815687

帧发送流程:

1651649840872

帧接收流程:

1651649856003

媒体接入控制 — 动态接入控制 — 随机接入 — CSMA/CA协议

MAC地址、IP地址以及ARP协议

  • MAC地址是以太网的MAC子层所使用的地址; 数据链路层
  • IP地址是 TCP/IP 体系结构网际层所使用的地址;
  • ARP 协议 属于 TCP/IP 体系结构的网际层,其作用是已知设备所分配到的 IP 地址,使用ARP协议可以通过该 IP 地址 获取到 设备的 MAC 地址; 网际层

MAC地址

  • 使用点对点信道的数据链路层不需要使用地址

1651799733290

  • 使用 广播信道必须使用地址来区分各主机

1651800094904

  • 当多个主机连接在同一个广播信道上,要实现两个主机之间的通信,则每个主机都必须有一个唯一标识,即一个数据链路层地址;
  • 被发送的帧中 必需携带标识 发送主机和接收主机的地址 。由于这类地址是用于媒体接入控制MAC ,因此 这类地址被称为 MAC 地址

1651800286790

  • MAC 地址一般被固化在网卡(网络适配器)的电可擦可编程的只读存储器中,因此 MAC 地址 也被称为 硬件地址;
  • 要注意:这不意味着 MAC 地址属于网络体系结构中的物理层
  • 1651800460742

IEEE 802 局域网 的MAC 地址格式

1651800514183

6字节,48比特位,通常表示为 12 个十六进制数

1651800585641

第一个字节的 b0 位 0:单播 1:多播 ;b1 位 0:全球管理 1:本地管理

MAC地址的发送顺序:

1651800695158

单播MAC地址

1651800747939

就是 一对一 发送,匹配这接收

广播 MAC 地址

1651800805385

多播 MAC 地址

1651800828842

IP地址

  • IP 地址 是因特网 上的 主机和路由器 所使用的地址,用于标识两部分信息:
    • 网络编号:标识因特网上数以百万计的网络
    • 主机编号:标识同一网络上的不同主机

1651822828449

注意:MAC 地址不具备区分不同网络的功能

从网络体系结构 看 IP地址 与 MAC 地址

1651822926394

数据包转发过程中 IP地址与MAC 地址的变化情况

1651822996260

  • 数据包转发过程中 源IP地址 和目的IP地址保持不变;
  • 数据包转发过程中 源MAC 地址 和目的 MAC 地址逐个链路或网络改变

ARP协议

一般情况下,发送方主机 知道 接受方的 IP地址 ,但不知道MAC地址,那么数据是怎么发送 和接收的呢?

1651823263431

实际情况是,每一台主机 都有ARP高速缓存 ,其中存放着 IP地址与MAC地址的对应关系:

1651823339775

但 该高速缓存不是一开始就存有 所有主机的 IP地址与MAC地址的对应关系;

ARP高速缓存,工作流程:

  1. 发送数据,发现 ARP高速缓存中没有保存 目标IP地址与目标MAC地址的对应关系

  2. 发送 ARP请求报文(广播),发送的内容是:

    1651823511493

  3. 总线上的每台主机 都收到该条 ARP请求报文,网卡将帧交付给上层 网络层 处理

  4. 如果 IP地址 匹配,那么接收并解析,如果不匹配 则忽略

    1651823643153

  5. 目的主机收到 ARP请求报文后,

    1. 将 发送来的 ARP请求报文解析,将其 IP地址 与 MAC地址的映射关系 保存到ARP高速缓存中
    2. 发送单播 ARP响应报文,以告知 自己的 MAC 地址

    1651823797833

  6. 接收到 ARP响应报文后,将其 IP地址与 MAC地址的关系记录到 自己的 ARP高速缓存中

    1651823890340

注意 : ARP协议 只能在同一个网络中 工作,跨网络的 ARP请求报文 需要通过 集线器 或者交换机 多次转发

集线器与交换机的区别

早期的总线型以太网

1651824097663

使用集线器的星型以太网

1651824133250

集线器 在物理层扩展以太网,工作在 半双工方式

1651824176096

1651824244911

以太网交换机

1651824353846

对比 集线器 和交换机

  1. 正常单播

    1651824515802

  2. 正常广播

    1651824502700

  3. 多主机同时单播

    1651824674136

    1651824682097

  4. 扩展网络下的单播

    1651824747006

  5. 扩展网络下的广播

    1651824774793

  6. 扩展网络下的多主机同时单播

    1651824811542

总结

1651824828357

以太网交换机自学习和转发帧的流程

  1. 以太网交换机工作在 数据链路层(也包括物理层)
  2. 以太网交换机收到帧后,在 帧交换表 中 查找帧的目的 MAC 地址所对应的接口好,然后通过该接口转发帧
  3. 以太网交换机是一种即插即用的设备,刚启动时, 帧交换表 中是空的,通过自学习算法 自动建立起 帧交换表

1652536351132

帧交换表中的每一条记录 都有自己的有效时间,到期自动删除!

以太网交换机的生成树协议STP

网络环路带来的问题:

  • 广播风暴
  • 主机收到重复的广播帧
  • 交换机的帧交换表震荡

使用生成树协议STP 可以在增加冗余链路来提高网络可靠性的同时又能避免 网络环路带来的各种问题

虚拟局域网VLAN

虚拟局域网VLAN概述

  • 以太网交换机工作在数据链路层 (也包括物理层)
  • 一个交换机互连起来的以太网,广播域非常大,尤其是随着互联网规模的扩大,巨大的广播域带来了很多弊端
    • 广播风暴
    • 难以维护和管理
    • 潜在安全问题
  • 广播域会浪费网络资源和各主机的 cpu 资源

1653381061676

分割广播域的方法

  • 使用路由器

    1653381135406

  • 虚拟局域网

    虚拟局域网是一种将局域网内的设备划分成 与物理位置无关 的逻辑组的技术,这些逻辑具有某些共同的需求

    1653381213258

3.11.2 虚拟局域网VLAN的实现机制

IEEE 802.1 帧

1653381313411

交换机的端口类型

  • 交换机的端口类型有三种:
    • Access
    • Trunk
    • Hybrid

Access

  • Access 端口一般用于连接用户计算机

  • Access 端口只能属于一个VLAN

  • Access 端口的PVID值与端口所属VLAN的ID相同(默认为 1 )

  • Access 端口的接收处理方法:

    一般只接受 未打标签 的普通以太网MAC帧。根据帧的端口的PVID给帧 打标签 ,及插入四字节的 VLAN标记字段,字段中的VID值与端口的PVID取值相等

  • Access 端口发送处理方法:

    若帧中的 VID 与端口的 PVID 相等,则 去标签 并转发该帧;否则不转发

1653381844329

1653381851100

Trunk

  • Trunk 端口一般用于交换机与交换机之间或交换机与路由器之间的互连

  • Trunk 端口可以属于多个VLAN

  • 用户可以设置 Trunk 端口的 PVID 值,默认为 1

  • Trunk 端口 发送处理方法:

    对 VID 等于 PVID 的帧,”去标签” 再转发

  • Trunk 端口 接收处理方法:

    接收”未打标签的帧”,根据接收帧的端口 PVID 给帧 打标签 ,及插入4字节 VLAN 标记,字段中 VID 取值与 端口的 PVID 取值相等

1653382198323

虚拟局域网VLAN概述

  • 以太网交换机工作在数据链路层 (也包括物理层)
  • 一个交换机互连起来的以太网,广播域非常大,尤其是随着互联网规模的扩大,巨大的广播域带来了很多弊端
    • 广播风暴
    • 难以维护和管理
    • 潜在安全问题
  • 广播域会浪费网络资源和各主机的 cpu 资源

1653381061676

分割广播域的方法

  • 使用路由器

    1653381135406

  • 虚拟局域网

    虚拟局域网是一种将局域网内的设备划分成 与物理位置无关 的逻辑组的技术,这些逻辑具有某些共同的需求

    1653381213258

虚拟局域网VLAN的实现机制

IEEE 802.1 帧

1653381313411

交换机的端口类型

  • 交换机的端口类型有三种:
    • Access
    • Trunk
    • Hybrid

Access

  • Access 端口一般用于连接用户计算机

  • Access 端口只能属于一个VLAN

  • Access 端口的PVID值与端口所属VLAN的ID相同(默认为 1 )

  • Access 端口的接收处理方法:

    一般只接受 未打标签 的普通以太网MAC帧。根据帧的端口的PVID给帧 打标签 ,及插入四字节的 VLAN标记字段,字段中的VID值与端口的PVID取值相等

  • Access 端口发送处理方法:

    若帧中的 VID 与端口的 PVID 相等,则 去标签 并转发该帧;否则不转发

1653381844329

1653381851100

Trunk

  • Trunk 端口一般用于交换机与交换机之间或交换机与路由器之间的互连

  • Trunk 端口可以属于多个VLAN

  • 用户可以设置 Trunk 端口的 PVID 值,默认为 1

  • Trunk 端口 发送处理方法:

    对 VID 等于 PVID 的帧,”去标签” 再转发

  • Trunk 端口 接收处理方法:

    接收”未打标签的帧”,根据接收帧的端口 PVID 给帧 打标签 ,及插入4字节 VLAN 标记,字段中 VID 取值与 端口的 PVID 取值相等

1653382198323