计算机网络-数据链路层上篇

news2024/10/4 20:32:22

目录

一、数据链路层概述

二、封装成帧

三、差错检测

(一)奇偶校验

(二)循环冗余校验CRC

四、可靠传输

(一)停止-等待协议SW 

(二)后退N帧协议GBN

(三)选择重传协议SR

五、点对点协议PPP

(一)点对点协议PPP的帧格式

​(二)透明传输- 面向字节的异步链路采用插入转义字符的字节填充法

(三)透明传输-面向比特的同步链路采用插入比特0的比特填充法 

(四)点对点协议PPP的工作状态

六、媒体接入控制MAC

(一)静态划分信道

1、频分复用FDM

2、时分复用TDM

3、波分复用WDM

4、码分复用CDM

(二)动态接入控制

1、随机接入-总线局域网使用的协议:CSMA/CD(载波监听多址接入/碰撞检测)

2、随机接入-无线局域网使用的协议:CSMA/CA(载波监听多址接入/碰撞避免)


一、数据链路层概述

数据链路层在网络体系结构中所处的地位如下,当我们专门研究数据链路层时,可以视为,数据直接在数据链路层上通过链路传输

链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。

数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。

数据链路层的三个重要问题:

① 封装成帧

经过层层封装后,到达数据链路层时加上帧头和帧尾形成帧

封装后的格式如下:

② 差错检测

帧在传输过程中遭遇干扰后可能出现误码(比特0变成比特1,反之亦然)

此时接收方如何知道产生了误码呢? 可以利用检错码,发送方发送数据之前可以基于待发送的数据和检错算法计算出检错码,将其封装于帧尾。接收方接收到数据后就可以通过帧尾中的检错码和检错算法检测帧中是否有误码。

③ 可靠传输

当接受方接收到的数据有误码出现时,如果是基于非可靠传输协议发送的数据,那么直接丢弃而不做任何措施。如果是可靠传输协议,则发送方需要重新发送使接收方能正确的接收到数据

上述是基于点对点的协议,如果是使用广播信道的数据链路层,那么除上述外还需要解决发送目的和碰撞问题

即如何知道数据是发送给C的,可以将帧发送的目的地址添加在帧中一起传输

 

 碰撞问题是共享式局域网不可避免的,可以使用以太网的媒体接入控制协议CSMA/CD

二、封装成帧

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

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

  • 帧头和帧尾的作用之一就是帧定界

当数据链路层将帧交付到物理层,物理层将构成帧的各比特转换为电信号发送到传输媒体后,接收方如何从物理层交付的比特流中提取出一个个的帧呢?这就是帧头和帧尾存在的意义之一了,即帧定界

 如PPP帧的格式,在帧头和帧尾会加上帧定界标志

 但并不是每一种数据链路层的帧都包含帧定界标志,比如以太网版本2的MAC帧格式,是通过物理层在帧的前面添加前导码,并规定帧发送帧间间隔时间

 

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

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

面向字节的物理链路

那当上层交付的数据中也包含了和帧定界一样的数据时,此时接收方会错误接收帧。解决方法是对数据进行扫描,每出现一个和帧定界一样的数据或者转义字符则在其后添加转义字符、接收端物理层在遇到第一个帧定界符时知道是帧的开始,接下来遇到转义字符就知道之后的1字节虽然与帧定界符相同,但其内容是数据了。

面向比特的物理链路:

在和帧定界一样的数据中使用零比特填充法,保证帧定界在整个帧中的唯一性

为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit) 。

三、差错检测

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。

使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

如下所示的帧中都包含了帧检验序列FCS字段,其作用是让接收方的数据链路层检测接收到的数据是否产生误码。

接下来介绍校验方法

(一)奇偶校验

在待发送的数据后面添加1位奇偶校验位使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。

  • 如果有奇数个位发生误码则奇偶性发生变化可以检查出误码,
  • 如果有偶数个位发生误码则奇偶性不发生变化不能检查出误码(漏检)

 (二)循环冗余校验CRC

  1. 收发双方约定好一个生成多项式G(x);
  2. 发送方基于待发送的数据和生成多项式计算出差错检测码,将其添加到待传输数据的后面一起传输
  3. 接收方通过生成多项式来计算收到的数据是否产生了误码;

练习题

1、检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
2、要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用
3、循环元余校验CRC有很好的检错能力(检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
4、在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务

四、可靠传输

当接收方检测出帧中出现误码,如果数据链路层向上层提供的服务类型不同做法也不同

  • 不可靠传输服务,那么仅仅丢弃有误码的帧,其他什么也不做;
  • 可靠传输服务,实现发送方发送什么,接收方就收到什么。

一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。

可靠传输的三种实现机制

(一)停止-等待协议SW 

 

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

当往返时延RTT远大于数据帧发送时延To时 (例如使用卫星链路),信道利用率非常低。

若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低

为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN选择重传协议SR

(二)后退N帧协议GBN

停止-等待协议的利用率很低,当出现超时重传,其利用率更低。而使用流水线传输可提高信道利用率

回退N帧协议就是基于流水线传输,每次发送窗口内的组,得到接收方的ACK后,发送窗口往后移动

接收方接收后给发送方发送ACK确认后,发送窗口往后移动

接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后 (由具体实现决定),对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收,即累计确认。如下图,接收方接收到数据后向发送方发送了ACK1和ACK4,而ACK1在发送过程中丢失了,但此时不需要重传,因为ACK4被收到了,代表着接受方确认了ACK4前面的分组

当出现差错时,比如下图,分组5出现错误被接收方丢弃,此时因为接收方的窗口序号为5,后面的1076分组都不匹配,都被丢弃,此时接收方每丢弃一个分组就会发给发送方一个ACK,该ACK是最后一个正确接收分组的序号,即ACK4。发送方接收到ACK4后就知道刚才发送的几个分组都被丢弃了,此时根据发送方设置的接收重复ACK个数来决定是否立即重传,或者等待超时计时器超时结束再重传。

可以看到该过程中1076也连带被丢弃了,这就是所谓的回退N帧,可见,当通信线路不好时,回退N帧协议的利用率并不比停止-等待协议高。

总结

 (三)选择重传协议SR

回退N帧协议的接收窗口尺寸Wr只能等于1,因此接收方只能按序接收正确到达的数据分组
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃 (尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。
可设法只重传出现误码的数据分组。因此,接收窗口的尺寸Wr不应再等于1 (而应大于1),为了进一步提高性能,以便接收方先收下失序到达但无误码并目序号(使用逐一确认而不是累计确认)落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层,这就是选择重传协议

 

当2号分组出现差错,接收方丢弃后,由于发送方只接收到3号分组的ACK,此时窗口不能往前滑动,等2号分组的重传计时器超时,重新发送2号分组

总结

五、点对点协议PPP

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

PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]。

PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:

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

 

(一)点对点协议PPP的帧格式

当数据中出现和帧定界相同的数据时

(二)透明传输- 面向字节的异步链路采用插入转义字符的字节填充法

 

(三)透明传输-面向比特的同步链路采用插入比特0的比特填充法 

(四)点对点协议PPP的工作状态

六、媒体接入控制MAC

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

随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术 

(一)静态划分信道

复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽

1、频分复用FDM

将传输线路的频带资源划分成多个子频带,形成多个子信道、各子信道需要划分隔离频带,以免造成子信道间的干扰。当多路信号输入一个多路复用器时,这个复用器将每一路信号调制到不同的载波上,接收端由相应的分用器通过滤波将各路信号分开,将合成的复用信号恢复成原始的多路信号。

很显然,频分复用的所有用户同时占用不同的频带资源进行通信

2、时分复用TDM

时分复用技术将传输线路的带宽资源按时隙轮流分配给不同的用户,每对用户只在所分配的间隙里使用线路传输数据、时分复用技术将时间划分为了一段段等长的时分复用帧。每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙,如下图所示,每一个用户所占用的时隙是周期性出现的,其周期就是时分复用帧的长度。很显然,时分复用的所有用户在不同时间占用同样的频带宽度。

3、波分复用WDM

波分复用就是光的频分复用,下图是8路传输速率均为2.5Gbit/s的光载波,其波长均为1310nm,经光调制后,分别将波长变换到1550~1561.2nm,每个光载波相隔1.6nm。这8个很接近的光载波经过光复用器(或称合波器),就在一根光纤上传输,因此在一根光纤上传输的速率就达到了8*2.5Gbit/s=20Gbit/s。光信号传输一段时间后会衰减,需要对衰减了的信号进行放大才能继续传输,这就是掺铒光纤放大器的作用。

4、码分复用CDM

(二)动态接入控制

1、随机接入-总线局域网使用的协议:CSMA/CD(载波监听多址接入/碰撞检测)

CSMA/CD协议-争用期

 CSMA/CD协议-最小帧长

  CSMA/CD协议-最大帧长

 

CSMA/CD协议-帧发送流程

CSMA/CD协议-帧接收流程

 2、随机接入-无线局域网使用的协议:CSMA/CA(载波监听多址接入/碰撞避免)

隐蔽站问题

 

帧间间隔IFS

CSMA/CA的工作原理

问题1:源站为什么在检测到信道空闲后还要再等待一段时间DIFS?

就是考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送

问题2:目的站为什么正确接收到数据帧hou还要等待一段时间SIFS才能发送ACK帧?

SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧在这段时间内,一个站点应当能够从发送方式切换到接收方式。

问题3:信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用i信道?

防止多个站点同时发送数据产生碰撞

CSMA/CA的退避算法

CSMA/CA的信道预约和虚拟载波监听

为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送数据的站点对信道进行预约

  1. 源站在发送数据之前先发送一个短的控制帧,称为请求发送RTS(Resquest to Send),它包括地址,目的地址以及这次通信(包括相应确认帧)所需的持续时间。
  2. 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clear To Send),它也包括这次通信所需的持续时间 (从RTS顿中将此持续时间复制到CTS帧中)。
  3. 源站收到CTS倾后,再等待一段时间SIFS后,就可发送其数据帧
  4. 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK.

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

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

相关文章

代码随想录二刷day37 | 贪心 之 738.单调递增的数字 968.监控二叉树

day37 738.单调递增的数字968.监控二叉树确定遍历顺序如何隔两个节点放一个摄像头情况1:左右节点都有覆盖情况2:左右节点至少有一个无覆盖的情况情况3:左右节点至少有一个有摄像头情况4:头结点没有覆盖 738.单调递增的数字 题目链…

H5学习(四)-- 常用属性

文章目录 一、字体设置字体格式设置字体大小设置字体粗细设置字体样式设置字体颜色 二、 文本设置文本对齐方式设置文本装饰方式设置文本缩进设置文本行高 三、背景设置背景颜色设置背景图片设置背景平铺设置背景位置设置背景尺寸 四、圆角矩形五、元素的显示模式块级元素行内元…

解决win10开机卡顿、配置很高但是玩游戏卡顿掉帧等问题

解决win10开机卡顿、配置很高但是玩游戏卡顿掉帧等问题 最近组装了一台高配置的新电脑,装好了各种驱动、软件等。发现系统开机后卡顿一分钟左右(加载应用配置等),但是我的系统启动项明明就没多少,不应该是这样的情况&…

最优化--梯度下降法--牛顿法(详解)

目录 梯度下降法 梯度下降法 步骤 牛顿法 牛顿法的基本思想 牛顿法的优缺点 作用 梯度下降法 梯度下降法(Gradient Descent)是一种常用的优化算法,用于求解函数的最小值或最大值。它通过迭代的方式,不断更新参数的取值&…

cmd获取apk签名hash、获取apk是否启用了V1\V2\V3\V4签名

1、从APK中获取签名hash keytool -printcert -jarfile apk路径 2、获取apk是否启用了V2\V3\V4签名 //在android sdk 目录,如 xxx\Sdk\build-tools\34.0.0 里,执行apksigner.bat verify -v apk路径

小白到运维工程师自学之路 第四十三集 (mariadb读写分离)

一、读写分离的优点 1. 负载均衡:将读操作分散到多个从库上,可以有效地分担主库的读负载,提高系统的 并发处理能力。 2. 提高读性能:从库可以通过增加硬件资源或者优化查询语句等方式来提高读操作的性 能,从而提升…

为什么用了代理ip访问网站还是被限制了

随着网络的发展和应用的普及,越来越多的用户开始使用代理ip来访问网站。代理ip可以隐藏真实IP地址,提供匿名性和访问自由,但有时候使用代理ip仍然会导致被禁止访问网站的情况发生。下面就让我们来分析一下吧。 代理ip被网站识别 一些网站通过…

从零详细地梳理一个完整的 LLM 训练流程

深度学习自然语言处理 分享知乎:何枝 在这篇文章中,我们将尽可能详细地梳理一个完整的 LLM 训练流程。包括模型预训练(Pretrain)、Tokenizer 训练、指令微调(Instruction Tuning)等环节。 文末进群&#xf…

两种特定网络环境下,如何实现外网SSH访问内网LINUX主机?

目前,大多数网友的网络环境分为两种,一种是没有公网IP,一种是动态公网IP环境。今天跟大家分享一下在这两种特定网络环境下,如何通过快解析内网穿透,实现外网SSH访问内网LINUX。 1.动态公网IP环境。路由器分配的是动态…

深入了解 KaiwuDB 负载行为数据采集

KAP 基于数据库系统内部反馈的各项数据指标,可帮助用户全面掌握 KaiwuDB 集群的整体运行情况,实时监测集群相关性能,可提供整体资源和集群状态角度的系统监控。 除此之外,KaiwuDB 数据库内部开发实现基于负载业务的行为数据采集功…

(九)栅格数据的空间分析——表面分析①

生成等值线 文章目录 生成等值线 1.等值线2.等值线质量3.控制等值线质量3.1对数据进行平滑处理3.2调整起始等值线 4.生成等值线4.1焦点统计4.2生成等值线 1.等值线 沿着特定等值线的折线 (polyline) 可识别出值相同的位置。等值线也是一种呈现表面的有效形式,因为它…

jmeter 报此错误 \report‘ as folder is not empty

jmeter 报此错误 \report’ as folder is not empty 解决方案 出现此错误的原因试因为同一个界面出现同样的文件,只要把文件删除,重新执行此命令即可。 删除文件框住得report和result.jtl 即可 执行成功

计算机图形学 3D渲染 笔记(一)

1 坐标系 大多数计算机屏幕采用的坐标系是以左上角为原点,水平(右)为x轴,纵向(下)为y轴3D图形学习中通常使用另一种坐标系, 即 正中心为原点,水平(右)为x轴&…

【算法题解】44. N 叉树的前序遍历(递归 + 迭代)

这是一道 简单 题 https://leetcode.cn/problems/n-ary-tree-preorder-traversal/ 题目 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例&…

Golang源码探究——从Go程序的入口到GMP模型

在大多数的编程语言中,main函数都是用户程序的入口函数,go中也是如此。那么main.main是整个程序的入口吗, 肯定不是,因为go程序依赖于runtime,在程序的初始阶段需要初始化运行时,之后才会运行到用户的main函数&#xf…

【话题达人】做开发时遇到过无理的需求吗?面对这些无理需求你是怎么做的?

导读 工作过程中难免遇见一些“神奇的甲方”,他们总是会给你提出一些匪夷所思甚至无厘头的需求。你是否也有这样的经历,面对这样“无理的需求”你又是怎么做的呢? 面对这些无理需求时你是怎么做的? 首先深入了解需求&#xff0…

C++一键安装工具(vcpkg)

0. 简介 相较于python而言,C因为其复杂的环境安装一直受到很多人的诟病,比如说一个pcl的安装就需要有很多操作步骤。译过程仍然复杂和多样化。当了解了这些还不够,我们还需要考虑预先编译出哪种类型的开源库程序。比如:Debug还是…

快速掌握MongoDB数据库(入门一条龙)

目录 一、介绍 二、安装指导 2.1 下载 2.2 安装注意事项 2.3 配置环境变量 2.4 校验是否配置成功 2.5 启动服务器 2.6 打开客户端 2.7 退出 2.8 修改参数配置 2.9 设置开启自启动服务 三、MongoDB基本操作 3.1 基本概念 3.2 基本命令 3.3 数据库的crud命令 四、…

七、云尚办公-Activiti入门

云尚办公系统:Activiti入门 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!&am…

《C++高级编程》读书笔记(十三:C++ I/O揭秘)

1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 1. 使用流 1.1 流的含义 C 中预定义的流 缓冲的流和非缓冲的流…