理解点对点协议:构建高效网络通信

news2025/1/8 5:53:14

在这里插入图片描述

在通信线路质量较差的年代,能够实现可靠传输的高级数据链路控制(High-level Data Link Control, HDLC)协议曾是比较流行的数据链路层协议。HDLC是一个较复杂的协议,实现了滑动窗口协议,并支持点对点和点对多点两种连接方式。然而,对于现在误码率已非常低的点对点有线链路,HDLC协议已较少使用,而简单得多的点对点协议(Point-to-Point Protocol, PPP)则是目前使用最广泛的点对点数据链路层协议。

互联网用户通常需要连接到某个ISP才能接入互联网。用户计算机和ISP进行通信时,所使用的数据链路层协议通常就是PPP。PPP是IETF在1992年制定的,经过1993年和1994年的修订,现在PPP已成为互联网的正式标准(RFC1661,RFC1662)。

3.2.1 PPP的特点

PPP的主要特点如下

  1. 简单:数据链路层的PPP非常简单。接收方每收到一个帧,就进行CRC(循环冗余校验)。如果CRC正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务。如需要可靠传输,则由传输层来完成。
  2. 封装成帧:PPP规定了特殊的字符作为帧定界符,使接收端能准确地找出帧的开始和结束位置。
  3. 透明性:PPP能够保证透明传输
  4. 多种网络层协议和多种类型链路:PPP能够在同一条物理链路上同时支持多种网络层协议(如IP和IPX)的运行,并能够在多种类型的点对点链路上运行,例如拨号电话线路、SONET/SDH链路、X.25连接或ISDN电路等。
  5. 差错检测:PPP能够对接收端收到的帧进行差错检测,并立即丢弃有差错的帧。
  6. 检测连接状态:PPP具有一种机制,能够及时(不超过几分钟)自动检测链路是否处于正常工作状态。
  7. 最大传送单元(MTU) :PPP对每一种类型的点对点链路设置MTU的标准默认值。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错
  8. 网络层地址协商:PPP提供了一种机制,使通信的两个网络层实体能够通过协商知道或配置彼此的网络层地址。

3.2.2 PPP的组成

PPP有三个组成部分

  1. 封装方法:PPP支持面向字符的异步链路和面向比特的同步链路。IP数据报在PPP帧中作为数据部分被传输,数据部分的长度受MTU的限制。
  2. 链路控制协议(LCP) :用于建立、配置和测试数据链路连接。通信双方可协商一些选项,RFC1661中定义了11种LCP分组类型。
  3. 网络控制协议(NCP) :每个协议支持不同的网络层协议,如IP、OSI的网络层协议、DECnet和AppleTalk等。

3.2.3 PPP的帧格式

PPP的帧格式如图3-19所示。PPP帧的首部和尾部分别为四个字段和两个字段。

在这里插入图片描述

  • 各字段的意义

PPP帧的首部第一个字段和尾部第二个字段都是标志字段F,规定为0x7E。标志字段表示一个帧的开始或结束。连续两帧之间只需要用一个标志字段,如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。

首部中的地址字段A规定为0xFF,控制字段C规定为0x03。这两个字段实际上并没有携带PPP帧的信息。

PPP首部的第四个字段是2字节的协议字段,指明信息字段承载的是哪个协议的分组。当协议字段为0x0021时,信息字段是IP数据报;0xC021表示信息字段是PPP链路控制协议(LCP)的分组;0x8021表示信息字段是网络控制协议(NCP)的分组。

信息字段的长度是可变的,不超过1500字节。尾部的第一个字段是使用CRC的帧检验序列(FCS)。

  • 透明传输

当信息字段中出现和标志字段一样的比特组合(0x7E)时,必须采取措施使这种比特组合不出现在信息字段中。在面向字符的异步传输链路上,使用字节填充法实现透明传输,转义符定义为0x7D。填充方法如下:

  1. 将信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
  2. 若信息字段中出现一个0x7D字节,则转变为2字节序列(0x7D,0x5D)。
  3. 若信息字段中出现ASCII码的控制字符,则在该字符前面添加一个0x7D字节,并对该字符的编码加以改变。

在面向比特的同步传输链路上,采用零比特填充方法来实现透明传输。

在这里插入图片描述

3.2.4 PPP的工作状态

在这里插入图片描述

PPP链路的起始和终止状态是“静止”状态,此时物理层连接不存在。在检测到调制解调器的载波信号,并建立物理层连接后,PPP进入“链路建立”状态。LCP开始协商一些配置选项,发送LCP的配置请求帧。这时,链路的另一端可以发送以下几种响应:

  1. 配置确认帧(Configure-Ack) :所有选项都接受。
  2. 配置否认帧(Configure-Nak) :所有选项都理解但不能接受。
  3. 配置拒绝帧(Configure-Reject) :有些选项无法识别或不能接受,需要协商。

协商结束后进入 “鉴别”状态,若通信双方鉴别身份成功,则链路进入“网络”状态,即PPP链路的两端互相交换网络层特定的网络控制分组。如果在PPP链路上运行的是IP,则使用IP控制协议(IPCP)来配置IP模块。网络层配置完毕后,链路进入可进行数据通信的“打开”状态。

数据传输结束后,链路的一端发出终止请求LCP分组,链路则转到“终止”状态。载波停止后,链路回到“静止”状态。

补充内容

  • PPP over Ethernet(PPPoE) :PPP能够适应多种类型的链路,其中一个典型例子是1999年公布的在以太网上运行的PPP,即PPP over Ethernet(PPPoE)。PPPoE使ISP可以通过DSL、光纤等宽带接入技术为用户提供接入服务。PPPoE的典型应用场景是家庭宽带用户通过DSL调制解调器连接到ISP。

  • 差错检测:PPP能够对接收端收到的帧进行差错检测(但不进行纠错),并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧,就还要在网络中继续向前转发,白白浪费网络资源。

  • 网络层地址协商:PPP提供了一种机制,使通信的两个网络层(如两个IP层)实体能够通过协商知道或配置彼此的网络层地址。这对拨号连接的链路特别重要,因为在链路层建立了连接后,用户需要配置一个网络层地址,才能在网络层传送分组。

  • 最大传送单元(MTU) :PPP对每一种类型的点对点链路设置MTU的标准默认值。如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。需要强调的是,MTU是数据链路层的帧可以承载的数据部分的最大长度,而不是帧的总长度。

  • LCP配置选项:LCP配置选项包括链路上的最大帧长、所使用的鉴别协议(Authentication Protocol)的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这两个字节)。

  • NCP的作用:NCP的作用是对PPP链路的每一端配置网络层模块(如分配IP地址)。和LCP分组封装成PPP帧一样,NCP分组也封装成PPP帧在PPP链路上传送。

总结

通过本文的详细解析,你应该已经对PPP协议有了深入的了解,包括其特点组成部分帧格式工作状态应用场景。PPP协议的灵活性适应性使其成为点对点数据链路层协议的首选。希望这些内容能为你的学习和工作提供有力的支持。计算机网络是一个不断发展的领域,保持学习和探索的热情是进步的关键。如果你有任何疑问或需要进一步的讨论,欢迎随时联系我。祝你学习愉快,前程似锦!
图文来源:《计算机网络教程》

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

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

相关文章

SpringBoot实现简单AI问答(百度千帆)

第一步&#xff1a;注册并登录百度智能云&#xff0c;创建应用并获取自己的APIKey与SecretKey&#xff0c;参考网址&#xff1a; 点击去百度智能云 第二步&#xff1a;引入千帆的pom依赖 <dependency><groupId>com.baidubce</groupId><artifactId>q…

我的FPGA

1.安装quartus 2.更新usb blaster驱动 3.新建工程 1.随便找一个文件夹&#xff0c;里面新建demo文件夹&#xff0c;表示一个个工程 在demo文件夹里面&#xff0c;新建src&#xff08;源码&#xff09;&#xff0c;prj&#xff08;项目&#xff09;&#xff0c;doc&#xff…

基于单片机的温控光控智能窗帘设计探讨

摘 要&#xff1a; 文章使用的核心原件是 AT89C52 单片机&#xff0c;以此为基础进行模块化的设计&#xff0c;在整个设计中通过加入光检测模块和温度检测模块&#xff0c;从而对室内的温度和光照强度进行检测&#xff0c;然后将检测得到的数据传输给单片机&#xff0c;单片机…

Mosh|内连接、外连接、左连接、右连接(未完)

下图取自菜鸟教程&#xff0c;侵权删&#xff5e; 一、内连接&#xff1a;Inner Joins 模版&#xff1a;SELECT * FROM A JOIN B ON 条件 含义&#xff1a;返回A与B的交集&#xff0c;列为AB列之和 练习&#xff1a;将order_items表和products表连接&#xff0c;返回产品id和…

成为编程大佬!!——数据结构与算法(1)——算法复杂度!!

前言&#xff1a;解决同一个程序问题可以通过多个算法解决&#xff0c;那么要怎样判断一个算法的优劣呢&#xff1f;&#x1f914; 算法复杂度 算法复杂度是对某个程序运行时的时空效率的粗略估算&#xff0c;常用来判断一个算法的好坏。 我们通过两个维度来看算法复杂度——…

记录docker部署好golang web项目后浏览器访问不到的问题

部署好项目&#xff0c;docker ps -a查看没有任何问题 端口映射成功&#xff0c;但是浏览器就是访问不到&#xff0c;排查后发现犯了个错&#xff0c;注意&#xff0c;项目配置文件中的端口&#xff1a; 其实也就是你项目中监听的端口&#xff1a; 必须和容器端口一致&#x…

Linux——多线程(四)

前言 这是之前基于阻塞队列的生产消费模型中Enqueue的代码 void Enqueue(const T &in) // 生产者用的接口{pthread_mutex_lock(&_mutex);while(IsFull())//判断队列是否已经满了{pthread_cond_wait(&_product_cond, &_mutex); //满的时候就在此情况下等待// 1.…

看影视学英语(假如第一季第一集)

in the hour也代表一小时吗&#xff1f;等同于in an hour&#xff1f;

Effective C++笔记之二十一:One Definition Rule(ODR)

ODR细节有点复杂&#xff0c;跨越各种情况。基本内容如下&#xff1a; ●普通&#xff08;非模板&#xff09;的noninline函数和成员函数、noninline全局变量、静态数据成员在整个程序中都应当只定义一次。 ●class类型&#xff08;包括structs和unions&#xff09;、模板&…

独立开发者系列(23)——Linux掌握小结

只要开发系统&#xff0c;就绕不开使用Linux服务器 &#xff0c;而Linux除了使用BT面板进行初级管理&#xff0c;很多稍微高级点的管理&#xff0c;还是需要命令行进行的。这里总结在不需要精通的情况下&#xff0c;掌握常见命令和环境的相关配置。 &#xff08;1&#xff09…

Linux学习之网络配置问题

Linux学习——那些我们网络配置遇到过的问题&#xff1f;ping不通百度&#xff1f;XShell连接不上&#xff1f;&#xff08;超详细&#xff09; &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感…

HTML 标签简写及全称:表格内容将通过JavaScript动态生成

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML 标签简写及全称</title><style>…

振弦采集仪在大型工程安全监测中的作用与意义

振弦采集仪在大型工程安全监测中的作用与意义 河北稳控科技振弦采集仪是一种用于测量振动频率的仪器&#xff0c;常用于大型工程的安全监测中。它通过采集振弦的振动信号&#xff0c;可以对工程结构的振动特性进行实时监测和分析。振弦采集仪在大型工程安全监测中具有重要的作…

【目标跟踪】CoTracker 环境配置

配置 CoTracker 环境 首先下载 conda&#xff0c;然后安装虚拟环境。 1.创建环境&#xff1a;如果环境不存在&#xff0c;你需要创建一个新的 conda 环境。可以使用以下命令创建名为 cotracker 的环境&#xff1a; conda create -n cotracker python3.x 其中 3.x 是你想要安…

C语言程序题(一)

一.三个整数从大到小输出 首先做这个题目需要知道理清排序的思路&#xff0c;通过比较三个整数的值&#xff0c;使之从大到小输出。解这道题有很多方法我就总结了两种方法&#xff1a;一是通过中间变量比较和交换&#xff0c;二是可以用冒泡排序法&#xff08;虽然三个数字排序…

【UE5.3】笔记9

1、如何将BSP笔刷转换为静态网格体&#xff1f; 在笔刷的细节的高级里面找到创建静态网格体&#xff1b; 2、如何将自己创建的一个由多个网格体或其他组件组合成的道具转换为个整体即蓝图类&#xff1f;---即把多个Actor转换成蓝图类 选中所要整合的对象&#xff0c;要全选中…

js原型和类---prototype,__proto__,new,class

原型和原型链 在js中&#xff0c;所有的变量都有原型&#xff0c;原型也可以有原型&#xff0c;原型最终都指向Object 什么是原型 在js中&#xff0c;一个变量被创建出来&#xff0c;它就会被绑定一个原型&#xff1b;比如说&#xff0c;任何一个变量都可以使用console.log打…

数据结构 Java DS——链表部分经典题目 (1)

前言 笔者计划在暑假啃完JavaDS,Mysql的内容当然也会继续更 这次给读者们分享的是链表的几个比较典型的题目,关于如何手搓一个链表,笔者还在筹划中, 毕竟链表的种类也有那么多,但是在下面的题目中,只有单向链表 题目一 : 反转链表 206. 反转链表 - 力扣&#xff08;LeetCode…

文献笔记|综述|When Large Language Model Meets Optimization

When Large Language Model Meets Optimization 题目&#xff1a;当大型语言模型遇到优化时 作者&#xff1a;Sen Huang , Kaixiang Yang , Sheng Qi and Rui Wang 来源&#xff1a;arXiv 单位&#xff1a;华南理工大学 文章目录 When Large Language Model Meets Optimization…

java:字符缓冲流特有功能

BufferedWriter&#xff1a; void newLine&#xff08;&#xff09;&#xff1a;写一行行分隔符&#xff0c;行分隔符字符串由系统属性定义 BufferedReader&#xff1a; public String readLine&#xff08;&#xff09;&#xff1a;读一行文字&#xff0c;结果包含行的内容的字…