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

news2024/11/24 18:33:02

文章目录

    • PPP 帧
      • PPP帧的格式
      • PPP帧的透明传输
        • 面向字节的异步链路
        • 面向比特的同步链路
      • PPP帧的差错检测
    • PPP 的工作状态

点对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议,用于在两个节点之间进行数据传输。它通常用于建立在串行线路上的点对点连接,例如通过电话线或光纤的连接。

PPP 将上层交付下来的协议数据单元 PDU 封装成帧,为支持不同的网络层协议,PPP 协议包含了一套网络控制协议 NCP链路控制协议 LCP,用于建立、配置以及测试数据链路的连接。PPP 协议能够在多种类型的点对点链路上运行,如面向字节的异步链路,面向比特的同步链路。

PPP 帧

PPP帧的格式

PPP 帧是在 PPP 点对点协议中用于传输数据的基本单元。它由帧首部、数据载荷和帧尾部三个部分组成:

![[PPP.png]]

  • 标志(Flag)字段:PPP帧的定界符,取值为0x7E

  • 地址(Address)字段:取值为0xFF

  • 控制(Control)字段:取值为0x03

  • 协议(Protocol)字段:其值用来指明帧的数据载荷应向上交付给哪个协议处理。

    • P 取值为 0x0021 时,数据载荷封装的是 IP数据报
    • P 取值为 0XC021 时,数据载荷封装的是 LCP分组
    • P 取值为 0X8021 时,数据载荷封装的是 NCP分组
  • 帧检验序列(Frame Check Sequence,FCS)字段:其值是使用[[数据链路层概述#循环冗余校验|循环冗余校验 CRC]] 计算出的检错码。

PPP帧的透明传输

PPP 帧的首部和尾部,均包含一个帧定界符,若帧的数据载荷中恰好包含有帧定界符,即 0x7E0111 1110

面向字节的异步链路

PPP 协议使用的是面向字节的异步链路,使用字节填充来实现透明传输,将帧定界符看作取值为0x7E的一个字符:

发送方

  1. 将数据载荷中出现的每一个 0x7E 减去 0x20(相当于异或 0x20),然后在其前面插入转义字符 0x7D

  2. 若数据载荷中原来就含有 0x7D,则把每一个 0x7D 减去 0x20,然后在其前面插入转义字符 0x7D

  3. 将数据载荷中出现的每一个 ASCII 码控制字符(即数值小于0x20的字符)加上 0x20(相当于异或 0x20,将其转换成非控制字符),然后在其前面插入转义字符 0x7D

接收方:进行与发送方相反的变换,就可以正确地恢复出未经过字节填充的原始数据载荷。

面向比特的同步链路

面向比特的同步链路使用零比特填充来实现透明传输,将帧定界符看作取值为0111 1110 的 8 比特定位串:

发送方:对帧的数据载荷进行扫描(一般由硬件完成),每出现 5 个连续的比特1,则在其后填充一个比特0

接收方:对帧的数据载荷进行扫描,每出现 5 个连续的比特1时,就把其后的一个比特0删除

PPP帧的差错检测

PPP 帧尾部的帧检验序列 FCS 字段,其值是使用[[数据链路层概述 循环冗余校验 CRC 计算出的检错码,CRC 采用的生成多项式为 CRC - CCITT = X 16 + X 12 + X 5 + 1 X^{16}+X^{12}+X^5+1 X16+X12+X5+1

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

PPP 的工作状态

以用户主机拨号接入因特网服务提供者 ISP 的拨号服务器的过程为例:PPP 链路的开始和结束状态都是 静止 状态

在这里插入图片描述

PPP 的工作状态通常可以分为三个阶段:链路建立网络层协议配置数据传输。以下是 PPP 的工作状态:

  1. 链路建立(Link Establishment)

    • 在这个阶段,当检测到载波并建立物理层连接之后,PPP 使用链路控制协议(LCP)来建立、配置和测试数据链路连接。

    • 在通信的起始阶段,发送方发送 LCP 配置请求,接收方收到请求后发送 LCP 配置应答,进行链路参数的协商和确认。若协商成功,进入认证(鉴别)过程;若协商失败,回到静止状态。

    • 这个阶段还包括认证过程,如果配置了认证机制的话,发送方可能会要求接收方进行认证。

  2. 网络层协议配置(Network Layer Protocol Configuration)

    • 一旦链路建立完成,PPP 使用网络控制协议(NCP)来协商和配置网络层协议的选项。

    • 例如,对于 IP 协议,发送方发送 IPCP 配置请求,接收方收到请求后发送 IPCP 配置应答,协商 IP 地址、DNS 服务器等配置信息。

  3. 数据传输(Data Transmission)

    • 在链路建立和网络层协议配置完成后,PPP 进入数据传输阶段。

    • 在这个阶段,PPP 将封装好的网络层数据帧通过已建立的链路进行传输。

    • 发送方将数据封装成 PPP 帧并发送,接收方接收到帧后进行解封装并将数据交给上层网络协议进行处理。

在数据传输阶段,PPP 还会持续进行链路的检测和维护,以确保链路的稳定性和可靠性。如果链路出现故障或中断,PPP 将会尝试重新建立连接或进行相应的错误处理。

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

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

相关文章

10.12面试题

代理模式 为什么需要代理模式? 1.中介隔离 客户类不想或者不能直接引用委托对象,需要使用代理类作为中介,需要代理类和委托对象都实现同一接口 2.满足开闭原则 若客户类需要委托对象新增某些功能,就需要代理类在调用委托对象…

【ProtoBuf】基础使用与编译

文章目录 ProtoBuf的使用基本使用指定proto3语法package声明符定义消息(message)定义消息字段字段唯一编号 编译序列化与反序列化序列化与反序列化使用 ProtoBuf的使用 流程如下: 编写 .proto文件,定义结构对象(message)及属性内容使用 protoc 编译器编…

常用类(二)--String类的简单总结

文章目录 1.基本介绍1.1创建对象1.2找到对应下标的字符1.3找到对应字符的下标1.4指定位置开始遍历1.5反向进行遍历1.6大小写之间的转换1.7字符串转换为数组1.8元素的替换1.9字符串的分割1.10字符串的截取 2.StringBuilder和StringBuffer2.1 StringBuilder的引入2.2面试题目 1.基…

拆解学习【无线充,EMMC,锂电池电量计,OTA】(二)

主要学习到了:无线充,EMMC,手表CPU方案,锂电池电量计,OTA。 无线充电功能是产品的核心卖点之一,充电头网通过拆解发现,手表内部使用恒玄BES2500BP智能手表单芯片解决方案,内置四核C…

BetterZip怎么导入文件进行压缩?苹果解压软件怎么用?

BetterZip作为苹果系统常用的压缩文件软件之一,具有使用方便、压缩导出格式多、兼容性强等特点。我们要使用BetterZip进行文件压缩时,首先需要将文件导入到BetterZip才可以。 关于BetterZip的文件导入方式,主要有几种,今天我来给…

垂直AI大模型行业全景分析及发展趋势研究报告

2024-10-12调研咨询机构环洋市场咨询出版的【全球垂直AI大模型行业总体规模、主要厂商及IPO上市调研报告,2024-2030】只要调研全球垂直AI大模型总体规模,主要地区规模,主要企业规模和份额,主要产品分类规模,下游主要应…

每日一题|3158. 求出出现两次数字的 XOR 值|哈希

题目给的范围很小,50以内,所以什么数据结构都可以。 这里采用set来维护访问过的数字,利用哈希来提升时间效率。 class Solution:def duplicateNumbersXOR(self, nums: List[int]) -> int:visited set()l []res 0for i in nums:if i i…

游戏如何应对薅羊毛问题

在大众眼里,“薅羊毛”是指在电商领域,“羊毛党”利用平台、商家的促销规则,低价获取商品和服务的行为。如前不久“小天鹅被一夜薅走7000万”的案例震惊全网。 然而实际上,“薅羊毛”现象不仅存在于电商场景,在游戏中…

【Unity】TextMeshPro 3.0.9无法显示emoji表情问题

需要下载TextMeshPro 3.2.x-pre.xxx版本,重新生成Sprite Asset文件解决 注意:若Package Manager没有搜到pre版本,那么可以去github下载到本地,再解压后,将文件夹移动到工程Packages文件夹下,然后打开Packa…

基于SpringBoot的体育商城购物系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

React复习

文章目录 常用的HooksuseStateuseReduceruseRefuseContextuseMemouseCallbackuseEffect 组件通信Props(属性)Ref(引用)Context(上下文)State(状态)回调函数Event Bus(事件…

Python WebSocket 的原理及其应用

Python WebSocket 的原理及其应用 在现代 Web 开发中,实时通信成为了越来越多应用的重要组成部分。尤其是像聊天应用、实时数据更新、在线游戏等场景,服务器与客户端之间的即时数据传输需求非常迫切。在传统的 HTTP 协议中,通信往往是基于请…

在docker的容器内如何查看Ubuntu系统版本

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境: docker 一、问题描述 由于 lsb_release -a 只能查看自己电脑(宿主机)的系统版本,如果在docker的容器内又应该如何查看Ubuntu系统版本呢&#xff…

GoPro 解决方案:恢复 GoPro 数据、GoPro 重置为出厂设置

在本文中,我们将向您展示如何轻松将 GoPro 相机重置为出厂设置以及如何从已重置为出厂设置的 GoPro 中恢复丢失的数据。 第 1 部分:将 GoPro 重置为出厂设置后恢复丢失的数据。 ​在将 GoPro 重置为出厂设置之前,最好对视频进行完整备份。但…

URDF统一机器人建模语言

统一机器人建模语言 URDF(Unified Robot Description Format)统一机器人描述格式,URDF使用XML格式描述机器人文件。 我们从下面四个方面介绍URDF: URDF的组成介绍 URDF-Link介绍 URDF-Joint介绍 创建一个简单的URDF…

大数据新视界 --大数据大厂之差分隐私技术在大数据隐私保护中的实践

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

ribbon和nginx负载均衡图解

通俗来说 nginx: 规定一个地址v(比如v代理了地址a,b,c,d且他们都实现了同一个服务e),然后当我们的请求想要实现e服务而去请求v的时候,v实际上就会从a,b,c,d中选一个来让他们给请求者提供服务。 ribbon: …

[Halcon矩阵] 通过手眼标定矩阵计算相机旋转角度

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…

idear2024-Springcloud项目一个服务创建多个实例/端口

国庆重装系统,安装了最新版的idear,结果带来一堆bug。 解决办法: 初始配置: 初始状态: 1.点击右上角3个点,再点击编辑 2.点击修改选项 3.点击允许多个实例 可以发现下面多了个选项 点击:应用-》确定 4.修…

windows自动化(一)---windows关闭熄屏和屏保

电脑设置关闭屏幕和休眠时间不起作用解决方案 一共三个方面注意: 一、关闭屏保设置: 二、电源管理设置 三、关闭盖子不做操作: 第一点很重要,就算二三都做了,一没做,照样不行。