计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)

本文主要是介绍计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

介绍

组成部分 

PPP帧格式

透明传输

字节填充法 

比特填充法 

差错检测

工作状态


本篇我们介绍点对点协议PPP

介绍

点对点协议PPPPoint-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。

请大家想想看:一般的英特网用户,是如何接入到英特网的呢?

通常都是要通过连接到某个英特网服务提供者ISP(例如中国电信、中国联通、中国移动
这三大运营商)才能接入英特网。这些ISP已经从英特网管理机构申请到了一批IP地址,用户计算机只有获取到ISP所分配的合法IP地址后,才能成为英特网上的主机。

用户计算机与SP进行通信时所使用的数据链路层协议,通常就是PPP协议 。

这里需要说明的是:

在1999年公布的在以太网上运行的PPP协议,即PPP over Ethernet。简称为PPPoE。

它使得ISP可以通过DSL、电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务。

另外,点对点协议PPP也广泛应用于广域网路由器之间的专用线路 。

PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC161,RFC1662]。

我们可以在ITF官方网站的相关页面,搜索并查看PPP协议的相关RFC文档。

小结 

  • 点对点协议PPPPoint-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
  • PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC161,RFC1662]。

组成部分 

PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:

  1. 对各种协议数据报的封装方法,也就是之前文章中介绍的封装成帧
  2. 链路控制协议LCP,用于建立、配置以及测试数据链路的连接
  3. 一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议

从网络体系结构的角度看,PPP是数据链路层的协议;它将上层交付下来的协议数据单元封装成PPP帧,为了支持不同的网络层协议,PPP协议包含了一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议。(例如TCP/IP中的IP、Novell NetWare网络操作系统中的IPX、Apple公司的AppleTalk等)。链路控制协议LCP用于建立、配置以及测试数据链路的连接PPP协议
能够在多种类型的点对点链路上运行(例如面向字节的异步链路、面向比特的同步链路)。

PPP帧格式

接下来我们来看看PPP协议的帧格式:

帧首部由四个字段构成,帧尾部由两个字段构成 ,各字段的长度以及帧的数据部分的最大长度如下图所示:

帧首和帧尾部中的标志字段(F,Flag)是PPP帧的定界符,取值为16进制的7E;

帧首部中的地址字段(A,Address)取值为十六进制的FF;

控制字段(C,Control)取值为十六进制的03(最初曾考虑以后再对A和C这两个字段的值进行其他定义,但至今也没有给出,可见这两个字段实际上并没有携带PPP针的信息);

帧首部中的协议字段(P,Protocol)指明了帧的数据部分应送交哪个协议处理。当协议字段取值为16进制的0021时,PPP帧的数据部分就是IP数据报、当协议字段取值为十六进制的C021时,PPP帧的数据部分就是链路控制协议LCP的分组、当协议字段取值为16进制的8021时,PPP帧的数据部分就是网络控制协议NCP的分组;

帧尾部中的帧检验序列FCS字段(Frame Check Sequence),其值是使用循环冗余校验CRC计算出的,校验位用于检查PPP帧是否存在误码。

透明传输

接下来我们来看看PPP协议是如何解决透明传输问题的。

当PPP帧的数据部分出现帧首和帧尾中的标志字段时,如果不采取措施,则会造成接收方对PPP帧是否结束的误判;因为标志字段是PPP帧的定界符,取值为十六进制的7E,也就是二进制的0111 1110。

PPP协议实现透明传输的方法取决于所使用的链路类型,如果是面向字节的异步链路,则采用字节填充法,也就是插入‘转义字符’。

如果是面向比特的同步电路,则采用比特填充法,也就是插入‘比特0’。

字节填充法 

举例说明字节填充法,也就是以字节7E作为PPP帧的定界符,以字节为单位来讨论问题。

发送方对PPP帧数据部分的处理应为:

将出现的每一个7E字节转变成两字节序列7D、5E。如图所示:

这相当于在7E字节前插入了转义字节7D,并将7E字节减去16进制的20;

将出现的每一个7D字节转变成两字节序列7D、5D。如图所示:

在出现的每一个ASCII码控制字符前插入一个7D字节,同时将该字符的编码加上16进制的20。例如图中所示:

对于PPT帧的接收方,只要进行反变化即可恢复出原来的PPT帧的数据部分。

比特填充法 

再来举例说明比特填充法,也就是以0111 1110作为PPP帧的定界符,以比特为单位来讨论问题。

假设PPP帧的数据部分如下图所示:

其中包含了两个帧定界符。

来看发送方对PPP帧数据部分的处理:

对帧的数据部分进行扫描(一般由硬件实现),只要发现5个连续的比特1,则立即填充一个比特0,如下图所示:

再来看接收方对PPP帧数据部分的处理:

对帧的数据部分进行扫描(一般由硬件实现),只要发现5个连续的比特1,就把其后的一个比特0删除。

差错检测

接下来我们来看看PPP协议是如何进行差错检测的。

PPP帧的尾部包含有一个两字节的帧检验序列FCS字段,使用循环冗余校验CRC来计算该字段的取值。

采用的生成多项式如下所示:

RFC1662文档的附录部分给出了FCS的计算方法的C语言实现,为了减少对CPU的占用
采用查表法来实现。

FCS的计算范围如下图所示:

接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务

工作状态

PPP链路的开始和结束状态都是静止状态,这时并不存在物理层的连接。

  • 当检测到调制解调器的载波信号,并建立物理层连接后,PPP就进入链路的建立状态,这时列入控制协议LCP开始协商一些配置选项。
  1. 若协商成功则进入鉴别状态
  2. 若协商失败,则退回到静止状态

所协商的配置选项包括最大帧长、鉴别协议等,可以不使用鉴别、也可以使用口令鉴别协议PAP或挑战握手鉴别协议CHAP。

  • 若通讯双方无需鉴别或鉴别身份成功,则进入网络状态;若鉴别失败则进入终止状态。

进入网络状态后进行NCP配置,PPP链路的两端通过相互交换网络层特定的NCP分组来进行NCP配置。如果在PPP链路上运行的是IP协议,则使用IP控制协议IPCP来对PPP链路的每一端配置IP模块(例如分配IP地址)。

  • 配置完成后就进入打开状态,只要链路处于打开状态就可以进行数据通信。
  • 当出现故障或链路的一端发出终止请求时,就进入终止状态。
  • 当载波停止后则回到静止状态。

END


学习自:湖科大——计算机网络微课堂

这篇关于计算机网络——数据链路层-点对点协议(组成部分、PPP帧格式、透明传输、差错检测、工作状态)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I