zoukankan      html  css  js  c++  java
  • 链路层PPP协议

    在博客上看到很多关于PPP协议的总结,写的都很官方,感觉都是从书上面抄来的,我今天就加入自己的理解:

    我们都知道,数据链路层是两个网络节点之间的通信,实际上局域网内的通信也属于数据链路层。因为并没有通过路由器进入另一个网络,所以不属于网络层。

      PPP协议特点:

      1、简单

      PPP协议简单,只是进行帧的发送和检错,并不进行纠错、序号和流量控制,它并不提供可靠的数据服务。

      2、封装成帧

      PPP协议规定特殊的字符作为定界符,并将其加到一个帧的开始和结束,并在接收端检测定界符来判断一个帧的结束和开始。

      3、透明性

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

      4、多种网络层协议

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

      5、多种类型链路

      除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的或并行的,同步的或者异步的,低速的或高速的,电的或光的,交换的或非交换的点对点链路。

      6、差错检验

      PPP协议必须能够对接收端收到的帧进行检测,并立即丢掉有差错的帧。若在数据链路层不进行差错检测,那么已出现的差错的无用帧就还要在网络中继续传送,因而会白白浪费许多宝贵的网络资源。

      7、检测连接状态

      PPP协议必须有一种机制能够及时自动检测出链路是否处于正常的状态。当出现故障的链路隔了一段时间后又重新恢复了正常工作时,就特别需要这种及时检测的功能。

      8、最大传送单元

      PPP协议必须对每一种类型的点对点链路设置最大的传送单元MTU的标准默认值。这样做的目的是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过了MTU的数值,PPP协议就要丢弃这样的帧,并且返回错误。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。

      9、网络层地址协商

      PPP协议必须提供一种机制是通信的两个网络层的实体通过协商知道能够配置彼此的网络层地址。协商的算法应尽可能的简单,并且能够在所有的情况下得出协商的结果。这对拨号连接的链路特别的重要,因为仅仅在链路层建立了连接而并不知道对方网络层地址时,还不能保证网络层能够传递分组。

      10、数据压缩协商

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

      PPP协议的组成

      PPP协议的组成由三部分组成:

      (1)一个将IP数据报封装到串行链路的方法。PPP协议既支持异步链路(无奇偶的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分,这个信息部分的长度受最大传送单元MTU的限制。(这一部分就是将网络层来的IP数据报,加上首部和尾部,在链路间传输)

      (2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol),通信的双发可以协商一些选项。建立物理链路,只有在建立物理链路的前提下,才能进行相应的配置)

      (3)一套网络控制协议NCP,其中每一个协议支持不同的网络层协议(配置网络IP地址,之后便可以进行正常的通信了)

      1、PPP协议的帧的格式

      字段的意义

      

      PPP帧的格式如图所示,PPP帧的首部和尾部分别有四个字段和两个字段。

      首部的第一个字段和尾部的最后一个字段是标志字段F,规定为0x7E,标志字段表示一个帧的开始和结束,标志字段就是帧的定界符。连续两帧之间只需要一个标志字段。(我的理解就是如果我要发送两个连续的帧的话,我发送的第二个帧的尾部定界符是第二个帧的首部定界符)如果出现两个连续的标志字段,那么就表示这个帧是个空的帧,应当丢弃。首部中的地址字段A规定为0xFF,控制字段为0x03(不知道多加这两个字节有什么意义,完全没必要啊,不知道为什么出现这种情况)

      PPP首部的第四个字段是2个字节的协议字段,当协议字段为0x0021时,PPP帧的信息字段就是IP数据报,当为0xC021时,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这个网络层的控制数据。(PPP协议的三个功能,后面的信息字段代表什么类型的信息,这个字段就填写什么,实际上,这种工作模式在单片机里面很常见)

      信息字段的长度是可变的,但是不超过1500字节。

      尾部的第一个字段是二字节,是使用CRC的帧检验序列FCS。

      2.字节填充

      当信息字段中出现和标志字段一样的比特(0x7E)组合时,即必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

      当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充,RFC1662规定的的填充方法:

      (1)把信息字段中出现的么一个0x7E字节转变为2字节序列(0x7D,0x5E)。

      (2)若信息中出现一个0x7D的字节,则把它转化为0x7D,0x5D

      (3)若信息中出现了ASCII码中的控制字符,即数值小于0x20的字符,则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03,在控制字符中是传输结束ETX,需要将它转变为2字节序列0x7D,0x31

      由于在发送端进行了字节的填充,因此在链路上传送的信息字节数就超过了原来的信息字节数,在接收端收到的数据后再进行与发送端字节填充相反的变换,就可以正确的恢复原来的信息了。

      零比特填充

      PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。

      零比特填充的具体做法是:在发送端,先扫描整个信息字段,通常使用硬件来实现,但也可应软件来实现,软件实现相对来说较慢些。只要发现有5个连续的1,就立即填充一个0,经过这种零比特填充后,就保证在信息字段中不会出现6个连续的1。接收端在收到一个帧时,先找到标志字段F以确定一帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现五个连续的1时,就把这五个连续的1后面的0删除,以还原原来的信息比特流。这样就保证了透明传输,在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对真边界错误判断。

      以上两种填充都是为了保证PPP协议的透明性

      4、PPP协议的工作状态

      当用户PC机拨号接入ISP后,就建立了一条从用户PC机到ISP的物理连接,这时,用户PC机向ISP发送一序列的LCP分组,封装成PPP帧,以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC机分配了一个临时的IP地址,这样,用户PC机就称为了因特网上的一个有IP地址的主机了。当用户通信完毕后,NCP释放网络层的连接,回收原来分配出去的IP地址,接着,LCP释放数据链路层连接,最后释放的是物理层的连接。

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

      

      PPP链路的起始和终止状态都是链路静止状态,这种状态下,用户PC机和ISP的路由器之间并不存在物理层的连接。

      当用户的PC机通过调制解调器呼叫路由器时,路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入了链路建立的状态,其目的是建立链路层的LCP连接。

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

      1.配置确认帧-所有选项都接收

      2.配置否认帧-所有选项都理解但是不能接收。

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

      LCP配置选项包括链路上的最大帧长,所使用的鉴别协议的规约,以及不适用PPP帧中的地址和控制字段。协商结束后双方就建立了LCP链路,接着进入“鉴别“状态,在这一状态下,只允许传送LCP分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议,则需要发起通信的一方发送身份标识符和口令。系统允许用户重试多次。如果需要更好的安全性,则可使用复杂的口令握手鉴别协议,若身份鉴别失败,则转到链路终止状态,若鉴别成功,则进入到网络层协议状态。

      在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤很重要,因为现在的路由器都能够同时支持多种的网络层协议。总之,PPP协议的两端可以运行不同的网络层协议,但仍然可以使用同一个PPP协议进行通信。如果在PPP链路上运行的是IP协议,则对PPP链路的每一段配置IP协议模块,IPCP分组也封装成PPP帧在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。当网络层配置完毕后,链路就进入可进行数据通信的链路打开状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可以发送会送请求LCP分组和回送回答LCP分组,以检查链路的状态。数据传输结束后,可以由链路的一段发送终止请求LCP分组请求终止链路连接,在接收到对方发送来的终止确认LCP分组后,就转到链路终止状态。如果链路出现故障,则也会从链路打开到链路终止状态。当调制解调器的载波结束后,则回到链路静止状态。

     其实以上过程看起来很复杂,但是如果和我们的生活联系起来,就会变得很简单,我们大家都有上网的经历,首先你要在你的电脑上插上网线,然后打开电脑上的登录软件,输入账号和密码,点击连接,等待连接。。。

      当你点击了连接之后,实际上就是物理层建立连接的过程,首先电脑会确定你的网线是不是连接好的,物理连接没有问题,进行下一步

      电脑开始向ISP发送LCP,ISP是否接受请求,并且验证你的身份,身份正确,接受你的请求,进入下一步

      网络层根据实际情况,配置电脑IP地址,在Windows下,你也可以通过设置,来自己设置电脑的IP地址,不接受网络层的随机分配,而这些都是通过发送NCP来实现的

      

  • 相关阅读:
    SEO搜索引擎
    SEO
    编程的智慧
    ES6编程规范
    面试题集
    motto
    motto
    JS
    motto
    Linux
  • 原文地址:https://www.cnblogs.com/PIRATE-JFZHOU/p/7894671.html
Copyright © 2011-2022 走看看