点对点协议PPP

在通信链路较差的年代,在数据链路层使用可靠传输协议曾经是一种好方法,比较简单的点对点PPP协议则是目前使用最广泛的数据链路层协议。

PPP协议的特点

互联网用户通过都要连接到某个ISP才能接入到互联网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。如图(图3-9)

ppp协议是IETF在1992年制定的,现在的PPP协议在1994年就已经成为了互联网的正式标准[RFC 1661]。

PPP协议应该满足的需求

IEFE认为,在设计PPP协议的时候就应该从以下方面考虑:

  1. 简单

    数据链路层没有必要提供比IP协议更多的功能,因此,对数据链路层的帧,不需要纠错,不需要排序号,也不需要流量控制。

  2. 封装成帧

    PPP协议必须规定特殊的字符作为帧定界符(即标志一个帧的开始字符和结束字符),以便接收端从收到的比特流中能够准确地找出帧的开始和结束位置。

  3. 透明性

    PPP协议必须保持数据传输的透明性,也就是说,如果数据当中出现了与帧定界符一样的比特组合的时候,就要采取有效的措施来解决这个问题。

  4. 多种网络协议

    PPP协议能够在同一条物理链路上同时支持多种网路层协议的运行,当点对点链路所连接的是局域网或者路由器的时候,PPP协议必须同时支持在链路所连接的局域网或者路由器上运行的各种网络协议。

  5. 多种类型链路

    除了要支持多种网络层协议,还要支持在多种类型上的数据链路上运行。

  6. 差错检测

    PPP协议必须能够对接收端接收到的数据帧进行帧检测,如果出现错误,立即丢弃掉这个错误的帧如果接收到的错误帧不丢弃,就会在网络上继续向前到网络层进行转发,这回白白丢弃掉很多的网络资源。

  7. 检测连接状态

    PPP协议必须要有一种能够自动检测链路是否在正常工作的机制。

  8. 最大传输单元

    PPP协议必须对每一种类型的点对点链路设置最大传输单元MTU的标准默认值(1500字节),这样做是为了促进各种实现之间的可操作性。如果高层协议发送的分组超过了MTU值,PPP就会丢弃掉这样的帧,并返回差错,报告给上层,需要注意的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。

  9. 网络层地址协商

    PPP协议必须提供一种使通信的两个网络层(例如:两个IP层)的实体能够通过协商知道或者能够配置彼此的网络地址。协商的算法应该尽可能的简单,并且能够在所有的请款下该得到结果。这对拨号连接的链路特别的重要,因为如果仅仅在链路层建立了连接而不知道对方的网络层地址,则不能够保证早网络层传输分组

  10. 数据压缩协商

    PPP协议必须能够提供一种方法协商使用数据压缩算法。但是PPP协议并不要求将数据压缩到标准化。

在TCP/IP协议族中,可靠传输由传输层的TCP协议控制,因此数据链里层的PPP协议不需要进行纠错,不需要设置序列号,也不需要进行流量控制。PPP协议不支持多点线路(即一个主站和链路上的多个从站i纪念性通信,它只支持点对点的链路通信。此外,PPP协议支支持全双工链路)

PPP协议的组成

PPP协议有以下三部分

  1. 一个将完整的IP数据报封装到串行链路上。

  2. 一个用来建立,配置和测试数据链路层的链路控制协议LCP(Link Control Protocol)。通信的双方可以协商一些选项。

  3. 一套网络控制协议NCP,其中的每一个协议支持不同的网络层协议,如IP层,DECnet等。

PPP协议的帧格式

各字段的意义

如图

PPP帧的首部和尾部分别为四个字段和两个字段。

  1. 首部的第一个字段和尾部的第二个字段都是标志字段,规定为0x7E(01111110),标志着一个帧的开始或者结束,因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段,如果出现连续两个标志字段,则表示是一个空的PPP帧,应当丢弃。

2.首部当中的地址字段A规定为0xFF,控制字段C规定为0x03(00000011)。(这两个字段没有实际什么用途)

  1. PPP首部的第四个字段是2字节的协议字段

    • 当协议字段为0x0021,代表的是IP数据报;
    • 当协议字段为0xC021,代表的是链路控制协议LCP数据;
    • 当协议字段为0x8021,代表的是网络层的控制数据;
  2. 信息字段的长度是可变的,但不能超过1500字节。

  3. 尾部的第一个字段(2字节)是使用CRC的帧检验序列FCS。

字节填充

当信息字段出现了0x7E这样的比特流,就必须采取必要措施使得不会被接收端认为这是帧定界符号。

当PPP使用异步传输的时候(逐个字符发送),把每一个0x7E字节转变为两个字节序列(0x7D和0x5E),若信息字段中出现了0x7D或者0x5E这样的转义字符,则把0x7D转变为2字节序列(0x7D和0x5D);如果出现了控制字符,例如0x03(在控制字符串表示传输结束),就变成2字节序列(0x7D,0x23)。由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的字节数。但接收端在收到字节后再进行与发送端字节填充相反的交换,就可以正确的恢复出原来的信息。

0比特填充

当PPP使用同步传输的时候(一连串的比特发送),PPP协议采用的是0比特字节填充来实现透明传输。

具体做法是(如上图):在发送端,先扫描整个信息段(通常使用硬件扫描,也可以使用软件,不过比较慢),只要发现有5个连续的1,就立即填入一个0,因此经过这种0比特填充后的数据,就可以保证再信息字段中不会出现帧界定符号(01111110),接收端在接收到一个帧的时候,先找到一个标志字段F(7E)边界,接着再用硬件对其中的比特流进行扫描。每当发现连续的5个1的时候,就把这个连续的5个1后面的0删除掉,以还原成原来的信息比特流(如图3-11),这样就保证了透明传输:在传输的数据比特流过程中可以传送任意组合的比特流,而不会引起帧边界的错误判断。

PPP协议的工作状态

刚才我们讨论了PPP帧的格式和PPP帧是怎么组成的。但是PPP链路到底一开始是怎么被初始化的呢?当用户拨号进入ISP后,就建立的一条从用户个人电脑到ISP的ISP连接,这时,用户个人电脑向ISP发送一系列的链路控制协议LCP分组(封装成多个PPP帧),以便建立LCP连接,这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配了一个临时的IP地址,这样,用户个人电脑就可以成为了互联网上一个有IP地址的主机了。

当用户通信完毕后,NCP就释放网络层连接,收回原来分配出去的IP地址,接着LCP释放数据链路层的连接,最后释放的是物理层的连接。

上述过程可用图3-12的状态图描述:

PPP链路的起始和终止状态永远是图中的链路静止状态,这时候用户电脑和ISP的路由器之间并不存在物理层的连接。

当用户电脑通过调制解调器呼叫路由器的时候(屏幕上的连接按钮),路由器就能检测到调制解调器发出的载波信号,在双方建立了物理层连接之后,PPP就进入了链路建立状态,其目的是建立LCP连接。

这时候LCP开始协商一些配置项,即发送LCP的配置请求帧,这是个PPP帧,其协议字段为LCP的协议代码(0xC021),而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应的一种:

  1. 配置确认帧:所有选项都接受。

  2. 配置否认帧:所有配置都理解但不能接受。

  3. 配置拒绝帧:选项中有的无法识别或者不能接受,需要协商。

协商结束后就建立了LCP链路,接着就进入鉴别状态,在这一状态,只允许传送LCP协议的分组,鉴别协议的分组以及监控链路质量的分组,如果鉴别失败,则转到链路终止状态,若鉴别成功,则进入网络层协议状态

在网络层协议状态中,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层网络层特定的网络控制分组。这个步骤很重要的,因为现在的路由器能够同时支持网络层协议。总之,PPP协议的两端的网络层可以运行不同的网络层协议,但仍然可以使用同一个PPP协议进行通信。

当网络层配置完毕后,链路就进入可进行通信的链路打开状态,链路的两个PPP端点可以彼此发送分组。两个PPP端点还可以发送回送请求LCP分组和回送回答LCP分组,以检查链路的状态。

数据传输结束后,可以由链路的一端发送终止请求LCP分组请求终止链路连接,在收到对方发送过来的LCP分组后,转到链路终止状态,如果链路出现故障,也会从链路打开状态转到链路终止状态,当调制解调器的载波停止后,则返回到链路静止状态。

计算机网络-3-2-点对点协议PPP的更多相关文章

  1. 2016.6.17 计算机网络复习要点之PPP协议

    点对点协议PPP是目前使用最广泛的数据链路层协议. 1.PPP协议的特点: **我们知道因特网用户通常需要连接到某个ISP才能接入到因特网,PPP协议就是用计算机和ISP进行通信时所使用的数据链路层协 ...

  2. 数据链路层-点对点协议PPP

    在通信质量较差的年代,在数据链路层使用可靠传输协议曾是一个好的办法.因此,能实现可靠传输的高级数据链路控制HDLC(High-Level Data Link Control)就称为当时比较流行的数据链 ...

  3. 数据链路层 点对点协议 PPP

    点对点协议 PPP 一. PPP 协议应满足的需求 简单.提供不可靠的数据报服务,比IP协议简单,不需要纠错,不需要序号,不需要流量控制. 工作方式:接收方每收到一个帧就进行CRC校验,如正确就接受该 ...

  4. 点对点协议PPP

    ----- ------

  5. 计算机网络及TCP/IP知识点(全面,慢慢看)

    TCP/IP网络知识点总结 一.总述 1.定义:计算机网络是一些互相连接的.自治的计算机的集合.因特网是网络的网络. 2.分类: 根据作用范围分类: 广域网 WAN (Wide Area Networ ...

  6. 计算机网络 0.初识Internet与TCP/IP协议

    互联网,即因特网,Internet.互联网是一个世界范围的计算机网络.连接了世界上无数的计算设备,这些计算设备为PC.基于Linux的工作站,serverservers等等. 这些设备依据其作用不同可 ...

  7. 计算机网络七层协议模型 “开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)

    计算机网络七层协议模型 作者:Ryan    时间:2013年10月7日 一.物理层(Physical Layer) OSI模型的最低层或第一层,规定了激活.维持.关闭通信端点之间的机械特性.电气特性 ...

  8. 大二逃课总结的1.2w字的计算机网络知识!扫盲!

    本文是我在大二学习计算机网络期间整理, 大部分内容都来自于谢希仁老师的<计算机网络>这本书. 为了内容更容易理解,我对之前的整理进行了一波重构,并配上了一些相关的示意图便于理解. @ 目录 ...

  9. 数据链路层--PPP协议

    数据链路层使用的信道主要有两种类型:点对点信道和广播信道. 点对点 路由器在转发分组时只使用了下面的三层. 链路是从一个结点到相邻结点的一段物理线路,中间没有其他交换结点. 必须有一些必要的通信协议来 ...

随机推荐

  1. 踩坑系列《十三》解决时间戳long转换int溢出(即转换值为负数)

    最近业务需求,需要使用到 int 类型的时间戳,所以在使用时间戳的时候,由于java自带的 System.currentTimeMillis() 返回的类型是long,强行转换一波的话,是会出现数据溢 ...

  2. 11.4.2 LVS—NAT

    Virtual Server via NAT(VS-NAT) 用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,, ...

  3. Linux Bash命令杂记(tr col join paste expand)

    Linux Bash命令杂记(tr col join paste expand) tr命令 tr命令可以将输入的数据中的某些字符做替换或者是作删除 tr [-ds] STR d: 删除输入数据的中的S ...

  4. 第29篇-调用Java主类的main()方法

    在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...

  5. bzoj4552排序(线段树,二分)

    题目大意 给定一个长度为n的序列,有m个操作,操作包括两种: \(0\ l\ r\)区间[l,r]的数字升序排序 \(1\ l\ r\)区间[l,r]的数字降序排序 最后询问在q位置上的数是多少? 其 ...

  6. 告别Vuex,发挥compositionAPI的优势,打造Vue3专用的轻量级状态

    Vuex 的遗憾 Vuex 是基于 Vue2 的 option API 设计的,因为 optionAPI 的一些先天问题,所以导致 Vuex 不得不用各种方式来补救,于是就出现了 getter.mut ...

  7. 重学c#系列——字典(十一)

    前言 重学c#系列继续更新,简单看一下字典的源码. 看源码主要是解释一下江湖中的两个传言: 字典foreach 顺序是字典添加的顺序 字典删除元素后,字典顺序将会改变 正文 那么就从实例化开始看起,这 ...

  8. Java(19)接口知识及综合案例

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201629.html 博客主页:https://www.cnblogs.com/testero ...

  9. Just My Code debugging

    Just My Code debugging During a debugging session, the Modules window shows which code modules the d ...

  10. css实现水平-垂直居中的方法

    * 定宽居中: 1.absolute+负margin 2.absolute+margin:auto 3.absolute--calc 4.min-height:100vh + flex + margi ...