1 点对点协议PPP(Point-to-Point Protocol)
PPP(Point-to-Point Protocol),链路层协议。PPP是为了在点对点物理链路(例如RS232串口链路、电话ISDN线路等)上传输OSI模型中的网络层报文而设计的,它改进了之前的一个点对点协议-SLIP协议–只能同时运行一个网络协议、无容错控制、无授权等许多缺陷,PPP是现在最流行的点对点链路控制协议。这种连接提供了同时的双向的全双工操作,并且假定数据包是按顺序投递的。PPP连接提供了一种广泛的解决办法,方便地将多种多样不同的值作为最大接收单元的值。
帧格式与HDLC相似,不同的是PPP是面向字符,HDLC是面向位的。PPP属于广域网范畴,MAC是局域网范畴,按实际情况和环境就选用不同的协议,PPP支持的网络结构只能是点对点,MAC支持多点对多点。 这类广域网协议,其帧的结构与以太网的完全不同,当然,PPPOE除外,因为PPPOE是基于以太网上的,而其它的如PPP,FR,X.25等却并不是。 PPP协议是目前广域网上应用最广泛的协议之一,它的优点在于简单、具备用户验证能力、可以解决IP分配等。
(1) 简单:在同一条物理链路上进行点对点的数据传输,对数据链路层的帧不进行纠错,不需要序号,不需要流量控制。
(2) 封装成帧:加入帧界定符。
(3) 透明性:字节填充法。
(4) 多种网络层协议:在同一条物理链路上同时支持多种网络层协议(如IP和IPX等)的运行。
(5) 多种链路类型:PPP必须能够在多种类型的链路上运行,例如串行或并行链路。
(6) 差错检测:接收方收到一个帧后进行CRC检验,若正确就收下这个帧,反之则丢弃。
(7) 检测连接状态:自动检测链路是否处于正常工作状态。
(1) 提供一个将IP数据报封装到串行链路的方法。IP数据报在PPP帧中就是信息部分,长度受最大传送单元MTU的限制。PPP支持异步链路(无奇偶校验的8比特数据)和面向比特的同步链路。
(2) 链路控制协议LCP(Link Control Protocol)
当线路不再需要时,挑出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。
(3) 一套网络控制协议NCP(Network Control Protocol)
其中每一个协议支持不同的网络层协议,如IP、OSI的网络层等。
(4) 认证协议
最常用的包括口令验证协议PAP(Password Authentication Protocol)和挑战握手验证协议CHAP(Challenge-Handshake Authentication Protocol)。
(1) 首部
字段 | 长度 | 说明 |
F | 1字节 | 标志字段F,固定为0x7E,标志一个帧的开始或结束。连续2个帧之间只需要一个标志字段,如果出现连续两个标志字段,表示这是一个空帧。 |
A | 1字节 | 地址字段A是固定不变的,为0xFF。 |
C | 1字节 | 控制字段C是固定不变的,为 0x03。 |
协议 | 2字节 | 协议字段不同,后面信息部分表示的数据类型不同。
0x0021——信息字段是IP数据报 0xC021——信息字段是链路控制数据LCP 0x8021——信息字段是网络控制数据NCP 0xC023——信息字段是安全性认证PAP 0xC025——信息字段是LQR 0xC223——信息字段是安全性认证CHAP |
(2) 信息部分
长度不超过1500字节 。
(3) 字节填充法
(a) 当信息字段中出现0x7E时,将每一个0x7E字节转变成2字节序列(0x7D,0x5E)。
(b) 若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)。
(c) 若信息字段中出现ASCII码的控制字符(即数值小于0X20的字符),则该字符前面需要加入一个0x7D字节,同时将该字符的编码加以改变(+20)。例如,出现0x03,就要把它转为2字节序列(0x7D,0x23)
(4) 0比特填充法
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送),此时使用0比特填充法。
(a) 在发送端扫描整个信息字段,当有5个1连续出现时,立即填入一个0,保证信息字段中不会出现6个连续1。
(b) 在接收端删除连续5个1后面的0。
(5) 尾部
FCS:使用CRC的帧校验序列。
2 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,必须被静静的丢弃。 |