数据链路层

思维导图:

数据链路层 - 图1

概述

数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标机网络层。

数据链路层 - 图2

MAC地址

以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。长度为6字节,共48比特,通常用十六进制表示法,地址的每个字节被表示为一对十六进制数每个适配器具有一个唯一的MAC地址,不随位置发生变化(就像人的身份证,而IP则像人的邮政地址)。

ARP协议(地址解析协议)

通过MAC,我们定义了地址。但是我们紧接着就有一个问题,那就是一块网卡怎么会知道另一块网卡的MAC地址?
答案就是ARP协议。

每个节点的ARP模块都在它的RAM中有一个ARP表,包含IP地址到MAC地址的映射关系,每个表项还包含TTL字段,表示表项过期时间(ARP表是自动创建的,如果某节点与子网断开连接,它的表项最终会从留在子网中的节点的表中删除。通常一个表项的过期时间是20分钟)主机向其ARP模块提供一个IP地址,ARP模块返回IP地址对应的MAC地址(注释:在OSI七层模型中,ARP属于链路层模型,所以这里也先简单介绍一下,构建知识体系)。

数据链路层 - 图3

封装成帧

封装成帧:在数据的前后部分封装,构成帧。

数据链路层 - 图4

透明传输

透明传输:在发送过程中,底层协议传输不对业务逻辑进行改变,只负责将传输的内容由源地址传输到目的地址。

数据链路层 - 图5

透明传输的实现方法

字符计数法

帧头部使用一个计数字段来标明帧内字符数,当目的节点接收到字节计数值时就知道后面跟随的字节数,从而可以确定帧结束的位置(计数字段提供的字节数包含自身所占用的一个字节)。

数据链路层 - 图6

缺点:如果计数字段发生错误,那么会造成接收方无法准确的知道第几帧的开始和结束,收发双方将失去同步。

字符填充法

字符填充法使用一些特定的字符来定位一帧的开始(DLE STX)与结束(DLE ETX)。

数据链路层 - 图7

在传输的过程中,由于传输内容会和特定的标志帧的特定字符冲突,所以可以在特定字符前可以添加转义字符来区分

数据链路层 - 图8

零比特填充法

数据链路层 - 图9

违规编码法

因为曼彻斯特编码不使用高-高,低-低来表示,所以如果使用高-高,低-低来表示帧起始和终止就不会与数据冲突

数据链路层 - 图10

差错控制

为什么产生差错?

数据链路层 - 图11

为什么要在数据链路层进行差错控制?

尽早的返现差错,防止影响后面的数据,浪费资源。

检错编码(奇偶校验码,循环冗余码CRC)

奇偶校验码

奇偶校验:只需包含1个附加比特。
对于偶校验,选择一个值,使得所有比特中1出现偶数次。
对于奇校验,选择一个值,使得所有比特中1出现奇数次。接收方通过检测1出现的次数判断是否出现差错。如果出现偶数个比特差错,则检验不出
缺点:只能检测出1,3,5,7…等等奇位数错误,检测成功率位50%

数据链路层 - 图12

循环冗余码CRC

发送方和接收方协商一个r+1比特的生成多项式(G),要起其最高比特位为1。发送方通过在d比特的数据后附加r比特,使得整个(d+r)比特的值能够被G整除。接收方用G去除(d+r)比特,如果余数非0,则出现差错。

数据链路层 - 图13

举例:

数据链路层 - 图14
接收方收到数据后进行检测

数据链路层 - 图15

需要注意的地方

数据链路层 - 图16

纠错编码(海明码)
  1. 确认校验码位数r
    使用海明不等式推算出海明码有多少位。
    数据链路层 - 图17
  2. 确定校验码和数据的位置
    校验码放在2的几次方的位置
    数据链路层 - 图18
  3. 求出校验码的值
    注释
    1.先是通过二进制位确定有几位。本题中因为最大位10的二进制是1010,所以是4为,将其标注
    2.然后从p1开始看,看p1的二进制位的数值和所有信息位的对应位置的数值是否相同,然后找出来这些位
    这里有点难理解,这里以p1为例辅助理解,这里找出来的就是P1,D1,D2,D4,D5
    数据链路层 - 图19
    然后计算异或值,比如说这里D1=1,D2=0,D4=1,D5=0,就是p1要同时和0,1,0,1进行异或之后得到0,为了标识我加粗原始计算数据
    举例:0和1异或得1,1和0异或得1,1和1异或得0,那么p1和0异或得0,p1就是0了
    3.其他同理,按顺序计算出P2,P3,P4,然后填入表格
    数据链路层 - 图20
  4. 检测并纠错
    数据链路层 - 图21

流量控制和可靠传输

为什么要有流量控制?

因为接收端的接受能力和发送端的发送能力往往会不匹配,从而导致传输出错,因此需要进行流量控制。

停止等待协议(Stop-and-Wait)

数据链路层 - 图22

无差错情况

发送ACK响应即可

数据链路层 - 图23

有差错情况

  • 数据帧丢失或检测到帧错误
    使用超时计时器,如果发送一个帧后,超过时间未响应则重新发送。
    数据链路层 - 图24
  • ACK丢失
    数据链路层 - 图25
  • ACK迟到
    数据链路层 - 图26

停止等待协议的特点

1.简单
2.信道利用率低。大部分时间数据都在路上,发送方很长时间闲置,资源浪费

数据链路层 - 图27

数据链路层 - 图28

后退N帧协议(GBN)

因为停止等待协议太浪费时间了,所以尝试采用GBN,发送连续多个数据帧,以增大信道利用率。

累计确认:当收到一个ACK后,表示前面的帧都发送成功。

数据链路层 - 图29

举例

在接收方未收到信号后,会丢失发送方以后发送的数据,当2帧超时后,发送方再回退到2帧重新发送。

数据链路层 - 图30

发送窗口不能无限大,与使用的编号的比特数有关,二进制表示。

缺点

接收方未接收到帧后,会丢弃后面发送发传输过来的帧,此时造成大量浪费。

选择重传协议(SR)

只重传错误的帧,这样的话就不用浪费资源把已经收到的帧再重传一次了。

数据链路层 - 图31

同样的,因为编号的问题,发送窗口不能无限大
当发送窗口最后和接受窗口大小相同时,利用率比较高

介质访问控制技术

解决当局域网中共用信道的使用产生竞争时,如何分配信道的使用权问题。

数据链路层 - 图32

静态划分信道

频分多路复用FDM

数据链路层 - 图33

时分多路复用TDM

数据链路层 - 图34

统计时分复用STDM

数据链路层 - 图35

码分多路复用CDMA

数据链路层 - 图36

动态分配信道

ALOHA协议

纯ALOHA协议

数据链路层 - 图37

时隙ALOHA协议

数据链路层 - 图38

CSMA协议(载波侦听多路访问)

数据链路层 - 图39三种方式:

数据链路层 - 图40

举例比喻:

例如排队买奶茶:

1-坚持CSMA:特别想喝,人多也会一致排队。

非坚持CSMA:人多就不喝,没有人排队就立马去喝。

p-坚持CSMA:以p的概率去买来喝,1-p的概率不喝,如果有人排队的话,就不喝,如果没人排队就去买来喝。

CSMA/CD协议

载波监听多点接入 / 碰撞检测CSMA/CD(对于半双工通信)

虽然会监听信道上空闲才会发送数据,但是因为链路实际有长短,传送有速度,发送数据需要时间,此时还没发到接收方,但接收方却监听道空闲,这个时间内可能就被其他节点当成空闲状态导致发生碰撞。

先侦听信道,如果没有其它节点在使用信道,则传输数据。但是有碰撞检测,如果发生碰撞,会停止传输剩下的数据,等待一个随机时间(通常比传输一帧短)后,再进行尝试。

数据链路层 - 图41

图示传播时延对载波监听的影响:

发生碰撞的最长时间为2r(刚刚发到接收方是发生碰撞,一去一回)

数据链路层 - 图42

数据链路层 - 图43

碰撞后确认重传时机

使用阶段二进制指数规避算法

数据链路层 - 图44

CSMA/CA协议

载波监听多点接入 / 碰撞避免CSMA/CA

数据链路层 - 图45

工作原理

数据链路层 - 图46

CSMA/CD 与 CSMA/CA的区别

数据链路层 - 图47

轮询访问介质访问控制

主要包括两大类,一个是轮询协议,另一个是令牌传递协议

局域网

概述

概括:范围大小,速度快,延迟低,节点平等

数据链路层 - 图48

局域网的网络拓扑结构

常用的是总线型拓扑

数据链路层 - 图49

局域网的传播介质

数据链路层 - 图50

局域网介质访问方法

数据链路层 - 图51

局域网的分类

数据链路层 - 图52

IEEE802标准

数据链路层 - 图53

IEEE802描述的局域网参考模型

数据链路层 - 图54

以太网

概述

数据链路层 - 图55

数据链路层 - 图56

  1. 可靠传输接收到的数据与发送的数据一致
  2. 无差错接收:凡是接收到的帧都无差错,但是还会有帧丢失、失序、重复的错误出现,并不可靠

以太网的发展

数据链路层 - 图57

适配器和MAC地址

数据链路层 - 图58

以太网MAC帧

数据链路层 - 图59

10BASE-T以太网

数据链路层 - 图60

高速以太网

数据链路层 - 图61

无线局域网

数据链路层 - 图62

数据链路层 - 图63

两种无线局域网

数据链路层 - 图64

数据链路层 - 图65

广域网

概述

数据链路层 - 图66

PPP协议(Point-to-Point Protocol)

概述

PPP协议是目前使用最广泛的数据链路层协议,拨号基本都是PPP协议,PPP协议仅支持全双工链路

PPP协议需要满足的要求

数据链路层 - 图67

PPP协议不需要满足的要求

  • 纠错
  • 流量控制
  • 序号
  • 不支持多点线路

PPP协议组成成分以及功能

数据链路层 - 图68

PPP协议的帧格式

数据链路层 - 图69

HDLC协议(High-Level Data Link Control)

数据链路层 - 图70

HDLC的三种站

数据链路层 - 图71

HDLC的帧格式

数据链路层 - 图72

PPP协议和HDLC协议对比

数据链路层 - 图73

链路层设备

网桥(Bridge)

使用网桥时,由于网桥会根据mac地址进行过滤,所以不会形成冲突域

数据链路层 - 图74

两种网桥

  • 透明网桥
    通过自学习来构建转发表。每一个通过网桥的数据包都会被记录下网桥收到数据时数据对应的地址和网桥自己的接口,通过许许多多的数据包的构造的缓存,网桥就可以知道哪个数据包在哪个接口,以后如果要穿数据包就知道要往哪个接口发送数据包了
  • 原路由网桥
    在发送时,直接将最佳路径放到帧首部。那么网桥如何获得最佳路径?通过广播方式想目标地址发送广播,此时可能会经过不同路由产生不同的路径,目标地址收到后再将每一条路径都发一个响应帧给网桥,网桥经过对比就知道哪个接口最快了

交换机

  • 网桥接口越来越多,网桥就变成了交换机。
    交换机的任务是接收入链路层帧并将它们转发到出链路
    交换机自身对节点透明:某节点向另一节点寻址一个帧,顺利地将该帧发送进LAN,而不知道这个帧经过了某个交换机的接收与转发

交换机转发与过滤

  • 过滤:交换机决定一个帧是应该转发还是应该丢弃
  • 转发:决定一个帧应该被导向哪个接口

自学习(即插即用)

  • 交换机表是自动、动态、自治地建立的,没有来自网络管理员或配置协议的任何干预。换句话说,交换机是自学习的
  • 交换机表初始为空
  • 源地址为DD-DD-DD-DD-DD-DD的帧从接口x到达时,如果不存在则新建一项;存在则更新当前时间
  • 如果一段时间后,在x接口没有来自DD-DD-DD-DD-DD-DD的帧,则将该表项删除

数据链路层 - 图75