热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【通讯原理】Ch.11DLC(DataLinkControl)数据链路控制

DLC在5G时代背景下,有线网充分发展,有线网第二阶层的DLC渐渐消失了;而对于移动通信,DLC仍然是必要的。而DLC实际上

DLC在5G时代背景下,有线网充分发展,有线网第二阶层的DLC渐渐消失了;而对于移动通信,DLC仍然是必要的。而DLC实际上就是流量控制和差错控制,流量控制是指可以根据状况调整传输速率,差错控制则是上一章节重点说明的通过CRC等差错校验方式检测出错误的能力。

DLC(Data Link Control)

物理层提供位同步,以确保发送方和接收方使用相同的位持续时间和定时;另一方面,数据链路层需要将bits打包成帧,以便每一帧都能区别开来。

Framming

对于多个Tx同时传输时,在单位时间内信道内只允许传输1单位数据,换言之所有源数据需要按顺序占用信道,这很类似操作系统中的调度问题。互相竞争,胜利者占用信道来传输数据,但是也不能只传输这一个数据源,就要求数据的分帧(Framming)。
分帧:封装成帧,将要传输的数据封装成帧在数据链路层传输,由于过大的数据会导致传输时间过长,导致其他进程无法执行,因此大数据需要进行分割,分割成小数据。帧长度分割过大没有结局问题,分割过小又会出现效率问题(因为传输需要头部,如果帧过小,头部和有效数据本身数据量差距不大,整体而言信道传输有效数据的效率就会很低)。所以帧的分割大小要求一定要合适。

在这里插入图片描述
分帧的的方式分为长度可变的帧与固定帧。
固定帧:传输大小适中固定,因此头部需要的控制信息也减少了,头部整体数据量也会减小,传输效率有最低保障。也可能发生效率问题。
在这里插入图片描述

Flag:用于明确帧与帧之间的间隙。 8bit为01111110。如果有效数据中有与控制信息相同的比特流,就会发生错误截断,将部分有效数据丢失。因此我们需要一种控制方法来解决这个问题,使用的就是每5个连续的1后面追加一个0,这样就会避免出现Flag比特组组合。这种方法被称作 Bit stuffing


可变帧:根据信道的最大速率可以调整分帧的大小,有效数据越多,头部大小也会随之增加,因为需要告知Rx数据变化量。虽然头部较大,但是在效率问题上发挥的比想象中的好。可变帧有面子字符与面向比特两种类型。

Character−OrientedCharacter-OrientedCharacterOriented:面向字符,也称面向字节[Character-Byte]。由于数据传输过程中,大多数情况是用8bit的字符来传输可视化的信息,因此一般情况下头部的长度是8的倍数。
在这里插入图片描述

ESC:转义字符:由于传输的数据是二进制比特流,那么就有可能在有效数据段中存在和Flag等标识符相同的数据流,此时如果误读为帧的结束就会破坏原数据,因此在特殊字符组合前面增加一个转义字符ESC,就可以告诉Rx接下来的数据是有效数据而非控制数据,就不会截断有效数据。

Flow&Error Control

在这里插入图片描述
流量控制和差错校验的组合:
流量控制:调节Tx与Rx之间数据通信速率,根据信道状况实现传输。实现方式Ack(及时响应数据报文)。当传输速率过快,Rx的BUFFER已经满了,无法继续消化传输的数据时,会返回一个响应数据包告诉Tx发慢点或者先别发,当接收能力改善后,则再返回一个数据包要求Tx调整速率或开始发。
差错检验:通过CRC等方式检测出错误后,有两种处理方式。其一是静默丢包,丢掉该数据包的过程不会被感知,如果没有错误也会静默传输给网络层;另一种是返回Ack告诉Tx错误,要求重传。对于Tx而言,流量控制和差错校验组合的系统下,Ack返回是一个常态事务,哪怕接收无错误,也会返回一个Ack表示正常接收,这样加入Rx一定时间内没有返回Ack确认,则会认为没有收到数据包或者数据包出错或Ack丢包等,会重传数据包。

Connectionless Protocol:无连接协议,每个数据包相对独立,在数据链路中传输时不事先建立连接,节点之间的转发由节点自行判断,每个数据包与其他数据包无关,没有顺序到达要求。常用于有线网

Connection-Oriented Protocol:面向连接协议:通信前首先建立一个专属的逻辑信道,在该信道内数据包按照顺序依次编号发送。常用于无线网,有线网中非常罕见

数据链路层协议(Data link layer protocol)

先来简单说明一下Simple, Stop-and-Wait, Go-Back-N, and Selective-Repeat这四种协议,本小节重点说明前两种。
Simple:最简单的,Tx发送信息,Rx接收信息
Stop-and-Wait: 通过Ack实现DLC的协议
Go-back-N:如果第N个数据包出错,则返回Ack来请求Tx进行重传,有DLC功能。一旦检验出错,要求发送方重发最后一个正确接受的信息帧之后的所有未被确认的帧。
Selective-Repeat:出错量比较大,重传负荷重,选择性重传。
在这里插入图片描述
finite state machine (FSM):在事件发生之前,机器总是处于其中一种状态。一个FSM被认为是一台具有有限数量状态的机器,某些行为会令机器的状态发生变化。

数据链路层的协议刚好可以用FSM来表示

Simple

在这里插入图片描述
Simple没有任何DLC功能,仅仅是发送和接收。
用FSM表示:发送方在接收方提交数据帧给网络层之前不可以继续发下一帧;接收方在接收数据帧之前不得提交;每个FSM只有一种状态,即就绪状态。发送机器保持就绪状态,直到网络层的进程发出请求
在这里插入图片描述
Tx-Ready:就绪态:等待数据帧到达/等待Rx提交
Tx-Action:发送一个数据帧给Rx
Rx-Reday:等待数据帧到达
Rx-Action:提交到达的数据帧给网络层
在这里插入图片描述

Stop&Wait

在这里插入图片描述
最基本的拥有Ack的响应过程,流程如下:
在这里插入图片描述
Tx:Ready等待获取网络层传过来的数据/等待收到正确的Ack,

Ready状态:
触发条件:接收网络层的数据包
Action:封装成帧,存一个备份(可能需要重传)然后启动计时器并发送,此后状态转换为锁定态

Blocking状态:
动作1:等待ACK,计时器超时,视为丢包,重传备份
动作2:接收到ACK,但是ACK检验出了错误,传输过程中可能出现未知的错误,重传备份
动作3:接收到正确的ACK,将缓存的备份删除,停止当前计时器

Rx:收到Tx的数据帧,出错则丢包并重新回到就绪态等待重传;正确则提交给网络层并回到就绪态继续等待下一个数据帧的到来
在这里插入图片描述
Duplicate问题:在Rx收到数据包并提交后,返回的ACK丢包,此时Tx认为Rx没收到并重传数据,此时Rx收到了两份相同的数据并提交
在这里插入图片描述
解决办法:如图所示,为每一个数据帧增加一个编号,ACK返回时添加下一个要传输的帧编号,这样如果收到重复信息也不会提交并且仍然会返回正确的编号。
当节点A向节点B发送数据时,节点A也会确认从节点B收到的数据。

HDLC

High-level Data Link Control (HDLC) 是一个面向bit协议,适用于点到点连接和多点连接

Normal response mode (NRM)

在这里插入图片描述
传输分主次,只有主机可以使用命令,其他客机只能响应命令;最近不怎么使用了,要有性能足够优秀的基站才能使用这个模型。

Asynchronous balanced mode (ABM)

在这里插入图片描述
网络中的机器均具有同等地位,可以相应或者发出命令

HDLC

在这里插入图片描述
I-F:一般的传输用数据,携带有效数据和控制信息
S-F:仅携带控制信息,无有效信息,如ACK
U-F:系统管理预留,管理数据链路用的数据帧
在这里插入图片描述
Flag:这个字段包含同步模式01111110,它标识帧的开始和结束。
Add:这个字段包含二级站的地址,如果主站创建的帧,它包含了“目标地址”,如果二级站创建的帧,它包含了一个“源地址”。地址字段可以是一个字节或多个字节长(根据网络的需要)。理解困难的话:主站创建的地址是源计算机,它在局域网内地址唯一,他要与该LAN内其他节点通信就需要 指明目的地,而其他节点在NRM下不具有发起命令的功能,仅能响应命令,因此只能回应源计算机,所以回应时需要写上自己的地址来告诉主机数据来源。
Control:控制字段是用于流和错误控制的一个或两个字节
Information:信息字段包含来自网络层的用户数据或管理信息。它的长度可以根据不同网络间的切换而变化
FCS:帧校验序列(FCS)是HDLC的错误检测域,它可以包含2 -或4字节的CRC
在这里插入图片描述
对于这三中类型的帧,他们有固定的地址类型


I-F:最基本传输单元,承载用户信息且具有DLC功能,NS表示帧的编号,NR表示当传输与ACK同时传输时的ACK编号。P/F比较特殊,只有值为1时才有意义,表明了传输的方向,如果是主机发给客机的,则地址栏内写的是目标地址;当客机发给主机,地址栏写的是源地址,不管哪种,地址栏写的都是客机地址。
S-F:监控帧用于流量和错误控制,无论何时piggybacking是不可能的或不合适的。没有有效数据,ACK也有NACK表示不管传送失败还是成功都会给恢复一个确认,如果失败恢复的则是NACK。
U-F:用于在连接的设备之间交换会话管理和控制信息,比如连接建立和连接释放
U-frames包含一个字段的information字段,但一个用于系统管理信息,而不是用户数据

PPP协议

PPP协议:HDLC的表现
在这里插入图片描述
PPP被设计来接受来自几个网络层的有效负载,PPP协议无流量控制,出错后会静默丢包。且可以分配IP地址。
这里的控制字节用来管理连接状态已经对两节点之间的链路进行控制。U-frames包含一个信息字段,但是这个字段用于系统管理信息,而不是用户数据
在这里插入图片描述
协议字段定义了在数据字段中携带的内容:用户数据或其他信息。该字段默认为2字节长,但双方可以同意只使用1字节
有效载荷领域【Payload field】:该字段携带用户数据或其他信息,数据字段是一个字节序列使用默认的最大1500字节(可以协商进行调整)
FCS:帧检查序列(FCS)只是一个2字节或4字节的标准CRC

PPP连接经历了几个阶段,这些阶段可以在过渡阶段图中显示出来;转换图是一个FSM,从dead state开始。在这种状态下,没有有源载波(在物理层),线路是非唤醒状态。当两个节点中的一个开始通信时,连接进入建立状态【establish state】。
在这里插入图片描述
当通过载波建立起连接后,需要有一个认证过程才能成功连接网络阶层

PPP协议中的三种协议
 Link Control Protocol (LCP)
 Two Authentication Protocols (APs)
 Several Network Control Protocols (NCPs)

在这里插入图片描述
协议字段的值决定了数据字段的不同。LCP负责建立、维护、配置和终止链接,所有的LCP数据包都在PPP帧的有效负载字段中携带,协议字段设置为十六进制的C021

在这里插入图片描述


认证协议:在PPP中起着非常重要的作用,因为PPP是为拨号连接而设计的,在拨号连接中需要验证用户身份,密码身份验证协议和挑战握手身份验证协议
在这里插入图片描述
在这里插入图片描述


Network Control Protocols:PPP是一种多网络层协议。它可以携带一个网络层数据包协议定义的互联网,OSI, Xerox, DECnet, AppleTalk, Novel,等等

举个例子如IPCP(因特网协议控制协议),设定为携带IP数据包的链路。
在这里插入图片描述
用户可以从网络层交换数据包
在这里插入图片描述


推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
author-avatar
mobiledu2502885853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有