计算机网络 --- 数据链路层的功能

数据链路层在物理层提供服务的基础上向网络层提供服务, 其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的目标机网络层, 其主要作用是加强物理层传输原始比特流的功能, 将物理层提供的可能出错的物理链接改造成为逻辑上无差错的数据链路, 使之对网络层表现出一条无差错的链路, 具体如下:

  • 为网络层提供服务. 包括无确认无连接服务, 有确认无连接服务, 有确认面向连接服务.
  • 链路管理, 即连接的建立, 维持, 释放(用于面向连接的服务).
  • 组帧
  • 流量控制, 限制发送方
  • 差错控制(帧错/位错)

封装成帧

概念:

封装成帧就是在一段数据(数据报)的前后部分添加首部和尾部, 这样就构成了一个帧. 接收端在收到物理层上交的比特流后, 就能根据首部和尾部的标记, 从收到的比特流中识别帧的开始和结束.

首部和尾部包含许多的控制信息, 他们的一个重要作用: 帧定界(确定帧的界限).

帧同步:

接收方应当能从接收到的二进制比特流中区分出帧的起始和终止.

在了解组帧方法之前, 需要先了解透明传输.

透明传输:

透明传输是指不管所传数据是什么样的比特组合, 都应当能够在链路上传送. 因此, 链路层就"看不见"有什么妨碍数据传输的东西.

当所传数据中的比特组合恰巧与某一个控制信息完全一样时, 就必须采取适当的措施, 使接收方不会将这样的数据误认为是某种控制信息. 这样才能保证数据链路层的传输是透明的.

组帧的四种方法:

字符计数法

帧首部使用一个计数字段(第一个字节, 八位)来标明帧内字符数.

缺点:

如果一个计数字段发生错误, 那么后面的字段就会全错.

字符(节)填充法

控制字符:

  • SOH(start of header): 帧的传送开始
  • EOT(end of transmission): 帧的传送终止
  • ESC: 转意字符

当传送的帧是由文本文件组成时(文本文件的字符都是从键盘上输入的, 都是ASCII码), 不管从键盘上输入什么字符都可以放在帧里传过去, 即透明传输.

当传送的帧是由非ASCII码的文本文件组成时(二进制代码的程序或图像等), 就要采用字符填充方法实现透明传输.

具体实现过程:

假如原始数据的数据部分出现了很多控制字符(SOH, EOT), 就会在数据部分的控制字符前面加上转意字符, 然后就可以放到数据链路上传送.

零比特填充法

允许数据帧中包含任意个数的比特, 同样是在帧的头尾添加首部标识符, 尾部标识符, 同字节填充法的区别是首尾标识符是相同的.

当帧的数据部分出现了与收尾标识符相同的比特组合时, 方法归纳起来可以用5"1"1"0"来总结.

具体操作为(假设首尾标识符的字节为01111110):

  1. 在发送端, 扫描整个信息字段, 只要连续5个1, 就立即填入一个0.
  2. 在接收端收到一个帧时, 先找到标志字段确定边界, 再用硬件对比特流进行扫描, 发现连续的5个1时, 就把后面的0删除.

优点:

保证了透明传输: 在传送的比特流中可以任意传输任意比特组合, 而不是引起对帧边界的判断错误.

违规编码法

举例:

回顾曼彻斯特编码法, 当数据链路层把一个帧的比特流传给物理层时, 物理层会对0/1进行如下编码:

"高-低"代表1, "低-高"代表0.

所以可以用"高-高", "低-低"来界定帧的起始和终止, 这就是违规编码法.

四种组帧方法的总结

由于字符计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性, 目前较普遍使用的帧同步法是比特填充违规编码法

差错控制

差错来源:

数据链路层传输的差错都是由于噪声引起的.

噪声分类:

  • 全局性噪声

由于线路本身电气特性所产生的随机噪声(热噪声), 是信道固有的, 随机存在的. 

解决办法:

提高信噪比来减少或避免干扰(对传感器下手).

  • 局部性噪声

外界特定的短暂原因所造成的冲击噪声, 是产生差错的主要原因.

解决办法:

通常利用编码技术来解决.

差错分类:

  • 位错: 比特位出错: 1变成0, 0变成1.
  • 帧错:

下面举例来具体说明, 假设传送的三个帧为f1, f2, f3, 那么帧错就会存在以下三种情况:

  • 丢失: 收到了f1, f3, 丢掉了f2
  • 重复: 收到了f1, f2, f2, f3, f2重复收到了
  • 失序: 收到了f1, f3, f2, 其中f2, f3收到的顺序错了 

回顾链路层为网络层提供服务: 无确认无连接服务, 有确认无连接服务, 有确认面向连接服务, 对于通信质量好, 有线传输链路, 就会采用无确认无连接服务. 对于通信质量差的无线传输链路, 数据链路层就会采取有确认的服务(包括有确认无连接服务以及有确认面向连接服务).

针对位错的差错控制方法:

  • 检错编码

可分为:

  • 奇偶校验码
  • 循环冗余码CRC

只能检错

  • 纠错编码

海明码

不仅能够检错, 还能发现错误的码是哪一位

数据链路编码与物理层编码的对比:

数据链路层编码与物理层的数据编码与调制不同. 物理层编码针对的是单个比特, 解决传输过程中比特的同步问题, 如曼彻斯特编码. 而数据链路层的编码针对的是一组比特, 它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错.

冗余编码:

在数据发送之前, 先按某种关系附加上一定的冗余位, 构成一个符合某一规则的码字后再发送. 当要发送的有效数据变化时, 相应的冗余位也随之变化, 使码字遵从不变的规则. 接收端根据收到的码字是否仍符合原规则, 从而判断是否出错.

有了以上概念之后, 接下来再具体看一下上面的两种针对位错的差错控制方法:

检错编码

1. 奇偶校验码

        构造: n-1位信息元和一位校验元

        分类: 

                奇校验码: 整个n位1的个数为奇数

                偶校验码: 整个n位1的个数为偶数

        特点:

                只能检查出奇数个比特错误, 检错能力为50%.

2. 循环冗余码CRC

  • 纠错编码

最常用: 海明码

流量控制与可靠传输机制

流量控制

较高的发送速度和较低的接收能力的不匹配, 会造成传输出错, 因此流量控制也是数据链路层的一项重要工作. 这里的传输出错指的就是, 如果发送方的传输速率过高而接收方接收的能力较差, 这样发送方发来的数据就有可能超出接收方的缓冲空间导致溢出, 从而导致发送方发来的数据接收方无法接收, 所以说流量控制是必须的.

流量控制在数据链路层中有, 在传输层中也有, 二者的区别是:

  • 数据链路层的流量控制是点对点的, 而传输层的流量控制是端到端的, 也就是说数据链路层的流量控制是两个相邻结点之间的, 而传输层的流量控制是通讯的两台主机之间的.
  • 数据链路层流量控制手段: 接收方收不下就不回复确认, 也就是不回复不包含数据的确认帧. 传输层的流量控制手段: 接收端给发送端一个窗口公告: 告诉发送端窗口还有多少, 缓冲区还有多大.

具体方法:

  • 停止 - 等待协议: 每发送完一个帧就停止发送, 等待对方的确认, 在收到确认后再发送下一个帧, 相对低效.
  • 滑动窗口协议: 滑动窗口协议相对高效, 发送端有一个窗口大小, 接收端有一个窗口大小, 窗口大小是固定的, 代表此时此刻正在有多少帧正在被发送, 发送端每收到接收端的收到确认帧之后, 窗口往后面滑动一格, 也就是说这队列里面退出已经收到的帧, 新加一帧新的, 也就是发送一帧新的.
  • 后退n帧协议(GBN)
  • 选择重传协议(SR)

三种协议对比:

  • 停止-等待协议    发送窗口大小:1,接收窗口大小:1
  • 后退n帧协议(GBN)  发送窗口大小 > 1,接收窗口大小:1
  • 选择重传协议(SR)  发送窗口大小 > 1,接收窗口大小 > 1

停止等待协议

后退n帧协议

选择重传协议

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

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

相关文章

pytorch元素相乘_bert_pytorch学习(1)

本文主要是记录学习bert的pytorch实现代码的一些心得dataset1. vocab继承关系:TorchVocab --> Vocab --> WordVocabTorchVocab该类主要是定义了一个词典对象,包含如下三个属性:freqs:是一个collections.Counter对象&#xf…

计算机网络 --- 数据链路层介质访问控制

引言 传输数据使用的两种链路: 点对点链路:两个相邻的节点通过一个链路相连,没有第三者。应用:PPP协议,常用于广域网。广播式链路:所有主机共享通信介质。应用:早期的总线以太网,无…

6-7 使用函数输出水仙花数_学习C语言居然对printf函数不理解???

对于C语言的printf函数,可以说是我们学习C语言第一个接触到的函数了。printf命令的作用是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为:printf("", )。printf()是C语言标准库函数&#xff…

计算机网络 --- 数据链路层aloha协议

纯aloha协议 纯aloha协议思想 不监听信道,不按时间发送,随机重发。 冲突: 如果信道上如果只有一对节点在通信,那么可以顺利完成该次通信。方式如果发送完成之前又有一次不同方之间的通信发生,这样就会造成信道冲突…

matplotlib 子图超过4个_Matplotlib从入门到精通

Matplotlib从入门到精通​mp.weixin.qq.comMatplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包。它提供了一整套和 matlab 相似的命令 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 GUI 应用程序…

计算机网络 --- 数据链路层CSMA协议

CSMA协议的全程为载波监听多路访问协议CSMA(carrier sense multiple access) CS: 载波侦听/监听,每一个站在发送数据之前要想检测一下总线上是否有其他计算机在发送数据。 CS --- 检测方法: 当几个站同时在总线上发…

c++求n的几次方_14.八年级数学:若a+b+c=1,怎么求 a+b+c的值?分式培优拓展

欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂。所有的视频内容,全部免费,请大家放心关注,放心订阅。八年级数学:若abc1,怎么求 abc的值?分式培优拓展。这道题&a…

python 获取文件列表_Python3 - 获取文件夹中的文件列表

问题 获取文件系统中某个目录下的所有文件列表。 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表,比如: import os file_name os.listdir(/Users/xz/test) print(file_name) [Bath.txt, test.py, 2.txt, 1.txt, cook.txt] 结果会返回目录中…

计算机网络 --- 数据链路层CSMA/CD协议

CSMA/CD协议 全称为载波监听多点接入/碰撞检测CSMA/CD(carrier sense multiple access with collision detection) CSMA/CD协议 - CS: CS指的是载波侦听/监听,每一个站点再发送数据之前以及发送数据时都要检测一下总线上是否有其他计算机在…

map insert异常失败_处理dubbo反序列化失败的坑

前言今天下午,当我经过一个小时的奋”键“疾”码“,准备好好的审查一下(摸鱼)自己写的代码,经过一段时间审查(摸的差不多了,该下班了),得出一个结论我写的代码很优雅、精简。所以大手一挥提交代码,并在 API…

python资源管理器选择文件_Python:在资源管理器中获取选定文件的列表(windows7)...

我知道现在在这里发布答案有点晚了,但我几个月前尝试过Olav的解决方案,但它没有完全起作用:工作目录是脚本的工作目录,所以我不得不删除if条件才能使其工作,但它选择了所有Windows资源管理器窗口中的所有文件&#xff…

计算机网络 --- 数据链路层CSMA/CA协议

CSMA/CA全称 载波监听多点接入/碰撞避免CSMA/CA(carrier sense multiple access with collision avoidence) CSMA/CA协议与CSMA/CD协议的主要区别在应用场景不同。 为什么要有CSMA/CA协议 CSMA/CA协议主要应用于无线局域网,CSMA/CD协议主…

class会不会回收?用不到的class怎么回收_牛X的java程序员必备的GC基础知识, 面试肯定用的到...

1. GC回收哪些内存区域呢?堆内存对象数组方法区该类所有的额实例都已经被回收, 也就是java堆中不存在该类的任何实例加载该类的ClassLoader已经被回收该类对应的java.lang.Class对象在任何地方没有被引用, 也无法通过反射访问该类方法。垃圾回…

c++读取utf8文件_Node.js 进阶之 fs 文件模块学习

前言文件操作是开发过程中并不可少的一部分。Node.js 中的 fs 模块是文件操作的封装,它提供了文件读取、写入、更名、删除、遍历目录、链接等 POSIX 文件系统操作。与其它模块不同的是,fs 模块中所有的操作都提供了异步和同步的两个版本,具有 sync 后缀的…

计算机网络 --- 数据链路层中局域网和广域网

局域网 简称LAN(Local Area Network):是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。 局域网的特点 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。使用专…

python pathname_Python模块的定义,模块的导入,__name__用法实例分析

模块导入:import 模块名pythonimport 模块名import mathprint(math.sqrt(9))from…import 语句:从模块中导入一个指定的部分,如类、方法,其中from…import * 代表导入全部内容python#from 模块名 import 类名、方法名from collections import Iterablepr…

python制作中文词云_Python如何生成词云(详解)

前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图: 效果图一:效果图二:根据效果图分析的还是比较准确的,小说中的主人公就是“程理”,所以出现次数最多。…

计算机网络 --- 局域网中的以太网

以太网概述 以太网是应用最广泛的局域网,包括标准以太网(10Mbps),快速以太网(1000Mbps),千兆以太网(1000Mbps)和10G以太网,他们都符合IEEE802.3系列标准规范…

高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树

01知识框架02知识点详解1B树①定义与性质B树也叫B-树。B树是一种平衡的多分树,通常我们说m阶的B树,是二叉排序树的一种扩展,它必须满足如下条件:01每个结点最多只有m-1个关键字。02根结点最少可以只有1个关键字。03非根结点至少有…

计算机网络 --- 数据交换方式

电路交换 电话网络就是一种电路交换 电路交换的阶段 建立连接(呼叫/电路建立)通信释放连接 电路交换的优点 通信时延小有序传输没有冲突实时性强 电路交换的缺点 建立连接时间长线路独占,使用效率低灵活性差无差错控制能力 报文交换 报…