数据链路层(详细版)【01】

数据链路层是在物理层和网络层之间的协议,提供相邻节点的可靠数据传输

在这里插入图片描述

一、从体系结构来看数据链路层

数据链路层是为上下两层提供服务或者上下两层向他传送数据(服务【垂直】);与其对等层之间用帧进行通信协议【水平】)

在这里插入图片描述

注意:不同的链路层可能采用不同的数据链路层协议

在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层,于是当主机 H1 向主机 H2 发送数据的时候,我们可以想象数据就是在数据链路层中从左向右沿着水平方法传送的

在这里插入图片描述

数据链路层信道类型

在这里插入图片描述

二、使用点对点信道的数据链路层

(一)数据链路和帧

(1)数据链路

链路 (link):一条无源的点到点的物理线路段,中间没有任何其他的交换结点,一条链路只是一条通路的一个组成部分,链路也称为物理链路

数据链路 (data link):把实现控制数据传输的协议的硬件和软件加到链路上(现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件),就构成了数据链路,即链路+协议 ,数据链路也称为逻辑链路

(2)帧

数据链路层传送的是帧 ,是数据链路层的协议数据单元

在这里插入图片描述

帧的组成:帧头(Header) + 数据(Data) + 帧尾(Traile)

在这里插入图片描述

  • 帧头(Header):存放源MAC地址目的MAC地址、类型(针对于不同的网络拓扑结构进行转换)
    MAC地址(Media Access Control Address)直译为媒体访问控制地址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的地址。在OSI模型中,第三层网络层负责 IP 地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 [来源:维基百科]
  • 数据(Data)
  • 帧尾(Traile):进行校验

(二)数据链路层要解决的三个基本问题

(1)封装成帧

将比特流变成帧,即找到帧的开头和结尾

➡️ 在一段数据的前后分别添加首部和尾部,然后就构成了一个帧 ,首部和尾部的一个重要作用就是进行帧定界(确定帧的界限)

将比特流划分成“帧”的主要目的是为了检测和纠正物理层在比特传输中可能出现的错误

在这里插入图片描述

用控制字符进行帧定界的方法举例

控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始,另一个控制字符 EOT (End Of Transmission) 表示帧的结束

在这里插入图片描述

(2)透明传输

“在数据链路层透明传送数据”表示:无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层

如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地 “找到帧的边界”

在这里插入图片描述

解决方案:用“字节填充”或“字符填充”法解决透明传输的问题

  • 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)
  • 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
  • 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个

在这里插入图片描述

(3)差错检测

差错原因:噪声的影响,导致信号的叠加
在传输过程中可能会产生比特差错:1 可能变成 0,而 0 可能变成 1

在这里插入图片描述

为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施

在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC (Cyclic Redundancy Check) 检错技术

循环冗余检验 CRC 原理
在发送端,先把数据划分为组,假定每组 k 个比特
在每组 M 后面再添加供差错检测用的 n 位冗余码,然后构成一个帧发送出去,一共发送 (k + n) 位

在这里插入图片描述

详细内容可以参见:【科普向】谁都能看懂的CRC(循环冗余校验)原理


(三)点对点协议PPP

对于点对点的链路,目前使用最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)

(1) PPP 协议的组成

PPP 协议有三个组成部分

  1. 一个将 IP 数据报封装到串行链路的方法

  2. 一个链路控制协议 LCP (Link Control Protocol)

    用来建立、配置和测试数据链路的链路控制协议,通信双方可协商一些选项,最重要的功能之一是身份验证

  3. 一套网络控制协议 NCP (Network Control Protocol)

    每个协议支持一种不同的网络层协议,如IP、OSI的网络层等

(2) PPP 协议应满足的需求

  • 简单 —— 这是首要的要求
  • 封装成帧 —— 必须规定特殊的字符作为帧定界符
  • 透明性 —— 必须保证数据传输的透明性
  • 多种网络层协议 —— 能够在同一条物理链路上同时支持多种网络层协议
  • 多种类型链路 —— 能够在多种类型的链路上运行
  • 差错检测 —— 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧
  • 检测连接状态 —— 能够及时自动检测出链路是否处于正常工作状态
  • 最大传送单元 —— 必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性
  • 网络层地址协商 —— 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址
  • 数据压缩协商 —— 必须提供一种方法来协商使用数据压缩算法

(3) PPP 协议的帧格式

在这里插入图片描述

PPP 帧的首部和尾部分别为 4 个字段和 2 个字段

  • 首部
    • 首尾标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)
    • 地址字段 A 只置为 0xFF。地址字段实际上并不起作用
    • 控制字段 C 通常置为 0x03
    • 协议字段 🌟
      • 若为 0x0021,则信息字段就是 IP 数据报
      • 若为 0x8021,则信息字段是网络控制数据
      • 若为 0xC021,则信息字段是 PPP 链路控制数据
      • 若为 0xC023,则信息字段是鉴别数据
  • 尾部

PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节

(4) PPP 协议解决透明传输的问题

当 PPP 用在异步传输时,使用字节填充法

当 PPP 用在同步传输链路时,采用零比特填充法

字节填充法(异步)
  • 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)
  • 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)
  • 若信息字段中出现 ASCII 码的控制字符,则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变

在这里插入图片描述

零比特填充法(同步)

PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送),这时 PPP 协议采用零比特填充方法来实现透明传输。

具体方法

  • 在发送端,只要发现有 5 个连续 1,则立即填入一个 0
  • 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除

目的就是使得信息部分数据中不再出现帧的定界符(0x7E)

在这里插入图片描述

(5) PPP协议差错检测

PPP 协议不使用序号和确认机制是出于以下的考虑

  • 在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理
  • 在因特网、互联网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的
  • 帧检验序列 FCS 字段可保证无差错接受

(6) PPP协议的工作状态

PPP 链路初始化过程

  • 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接
  • PC 机向 ISP 发送一系列的 LCP 分组(封装成多个 PPP 帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。(链路上的最大帧长、不使用PPP帧中的地址和控制字段)
  • 进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配了一个临时的IP地址,这样,用户个人电脑就成为互联网上的一个有IP地址的主机了。(根据网络层的不同协议互相交换网络层特定的网络控制分组)
  • 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接

在这里插入图片描述

可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容


三、使用广播信道的数据链路层

(一) 局域网的数据链路层

(1)局域网的特点 & 优点

局域网的主要特点

  • 网络为一个单位所拥有
  • 地理范围和站点数目均有限

局域网的主要优点

  • 具有广播功能,从一个站点可很方便地访问全网
  • 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
  • 提高了系统的可靠性、可用性和生存性

(2)局域网的拓扑结构

在这里插入图片描述

(3)共享信道带来的问题

  • 竞争和冲突:多个用户共享同一信道时可能会发生竞争和冲突,导致数据包丢失或延迟增加。
  • 信道拥塞:当共享信道上的用户数量增加时,信道可能会变得拥挤,导致性能下降和通信质量降低。
  • 碰撞:在共享信道上,多个用户同时发送数据可能会导致碰撞,使得数据包损坏并需要重新发送,从而降低了效率

在这里插入图片描述

(4)媒体共享技术

静态划分信道

信道复用复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号

在这里插入图片描述

当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽

  • 频分复用FM

    在这里插入图片描述

    频分复用的所有用户同时占用不同的频带资源并行通信

  • 时分复用TDM

    在这里插入图片描述

    时分复用的所有用户在不同的时间占用同样的频带宽度

  • 波分复用WDM

    在这里插入图片描述

    根据光波的波长进行传输(合波器耦合)

  • 码分复用CDM

    码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA

    各用户使用经过特殊挑选的不同码型

动态媒体接入控制(多点接入)
  • 随机接入:所有的用户可随机地发送信息
  • 受控接入:用户必须服从一定的控制

(5)以太网的两个标准

  • IEEE 802.3 是第一个 IEEE 的以太网标准,数据链路层分为2个子层

    在这里插入图片描述

    • 逻辑链路控制 LLC (Logical Link Control) 子层:与传输媒体无关

    • 媒体接入控制 MAC (Medium Access Control) 子层:与传输媒体有关

    与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关
    不管采用何种协议的局域网,对 LLC 子层来说都是透明的

  • DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约

这两种标准的硬件实现可以在同一个局域网上互操作。这两个标准标准只有很小的差别,因此很多人也常把 802.3局域网简称为“以太网”

(6)适配器的作用

网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡

适配器的重要功能:

  • 进行串行/并行转换
  • 对数据进行缓存
  • 在计算机的操作系统安装设备驱动程序
  • 实现以太网协议

在这里插入图片描述

(二)CSMA/CD协议

最早的以太网:将许多计算机都连接到一根总线

总线特点:易于实现广播通信,简单,可靠
在这里插入图片描述

为了实现一对一通信,将接收站的硬件地址写入帧首部中的目的地址字段中。仅当数据帧中的目的地址与适配器的硬件地址一致时,才能接收这个数据帧
在这里插入图片描述

总线缺点:多个站点同时发送时,会产生发送碰撞或冲突,导致发送失败

在这里插入图片描述

(1) 以太网采取的两种重要措施

  1. 采用较为灵活的无连接的工作方式

    • 不必先建立连接就可以直接发送数据

    • 对发送的数据帧不进行编号,也不要求对方发回确认

    • 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的

  2. 以太网发送的数据都使用曼彻斯特 (Manchester) 编码,便于同步

    曼彻斯特编码缺点是:它所占的频带宽度比原始的基带信号增加了一倍

    在这里插入图片描述

(2) CSMA/CD 协议的要点

CSMA/CD 含义:载波监听多点接入 / 碰撞检测

  • 多点接入:表示许多计算机以多点接入的方式连接在一根总线上

  • 载波监听:是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞(总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号

  • 碰撞检测:适配器边发送数据,边检测信道上的信号电压的变化情况。电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞(或冲突)

    • 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)
    • 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞

    “碰撞”就是发生了冲突,“碰撞检测”也称为“冲突检测”

    在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,以免继续浪费网络资源,然后等待一段随机时间后再次发送

(3) CSMA/CD 协议工作流程

在这里插入图片描述

  • 在发送前已经监听过信道,为什么还要进行碰撞检测?

    监听时,监听的是接口处,因为信号有传播时延,监听信道空闲,但信道可能并非真正空闲(可见:每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性)

  • 碰撞后重传的时机

    采用截断二进制指数退避确定

  • 强化碰撞

    在总线类型的网络中,AB碰撞但C不知道。发送站检测到冲突后,立即停止发送数据帧,接着就发送 32 或 48 比特的人为干扰信号。让当前总线上的所有用户都知道发生碰撞

在这里插入图片描述


参考文章

【计算机网络】学习笔记,第三篇:数据链路层(谢希仁版)

计算机网络-数据链路层

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年51cto下载的视频怎么导出

如果你喜欢在51cto上观看各种专业技术视频,那么你可能想将喜欢的视频保存到本地设备中,以便随时随地观看。今天,我们就来探讨一下如何在2024年将51cto下载的视频导出到你的设备中 下载51cto的工具我已经打包好了,有需要的自己下载…

重学java 31.API 2.StringBuilder

总有一天,我不再畏惧任何人的离开 —— 24.5.8 StringBuilder的介绍 1.概述 一个可变的字符序列,此类提供了一个与StringBuffer兼容的一套API,但是不保证同步(线程不安全,效率高&#xff…

Qt 6.7 正式发布!

本文翻译自:Qt 6.7 Released! 原文作者:Qt Group研发总监Volker Hilsheimer 在最新发布的Qt 6.7版本中,我们大大小小作出了许多改善,以便您在构建现代应用程序和用户体验时能够享受更多乐趣。 部分新增功能已推出了技术预览版&a…

scikit-learn多因子线性回归预测房价

1.首先是单因子线性回归预测房价 import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score# 1.读取csa房屋数据 path D:/pythonDATA/us…

地道俄语口语,柯桥俄语培训哪家好

1、по-моему 依我看;在我看来 例: По-моему, сегодня будет дождь. 依我看, 今天要下雨。 Сделай по-моему. 按我的办法干吧 2、кажется 似乎是;看起来 例: Парень, …

mvc区域、Html.RenderAction、Html.RenderPartial、 模板、section

根据上图 Html.RenderPartial 与 Html.RenderAction 区别 RenderAction 会把对应的视图结果渲染 RenderPartial 会把html视图直接渲染 模板

The 2021 Sichuan Provincial Collegiate Programming Contest

The 2021 Sichuan Provincial Collegiate Programming Contest The 2021 Sichuan Provincial Collegiate Programming Contest A. Chuanpai 题意:给出总值k,将k分成xyk,x和y均小于7,最多分成多少组。 思路:暴力跑一…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动,更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状,因此本文是设身处地从用户的角度去体验、使用这个产品,并反馈最真实的建议和意见,除了明确该产品的优点之外,也发现了不少缺陷和…

实战Java虚拟机-基础篇

JVM的组成 一、自动垃圾回收 1.Java的内存管理 Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对堆上的内存进行回收。其…

vue项目基于WebRTC实现一对一音视频通话

效果 前端代码 <template><div class"flex items-center flex-col text-center p-12 h-screen"><div class"relative h-full mb-4 fBox"><video id"localVideo"></video><video id"remoteVideo">…

【MQTT】服务端、客户端工具使用记录

目录 一、服务端 1.1 下载 1.2 相关命令 &#xff08;1&#xff09;启动 &#xff08;2&#xff09;关闭 &#xff08;3&#xff09;修改用户名和密码 1.3 后台管理 &#xff08;1&#xff09;MQTT配置 &#xff08;2&#xff09;集群概览 &#xff08;3&#xff09;…

如何使用SkyWalking收集分析分布式系统的追踪数据

Apache SkyWalking 是一个开源的观测性工具&#xff0c;用于收集、分析和展示分布式系统的追踪数据。SkyWalking 支持多种语言的追踪&#xff0c;包括但不限于 Java、.NET、Node.js 等。以下是使用 SkyWalking 工具实现数据采集的详细步骤&#xff1a; 1. 下载和安装 SkyWalkin…

数据挖掘算法原理与实践:决策树

第2关&#xff1a;决策树算法原理 任务描述 本关任务&#xff1a;根据本关所学知识&#xff0c;完成 calcInfoGain 函数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 信息熵&#xff1b;条件熵&#xff1b;信息增益。 信息熵 信息是个很抽象的概念。…

风电厂数字孪生3D数据可视化交互展示构筑智慧化电厂管理体系

随着智慧电厂成为未来电力企业发展的必然趋势&#xff0c;深圳华锐视点紧跟时代步伐&#xff0c;引领技术革新&#xff0c;推出了能源3D可视化智慧管理系统。该系统以企业现有的数字化、信息化建设为基础&#xff0c;融合云平台、大数据、物联网、移动互联、机器人、VR虚拟现实…

Android 右键 new AIDL 无法选择

提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file&#xff09; 解决方式&#xff1a; 在app的build.gradl中 adnroid{} 添加&#xff1a; buildFeatures{aidl true}

Oracle-一次TX行锁堵塞事件

问题背景&#xff1a; 接用户问题报障&#xff0c;应用服务出现大量会话堆积现象&#xff0c;数据库锁堵塞严重&#xff0c;需要协助进行问题定位和排除。 问题分析&#xff1a; 登录到数据库服务器上&#xff0c;首先查看一下数据库当前的等待事件情况&#xff0c;通过gv$ses…

教你零成本,免费使用comfyui复现remini爆火的黏土风格转绘(附完整教程)

在五一假期期间,一款名为Remini的AI照片编辑软件在小红书上迅速走红,其独特的“丑萌”黏土风格滤镜深受广大博主和用户的喜爱,引发了一波热潮,让人们玩得不亦乐乎。 Remini软件提供的这种视觉效果虽然看起来有点“丑萌”特效,然而,正是这种独树一帜的画风,使得Remini迅速…

【Django学习笔记(十)】Django的创建与运行

Django的创建与运行 前言正文1、安装Django2、创建项目2.1 基于终端创建项目2.2 基于Pycharm创建项目2.3 两种方式对比 3、默认项目文件介绍4、APP5、启动运行Django5.1 激活App5.2 编写URL和视图函数对应关系5.3 启动Django项目5.3.1 命令行启动5.3.2 Pycharm启动5.3.3 views.…

C++缺省参数、函数重载、引用

一、缺省参数 1.1缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void func(int n 0) {cout << n << endl; }int main() {func();func…

【经验01】spark执行离线任务的一些坑

项目背景: 目前使用spark跑大体量的数据,效率还是挺高的,机器多,120多台的hadoop集群,还是相当的给力的。数据大概有10T的量。 最近在出月报数据的时候发现有一个任务节点一直跑不过去,已经超过失败次数的阈值,报警了。 预警很让人头疼,不能上班摸鱼了。 经过分析发现…