计算机网络学习小结_数据链路层

数据链路和帧

帧:数据链路层传输基本单元。链路层将网络层传过来的数据构成帧发到链路上,并将发到链路层的帧取出数据交给网络层

数据报/分组/包:网络层传输基本单元

三个基本问题

封装成帧、透明传输、差错检测

封装成帧

概念:将数据在头部和尾部加帧头和帧尾组,数据,帧头,帧尾组成的结构叫帧,是链路层发送的基本单位。帧头和帧尾可用来帧定界,即从发来或收到的一串数据甄别哪里是一个帧的开始和结束,定界可用来对数据帧进行差错检验

透明传输

即帧的数据中如果出现帧头和帧尾,识别帧起始时,会误把数据里的帧头和帧尾当作帧头或帧尾,导致数据未读取完就截取了,只截取了片段。数据里出现的和帧头帧尾编码一样的字节序,数据里的东西(帧头帧尾相同的字节序)不是透明的。

当帧数据里出现了和帧头帧尾相同字节序的数据怎么办?加转义字符,发的时候加,收到的时候去掉

差错检测

数据传输过程中,可能会产生误码,即传输的数据1变成0或者0变成1。这种误码和信噪比有关,信噪比越高误码率越小。链路层广泛使用循环冗余校验(CRC,Cyclic Redundancy Check)来检测这种误码

CRC:发送方和接收方共同商议一个n + 1位除数P,用数据对这个除数P进行模2运算得出n位余数,将原始数据末尾加上这个n位余数就是crc校验,接收方对这个数据同样做模2运算,如果余数不相同则丢弃数据,如果余数相同则接受数据

无比特差错和无传输差错:链路层的CRC校验只能保证帧无比特差错,不能保证其他差错,比如帧丢失,帧乱序,所以仅实现CRC不能叫无传输差错,只能叫无比特差错。链路层不保证无传输差错,仅可保证帧传输无比特差错,无传输差错由上层协议保证

PPP协议

早期通信线路质量较差年代,链路层使用一种可靠传输协议HDLC(高级数据链路控制),后来用的少了,取代之的是简单的多的PPP协议(点对点协议,Point-To-Point)

ppp协议保证差错检测

ppp帧格式

帧头4个字段帧尾2个字段

字段含义

帧头帧尾的F表示帧定界符,标志帧的开头和结束。两个F出现时表示这是个空帧,应该丢弃(会不会是没有数据中间是空的,开头和结尾的F连在一起变成两个F)

A和C表示2个固定字符,还没有明确含义

协议字段表示数据类型,2个字节

帧尾的FCS是冗余校验的字串

字节填充

即帧数据中出现帧开始结束标识符等字符时处理逻辑是添加填充字符比如转义字符,虽然填充字符后帧长度会变长,但接受后进行相反处理可还原出原始帧

零比特填充

因为ppp协议帧标志字段比特由连续超过5个1,所以发数据时如果发现至少有5个连续的1则在1后面加一个比特0,可以让数据和标志符区分开,接收方如果发现5个连续的1就把五个连续1后面的位删除

ppp协议工作状态

使用广播信道的链路层

局域网数据链路层

共享信道方法:静态划分(频分,时分,波分等,代价高,不太适用)和动态划分(随机接入和受控接入)

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

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

相关文章

Docker Portainer使用

Portainer是什么 Docker Portainer是一个轻量级的 Web UI 管理界面,可以用来管理Docker环境。它提供了一个直观的控制台,用户可以通过它来管理Docker主机、容器、网络、卷等Docker资源。 Portainer的主要功能和特点包括: 容器管理:可以查看、启动、停止、删除容器,以及查看容器…

正确解决pymysql.err.InternalError:(1049, Unknown error 1049)异常的有效解决方法

pymysql.err.InternalError: (1049,Unknown error 1049)这个异常通常表示客户端尝试连接到MySQL或 MariaDB服务器时出现了问题。错误代码 1049通常与数据库服务未运行、连接参数错误或数据库不存在有关。 为了解决这个问题,您…

对比解读国际R155法规和GB整车强标要求的差异性

附:汽车整车信息安全技术要求和R155法规文档,文末下载 在早期的汽车软件设计中,汽车本身很少与外界互联,并没有考虑太多的安全性。而随着电子电气架构的发展,大量的软件控制取代了机械控制,带来了ADAS、OT…

VSCODE调试C++(本人是openfoam求解器)时无法显示Vector,map等容器的值

一维数组&#xff1a; 可以在watch内添加表达式&#xff1a;*(type(*)[size])vectorName 例如&#xff1a;想查看vector<int> nums(6), 可以添加*(int(*)[6])nums。 上面是一维数组情况&#xff1a; ((double (*)[1000])&U[1000]) 表示从下标1000开始访问1000-200…

C++实现童年游戏

其中多处坐标的代码是经过运算移项推导出的 #include<easyx.h> #include<conio.h> #include<time.h> #include<stdio.h> bool Timer(int id, int ms)//计时器&#xff0c;过了多少毫秒就会返回真 {static long start[3] { 0 };long last clock();if…

关于linux的防护,以及群集你要知道的有哪些11-搭建Zabbix监控系统

1、zabbix具备功能 主机的性能监控、网络设备性能监控、数据库性能监控、多种警告方式、详细报表图表绘制 2、zabbix的监测对象 Linux服务器、Windows服务器、路由器、交换机等网络设备 3、zabbix的监控架构 server-client架构&#xff1a;适用于网络比较简单&#xff0c…

Qt 科目一考试系统(有源码)

项目源码和资源&#xff1a;科目一考试系统: qt实现科目一考试系统 一.项目概述 该项目是一个基于Qt框架开发的在线考试系统&#xff0c;主要实现了考试题目的随机抽取、考试时间限制、成绩统计等功能。用户可以通过界面操作进行考试&#xff0c;并查看自己的考试成绩。 二.技…

threejs的基本属性

1.创建场景,摄像机,渲染器,几何体,材质,网格 网格 物体材质 场景.add(网格),网格加入场景中 场景.add(坐标辅助器) 渲染 场景摄像机 相机的轨道控制器是个单独的对象 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/j…

利用element实现简单右键

利用element-plus中的el-menu实现简单右键 实现如下 <template><main class"mainClass" contextmenu"showMenu($event)"> </main><el-menu:default-active"1"class"el-menu-demo"mode"vertical":col…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(一)---- 操作系统介绍与接口示例

MIT6.S081&#xff08;操作系统&#xff09;学习笔记 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&a…

8.11 矢量图层线要素单一符号使用三(插值线)

文章目录 前言插值线&#xff08;Interpolated Line&#xff09;QGis设置线符号为插值线&#xff08;Interpolated Line&#xff09;二次开发代码实现插值线&#xff08;Interpolated Line&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中插值线&#xff08;Interpol…

基于地理坐标的高阶几何编辑工具算法(4)——线分割面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中待分割面&#xff0c;点击“线分割面”工具&#xff0c;绘制和面至少两个交点的线&#xff0c;双击结束&#xff0c;执行分割操作 应用场景 快速切分大型几何面&#xff0c;以降低面的复杂度&…

496.下一个更大的元素

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

【Makefile】Makefile 编译 Keil 工程(Linux 环境)

本文使用的开发板为 stm32f103C8T6&#xff0c;使用的驱动库为stm32标准库。 目录 一、软件下载 1、stm32 标准库 2、arm-none-eabi 工具链 3、烧录器 二、Keil 工程改造 1、Keil 工程 2、基本 Makefile 工程 3、添加启动文件 4、添加链接脚本 5、去掉 core_cm3.c 三…

05Django项目--前端公共文件和其他html文件的适配

对应视频链接点击直达 Django项目--前端公共文件和其他html文件的适配 对应视频链接点击直达前端页面准备Pubilc页面设置 OVER&#xff0c;不会有人不会吧不会的加Q1394006513结语 接着上一节 前端页面准备 为了方便大家更好的复制&#xff0c;我把整个项目及templates文件夹和…

Buffer Pool中是如何管理Page页

Page页分类:在BP的底层采用的是链表数据结构管理Page。Page根据状态可以分为3中类型 1)free Page:空闲Page&#xff0c;未被使用的Page。 2)clean Page:被使用的Page&#xff0c;但是数据没有修改过。 3)dirty Page:脏页&#xff0c;被使用过的Page&#xff0c;并且数据被修…

FastDfs快速安装和数据迁移同步。Ubuntu环境

一&#xff1a;防火墙 ufw status 二&#xff1a;下载 分别是&#xff08;环境依赖&#xff0c;网络模块依赖&#xff0c;安装包&#xff09; git clone https://github.com/happyfish100/libfastcommon.git git clone https://github.com/happyfish100/libserverframe.git …

nginx服务器执行的过程

一:打包 1.打包前的分析 文件路径下npm run preview -- --report 生成打包之后的内容 2.解决有些内容体积过大的问题 1.删除有些不使用但是占用较多的,将main.js上import删除,打包时不会有 2.不能删除但是内容较大的 vue.config.js文件夹下 externals: { vue: Vue,…

Jenkins动态slave

目录 所需环境 安装nfs 部署Jenkins 安装插件 ​编辑添加凭据 配置动态slave 连接kubernetes集群 ​编辑配置Jenkins地址 ​编辑配置Pod模板 ​编辑确认代理端口 创建任务测试 在当今软件开发生命周期中&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;已…

Selenium 异常类详解

在使用 Selenium 进行 Web 自动化测试时&#xff0c;经常会遇到各种异常情况。了解这些异常并掌握如何处理它们对于编写稳定可靠的测试脚本至关重要。本文将详细介绍 Selenium 中常见和不常见的异常类及其使用场景。 Selenium 常见异常类列表 序号异常类基类描述1selenium.co…