什么是PPP 协议?PPP 协议详解
1 点对点协议PPP(Point-to-Point Protocol)
PPP(Point-to-Point Protocol),链(lian)路层(ceng)协(xie)议。PPP是(shi)为了在点(dian)对(dui)点(dian)物理链(lian)路(例(li)如RS232串口(kou)链(lian)路、电话ISDN线路等(deng))上传输OSI模型中的(de)网络层(ceng)报文(wen)而设(she)计(ji)的(de),它改进了之前的(de)一个点(dian)对(dui)点(dian)协(xie)议-SLIP协(xie)议–只能同时运行(xing)一个网络协(xie)议、无(wu)(wu)容错控(kong)制、无(wu)(wu)授权等(deng)许(xu)多(duo)缺陷,PPP是(shi)现在最(zui)流(liu)行(xing)的(de)点(dian)对(dui)点(dian)链(lian)路控(kong)制协(xie)议。这种(zhong)(zhong)连(lian)接(jie)提供(gong)了同时的(de)双(shuang)向的(de)全双(shuang)工操作,并且假定数(shu)据包是(shi)按顺序投递的(de)。PPP连(lian)接(jie)提供(gong)了一种(zhong)(zhong)广泛(fan)的(de)解决办法,方便(bian)地将(jiang)多(duo)种(zhong)(zhong)多(duo)样(yang)不同的(de)值(zhi)作为最(zui)大接(jie)收单元的(de)值(zhi)。
帧格式与(yu)HDLC相似,不(bu)同的(de)(de)(de)(de)是(shi)PPP是(shi)面向字符,HDLC是(shi)面向位(wei)的(de)(de)(de)(de)。PPP属(shu)于(yu)广域网(wang)(wang)(wang)范畴(chou),MAC是(shi)局(ju)域网(wang)(wang)(wang)范畴(chou),按实(shi)际情况(kuang)和环(huan)境就选(xuan)用(yong)不(bu)同的(de)(de)(de)(de)协(xie)议,PPP支持的(de)(de)(de)(de)网(wang)(wang)(wang)络结构只能是(shi)点对点,MAC支持多点对多点。 这(zhei)类(lei)广域网(wang)(wang)(wang)协(xie)议,其帧的(de)(de)(de)(de)结构与(yu)以太网(wang)(wang)(wang)的(de)(de)(de)(de)完全(quan)不(bu)同,当(dang)然,PPPOE除(chu)外,因为(wei)PPPOE是(shi)基于(yu)以太网(wang)(wang)(wang)上的(de)(de)(de)(de),而其它的(de)(de)(de)(de)如PPP,FR,X.25等(deng)却并(bing)不(bu)是(shi)。 PPP协(xie)议是(shi)目前广域网(wang)(wang)(wang)上应用(yong)最广泛的(de)(de)(de)(de)协(xie)议之一,它的(de)(de)(de)(de)优点在于(yu)简单、具备(bei)用(yong)户验证能力、可(ke)以解决IP分配等(deng)。
1.1 PPP协(xie)议功能
(1) 简单(dan):在同一(yi)条物理(li)链(lian)路(lu)上进(jin)行(xing)点(dian)(dian)对点(dian)(dian)的(de)数据传输,对数据链(lian)路(lu)层(ceng)的(de)帧不(bu)(bu)进(jin)行(xing)纠错(cuo),不(bu)(bu)需要(yao)序(xu)号,不(bu)(bu)需要(yao)流(liu)量(liang)控制。
(2) 封(feng)装成帧:加入帧界定符。
(3) 透(tou)明性:字(zi)节填充法。
(4) 多(duo)(duo)种网络(luo)层(ceng)协议(yi):在同一(yi)条物理链路上同时(shi)支持多(duo)(duo)种网络(luo)层(ceng)协议(yi)(如IP和IPX等)的运行。
(5) 多种链路类型(xing):PPP必须能够在多种类型(xing)的链路上(shang)运行(xing),例(li)如串行(xing)或并(bing)行(xing)链路。
(6) 差错(cuo)检(jian)(jian)测:接收(shou)方收(shou)到(dao)一(yi)个帧后进行CRC检(jian)(jian)验,若正确就收(shou)下这(zhei)个帧,反之则丢弃。
(7) 检测(ce)(ce)连接状(zhuang)态:自动检测(ce)(ce)链(lian)路是否处于正(zheng)常工作状(zhuang)态。
1.2 PPP协议(yi)组成
(1) 提供一(yi)个将IP数据(ju)报封装到串行链路的(de)方法。IP数据(ju)报在PPP帧中就是信息部分(fen),长度受(shou)最大(da)传送单(dan)元(yuan)MTU的(de)限制。PPP支持(chi)异步(bu)链路(无奇偶(ou)校验(yan)的(de)8比特数据(ju))和面向比特的(de)同步(bu)链路。
(2) 链(lian)路(lu)控制协议LCP(Link Control Protocol)
当线(xian)路不再需要时,挑(tiao)出这些线(xian)路,测试它们,商议(yi)选择,并仔细地再次释放链路控(kong)制协议(yi)。
(3) 一套网络(luo)控制协议(yi)NCP(Network Control Protocol)
其中(zhong)每一(yi)个协议支持不同的网(wang)络(luo)层协议,如(ru)IP、OSI的网(wang)络(luo)层等。
(4) 认证协(xie)议(yi)
最常用的包括口令验证协(xie)议(yi)PAP(Password Authentication Protocol)和挑战握手验证协(xie)议(yi)CHAP(Challenge-Handshake Authentication Protocol)。
1.3 PPP帧格式(shi)
(1) 首部
字段
长度(du)
说明(ming)
F
1字(zi)节
标(biao)(biao)志(zhi)字段(duan)F,固定为(wei)0x7E,标(biao)(biao)志(zhi)一个(ge)帧(zhen)的开(kai)始或结束。连续(xu)2个(ge)帧(zhen)之(zhi)间只需要一个(ge)标(biao)(biao)志(zhi)字段(duan),如(ru)果出现连续(xu)两个(ge)标(biao)(biao)志(zhi)字段(duan),表示这是一个(ge)空帧(zhen)。
A
1字节
地址字段A是固定不变(bian)的(de),为0xFF。
C
1字节
控制字段C是固定不(bu)变的,为 0x03。
协(xie)议
2字节
协议字段不同,后面(mian)信息(xi)部分(fen)表示的数(shu)据类型不同。
0x0021——信息字段是IP数据报
0xC021——信(xin)息字段是链路控制数据LCP
0x8021——信息字段是(shi)网络控制数据NCP
0xC023——信息(xi)字段是安全性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段(duan)是安全性认证CHAP
(2) 信(xin)息部分
长度不(bu)超过1500字节 。
(3) 字(zi)节填充法
(a) 当信息(xi)字段中出现(xian)0x7E时(shi),将每一(yi)个(ge)0x7E字节(jie)转变成2字节(jie)序(xu)列(lie)(0x7D,0x5E)。
(b) 若信息字(zi)(zi)(zi)段中出现一(yi)个0x7D的字(zi)(zi)(zi)节,则(ze)将其转变成2字(zi)(zi)(zi)节序列(0x7D,0x5D)。
(c) 若信息字(zi)段中出现ASCII码(ma)的控(kong)制字(zi)符(即数值小(xiao)于0X20的字(zi)符),则该(gai)字(zi)符前面需要加入(ru)一个(ge)0x7D字(zi)节,同时将该(gai)字(zi)符的编码(ma)加以改变(+20)。例如(ru),出现0x03,就要把它转为(wei)2字(zi)节序(xu)列(0x7D,0x23)
(4) 0比特(te)填充(chong)法(fa)
PPP协议用在SONET/SDH链路时(shi),使用同步传(chuan)输(一连串的(de)比(bi)特(te)(te)连续(xu)传(chuan)送),此(ci)时(shi)使用0比(bi)特(te)(te)填充法。
(a) 在发送端扫描整个信(xin)息字(zi)段,当有5个1连续出现时,立即(ji)填入(ru)一个0,保(bao)证(zheng)信(xin)息字(zi)段中不(bu)会出现6个连续1。
(b) 在(zai)接收端(duan)删除连续5个1后面的0。
(5) 尾(wei)部
FCS:使用(yong)CRC的帧校(xiao)验序列(lie)。
2 PPP协议的工作状态
PPP通讯是两(liang)个端点(dian)之(zhi)间的通讯,每一端必须首(shou)先发送(song)LCP packets数据(ju)来(lai)设定和(he)测试数据(ju)链路,当链路建立(li)后,peer才(cai)可以被认证(zheng),认证(zheng)完(wan)成后,再(zai)通过发送(song)NCP packets来(lai)选(xuan)定网络层协议,这些后续(xu)的通讯就(jiu)可以在网络层进行了。
具体的过程如下:
序号
状态
说明
1
链路静止状态
链路(lu)一定(ding)开(kai)始并结束于这个(ge)(ge)阶段(duan)(duan)。当一个(ge)(ge)外部事件(jian)(例如载波侦听或网络管理员设定(ding))指出物(wu)理层已经准备就绪时,PPP将(jiang)进入链路(lu)建(jian)(jian)立阶段(duan)(duan)。在这个(ge)(ge)阶段(duan)(duan),LCP自(zi)动机(ji)(ji)器将(jiang)处于初始状态,向链路(lu)建(jian)(jian)立阶段(duan)(duan)的转换将(jiang)给LCP自(zi)动机(ji)(ji)器一个(ge)(ge)UP事件(jian)信号(hao)。
2
链路建(jian)立状态
LCP用(yong)于交换配(pei)(pei)置(zhi)(zhi)信息包(Configure packets),建(jian)立(li)连接。一旦一个(ge)配(pei)(pei)置(zhi)(zhi)成功信息包(Configure-Ackpacket)被(bei)(bei)发送且被(bei)(bei)接收(shou),就完成了交换,进入了LCP开启状(zhuang)态(tai)。所有的(de)(de)配(pei)(pei)置(zhi)(zhi)选项都(dou)假(jia)定使(shi)用(yong)默认值,除非被(bei)(bei)配(pei)(pei)置(zhi)(zhi)交换所改变。有一点(dian)要注(zhu)意:只有不依赖于特(te)别(bie)(bie)的(de)(de)网络层(ceng)协(xie)(xie)议(yi)的(de)(de)配(pei)(pei)置(zhi)(zhi)选项才(cai)被(bei)(bei)LCP配(pei)(pei)置(zhi)(zhi)。在(zai)网络层(ceng)协(xie)(xie)议(yi)阶段,个(ge)别(bie)(bie)的(de)(de)网络层(ceng)协(xie)(xie)议(yi)的(de)(de)配(pei)(pei)置(zhi)(zhi)由个(ge)别(bie)(bie)的(de)(de)网络控制协(xie)(xie)议(yi)(NCP)来处理。在(zai)这个(ge)阶段接收(shou)的(de)(de)任(ren)何非LCPpackets必须被(bei)(bei)silentlydiscarded(静静的(de)(de)丢弃)。收(shou)到(dao)LCPConfigure-Request(LCP配(pei)(pei)置(zhi)(zhi)要求)能使(shi)链路(lu)从(cong)网络层(ceng)协(xie)(xie)议(yi)阶段或者认证阶段返(fan)回到(dao)链路(lu)建(jian)立(li)阶段。
3
认证阶(jie)段
在一(yi)(yi)些链(lian)(lian)路上,在允许网络层(ceng)协议packets交换之前(qian),链(lian)(lian)路的(de)一(yi)(yi)端可能需(xu)(xu)要peer去认(ren)(ren)证它。认(ren)(ren)证是不(bu)需(xu)(xu)要强制执(zhi)行的(de)。如果(guo)一(yi)(yi)次(ci)执(zhi)行希望peer根据某(mou)一(yi)(yi)特定的(de)认(ren)(ren)证协议来(lai)认(ren)(ren)证,那么它必(bi)须在链(lian)(lian)路建(jian)(jian)立阶(jie)(jie)段(duan)(duan)要求使用那个认(ren)(ren)证协议。应该尽可能在链(lian)(lian)路建(jian)(jian)立后立即进行认(ren)(ren)证。链(lian)(lian)路质量(liang)检查可以同时(shi)发生。在认(ren)(ren)证完(wan)成之前(qian),禁止从认(ren)(ren)证阶(jie)(jie)段(duan)(duan)前(qian)进到网络层(ceng)协议阶(jie)(jie)段(duan)(duan)。如果(guo)认(ren)(ren)证失败(bai),认(ren)(ren)证者(zhe)应该跃迁到链(lian)(lian)路终止阶(jie)(jie)段(duan)(duan)。
在这一阶(jie)段里,只有链(lian)路(lu)控(kong)制(zhi)协议、认(ren)证(zheng)协议,和链(lian)路(lu)质(zhi)量监视协议的(de)packets是被允许的(de)。在该阶(jie)段里接收到的(de)其(qi)他(ta)的(de)packets必(bi)须被静静的(de)丢弃。
4
网络层协议阶段
一(yi)旦PPP完成了前面的(de)(de)(de)(de)(de)阶段,每一(yi)个(ge)(ge)网(wang)(wang)络(luo)层(ceng)协(xie)议(例如(ru)(ru)IP,IPX,或AppleTalk)必须被(bei)适当的(de)(de)(de)(de)(de)网(wang)(wang)络(luo)控制协(xie)议(NCP)分别设定。比如(ru)(ru),NCP可(ke)以(yi)给(ji)新接入的(de)(de)(de)(de)(de)PC机(ji)分配一(yi)个(ge)(ge)临时的(de)(de)(de)(de)(de)IP地址,这样PC机(ji)就(jiu)成为Internet上(shang)一(yi)个(ge)(ge)主机(ji)了。每个(ge)(ge)NCP可(ke)以(yi)随(sui)时被(bei)打开和关闭。当一(yi)个(ge)(ge)NCP处于(yu)Opened状态时,PPP将(jiang)(jiang)携带(dai)相应的(de)(de)(de)(de)(de)网(wang)(wang)络(luo)层(ceng)协(xie)议packets。当相应的(de)(de)(de)(de)(de)NCP不处于(yu)Opened状态时,任何接收到的(de)(de)(de)(de)(de)被(bei)支持的(de)(de)(de)(de)(de)网(wang)(wang)络(luo)层(ceng)协(xie)议packets都(dou)将(jiang)(jiang)被(bei)静(jing)静(jing)的(de)(de)(de)(de)(de)丢弃。
5
链路终止阶段
PPP可以在任(ren)意时(shi)(shi)间(jian)(jian)终(zhong)止(zhi)(zhi)链(lian)(lian)路(lu)(lu)。引起链(lian)(lian)路(lu)(lu)终(zhong)止(zhi)(zhi)的(de)(de)原因很多:载波(bo)丢失(shi)(shi)、认(ren)证(zheng)失(shi)(shi)败、链(lian)(lian)路(lu)(lu)质量失(shi)(shi)败、空闲周期定时(shi)(shi)器期满、或者(zhe)管理员关闭链(lian)(lian)路(lu)(lu)。LCP用交(jiao)换(huan)Terminate(终(zhong)止(zhi)(zhi))packets的(de)(de)方(fang)(fang)法终(zhong)止(zhi)(zhi)链(lian)(lian)路(lu)(lu)。当链(lian)(lian)路(lu)(lu)正(zheng)被关闭时(shi)(shi),PPP通知网络层协议,以便他们可以采取正(zheng)确的(de)(de)行动。交(jiao)换(huan)Terminate(终(zhong)止(zhi)(zhi))packets之后(hou),执行应(ying)(ying)该(gai)(gai)(gai)通知物理层断(duan)开(kai)(kai),以便强制链(lian)(lian)路(lu)(lu)终(zhong)止(zhi)(zhi),尤(you)其(qi)当认(ren)证(zheng)失(shi)(shi)败时(shi)(shi)。Terminate-Request(终(zhong)止(zhi)(zhi)-要(yao)求)的(de)(de)发(fa)送者(zhe),在收到Terminate-Ack(终(zhong)止(zhi)(zhi)-允许(xu))后(hou),或者(zhe)在重(zhong)启(qi)计数器期满后(hou),应(ying)(ying)该(gai)(gai)(gai)断(duan)开(kai)(kai)连接。收到Terminate-Request的(de)(de)一(yi)方(fang)(fang),应(ying)(ying)该(gai)(gai)(gai)等待peer去切断(duan),在发(fa)出Terminate-Request后(hou),至少也要(yao)经过一(yi)个(ge)Restarttime(重(zhong)启(qi)时(shi)(shi)间(jian)(jian)),才允许(xu)断(duan)开(kai)(kai)。PPP应(ying)(ying)该(gai)(gai)(gai)前进到链(lian)(lian)路(lu)(lu)死亡阶段。在该(gai)(gai)(gai)阶段收到的(de)(de)任(ren)何非LCPpackets,必须被静静的(de)(de)丢弃。