计网第三章.数据链路层—封装成帧、差错检测

news2025/1/11 20:01:11

以下是湖科大计算机网络公开课的笔记

1 . 数据链路层概述

1.1 一些概念

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

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

数据链路层以为单位传输和处理数据

1.2 三个重要问题

封装成帧、差错检测、可靠传输

(1)封装成帧

数据链路层给网络层协议数据单元添加一个数据链路层协议首部,简称为帧头,还要给其添加一个帧尾,这个操作过程叫封装成帧

这是为了在链路上以帧为单位来传送数据,如图1:
在这里插入图片描述
(2)差错检测——检错码和检错算法

发送方将封装好的帧通过物理层发送到传输媒体,帧在传输过程中遭遇干扰后可能出现误码,如比特0变成比特1(比特差错)。主机要如何判断传过来的数据是否发生了误码呢?

发送方在发送数据前,会基于待发送的数据和检错算法计算出检错码,将其封装在帧尾,比如上图以太网版本2的MAC帧的帧尾就是4字节的帧检验序列FCS字段,要写入该字段的内容就是检错码。

接收方主机收到帧之后,根据检错码和检错算法就能判断该帧在传输过程中是否出现了误码。

(3)可靠传输

接收方主机在收到有误码的帧后,会将其丢弃。如果数据链路层向其上层提供的是不可靠服务,那么丢了就丢了;如果对上层提供的是可靠服务,那么需要一些措施来确保接收方主机还可以重新收到被丢弃的这个帧的正确副本。

尽管误码是不能完全避免的,但若能实现发送方发送什么,接收方就能收到什么,就称为可靠传输

当然,上面三个重要问题是针对点对点通信而言的,使用广播信道的数据链路层还有其他问题——如共享式局域网中,总线上的主机需要通过帧头的目的地址和源地址来知道这个帧是发给自己的还是别的主机的,还有一起发送数据的碰撞问题。——解决方案:CSMA/CD协议

不过目前共享式局域网已经被交换式局域网取代了,因为交换机技术的成熟。(交换式局域网——点对点链路+链路交换机)。所以实际中没有碰撞问题,不过该课程后面依然会讲这些。

还有就是WIFI这种无线局域网因为天然的广播特性,还是共享信道技术——这就类似于共享局域网,所以也会出现碰撞这些问题。——解决方案:CSMA/CA协议

接下来具体介绍封装成帧、差错检测、可靠传输三个问题。

2. 封装成帧

2.1 帧的界定

封装成帧后还要通过物理层将构成帧的各比特转换成电信号发送到传输媒体。

接收方收到比特流如何提取出帧?

帧头和帧尾的作用之一是帧定界,比如PPP帧就在帧头帧尾分别有标志:
在这里插入图片描述
但是前面的以太网的MAC帧就没有帧定界标志,如下所示,帧头帧尾都没有包含帧定界标志:
在这里插入图片描述
以太网的数据链路层封装好MAC帧后,将其交付给物理层,物理层会在MAC帧前面添加8字节的前导码
在这里插入图片描述
注意这个前导码是物理层加的,不是帧内就有的
(我觉得这也能说明为什么数据链路层和物理层应该放同一层)

前导码的前七个字节为前同步码,作用是使接收方的时钟同步,之后的1字节为帧开始定界符,表明其后面紧跟的就是MAC帧:
在这里插入图片描述
另外,以太网还规定了帧间间隔时间为96比特的发送时间,所以MAC帧并不需要帧结束定界符
在这里插入图片描述
2.2 透明传输

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

以PPP帧这种帧中有帧定界标志为例,因为定界标志激就是特殊字符,如果上层交付的协议数据单元中恰好也含有这个特定字符,那接收方那边就会把这个当做是帧的定界标识,在帧没有收完时就以为一个帧已经结束了。

这种情况就不能被称为透明传输,因为他不允许上层交付的数据单元有特定字符,否则就不能正常工作

所以数据链路层协议需要解决这个问题,来实现透明传输。

有些数据链路层协议会在发送数据前先扫描帧里面的数据部分(上层交付的数据),每出现一个帧定界符就在其后插入一个转义字符,接收方接收的时候就先收到转义字符,就能知道后面的是数据,然后先剔除转义字符再继续提取数据。转义字符就1个字节。

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

面向比特的物理链路使用比特填充方法实现透明传输。

因为帧的数据部分才是真正要传输的数据,所以为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些

不过,考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)

3. 差错检测

在帧尾插入检错码,FCS字段,不同数据链路层协议都是FCS字段,字节数可能不一样
在这里插入图片描述
几种差错检验算法:

1.奇偶校验——最简单的校验方法

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

如双方约定采用奇校验,待发送数据为101101,那么发送方在数据后面(就是左边)添加一个1,就是1101101,此时1的个数为奇数,所以接收方查看“1”数量的奇性改变,即可检出错误。

如果是约定偶校验,那就加0,变成0101101。

那显然这种方法不太有用,在有两个(偶数个)误码时,接收方那边查到的奇偶性也不变,从而没发现传输过程中发生了误码。——漏检率高,一般不用这种方法。

2.循环冗余校验CRC (Cyclic Redundancy Check)——被广泛应用

检错能力很强,漏检率极低。

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

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

接收方通过生成多项式来计算收到的数据是否产生了误码

设生成多项式如G(x) = x^4 + x^2 + x +1

即 = 1 x^4 + 0 x^3 + 1 x^2 + 1 x^0

所以生成多项式各系数构成的比特串:10111

(常用的是x^16 + x^15 + x^2 +1)

上面这个比特串就是下图所示做除法时用到的除数,得到的余数就是冗余码,被加到待传输数据后面:
在这里插入图片描述
生成多项式最高次0就是4个0,即添加0000

补充:

检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误;

要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错,但纠错码的开销比较大;

循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于硬件实现,因此被广泛应用于数据链路层

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

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

相关文章

【自然语言处理】最大熵马尔可夫模型

有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 由于这部分的参考资料比较少,网上大部分资料重复且不完整,对于一些关键计算没有推导,所以这里我主要讨论几篇论文和讲义。但是这些论文和讲义之间也有些许差别&#…

算法CPP时间复杂度

观察数据生成器可以发现对于每次操作均有 。 考虑将这些三元组想象成空间直角坐标系中 为对顶点的长方体。 将操作分成两部分,一部分是对 轴同时操作的,可以一开始就用前缀 统计完,将长方体变 成一个底面为阶梯状的直棱柱。另一部分是对 或…

【网络工程】9、实操-万达酒店综合项目(三)

接上篇《8、实操-万达酒店综合项目(三)》 之前我们按照项目要求进行模拟拓扑的构建实操,完成了办公区部分的网络配置,本篇我们来继续完成其他区域的网络配置。 一、总体架构情况 按照之前项目需求的拓扑图: 我们已经…

爱了爱了,Spring Cloud Alibaba内部微服务架构笔记真的太牛了

现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。同时,支持微服务的技术栈也是多种多样的,本文主要讲述我们为什么选择Spring Cloud和它的技术概要。 为什么微服务架构需要Spring Cloud 简单来说&#x…

【C++初阶】list的模拟实现

文章目录list的介绍list的模拟实现成员变量Member functionsconstructordestructoroperatorIterators正向迭代器反向迭代器beginendrbeginrendModifierspush_frontpop_frontpush_backpop_backinserteraseclear完整版代码list.hreverse_iterator.htest.cpplist的介绍 list是STL…

Selenium自动化测试环境搭建及问题

一、前言 目标:环境搭建及测试 主要问题:浏览器闪退,路径不明确,语法弃用 二、环境搭建(自带python3.9以上) 2.1.1、下载谷歌浏览器驱动 https://registry.npmmirror.com/binary.html?pathchromedriver/&…

数据结构---A星寻路算法

A星寻路算法第一步第二步第三步第四步JAVA实现用于寻找有效路径的算法。定义俩个集合 OpenList:可到达的格子 CloseList:已到达的格子 每一个格子都具有F、G、H这3个属性 G:从起点走到当前格子的成本,也就是已经花费了多少步。H&a…

生产级部署 Python 脚本,崩溃可自启

今天介绍一个生产级的流程管理工具 PM2,通常我们说到 PM2 的时候,都是在说如何部署 Node.js 程序,但是实际上 PM2 很强大,不仅仅可以用来管理 Node.js,它还可以用来管理 Python、PHP、Ruby、perl 等等。 这里就以 Pyt…

看了下华为工资,我不加班了

周五快下班,我本来是想继续好好上班的。那时候是晚上8点左右,跟我一个华为的朋友聊天,聊完之后,我气得把电脑合上,拿上花了7万巨款买的车钥匙,头也不回的走到电梯口,按下了下楼的电梯按钮。-事情…

项目集成MybatisPlus

目录 1.MyBatisPlus介绍 1.1.为什么需要 1.2.MyBatisPlus简介 1.3.MybatisPlus特点 2.项目集成MybatisPlus 2.1.导入依赖 2.2.创建配置 2.3.代码生成主类GenteratorCode 2.4.Controller,Query模板 2.5.生成代码 2.6最终效果 1.MyBatisPlus介绍 1.1.为什么…

SQL优化篇:如何成为一位写优质SQL语句的绝顶高手

(Structured Query Language)标准结构化查询语言简称SQL,编写SQL语句是每位后端开发日常职责中,接触最多的一项工作,SQL是关系型数据库诞生的产物,无论是什么数据库,MySQL、Oracle、SQL Server、DB2、PgSQL....&#x…

JSP ssh网上商品拍卖系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh网上商品拍卖系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0…

个人收款的实现方案

最近出于个人需要折腾了一套微信免签支付的个人系统,下面介绍一下整体的一个实现方案 由于微信本身不提供免签的支付api,因此个人若想要实现免签支付,那么只能通过监听微信收款通知来实现了,因此整个系统的实现部分分为 收款服务端和监听客户端来实现 收款服务端实现 整个…

【nowcoder】笔试强训Day5

目录 一、单选题 二、多选题 三、编程题 3.1统计回文 3.2连续最大和 一、单选题 1.下面的程序 编译运行后,在屏幕上显示的结果是() public class Test {public static void main(String args[]) {int x, y;x 5 >> 2;y x >&…

docker入门以及常见的命令

目录 1. 什么是docker 2. docker的核心组件 3. docker的安装 3.1 安装的先决条件 3.2.1 ubuntu安装docker 3.2.2 CentOS安装docker 3.3 配置镜像加速器 4. 镜像常用操作 4.1 搜索镜像 4.2 镜像下载 4.3 查看宿主机中的镜像 4.3 删除镜像 5. 容器常用命令 5.1 运行…

#Z1243. 完美数

一,题目描述 一个数是完美的,仅当它等于它的因数中比它小的所有数之和。 例如:28124714,所以 28 是完美的。 由此我们可以定义一个数的不完美值 F(N),代表 N和比 N 小的所有 N 的因数之和的差的绝对值。 例如&…

c# 服务

是什么 Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。 这些功能使服务非常适合在…

metrics-server监控主机资源

使用metrics-server实现主机资源监控获取metrics-server资源清单文件修改metrics-server资源清单文件部署metrics-server资源清单文件验证及授权获取metrics-server资源清单文件 直接使用命令来获取资源清单文件 wget https://github.com/kubernetes-sigs/metrics-server/rele…

车用DCDC双路输出电源模块规格书

产品名称:非隔离稳压双路输出车用电源模块 产品型号:LM36J40W2EH 典型特征值:24V/8V(3A)&5V(2A) u 产品概述 LM36J40W2EH模块电源是一款非隔离型双路输出的开关稳压器。它采用集成IC设计,使用一进两出的接线方式&#xff…

【Html圣诞树】2022年的圣诞节了,祝大家节日快乐。

目录 1. 效果展示2. 源代码1. 效果展示 是最近在互联网上很火的一个效果。 是带有背景音乐的,而且背景音乐支持选择,也支持自定义。 2. 源代码 美丽的圣诞树.html <!DOCTYPE html> <html lang="en"