详解PPP和PPPoE的工作原理

news/2024/11/25 21:19:44/
转载前言
----------------------------
广工目前的校园网认证方式是基于PPPoE的(没错, 客户端Dr.COM 5.2.1(p)中的p就是指的这个), PPPoE和PPP关系紧密, 但又不是简单的包含与被包含的关系, 故而转载一篇好文分享给同学们。(注意这里的PPP和PPTP(Point to Point Tunneling Protocol),即点对点隧道协议,是不同的概念,不要混淆。)

PPP协议简介
----------------------------
PPP: Point-to-Point Protocol,链路层协议。用户实现点对点的通讯。

PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。具体包含这样几个部分:链路控制协议LCP(Link Control Protocol);网络控制协议NCP(Network Control Protocol);认证协议,最常用的包括口令验证协议PAP(Password Authentication Protocol)和挑战握手验证协议CHAP(Challenge-Handshake Authentication Protocol)。

帧格式与HDLC相似,不同的是PPP是面向字符,HDLC是面向位的。PPP帧格式如下:

看到总共多了8个字节,其中首尾字节都是帧的起始和结束标志位,A表示地址,C表示控制。
协议的两个字段,表示后面信息部分的数据协议是什么,包括:
0x0021——信息字段是IP数据报
0xC021——信息字段是链路控制数据LCP
0x8021——信息字段是网络控制数据NCP
0xC023——信息字段是安全性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段是安全性认证CHAP


PPP协议的工作过程
---------------------------------
PPP通讯是两个端点之间的通讯,每一端必须首先发送LCP packets数据来设定和测试数据链路,当链路建立后,peer才可以被认证,认证完成后,再通过发送NCP packets来选定网络层协议,这些后续的通讯就可以在网络层进行了。

具体的过程如下:
1.  链路静止状态 :链路一定开始并结束于这个阶段。当一个外部事件(例如载波侦听或网络管理员设定)指出物理层已经准备就绪时,PPP将进入链路建立阶段。在这个阶段,LCP自动机器将处于初始状态,向链路建立阶段的转换将给LCP自动机器一个UP事件信号。

2.  链路建立状态 :LCP用于交换配置信息包(Configure packets),建立连接。一旦一个配置成功信息包(Configure-Ackpacket)被发送且被接收,就完成了交换,进入了LCP开启状态。所有的配置选项都假定使用默认值,除非被配置交换所改变。有一点要注意:只有不依赖于特别的网络层协议的配置选项才被LCP配置。在网络层协议阶段,个别的网络层协议的配置由个别的网络控制协议(NCP)来处理。在这个阶段接收的任何非LCPpackets必须被silentlydiscarded(静静的丢弃)。收到LCPConfigure-Request(LCP配置要求)能使链路从网络层协议阶段或者认证阶段返回到链路建立阶段。

3.  认证阶段 :在一些链路上,在允许网络层协议packets交换之前,链路的一端可能需要peer去认证它。认证是不需要强制执行的。如果一次执行希望peer根据某一特定的认证协议来认证,那么它必须在链路建立阶段要求使用那个认证协议。应该尽可能在链路建立后立即进行认证。链路质量检查可以同时发生。在认证完成之前,禁止从认证阶段前进到网络层协议阶段。如果认证失败,认证者应该跃迁到链路终止阶段。
在这一阶段里,只有链路控制协议、认证协议,和链路质量监视协议的packets是被允许的。在该阶段里接收到的其他的packets必须被静静的丢弃。

4.  网络层协议阶段 :一旦PPP完成了前面的阶段,每一个网络层协议(例如IP,IPX,或AppleTalk)必须被适当的网络控制协议(NCP)分别设定。比如,NCP可以给新接入的PC机分配一个临时的IP地址,这样PC机就成为Internet上一个主机了。每个NCP可以随时被打开和关闭。当一个NCP处于Opened状态时,PPP将携带相应的网络层协议packets。当相应的NCP不处于Opened状态时,任何接收到的被支持的网络层协议packets都将被静静的丢弃。

5.  链路终止阶段 :PPP可以在任意时间终止链路。引起链路终止的原因很多:载波丢失、认证失败、链路质量失败、空闲周期定时器期满、或者管理员关闭链路。LCP用交换Terminate(终止)packets的方法终止链路。当链路正被关闭时,PPP通知网络层协议,以便他们可以采取正确的行动。交换Terminate(终止)packets之后,执行应该通知物理层断开,以便强制链路终止,尤其当认证失败时。Terminate-Request(终止-要求)的发送者,在收到Terminate-Ack(终止-允许)后,或者在重启计数器期满后,应该断开连接。收到Terminate-Request的一方,应该等待peer去切断,在发出Terminate-Request后,至少也要经过一个Restarttime(重启时间),才允许断开。PPP应该前进到链路死亡阶段。在该阶段收到的任何非LCPpackets,必须被静静的丢弃。


PPPoE协议及其工作过程
-----------------------------------------
PPPoE: PPP over Ethernet,是经常被用在DSL链接上的变种协议(RFC 2516),另外PPPoA 有时也被使用(PPP over ATM)。
PPPoE一般用在DSL接入网络,如下图所示:
PPPoE的报文就是在PPP的报文前面再加上以太网的报头,使得PPPoE可以通过简单桥接设备连入远端接入设备。但这里我们发现PPPoE报文中的PPP内容与原始的PPP并不相同。
也可参考整个PPPoE的报文(包括Ethernet Frame):
详细的说,就是下面的内容:

解释一下上面PPPoE报文中的关键字段的意义。
ETHER_TYPE: 
0x8863
Discovery Stage
0x8864
PPP Session Stage 

CODE: 
0x00
PPP Session Stage
0x09
PPPOE Active Discovery Initiation (PADI) packet 
0x07
PPPOE Active Discovery Offer (PADO) packet
0x19
PPPOE Active Discovery Request (PADR) packet
0x65
PPPOE Active Discovery Session-confirmation (PADS) packet 
0xa7
PPPOE Active Discovery Terminate (PADT) packet
TAG_TYPES:(用于Discovery Stage中的协商参数)
0x0000 End-Of-List
0x0101 Service-Name
0x0102 AC-Name
0x0103 Host-Uniq
0x0104 AC-Cookie
0x0105 Vendor-Specific
0x0110 Relay-Session-Id
0x0201 Service-Name-Error
0x0202 AC-System-Error
0x0203 Generic-Error

PPPoE的工作过程分成两个阶段,即发现阶段(Discorvery)和PPP会话阶段。

发现阶段(Discovery Stage)的具体过程如下:
1. 用户主机用广播的方式发出PADI (PPPOE Active Discovery Initiatio) 包,准备去获得所有可连接的接入设备(获得其MAC地址);
2. 接入设备收到PADI包后,返回PADO (PPPOE Active Discovery Offer) 作为回应;
3. 用户主机从收到的多个PADO包中,根据其名称类型名或者服务名,选择一个合适的接入设备,然后发送PADR (PPPOE Active Discovery Request) 包,另外如果一个用户主机在发出PADI后在规定时间内没有收到PADO,则会重发PADI;
4. 接入设备收到PADR包后,返回PAS (PPPOE Active Discovery Session-confirmation) 包,其中包含了一个唯一session ID,双方进入PPP会话阶段。

PPP会话阶段,即在session建立后的通讯阶段。
另外,无论是用户主机还是接入设备可随时发起PADT包,中止通讯。

使用PPPoE进行通讯的整个过程如下图所示:


原文链接:  PPP和PPPoE的工作原理






http://www.ppmy.cn/news/427402.html

相关文章

PPPoE和PPP

PPP帧格式: flag 1B address 1B control 1B protocol type 2B payload crc 2B flag 1B 0x7E0xFF0x03 0xc021:LCP 0xc023:PAP 0xc223:CHAP 0x0021:IP 最大15000x7E 其中: flag为帧起始和结束符,用于帧定界用的 address字段、control字段…

Linux查ip出来的pp0,linux下使用shell查看apache IP访问量

1.查看TCP连接状态 netstat -nat |awk {print $6}|sort|uniq -c|sort -rn netstat -n | awk /^tcp/ {S[$NF]};END {for(a in S) print a, S[a]} netstat -n | awk /^tcp/ {state[$NF]}; END {for(key in state) print key,"t",state[key]} netstat -n | awk /^tcp/ {…

笔记本加装内存条步骤

1.查看同系列笔记本有没有配置混合硬盘的。有的话这个系列的本本就会自带固态硬盘接口和位置。到还系列吧里聊天问一下原配固态硬盘的规格,照此规格买固态硬盘装上即可。 2.此系列本本没有混合硬盘配置的机型,一般没有固态硬盘接口和位置,要是…

计算机组装内存条安装,笔记本电脑内存条的正确安装方法

笔记本内存条怎么安装?玩笔记本电脑的时候经常会遇到内存不足的情况,很多的用户为了提高电脑性能,除了给笔记本电脑更换显卡还会给笔记本添加内存条。但是笔记本的构造和台式电脑是有很大区别的,内存条一般也和台式电脑不同。那么…

给笔记本加内存条

我的电脑是华硕 R414UV,系统windows10,64位,大概是在2017年10月份购买的。以下就是安装内存条的详细步骤 一 ,选购内存条 首先要了解自己的电脑主板,要了解主板最高支持多大的内存,还要了解有几个内存插槽&…

拆内存条啊

如何拆卸笔记本内存条 b站视频教学 可能出现的问题:就是装上新的内存条之后电脑不能启动 解决方法:用橡皮擦金手指 原因:用带有汗渍的手碰到了金手指 拆机技巧:不要立马装上电脑,要安全的按住屏显的地方,进…

计算机内存的安装方法,内存条怎么装?内存条安装与拆卸方法

随着现在人们使用电脑的越来越多,电脑的配置也越来越高,尤其是对于电脑的内存要求,所以现在很多的电脑都安装了内存条,那么内存条怎么装呢?下面就来介绍一下。 内存条怎么装 怎么安装内存条 1.准备好“内存条”和“十字螺丝刀”。…

笔记本更换内存条图解步骤

由于笔记本的便携性和性价比的不断提高,越来越多的人选择购买笔记本电脑,那么笔记本是不是可以像台式机一样可以升级配置呢?答案是肯定的,不过笔记本升级较多的部件只有内存和硬盘,其他部件如CPU、显卡等因为与主板集成…