计算机网络——数据链路层(数据链路层概述及基本问题)

链路、数据链路和帧的概念 

        数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。

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

        因为H1——R2的路径中存在R1路由器,所以只能称作通信路径

        数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

        计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
 

         

        帧(Frame)数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。

        为了简单起见,我们可以不考虑其他各层,可以考虑成帧是在通信双方的通信数据链路层的对等实体之间

         

几个基本问题 

封装成帧

        封装成帧是数据链路层的重要功能之一。它指的是在数据链路层将上层(通常是网络层)传来的数据加上帧头和帧尾,形成一个完整且独立的数据传输单元,这个单元被称为帧。

        接收端在收到物理层上交了比特流后,就能根据首部和尾部的标记,从收到的比特流中识别出帧的开始和结束,也就是进行帧定界。

        帧头通常包含源地址、目的地址以及其他控制信息,而帧尾包含用于检测数据传输错误的校验码

  1. 数据链路层在接收到网络层的数据报文后,在其前后添加特定的首部和尾部信息。
  2. 首部信息可能包括源和目的MAC地址、协议类型标识等。
  3. 尾部信息通常包含校验序列,用于在接收端验证数据在传输过程中是否发生错误。
  4. 成帧后的数据能够被物理层准确识别并进行传输,同时在接收端也能准确地恢复原始的数据报文。

        为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元 MTU

透明传输

        某些特定的比特序列恰好与帧界定符相同,这就可能导致帧边界混淆。 

        为了解决以上问题,我们引出了透明传输

                透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在—样。  

面向字节的透明传输 

        为了使数据中的“帧定界”在接收端不被解释为控制字符,具体的方法是:发送端的数据链路层在数据中出现控制字符“Flag”的前面插入一个转义字符“ESC”(其十六进制编码是 1B,二进制是00011011)。

        而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。

        如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。

面向比特的透明传输         

                如果数据中连续出现了多个1比特,则在传输时会在连续的1比特之间自动插入一个0比特,接收端再按照规定移除这些额外插入的0比特。 

练习 

 

        因为记错帧首部位置和帧尾部位置而没弄明白。

 差错检测

        实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错)∶

                        1.比特1可能变成比特0

                        2.比特0可能变成比特1

        在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate,BER)。        

        提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零,使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

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

奇偶校验 

  1. 奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
  2. 偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。

        但是数据位和校验位各1位误码可能就校验不出来 

       

        奇偶校验的标准都是一样。

循环冗余校验 

        数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术

循环冗余校验CRC的基本思想:

        收发双方约定好一个生成多项式G(X)。

        发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输。

        接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。

生成多项式 

冗余码的求法

                        这是发送方传输的内容:冗杂码替换构造被除数时生成的0     

         接收方只需要通过被除数和除数来验证余数是否为0,依次判断传输是否产生误码。

两种校验方式的特点 

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

可靠传输 

        可靠传输是当接收方接受到的帧出现误码时,接收方会通知发送方进行重传,发送方就给接收方重传

        帧传输结束后,利用帧尾部FSC字段码检测出帧的数据部分出现误码

        检测出误码后的处理方式取决于数据链路层向上层提供的服务类型:

  • 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
  • 可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么。

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

        无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务。

 传输差错

分组丢失

        假设H1向H3发送一个分组,此时R2输入队列快满了,主动丢弃收到的分组,于是造成了分组丢失的结果。

分组失序 

        假设H1向H3发送一个分组,因为走的路径不同,致使分组到达顺序与发送顺序不同,导致分组失序

分组重复

        假设H1向H3发送一个分组,起先分组到达R5,R5路由器繁忙所以在队列中等待较长时间,致使H1超时重发,致使H3获得了重复分组 

 可靠传输的一些基本概念


 

 停止-等待协议的实现机制

停止等待协议中的理想情况

        这是停止等待协议中的理想情况,对数据分组逐一发送,当检测出有差别的组再否认分组,使发送方重新传送之前误码的数据分组。

传输出现差错的情况及解决措施

发送方传输数据时丢失

        接收方收不到数据分组,就不会发送相应的ACK或NAK,如果不采取措施,发送方就会一直处于等待接收方ACK或NAK的状态。


解决方式

        设置一个超时重传时间,使接受方超过一定时间未接受到传输的数据,便使发送方传输数据。

接收方方传输“确认”指令时丢失

        当接收方接收方方传输“确认”指令时丢失,会使发送方误以为“传输数据失败”而重新发送数据,致使分组重复。


解决方式

        

  • 为了避免分组重复这种传输错误,必须给每个分组带上序号。
  • 对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有0和1这两个。

        当发送误以为“传输数据失败”而重新发送数据后,接收方会检测数据序号,重复的数据分组丢弃,再发送下一个分组。       

确认指令也可以编序号避免传输错误

        当第一个数据(data0)的确认指令传输延误时,致使发送方再次传输data0,重复的data0传输完成后,接收方识别序号辨认出重复,丢弃后会再次发送一个确认分组

        data0的确认指令随之到达后,但发送方会认为这是第二组数据data1的确认指令,便发送了data1,此时重复分组的data0的确认指令传输到发送方。

        发送方会以为,这是对data1数据的确认,将发送下一组data0。(这里需要注意以为编序号只用0和1,所以下一组data0与第一次data0不是同一组数据)


确认指令编序号后

        总而言之,谁迟到了,就不管谁,随便它用什么方式来都可以,来了就记录你的序号。成功过的就从该序号下一位开始,再发也不管。

停止-等待协议的【注意事项】 

        否认机制的使用使用超时重传机制后,就可以不使用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器超时前就尽快重传。

        比特编号的使用:为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的特性,只需1个比特编序号即可,即序号0和序号1。

        为了让发送方能够判断所收到的确认分组是否是重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样

        数据链路层可以不给确认分组信号:数据链路层一般不会出现确认分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给确认分组编号。

        重传时间的设置:给超时计时器设置的超时重传时间RTO应当仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT。

                不同层重传时间的设置方法:

                        在数据链路层,点对点的往返时间RTT比较固定,RTO就比较好设定。

                        在运输层,由于端到端往返时间非常不确定,设置合适的超时重传时间RTO有时并不容易

        重传协议的原理:停止-等待协议属于自动请求重传(Automatic Repeat reQuest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。(这一点我现在才明白)
 

信道利用率 

        信道利用率是指发送方在单位时间内有效发送数据的时间占整个发送周期的比例。

         

        TD:发送方发送数据分组所耗费的发送时延

        RTT:是信号在收发双方之间往返专播航耗费的时间

        TA:是接收方发送确认分组航耗费的发送时延



  1. 若出现超时重传,对于传送有用的数据信息来说,信道利用率还要降低。
  2. 在往返时间RTT相对较大的情况下,为了提高信道利用率,收发双方不适合采用停止-等待协议,而可以选择使用回退N帧(GBN)协议或选择重传(SR)协议。

练习——信道利用率 

 

后退N帧协议

        后退N帧协议(简称GBN)是一种在数据链路层使用的基于滑动窗口的流量控制和差错控制机制。

        相对于停止-等待协议,GBN提高了传输效率,允许发送方一次性发送多个数据帧而不必等待每个帧的确认后再发送下一个帧。 

  • 在使用流水线传输方式时,发送方不能无限制地连续发送数据分组,否则可能会导致网络中的路由器或接收方来不及处理这些数据分组,进而导致数据分组的丢失,这实际上是对网络资源的浪费。因此,必须采取措施来限制发送方连续发送数据分组的数量。
  • 回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议。

 

滑动窗口协议

  • 接收方每正确收到一个序号落入接收窗口的数据分组,就将接收窗口向前滑动一个位置,这样就有一个新的序号落入接收窗口。与此同时,接收方还要给发送方发送针对该数据分组的确认分组。
  • 发送方每收到一个按序确认的确认分组,就将发送窗口向前滑动一个位置,这样就有一个新的序号落入发送窗口,序号落入发送窗口内的数据分组可继续被发送。
  • 在回退N帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。

 

 无差错的情况下

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sheng的学习笔记-AI-K均值算法

ai目录:sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识:聚类,可参考 sheng的学习笔记-聚类(Clustering)-CSDN博客 目录 什么是k均值算法 流程 伪代码 数据集 伪代码 代码解释 划分示意图 优化目标 随机初始化 选择聚类数…

酣客的“FFC模式”|白酒商业模式|分润制度顶层架构设计

酣客公社摒弃传统商业模式,提出“心联网”及“FFC模式”的商业模式。 坐标:厦门,我是肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 今天和大家分享“酣客”的营销模式&#xff…

Parallels Toolbox for mac(pd工具箱) 6.0.2激活版

Parallels Toolbox 是由 Parallels 公司开发的一款实用工具集合软件,它主要面向使用 Parallels Desktop 的用户,提供了许多方便用户在 macOS 和 Windows 之间进行切换和管理的工具。Parallels Desktop 是一款流行的虚拟化软件,允许用户在 mac…

【24医学顶刊】GANDALF:主动学习 + 图注意力变换器 + 变分自编码器,改善多标签图像分类

GANDALF:主动学习 图注意力变换器 变分自编码器,改善多标签图像分类 提出背景子解法1:多标签信息样本的选择子解法2:生成信息丰富且非冗余的合成样本 例子:胸部X射线图像分析传统方法的操作和局限GaNDLF方法的优势 工…

理解ABP的领域驱动设计

大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。 关于玩转ABP框架相关的文章,之前在博客园陆续写了《ABP vNext系列文章和视频》&…

电路仿真王者之争:SmartEDA如何领跑业界,打破传统仿真软件格局?

在电子设计领域,电路仿真软件一直扮演着至关重要的角色。它们为工程师们提供了一个虚拟的实验室,可以在不耗费大量实际资源的情况下,进行电路设计、优化和测试。在众多电路仿真软件中,SmartEDA以其独特的优势,逐渐崭露…

嵌入式开发十九:SysTick—系统定时器

在前面实验中我们使用到的延时都是通过SysTick进行延时的。 我们知道,延时有两种方式:软件延时,即CPU 循环等待产生的,这个延时是不精确的。第二种就是滴答定时器延时,本篇博客就来介绍 STM32F4 内部 SysTick 系统定时…

浅谈API生态建设:API安全策略的6项原则

API作为连接系统与应用的桥梁,在助力实现高效业务流程的同时,也不可避免出现资产管理困难、敏感数据泄漏风险骤增等安全问题。前段时间,安全公司Fastly公布了一项重磅调查报告,报告中显示95%的企业在过去1年中遭遇过API安全问题。…

AXI接口简介

AXI接口,全称为Advanced eXtensible Interface,是ARM公司推出的一种高性能、低成本、可扩展的高速总线接口。AXI接口是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)高级微控制器总线架构的一部分。2003年发布了…

简易电阻、电容和电感测量仪-FPGA

通过VHDL语言编写程序用于设计电阻、电容和电感测量仪,通过使用试验箱进行验证是否设计正确,资料获取到咸🐟:xy591215295250 \\\或者联系wechat 号:comprehensivable 设计并制作--台数字显示的电阻、电容和电感参数测试…

07-border布局的另一个用处

07-border布局的另一个用处 实现如下的布局: 分析: 1.USERNAME和PASSWORD使用form 2.PASSWORD的文本框使用NewMultiLineEntry 布局1 USERNAME和PASSWORD作为一个form整体,使用border布局,form设置为top,文本框设置为center参数。 packa…

Postman 接口测试 安装使用教程

1 下载官网:https://www.postman.com/downloads/ 2 方便下载,特提供百度云网盘: 链接:Postman 3 windows10 安装,点击安装包 #自动安装,并打开 4 举例,比如豆瓣,get 查询时间,图片登 5 举例&#xff0…

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡

1、相关原理 在网络中,如果一台作为默认网关的三层交换机或者路由器损坏,所有使用该网关为下一跳的主机通信必然中断,即使配置多个默认网关,在不重启终端的情况下,也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…

传神论文中心|第14期人工智能领域论文推荐

在人工智能领域的快速发展中,我们不断看到令人振奋的技术进步和创新。近期,开放传神(OpenCSG)社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…

【干货】一文讲清楚社群裂变的主要模式和SOP流程

一、社群裂变的主要模式 社群裂变是一种依赖于现有成员的推广以吸引新成员的增长策略。以下是几种主要的社群裂变模式: 老带新裂变 定义:通过老用户带动新用户,同时给予某一方或双方奖励的一种裂变形式。 示例:任务宝活动&…

【精选】数据治理项目实施(合集)06——数据标准在数据治理中的落地实践

导读 本文对数据标准管理进行了深入探讨。重点介绍了数据标准的定义,实施路线和具体标准定义的内容,并总结了企业开展数据标准管理面临的常见问题,由于编写的水平和时间有限, 难免有所纸漏, 欢迎大家批评指正。 在现实…

填报高考志愿时,学校、专业和城市怎么选择呢?

我的观点是: 专业>城市>学校 专业是兴趣导向,符合自己的价值观,失去了这种驱动力的专业学习,会变得非常艰难的,而且没有竞争力,所以我的排序第一位是专业。 其次是城市,最好是一线城市&…

OpenAI发布新模型CriticGPT:利用GPT优化GPT训练,RLHF实现超越人类能力!

目录 01 基于GPT-4,改进GPT-4 02 CriticGPT取得了哪些成果呢? 03 RLHF的上限不再是人类 近日,OpenAI突然发布了一个新模型!这个模型基于GPT-4训练,旨在帮助下一代GPT的训练。 CriticGPT能够在代码挑错中找到超过75%…

golang生成RSA公钥和密钥

目录 场景 场景一:加密、解密 场景二:微信退款 场景三:SSL证书 为什么是.key和.pem格式的文件 生成密钥、公钥 密钥、公钥保存到文件中 第一个:保存密钥到文件里 第二个:保存公钥到文件里 场景 场景一&#…

ForkJoinPool浅析

一,概述 相比传统的线程池ExecuteService,ForkJoinPool的优势在于能采用分治算法、工作窃取算法高效利用CPU资源,如下图 Fork即拆分,Join即合并, 通过将大任务拆分成多个小任务,在多个线程中执行后,合并结果即可得到大任务的结果,经典的例子有归并排序、超大数组求和…