一周学完计算机网络之三:1、数据链路层概述
简单的概述
数据链路层是计算机网络体系结构中的第二层,它在物理层提供的基本服务基础上,负责将数据从一个节点可靠地传输到相邻节点。可以将其想象成一个负责在两个相邻的网络设备之间进行数据 “搬运” 和 “整理” 的 “快递中转站”。
几个重要概念:
- 帧:封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。通俗的来说就是:网络层传递给数据链路层的数据,会被分割成大小不一的数据“包裹”,这个数据会被插入帧头和帧尾,构成数据帧。
- 帧头和帧尾:帧里面包括了目的地址,就是让目的主机通过帧的这个地址知道这个信息是发送给自己的。此外还包含标志位,比如PPP帧格式中就有标志位来进行帧的定界(两个帧之间的数据边界)。
-
**帧定界:**如果帧头和帧尾的标志位,如何区分边界呢?比如以太网V2的MAC帧。
-
以太网V2的MAC帧,会在帧中插入8个字节(64比特)的前导码,前导码由 7 个字节的前同步码和 1 个字节的即帧开始定界符,SFD组成,总共 8 个字节。它位于 MAC 帧的最前端,在物理层传输时,会先于目的地址、源地址等其他字段被发送出去。作用主要有二:
- 时钟同步:以太网中数据的传输是基于时钟信号的,发送方按照自己的时钟节奏发送数据,接收方需要与发送方的时钟保持同步,才能准确地接收和解析数据。
- 帧起始标识:最后的(SFD)作为帧开始定界符,用于标识 MAC 帧的正式开始。接收方在检测到 SFD 后,就知道接下来的比特流是一个 MAC 帧的数据部分,从而开始对帧进行解析和处理。
-
-
可靠传输:就是能够实现,发送方发的数据,和接收方接受的数据完全一样,不能有任何丢失或者错误。需要用到差错检测、确认与重传、序号与排序的技术手段。这种传输方法的成本会比较高。
- 差错检测:发送方在数据中加入一些冗余信息,如校验和、循环冗余校验(CRC)码等。接收方通过对收到的数据进行相应的计算,来检查数据在传输过程中是否发生了错误。例如,若计算出的 CRC 码与收到的 CRC 码不一致,就知道数据出现了差错。
- 确认与重传:接收方收到数据后,会向发送方发送确认信息(ACK),告知发送方数据已正确接收。如果发送方在一定时间内没有收到接收方的确认信息,或者收到了否定确认信息(NAK),就会认为数据传输出现了问题,然后重新发送数据。这种自动重传请求(ARQ)机制可以有效地解决数据丢失或出错的问题。
- 序号与排序:为了保证数据的顺序性,发送方会给每个数据分组加上一个序号。接收方根据序号对收到的数据进行排序,将乱序的数据调整到正确的顺序后再提交给上层应用。
-
透明传输:用这种前导码的形式来区分帧,如果帧里面的数据和这个帧定界一样的时候,接收数据的时候,就会把这个数据误认为是帧定界来处理。容易引发误判。解决方法就是使用透明传输,实现方法就是如下方法:
- 字节填充:当数据中出现与帧定界符相同的字节时,为了避免接收方将其误认为是帧的边界,发送方会在该字节前面插入一个转义字节。接收方收到数据后,会自动删除这个转义字节,恢复数据的原样。例如,下面这种情况:(ESC表示转义字符)
但是有的时候,转义字符就是数据本身怎么搞,因此就在转义字符前面也加入一个转义字符。
- 比特填充:在一些数据链路层协议中,如 HDLC 协议,采用比特填充的方式来实现透明传输。当数据中出现连续的若干个 1(通常是 5 个 1)时,发送方会在其后插入一个 0。接收方收到数据后,会自动删除这些插入的 0,从而保证数据的透明传输。
-
差错检测:检验码会被封装在帧尾,比如图片中的FCS就是。发送方把数据送到接收方以后,可以根据这个来判断是否有误码(就是本来是0变成1,本来是1变成了0)。
-
奇偶校验:奇偶校验法是根据被传输数据中 “1” 的个数的奇偶性来进行校验的。具体来说,在发送数据时,会在数据后面添加一个奇偶校验位,使得整个数据(包括校验位)中 “1” 的个数为奇数或偶数。接收方收到数据后,会根据事先约定的奇偶性规则来检查 “1” 的个数,如果 “1” 的个数不符合约定的奇偶性,则认为数据在传输过程中出现了错误。
缺点是,无法识别出偶数位的比特误码情况。而且只能检验,不能纠错。
-
循环冗余校验CRC:CRC 的基本原理是将待传输的数据比特序列看作是一个多项式的系数,通过特定的生成多项式对这个多项式进行除法运算,得到的余数作为校验码附加在数据后面一起传输。接收方收到数据后,用同样的生成多项式对收到的数据进行除法运算,如果余数为零,则认为数据传输正确;否则,说明数据在传输过程中出现了错误。
-
- 确定生成多项式:生成多项式是一个预先选定的二进制多项式,通常用 G ( x ) G(x) G(x) 表示。不同的应用场景会使用不同的生成多项式,例如,在以太网中常用的生成多项式是 G ( x ) = x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x + 1 G(x)=x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1 G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1。
- 在数据后面添加 n 个零:n 是生成多项式$ G(x)$ 的最高次数。例如,对于上述以太网中的生成多项式, n = 32 n = 32 n=32。假设待传输的数据为 D ( x ) D(x) D(x),将 D ( x ) D(x) D(x)左移 n 位,即相当于在数据后面添加 n 个零,得到 D ( x ) × x n D(x) \times x^n D(x)×xn。
- 进行模二除法:用 D ( x ) × x n D(x) \times x^n D(x)×xn 除以生成多项式 G ( x ) G(x) G(x),得到的余数 R ( x ) R(x) R(x) 就是 CRC 校验码。这里的除法是模二除法,即采用异或运算进行减法,不考虑借位。
- 附加校验码:将得到的 CRC 校验码 R ( x ) R(x) R(x) 附加在原始数据 D ( x ) D(x) D(x) 的后面,形成最终要传输的数据帧 T ( x ) = D ( x ) × x n + R ( x ) T(x)=D(x) \times x^n + R(x) T(x)=D(x)×xn+R(x)。
相关文章:
一周学完计算机网络之三:1、数据链路层概述
简单的概述 数据链路层是计算机网络体系结构中的第二层,它在物理层提供的基本服务基础上,负责将数据从一个节点可靠地传输到相邻节点。可以将其想象成一个负责在两个相邻的网络设备之间进行数据 “搬运” 和 “整理” 的 “快递中转站”。 几个重要概念…...
配置ssh无密登录
在root下有一个.ssh文件夹,它的下面有一个known_hosts文件,这个里面记录了哪些其他的主机通过ssh访问过当前的主机。 免密登录原理 (2)生成公钥和私钥 具体操作: 1. 进入 hadoop1001 2. 运行命令:ssh-keyg…...
南京邮电大学金工实习答案
一、金工实习的定义 金工实习是机械类专业学生一项重要的实践课程,它绝非仅仅只是理论知识在操作层面的简单验证,而是一个全方位培养学生综合实践能力与职业素养的系统工程。从本质上而言,金工实习是学生走出教室,亲身踏入机械加…...
无偿帮写毕业论文
以下教程教你如何利用相关网站和AI免费帮你写一个毕业论文。毕竟毕业论文只要过就行,脱产学习这么多年,终于熬出头了,完成毕设后有空就去多看看亲人好友,祝好! 一、找一个论文模板(最好是overleaf) 废话不多说&#…...
【高数上册笔记01】:从集合映射到区间函数
【参考资料】 同济大学《高等数学》教材樊顺厚老师B站《高等数学精讲》系列课程 (注:本笔记为个人数学复习资料,旨在通过系统化整理替代厚重教材,便于随时查阅与巩固知识要点) 仅用于个人数学复习,因为课…...
大数据从专家到小白
文章目录 数据湖技术Apache Iceberg FlinkHiveHadoopHDFS 数据湖技术 Apache Iceberg Iceberg是一个通用的表格式(数据组织格式),它可以适配Presto,Spark等引擎提供高性能的读写和元数据管理功能。 Flink Hive Hadoop HDFS...
特励达力科LeCroy推出Xena Freya Z800 800GE高性能的800G以太网测试平台
Xena Freya Z800 800GE 是由全球领先的测试与测量解决方案提供商特励达力科公司(Teledyne LeCroy)开发的高性能以太网测试平台,专为满足从10GE到800GE数据中心互连速度的需求而设计。特励达力科公司在网络测试领域拥有超过50年的技术积累&…...
LeetCode 热题 100 98. 验证二叉搜索树
LeetCode 热题 100 | 98. 验证二叉搜索树 大家好,今天我们来解决一道经典的二叉树问题——验证二叉搜索树。这道题在 LeetCode 上被标记为中等难度,要求判断给定的二叉树是否是一个有效的二叉搜索树(BST)。 问题描述 给你一个二…...
Linux文件编程——open函数
在 Linux 系统中,文件操作不仅仅通过高级语言的标准库进行,底层的文件操作是通过 系统调用 来实现的。系统调用 是用户空间与操作系统内核之间的接口,允许程序请求操作系统提供的服务,包括文件读写、内存管理、进程控制等。本文将…...
Linux-Ext系列文件系统
1.理解硬件 1.1磁盘 机械磁盘是计算机中唯⼀的⼀个机械设备 磁盘---外设 慢 容量⼤,价格便宜 1.2磁盘的物理结构 1.3磁盘的存储结构 扇区:是磁盘存储数据的基本单位,512字节,块设备 如何定位⼀个扇区呢? 可以先定…...
Multisim14使用教程详尽版--(2025最新版)
一、Multisim14前言 1.1、主流电路仿真软件 1. Multisim:NI开发的SPICE标准仿真工具,支持模拟/数字电路混合仿真,内置丰富的元件库和虚拟仪器(示波器、频谱仪等),适合教学和竞赛设计。官网:艾…...
C——猜数字游戏
前面我们已经学习了C语言常见概念,数据类型和变量以及分置于循环的内容,现在我们可以将这些内容结合起来写一个有趣的小游戏。下面正式开始我们今天的主题——猜数字游戏的实现。 猜数字游戏的要求: 1.电脑自动生成1~100的随机数。 2.玩家…...
【iOS】SDWebImage源码学习
SDWebImage源码学习 文章目录 SDWebImage源码学习前言SDWebImage缓存流程sd_setImageWithURL(UIImageViewWebCache层)sd_internalSetImageWithURL(UIViewWebCache层)loadImageWithURL(SDWebManger层)queryCacheOperationForKey(SDImageCache层)删除缓存 callDownloadProcessFor…...
.Net HttpClient 处理响应数据
HttpClient 处理响应数据 1、初始化及全局设置 //初始化:必须先执行一次 #!import ./ini.ipynb2、处理响应状态 //判断响应码:正常 {var response await SharedClient.GetAsync("api/Normal/GetAccount?id1");if(response.StatusCode Sy…...
【心海资源】【最新话费盗u】【未测】提币对方官方波场+没有任何加密+无后门+前端VUE
提笔接口请使用官方提笔,第三方提笔都有风险 后门你们也扫扫,这种源码风险大,自己玩玩学习进行了 重要的事情说三遍 !!!!!!!!!&…...
Python中的标识、相等性与别名:深入理解对象引用机制
在Python编程中,理解变量如何引用对象以及对象之间的比较方式是至关重要的基础概念。本文将通过Lewis Carroll的笔名示例,深入探讨Python中的对象标识、相等性判断以及别名机制。 别名现象:变量共享同一对象 >>> charles {name: …...
Java 1.8(也称为Java 8)
Java 1.8(也称为Java 8)是Oracle于2014年发布的一个重要版本,引入了许多新特性和改进,极大地提升了Java语言的表达力和开发效率。以下是Java 1.8的主要新特性: ### 1. Lambda表达式 Lambda表达式是Java 1.8最具革命性…...
LVGL简易计算器实战
文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…...
Linux | Uboot-Logo 修改文档(第十七天)
01 Uboot 修改 首先我们在 home 目录下新建一个文件夹 imx6ull,然后打开 i.MX6ULL 终结者光盘资料\05_uboot linux源码,在 window 下解压下图箭头所指的压缩包,解压后分别得到 linux-imx-rel_imx_4.1.15_2.1.0_ga_20200323.tar.gz 和 uboot-imx-rel_imx_4.1.15_2.1.0_…...
数字孪生概念
数字孪生(Digital Twin) 是指通过数字技术对物理实体(如设备、系统、流程或环境)进行高保真建模和实时动态映射,实现虚实交互、仿真预测和优化决策的技术体系。它是工业4.0、智慧城市和数字化转型的核心技术之一。 1. …...
c++STL-string的使用
这里写自定义目录标题 string的使用string写成类模板的原因string的版本举例构造、析构函数和赋值重载构造函数和析构函数operator Iterators迭代器begin和endrbegin和rendcbegin和cend,crbegin和crend(c11) capacity容量有关函数不同编译器下…...
总结C/C++中程序内存区域划分
C/C程序内存分配的⼏个区域 1..栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,…...
C# 方法(方法重载)
本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 方法重载 一个类中可以有多个…...
Dockerfile 完全指南:从入门到最佳实践
Dockerfile 完全指南:从入门到最佳实践 1. Dockerfile 简介与作用 Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。它允许开发者通过简单的指令定义镜像的构建过程,实现自动化、可重复的镜像构建。 主要作用…...
DEEPPOLAR:通过深度学习发明非线性大核极坐标码(2)
目录 2.问题的提出和背景 2.1 信道编码 2.2.极化码 极坐标编码 极坐标解码 原文:《DEEPPOLAR: Inventing Nonlinear Large-Kernel Polar Codes via Deep Learning》 2.问题的提出和背景 2.1 信道编码 信道编码是一种为传输添加冗余的技术,使其对…...
ESP32-S3 学习笔记(1)
ESP32-S3 学习笔记(1) 背景环境添加工程文件材料准备轻触开关的正负极 背景 闲来无事,看到立创论坛上有许多大佬开源的项目,甚是厉害,于是决定自己也来搞一搞,同时可以做一些技术积累,看了很…...
Python Cookbook-7.9 访问 MySQL 数据库
任务 想访问一个 MySQL 数据库。 解决方案 MySQLdb 模块正是为这种任务而设计的: import MySQLdb #创建一个连接对象,再用它创建游标 con = MySQLdb.connect(host = "127.0.0.1", port = 3306, user = "joe",<...
docker安装superset实践
1、拉取docker镜像 docker pull apache/superset:latest 2、安装superset容器 mkdir /usr/local/develop/docker/superset/ -p touch /usr/local/develop/docker/superset/superset_config.py superset_config.py配置文件如下: SQLALCHEMY_DATABASE_URI mysql:…...
Web开发—Vue工程化
文章目录 前言 Vue工程化 一、介绍 二、环境准备 1.介绍create-vue 2.NodeJS安装 3.npm介绍 三,Vue项目创建 四,项目结构 五,启动项目 六,Vue项目开发流程 七,API风格 前言 Vue工程化 前面我们在介绍Vue的时候&#…...
什么是硬件中断请求号?什么是中断向量号?
一、硬件中断请求号(IRQ,Interrupt Request Number) 定义: 硬件中断请求号(IRQ)是硬件设备向CPU发送中断请求时使用的唯一标识符,用于区分不同的中断源。例如,键盘、硬盘等外设…...
[Java实战]Spring Boot 定时任务(十五)
[Java实战]Spring Boot 定时任务(十五) 一、定时任务的应用场景 数据同步:每日凌晨同步第三方数据状态检查:每5分钟扫描订单超时未支付资源清理:每小时清理临时文件报表生成:每月1号生成财务统计报表通知…...
OpenWrt开发第7篇:OpenWrt配置支持Web界面
文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 OpenWrt的luci是一个基于Web的图形化管理界面,为用户提供了直观的操作方式,无需命令行即可完成大部分功能的配置。 1.在终端输入ma…...
【多模态】IMAGEBIND论文阅读
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 IMAGEBIND 多模态论文梗概 IMAGEBIND是一种夸模态的神经网络,以图片为中心,联合六中模态的网络(图片、文…...
【C语言干货】二维数组传参本质
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、二维数组的内存布局 1.二维数组的实质2.二维数组的地址关系 二、二维数组传参的本质 1.参数传递的退化机制2.三种等效的函数声明方式 总结 前言 提示&#…...
基于SpringBoot的抽奖系统测试报告
一、编写目的 本报告为抽奖系统测试报告,本项目可用于团体抽奖活动,包括了用户注册,用户登录,修改奖项以及抽奖等功能。 二、项目背景 抽奖系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据&…...
Go语言从零构建SQL数据库(9)-数据库优化器的双剑客
数据库优化器的双剑客:谓词下推与列裁剪 在数据库查询优化的世界里,有两位特别重要的"超级英雄":谓词下推和列裁剪。这两种优化技术虽然简单,却能带来惊人的性能提升。今天,我们就来揭开它们的神秘面纱&…...
C++中什么是函数指针?
在C中,函数指针是一个指向函数的指针变量。通过函数指针,我们可以像使用函数一样调用它所指向的函数,常用于实现回调函数、函数指针数组等功能。 以下是一个简单的C代码示例,展示了函数指针的使用: cpp #include <…...
Python工具链UV整合环境管理
Python工具链UV整合环境管理 终极Python工具链UV:从依赖管理到项目开发的全维度解析一、引言:重新定义Python开发的大一统时代二、深度安装指南:多场景适配方案1. 官方独立安装器(推荐方案)2. 进阶安装方式3. 安装验证…...
RuoYi-v4.7.8 jar/war部署
准备条件 jdk-8u73-windows-x64.exe mysql5.7 apache-tomcat-9.0.60 apache-maven-3.8.1 RuoYi-v4.7.8.zip (官网 RuoYi) 登录gitee,选择标签要下载的版本好,点击克隆下载zip压缩文件 安装maven Apache Archive Distribution Directory…...
基于SpringBoot的小区停车位管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
张量并行优质博客
必读图解系列1 比较全面的相关文献总结博客,可以重点看一下其中的行列切分算子2 # 图解大模型训练之:张量模型并行(TP),Megatron-LM ↩︎ # 大规模分布式 AI 模型训练系列——张量并行 ↩︎...
汽车诊断简介
历史 20世纪80年代,由于美国西海岸严重的雾霾问题,CARB(加州空气资源委员会)通过了一项法律,要求对机动车辆进行车载监测诊断。这推动了OBD-I的引入,并在1990年代被OBD II取代。与此同时,欧洲也…...
suricata之规则去重
一、环境和背景 1.1 环境 OS: Ubuntu 22.04.5 LTS IDE: vscode suricata: suricata 7.0.5 1.2 背景 在添加规则时,为了给规则分类,将不同类别的规则写入不同的文件。 在规则加载时两条不同的规则却被认为是重复的,因此记录一下去重逻辑。…...
接口在函数参数和对象类型中的应用
在 TypeScript 中,接口(interface)是一种强大的工具,用于定义和约束对象的结构。它不仅可以用于描述对象类型,还能够用于定义函数的参数和返回类型。接口可以提高代码的可读性、可维护性,并帮助捕捉潜在的错…...
Javascript:数组和函数
数组 创建数组 使用new创建 let arrnew array(数组大小); 直接赋值创建 let Arr2[];let Arr3[1,A,"HELLLO"]; 这里JS的数组里面的元素属性可以各不相同 演示代码 <script>let Arr1new Array(5);let Arr2[];let Arr3[1,A,"HELLLO"];console.…...
Vue Router
Vue Router:前端路由跳转的魔法 什么是Vue Router Vue Router是Vue官方的路由管理器,它允许我们在不重新加载页面的情况下更改浏览器中显示的内容,实现单页应用(SPA)的无缝导航体验。 📊 Vue Router工作流程图 #mermaid-svg-xNtkA0qYMjB0lvUt {font-family:"trebu…...
谷歌与微软的AI战争:搜索、云服务与生态布局
谷歌与微软的AI战争:搜索、云服务与生态布局 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 谷歌与微软的AI战争:搜索、云服务与生态布局摘要引言技术路线对比1. AI基础设施:算力…...
robomaster机甲大师--电调电机
文章目录 C620电调ID设置速率 电调发送报文电调接收报文cubemx程序初始化发送接收 C620电调 ID设置 速率 1Mbps 电调发送报文 发送的数据为控制电机的输出电流,需要将can数据帧的ID设置为0x200 电调接收报文 机械角度:电机的0到360度映射到0到几千转…...
菜鸟之路day31一一MySQL之多表设计
菜鸟之路day31一一MySQL之多表设计 作者:blue 时间:2025.5.9 文章目录 菜鸟之路day31一一MySQL之多表设计0.概述一.多表设计1.1一对多1.2一对一1.3多对多 0.概述 内容学习自黑马程序员BV1m84y1w7Tb 一.多表设计 1.1一对多 一对多关系实现ÿ…...
害怕和别人发生冲突怎么办? --deepseek
害怕与他人发生冲突是一种常见的心理状态,可能源于对关系破裂、被否定或情绪失控的担忧。但这种恐惧长期存在会影响自我表达和人际关系。以下是分步骤的应对策略,帮助你逐步建立应对冲突的自信: 第一步:理解你的恐惧根源 自我提问…...