计算机网络:数据链路层 - 点对点协议PPP

2024-04-04 10:12

本文主要是介绍计算机网络:数据链路层 - 点对点协议PPP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

计算机网络:数据链路层 - 点对点协议PPP

    • PPP协议的帧格式
    • 透明传输
      • 字节填充法
      • 零比特填充法
    • 差错检测
      • 循环冗余校验


对于点对点链路,PPP协议是目前使用最广泛的数据链路层协议。比如说,当用户想要接入互联网,就需要通过因特网服务提供者ISP:
在这里插入图片描述
这些 ISP 已经从英特网管理机构申请到了一批 IP 地址,用户计算机只有获取到 ISP 所分配的合法 IP 地址后,才能成为因特网上的主机。而用户计算机与 ISP 之间进行通信时,所使用的数据链路层协议就是 PPP 协议。另外,点对点协议 PPP 也广泛应用于广域网路由器之间的专用线路。

PPP协议的帧格式

PPP协议的帧格式如下:

在这里插入图片描述
以上帧格式中,各区域功能如下:

F:出现于整个帧的首尾,都是标志字段,也就是PPP帧的定界符

帧定界符用于帮助接受方区分一个帧,这个标志字段规定为十六进制的0x7E,在ASCII码表中代表字符'~'

A:地址字段,没有实际意义
C:控制字段,没有实际意义

在设计PPP协议之初,考虑以后再对这两个字段的值进行其他定义,但至今也没有给出,因此这两个字段并不携带什么信息。其中A被规定为十六进制的0xFFC被规定为十六进制的0x03

协议:指明信息部分的类别

上图中,网络层把数据段交给数据链路层封装成帧,而协议这个字段的作用就是用于指明网络层传来的数据的种类。该字段占两个字节,当协议字段为十六进制0x0021,PPP中的信息字段就是IP数据报;当协议字段为十六进制0xC021,PPP中的信息字段就是LCP分组;当协议字段为十六进制0x8021,PPP中的信息字段就是NCP分组

FCS:用于差错检测

此处使用的时CRC循环冗余校验,这个在博客后文会讲解。

信息部分:即上层传递下来的,被封装成帧的数据

这个信息字段的长度不是固定的,但是如果信息字段太长,就会导致分组的效率变低,因此规定信息字段的长度不超过1500 byte

数据链路层的三大问题在于:封装成帧透明传输差错检测

现在我们已经了解了PPP协议是如何封装成帧的,接下来我们再来看看PPP协议是如何完成透明传输的。


透明传输

字节填充法

当PPP使用异步传输时,以字节为单位传输数据,采用字节填充法来实现透明传输,字节填充法采用转义字符实现对数据段中的0x7E的转义。
在这里插入图片描述
比如上图中,如果我们只考虑两个帧定界符,不考虑地址字段控制字段FCS。帧定界符的十六进制为0x7E,但是如果数据段中也出现了0x7E,这该怎么办?

这就会导致一个问题,那就是对帧的拆分错误,比如上图中,第一个粉色的0x7E是帧开始符,最后一个粉色的0x7E是帧结束符。但是数据段中还有三个0x7E,因此接收方就有可能把第一个粉色的符号当作帧的开始,而第二个绿色的符号当作帧的结束。这就会造成错误的帧划分,以及错误的数据接收。因此我们要对数据段中的0x7E数据段进行特殊处理,让接收端可以区别数据段中的0x7E帧定界符

处理方式为字节填充,规则如下:

在这里插入图片描述

当在数据段中遇到0x7E,先将0x7E的第五个比特位取反变成0x5E,再在其前面插入0x7D

在数据段中遇到0x7E,就把0x7E第五位取反,为0x5E,然后再在其前面插入一个0x7D。这样只要接收方在读取数据的时候,只要遇到了0x7D这个转义字符,就把这个转义字符丢弃,再将其后一位字节的第五位取反,就得到了原先的数据。

但是我们还有一个问题,如下:

在这里插入图片描述

如果原本的数据段中就有转义字符0x7D,那么接收方又要如何识别这是一段数据,而不是一个转义字符呢?

当在数据段中遇到0x7D,先将0x7D的第五个比特位取反变成0x5E,再在其前面插入0x7D

在这里插入图片描述
用和之前相同规则,当接收方遇到0x7D,就把0x7D丢弃,然后把后面的0x5E的第五位取反,得到原始数据。

另外的,PPP协议对数据段还有额外的处理,在所有字符中,还有一些控制字符,即ASCII码表中的0 - 32号字符,以及第127号字符。这些字符才数据段中也要处理:

当在数据段中遇到控制字符,将该字符的第五个比特位取反,再在其前面插入0x7D

和之前一模一样的方法,不再赘述了。

字节填充汇总如下:

一旦遇到0x7E帧定界符,0x7D转义符,以及控制字符,就将其第五位取反,再在其前面插入一个0x7D转义

接收方受到数据后,只要遇到0x7D转义符,就把该符号丢弃,然后将其后一个字节的数据,第五位取反


零比特填充法

当PPP使用同步传输时,以比特为单位传输数据,采用零比特填充法来实现透明传输。

零比特填充法规则如下:

在这里插入图片描述

当在数据段中遇到连续的五个1,就在其后面插入一个0

PPP协议中,帧定界符是0x7E,转为2进制就是01111110,其中出现了连续的六个1。为了保证数据部分中的数据不会被判断为定界符,于是只要数据段中出现连续的五个1就插入一个0,这样就只有帧定界符中会出现连续的六个1

当接收方接收时,只需要在遇到五个1时,看其后面的一位,如果第六位为1,说明这是帧定界符。如果第六位为0,说明这个0是插入的,把它删除后还原出原始数据。


差错检测

再来看差错检测,发送方将封装好的帧通过物理层发送到传输媒体。帧在传输过程中遭遇干扰后,可能会出现误码,也就是比特 0 可能变成了比特 1,反之亦然

在一段时间内,传输错误的比特占所传输比特总数的比率,称为误码率。

但是接收方主机如何判断帧在传输过程中是否出现了误码呢?

这可以通过检错码来发现。发送方在发送帧之前基于待发送的数据和检错算法计算出检错码,并将其封装在帧尾。接收方主机收到帧后,通过检错码和检错算法就可以判断出帧在传输过程中是否出现了误码

循环冗余校验

在PPP协议中,使用了循环冗余校验 CRC 的检错技术。

在这里插入图片描述
假定发送端发送的原始数据为k个比特,对原始数据进行CRC运算,产生了n位冗余码FCS,把n位冗余码FCS放入帧的末尾一起发送出去。

那么我们现在就来讲解一下这个冗余码FCS是如何计算的:

  1. 在原始k位数据后面加n0
  2. 用指定的n + 1位除数p,对这个k + n位的数据段做模2除法
  3. 最后得到的n位除数就是冗余码FCS,用冗余码FCS替换最后的n0

假设我们现在的原始数据为101001,约定的除数p1101

在这里插入图片描述

除数p为4位数,那么n就是4 - 1 = 3位,因此在101001后面添上3位0:

在这里插入图片描述

现在就可以开始进行模2除法了:

在这里插入图片描述

所谓模2除法,就是每次进行相除操作时,上下按位异或,比如以上式子中10101101按位异或就是0111,在后面补一位0就是1110。以此类推,一直计算下去:

在这里插入图片描述
由于我们的除数pn + 1位,所以最后的余数一定是小于等于n位的,如果不够n位就在前面补0,补到n位。然后把这n位除数替换掉原数据中的n位0,得到101001 001

101001 001这一段数据中,101001是原始的数据, 001就是冗余码FCS

一开始我们拿p除以101001 000,余数为001。我们把001补上去后,数据变成了101001 001,那么p除以101001 001就应该是0。因此如果接收端用p除以k + n位数据等于0,就说明数据没有出问题,是正常的。但是如果结构非0,说明有比特位出现了差错,那么接收端就可以知道传输出问题,进行后续操作了。

要注意的是,这个除数p是一开始双方就约定好的,因此双方都是知道拿p去除以这个数据段。


这篇关于计算机网络:数据链路层 - 点对点协议PPP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875494

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者