合同知识协议和协议
课程 BA000003
PPP协议和 PPP0E协议
HuaweiTechnologies
目录
课程说明 1
课程介绍 1
课程目标 1
第 1 章概述 2
第 2 章 PPP 协议 8
第 3 章 PPPOE 协议 48
附录缩略词表 74
课程说明
课程介绍
本教材为宽带产品工程师培训公共课程。
本课程介绍 PPP协议和 PPPOE协议。
课程目标
完成本课程学习,学员能够:
了解 SLIP协议的基本原理。
掌握 PPP协议的基本原理。
掌握 LCP协议和 NCP协议数据报文的交换过程。
掌握 PPPOE协议的基本原理。
第1章 概述
SLIP 的全称是 SerialLineIP,出现在 80 年代中期,并被使用在 BSDUNIX 主机和 SUN 的工作站
上。因为 SLIP 简单好用,所以后来被大量使用在线路速率从 1200bps 到 的专用线路
和拨号线路上互连主机和路由器,到目前为止仍有大部分 UNIX 主机保留对该协议的支持。在
80 年代末 90 年代初期,被广泛用于家庭中每台有 RS232 串口的计算机和调制解调器连接到
Internet。
SLIP的帧格式由 IP包加上 END字符组成。
通过在被发送 IP 数据报的尾部增加特殊的 END 字符(0xC0)从而形成一个简单的 SLIP 的数据
帧,而后该帧会被传送到物理层进行发送。为了防止线路噪声被当成数据报的内容在线路上传
输,通常发送端在被传送数据报的开始处也传一个 END 字符。如果线路上的确存在噪声,则该
数据报起始位置的 END 字符将结束这份错误的报文,这样当前正确的数据报文就能正确的传送
了,而前一个含有无意义报文的数据帧会在对端的高层被丢弃。
END 是判断一个 SLIP 帧是否结束的标志。如果要传送的 IP 包中正好有一个字符 0xc0 要传送,
为了避免它被当作 END 字符,要用连续的两个字节 0xdb 和 0xdc 来代替它。如果要传送的是
0xdb,那么就用连续传输两个字节 0xdb和 0xdd来代替它。
SLIP 只支持 IP 协议,对 IPX 等缺乏支持。并且,由于帧格式中没有类型字段,致使如果一条
串行线路如果用于 SLIP,就不能同时使用其它协议。
SLIP不提供纠错机制,错误只能依靠上层协议实现。
SLIP 帧的封装格式非常简单,通信双方无需在数据报发送前协商任何配置参数选项(在 PPP 协
议中需协商配置参数选项),所以双方 IP 层通信前必需先获知对方的 IP 地址,才能进行网络
层的通信,否则链路层发送的数据帧在被送到对方网络层时将无法进行转发。正是由于上面的
诸多缺点,导致了 SLIP很快的被后面要讲的 PPP协议所替代。
第1章 PPP协议
第1章 PPP协议
PPP 协 议 主 要 包 括 三 部 分 : LCP ( LinkControlProtocol ) 链 路 控 制 协 议 、 NCP
(NetworkControlProtocol)和 PPP 的扩展协议(如 MultilinkProtocol)。随着网络技术的
不断发展,网络带宽已不再是瓶颈,所以 PPP 扩展协议的应用也就越来越少,因此往往人们在
叙述 PPP协议时经常会忘记它的存在。
我们在提及 PPP 协议的报文封装格式时,不可不先提一下 HDLC 协议。HDLC 也是最常用的数据
链路层协议,它是从 SDLC 协议衍进过来的,许多常用的数据链路层协议的封装方式都是基于
HDLC的封装格式的,同样 PPP协议也不例外,它也采用了 HDLC的定界帧格式。
以下为对 PPP数据帧封装格式的一点说明:
每一个 PPP数据帧均是以一个标志字节起始和结束的,该字节为 0x7E。
紧接在起始标志字节后的一个字节是地址域,该字节为 0xFF。我们熟知网络是分层的,且对等
层之间进行相互通信,而下层为上层提供服务。当对等层进行通信时首先需获知对方的地址,
而对不同的网络,在数据链路层则表现为需要知道对方的 MAC 地址、 地址、ATM 地址等;
在网络层则表现为需要知道对方的 IP 地址、IPX 地址等;而在传输层则需要知道对方的协议端
口号。例如如果两个以太网上的主机希望能够通信的话,首先发送端需获知对端的 MAC 地址。
但由于 PPP 协议是被运用在点对点的链路上的特殊性,它不像广播或多点访问的网络一样,因
为点对点的链路就可以唯一标示对方,因此使用 PPP 协议互连的通信设备的两端无须知道对方
的数据链路层地址,所以该字节已无任何意义,按照协议的规定将该字节填充为全 1 的广播地
址。
同地址域一样,PPP 数据帧的控制域也没有实际意义,按照协议的规定通信双方将该字节的内
容填充为 0x03。
就 PPP 协议本身而言,我们最关心的内容应该是它的协议域和信息域。协议域可用来区分 PPP
数据帧中信息域所承载的数据报文的内容。协议域的内容必须依据 ISO3309 的地址扩展机制所
给出的规定。该机制规定协议域所填充的内容必须为奇数,也即是要求低字节的最低位为
“1”,高字节的最低位为“0”。如果当发送端发送的 PPP 数据帧的协议域字段不符合上述规
定,则接
收端会认为此数据帧是不可识别的,那么接收端会向发送端发送一个 Protocol-Reject 报文,
在该报文尾部将完整地填充被拒绝的报文。
信息域缺省时最大长度不能超过 1500 字节,其中包括填充域的内容,1500 字节大小等于 PPP
协议中配置参数选项 MRU(MaximumReceiveUnit)的缺省值,在实际应用当中可根据实际需要
进行信息域最大封装长度选项的协商。信息域如果不足 1500 字节时可被填充,但不是必须的,
如果填充则需通信双方的两端能辨认出有用与无用的信息方可正常通信。
说明:
MRU 表示本端接收到的 PPP 数据帧的数据域的最大值。通常情况下这个参数选项使用默认值
(1500 字节),因此在 Config-Request 报文中双方都不会携带这个配置参数选项。当在某些
特殊应用中,可能会使用到小于 1500 字节或大于 1500 字节的情况,这时在 Config-Request 报
文就会携带要协商的 MRU配置参数选项值。
CRC 校验域主要是对 PPP 数据帧传输的正确性进行检测的,当然在数据帧中引入了一些传输的
保证机制是好的,但可以反过来说,同样我们会引入更多的开销,这样可能会增加应用层交互
的延迟。
为了能适应复杂多变的网络环境,PPP 协议提供了一种链路控制协议来配置和测试数据通信链
路,它能用来协商 PPP 协议的一些配置参数选项;处理不同大小的数据帧;检测链路环路、一
些链路的错误;终止一条链路。
PPP 的网络控制协议根据不同的网络层协议可提供一族网络控制协议(NCP),常用的有提供给
TCP/IP
网络使用的 IPCP网络控制协议;提供给 SPX/IPX网络使用的 IPXCP网络控制协议等。最为常用
的是 IPCP 协议,当点对点的两端进行 NCP 参数配置协商时,主要是用来通信双方的网络层地
址。
数据通信设备(在本文中指路由器)的两端如果希望通过 PPP 协议建立点对点的通信,无论哪
一端的设备都需发送 LCP 数据报文来配置链路(测试链路)。一旦 LCP 的配置参数选项协商完
后,通信的双方就会根据 LCP 配置请求报文中所协商的认证配置参数选项来决定链路两端设备
所采用的认证方式。协议缺省情况下双方是不进行认证的,而直接进入到 NCP 配置参数选项的
协商,直至所经历的几个配置过程全部完成后,点对点的双方就可以开始通过已建立好的链路
进行网络层数据报文的传送了,整个链路就处于可用状态。只有当任何一端收到 LCP 或 NCP 的
链路关闭报文时(一般而言协议是不要求 NCP 有关闭链路的能力的,因此通常情况下关闭链路
的数据报文是在 LCP 协商阶段或应用程序会话阶段发出的);物理层无法检测到载波或管理人
员对该链路进行关闭操作,都会将该条链路断开,从而终止 PPP 会话。以下是 PPP 协议整个链
路过程需经历阶段的状态转移图说明:
在点对点链路的配置、维护和终止过程中,PPP需经历以下几个阶段:
链路不可用阶段。有时也称为物理层不可用阶段,PPP 链路都需从这个阶段开始和结束。当通
信双方的两端检测到物理线路激活(通常是检测到链路上有载波信号)时,就会从当前这个阶
段跃迁至下一个阶段(即链路建立阶段)。先简单提一下链路建立阶段,在这个阶段主要是通
过 LCP 协议进行链路参数的配置,LCP 在此阶段的状态机也会根据不同的事件发生变化。当处
于在链路不可用阶段时,LCP 的状态机是处于 initial(初始化状态)或 starting(准备启动
状态),一旦检测到物理线路可用,则
LCP 的状态机就要发生改变。当然链路被断开后也同样会返回到这个阶段,往往在实际过程中
这个阶段所停留的时间是很短的,仅仅是检测到对方设备的存在。
链路建立阶段。是 PPP 协议最关键和最复杂的阶段。该阶段主要是发送一些配置报文来配置数
据链路,这些配置的参数不包括网络层协议所需的参数。当完成数据报文的交换后,则会继续
向
下一个阶段跃迁,该下一个阶段既可是验证阶段,也可是网络层协议阶段,下一阶段的选择是
依据链路两端的设备配置的(通常是由用户来配置,但对 NAS 或 BAS 设备的 PPP 模块缺省就需
要支持 PAP或 CHAP 中的一种认证方式)。在此阶段 LCP 的状态机会发生两次改变,前面我们说
了当链路处于不可用阶段时,此时 LCP 的状态机处于 initial 或 starting,当检测到链路可用
时,则物理层会向链路层发送一个 UP 事件,链路层收到该事件后,会将 LCP的状态机从当前状
态改变为 Request-Sent(请求发送状态),根据此时的状态机 LCP 会进行相应的动作,也即是
开始发送 Config-Request报文来配置数据链路,无论哪一端接收到了 Config-Ack报文时,LCP
的状态机又要发生改变,从当前状态改变为 opened 状态,进入 Opened 状态后收到 Config-Ack
报文的一方则完成了当前阶段,应该向下一个阶段跃迁。同理可知,另一端也是一样的,但须
注意的一点是在链路配置阶段双方是链路配置操作过程是相互独立的。如果在该阶段收到了非
LCP数据报文,则会将这些报文丢弃。
验证阶段。多数情况下的链路两端设备是需要经过认证后才进入到网络层协议阶段,缺省情况
下链路两端的设备是不进行认证的。在该阶段支持 PAP 和 CHAP两种认证方式,验证方式的选择
是依据在链路建立阶段双方进行协商的结果。然而,链路质量的检测也会在这个阶段同时发
生,但协议规定不会让链路质量的检测无限制的延迟验证过程。在这个阶段仅支持链路控制协
议、验证协议和质量检测数据报文,其它的数据报文都会被丢弃。如果在这个阶段再次收到了
Config-Request报文,则又会返回到链路建立阶段。
网络层协议阶段。一旦 PPP完成了前面几个阶段,每种网络层协议(IP、IPX和 AppleTalk)会
通过各自相应的网络控制协议进行配置,每个 NCP 协议可在任何时间打开和关闭。当一个 NCP
的状态机变成 Opened 状态时,则 PPP就可以开始在链路上承载网络层的数据包报文了。如果在
个阶段收到了
Config-Request报文,则又会返回到链路建立阶段。
网络终止阶段,PPP 能在任何时候终止链路。当载波丢失、授权失败、链路质量检测失败和管
理员人为关闭链路等情况均会导致链路终止。链路建立阶段可能通过交换 LCP 的链路终止报文
来关闭链路,当链路关闭时,链路层会通知网络层做相应的操作,而且也会通过物理层强制关
断链路。对于 NCP协议,它是没有也没有必要去关闭 PPP链路的。
LCP 数据报文是在链路建立阶段被交换的,它作为 PPP 的净载荷被封装在 PPP 数据帧的信息域
中。在链路建立阶段的整个过程中信息域的内容是在变化的,它包括很多种类型的报文,所以
这些报文也要通过相应的字段来区分,PPP数据帧的协议域固定填充 0xC021。
代码域的长度为一个字节,主要是用来标识 LCP 数据报文的类型的。在链路建立阶段时,接收
方收到 LCP 数据报文的代码域无法识别时,就会向对端发送一个 LCP 的代码拒绝报文(Code-
Reject报文)。
标识域也是一个字节,其目的是用来匹配请求和响应报文。一般而言在进入链路建立阶段时,
通信双方无论哪一端都会连续发送几个配置请求报文(
Config-Request 报文),而这几个请求报文的数据域可能是完全一样的,而仅仅是它们的标识
域不同罢了。通常一个配置请求报文的 ID 是从 0x01 开始逐步加 1 的,当对端接收到该配置请
求报文后,无论使用何种报文(回应报文可能是 Config-Ack、Config-Nak 和 Config-Reject 三
种报文中的一种)来回应对方,但必须要求回应报文中的 ID(标识域)要与接收报文中的 ID
一致,当通信设备收到回应后就可以将该回应与发送时的进行比较来决定下一步的操作。
长度域的内容=总字节数据(代码域+标志域+长度域+数据域)。长度域所指示字节数之外的字
节将被当作填充字节而忽略掉,而且该域的内容不能超过 MRU的值。
数据域的内容依据不同 LCP数据报文的内容也是不一样的。
链路配置报文与其它两类报文有着明显的区别,它主要是用来协商链路的配置参数选项的,因
此这种报文的数据域还要携带许多配置参数选项的。
链路配置报文主要包括 Config-Request、Config-Ack、Config-Nak 和 Config-Reject 四种报
文。
当通信双方需要建立链路时,无论哪一方都需要发送 Config-Request 报文并携带每一端自已所
希望协商的配置参数选项。
当接收方收到 Config-Request 报文时,会在剩下的三种类型的报文中选择一种来响应对方的请
求报文,到底选择哪种报文来响应对方需依据以下两个条件:
不能完全识别配置参数选项的类型域,我们知道一个 Config-Request 报文中会同时携带多个配
置参数选项,而对于一个支持 PPP 协议的通信设备也不一定会支持上表中所有列出的配置选
项,即使支持,也可能在实际应用中关闭掉某些选项功能。(例如:当使用 PPP 协议通信的一
端可能将一些无用的配置选项都关闭了,而仅支持 0x01 和 0x03 两个配置参数选项,因此当对
方发送的 Config-Request 报文中含有 0x04 配置选项时,对于本端而言这个配置参数选项就无
法识别,也即是不支持这个配置参数选项的协商)。
如果能支持完全识别配置参数选项,但接收端也可能不认可 Config-Request 报文中配置参数选
项数据域中的内容(例如:当一端发送魔术字配置参数选项中的魔术字为全 0,而对端认为应
该为其它值,这种情况就属于不支持配置参数选项中的内容)。
所以依据上面的两个条件,我们就可以明确在回应对方配置请求报文时,采用何种报文回应。
当接收 Config-Request 报文的一端能识别发送过来的所有配置参数选项且认可所有配置参数选
项数据域的内容时,接收端将会给对端回一个 Config-Ack 报文并将配置请求报文中的配置参数
选项原封不动的放置在 Config-Ack 报文的数据域内(根据协议的规定是不可改变配置参数选项
的顺序)。当配置请求报文的发送端收到 Config-Ack 报后,则会从当前阶段进入到下一个阶
段。
当接收 Config-Request 报文的一端能识别发送端所发送过来的所有配置参数选项,但对部分配
置参数选项数据域中的内容不认可时,接收端将会给对端回应一个 Config-Nak 报文,该报文中
只携带不认可的配置参数选项,而这些配置参数选项的数据内容为本端希望的值。然而当接收
端收到 Config-Nak 报文后,会重新发送 Config-Request 报文,而这个 Config-Request 报文与
上一次所发送的 Config-Request 报文区别在于那些被对端不认可的配置参数选项的内容被填写
到刚刚协商完后再次发送的 Config-Request 报文中(Config-Nak 报文发送回来的那些配置参
数选项)。
当接收 Config-Request 报文的一端不能识别所有的发送端发送过来的配置参数选项时,此时接
收端将会向对端回一个 Config-Reject 报文,该报文中的数据域只携带那些不能识别的配置参
数选项(当配置参数选项的类型域不识别时)。当对端接收到 Config-Reject 报文后,同样会
再次发送一个 Config-Request 报文,这个配置请求报文与上一次发送的区别在于将不可识别的
那些配置参数选项给删除了。
链路配置阶段也可能要经过几次协商后才能完成,但这与点对点两端的设备有着密切的联系。
对于 PPP的两个端点而言,两者是独立完成各自的配置参数选项的协商过程的。
链路终止报文分为 Terminate-Request 和 Terminate-Reply 两种报文。LCP 报文中提供了一种
机制来关闭一个点对点的连接,想要关断链路的一端会持续发送 Terminate-Request 报文,直
到收到一个 Terminate-Reply 为止。接收端一旦收到了一个 Terminate-Request 报文后,必须
回应一个 Terminate-Reply 报文,同时等待对端先将链路断开后,再完成本端的所有断开的操
作。
LCP 的链路终止报文的数据域与链路配置报文的数据域不一样,链路终止报文中无需携带各配
置参数选项。对于链路终止报文也同样需要 ID 一致,当接收到 Terminate-Reply 报文才会做链
路终止操作。
魔术字是在 LCP 的 Config-Request 报文中被协商的,并且可被一些其它类型的 LCP 数据报文所
使用,如 Echo-Request、Echo-Reply 报文和 Quality-Protocol 报文等。对于 PPP 协议本身它
是不要求协商魔术字的,如果在双方不协商魔术字的情况下,某些 LCP 的数据报文需要使用魔
术字时,那么只能是将魔术字的内容填充为全 0;反之,则填充为配置参数选项协商后的结
果。
魔术字在目前所有的设备当中都是需要进行协商的,它被放在 Config-Request 的配置选项参数
中进行发送,而且需要由自身的通信设备独立产生,协议为了避免双方可能产生同样的魔术
字,从而导致通信出现不必要的麻烦,因此要求由设备采用一些随机方法产生一个独一无二的
魔术字。一般来说魔术字的选择会采用设备的系列号、网络硬件地址或时钟。双方产生相同魔
术字的可能性不能说是没有的,但应尽量避免,通常这种情况是发产在相同厂商的设备进行互
连时,因为一个厂商所生产的设备产生魔术字的方法是一样的。
我们知道魔术字产生的作用是用来帮助检测链路是否存在环路,当接收端收到一个 Config-
Request 报文时,会将此报文与上一次所接收到的 Config-Request 进行比较,如果两个报文中
所含的魔术字不一致的话,表明链路不存在环路。但如果一致的话,接收端认为链路可能存在
环路,但不一定存在环路,还需进一步确认。此时接收端将发送一个 Config-Nak 报文,并在该
报文中携带一个重新产生的魔术字,而且此时在未接收到任何 Config-Request 或 Config-Nak
报文之前,接收端也不会发送任何的 Config-Request 报文。这时我们假设可能会有以下两种情
况发生:
1. 链路实际不存在环路,而是由于对方在产生魔术字时与接收端产生的一
致,但实际这种情况出现的概率是很小的。当 Config-Nak 被对端接收到后,应该发送一个
Config-Request
报文(此报文中的魔术字为 Nak 报文中的),当对端接收到后,与上次
比较,由于接收端已经在 Nak 报文中产生了一个不同的魔术字,此时接
收端收到的 Config-Request 报文中的魔术字与上次配置请求报文中不
一样,所以接收端可断定链路不存在环路。
1. 链路实际上确实存在环路,一段时间后 Config-Nak
报文会返回到发送该报文的同一端。这时接收端比较这个 Config-Nak
报文与上一次发出去的一样,因此链路存在环路的可能性又增大了。我
们知道当一端收到了一个 Config-Nak 报文时,又会发送一个 Config-
Request 报文(该报文中的魔术字与 Config-Nak 中的一致),这样又回
到了最初的状态,在这条链路上就会不断的出现 Config-Request、
Config-Nak 报文,因此这样周而复始下去,接收端就会认为 PPP 链路存
在环路的可能性在不断增加,当达到一定数量级时,就可认为此链路存
在环路。
但在实际应用中根据不同设备实现 PPP 协议的方法,我们在链路环路检测时可采用两种方法。
第一种机制就是如上面所述的,这个过程不断地重复,最终可能会给 LCP状态机发一个 Down 事
件,这时可能会使 LCP 的状态机又回到初始化阶段,又开始新一轮的协商。当然对于某些设备
还会采用第二种机制,就是不产生任何事件去影响当前 LCP 的状态机,而是停留在请求发送状
态。但这时认为链路有环路的一端设备需要不断的向链路上发送 Echo-Request 报文来检测链路
环路是否被解除,当接收端收到 Echo-Reply 报文时,就认为链路环路被解除,从而就可能进行
后续的 PPP的过程。
PPP 协议也提供了可选的认证配置参数选项,缺省情况下点对点通信的两端是不进行认证的。
在 LCP 的 Config-Request 报文中不可一次携带多种认证配置选项,必须二者择其一
(PAP/CHAP)。一般是在 PPP 设备互连的设备上进行配置的,或设备默认支持一个缺省的认证
方式(PAP 是大部分设备所默认的认证方式)。当对端收到该配置请求报文后,如果支持配置
参数选项中的认证方式,则回应一个
Config-Ack 报文;否则回应一个 Config-Nak 报文,并附带上自希望双方采用的认证方式。当
对方接收到 Config-Ack 报文后就可以开始进行认证了,而如果收到得是 Config-Nak 报文,则
根据自身是否支持 Config-Nak 报文中的认证方式来回应对方,如果支持则回应一个新的
Config-Request(并携带上 Config-Nak 报文中所希望使用的认证协议),否则将回应一个
Config-Reject报文,那么双方就无法通过认证,从而不可能建立起 PPP链路。
PPP 支 持 两 种 授 权 协 议 : PAP ( PasswordAuthenticationProtocol ) 和 CHAP
(ChallengeHandAuthenticationProtocol)。
我们所知两个设备在使用 PAP 进行认证之前,应该确认那一方是验证方,那一方是被验证方。
实际上对于使用 PPP 协议互连的两端来说,既可作为认证方,也可作为被认证方。但通常情况
下,PAP 只使用一个方向上的认证。一般在两端设备使用 PAP 协议之前,均会设备上进行一些
相应的配置,对于 MA5200IP 接入设备,它默认就作为验证方,但可通过使用命令
PAPAuthenticationPAP/CHAP 来更改认证方式,而对于被验证方而言只需设置用户名和密码即
可。
PAP 认证是两次握手,在链路建立阶段,依据设备上的配置情况,如果是使用 PAP 认证,则验
证方在发送 Config-Request报文时会携带认证配置参数选项,而对于被验证方而言则是不需
要,它只需要收到该配置请求报文后根据自身的情况给对端返回相应的报文。如果点对点的两
端设备采用的是 PAP 双向认证时,也即是它同时也作为验证方,则此时需要在配置请求报文中
携带认证配置参数选项。因此,我们可以总结一下,如果对于点对点的两个设备在 PPP 链路建
立的过程中使用的认证方式为 PAP 的话,那么验证方在其 Config-Request 报文中必须含有认证
配置参数选项,且该认证配置参数选项的数据域为 0xC023。
当通信设备的两端在收到对方返回的 Config-Ack 报文时,就从各自的链路建立阶段进入到认证
阶段,那么作为被验证方此时需要向验证方发送 PAP 认证的请求报文,该请求报文携带了用户
名和密码,当验证方收到该认证请求报文后,则会根据报文中的实际内容查找本地的数据库,
如果该数据库中有与用户名和密码一致的选项时,则回向对方返回一个认证请求响应,告诉对
方认证已通过。反之,如果用户名与密码不符,则向对方返回验证不通过的响应报文。如果双
方都配置为验证方,则需要双方的两个单向验证过程都完成后,方可进入到网络层协议阶段,
否则在一定次的认证失败后,则会从当前状态返回链路不可用状态。
例如:当路由器 A(被验证方)收到了路由器 B 的 Config-Ack 报文后,因为是使用 PAP 认证,
所以作为被验证方的路由器 A 应主动向验证方(路由器 B)发送认证请求报文
(PAPAuthenticate),用户名和密码均为 163,报文的内容如下:
7EFF03C000C03 31 36 3303 31 36 337E
下划线的前四个字节是用户名,后四个字节是密码。
当路由器 B 收到了该报文后,会向路由器 A 回应一个 PAPAuthenticateAck 报文,报文内容如
下:
7EFFE
此时所回应的报文中,并未携带任何数据,如果是认证不通过,则会在返回的报文中指是因何
原
因无法认证通过,可能是无此用户名或密码不匹配。
与 PAP 认证比起来,CHAP 认证更具有安全性,从前面认证过程的数据包交换过程中不难发现,
采用 PAP 认证时,被验证是采用明文的方式直接将用户名和密码发送给验证方的,而对于 PAP
认证则不一样。
CHAP 为三次握手协议,它只在网络上传送用户名而不传送口令,因此安全性比 PAP 高。在验证
一开始,不像 PAP 一样是由被验证方发送认证请求报文了,而是由验证方向被验证方发送一段
随机的报文,并加上自己的主机名,我们通称这个过程叫做挑战。当被验证方收到验证方的验
证请求,从中提取出验证方所发送过来的主机名,然后根据该主机名在被验证方设备的后台数
据库中去查找相同的用户名的记录,当查找到后就使用该用户名所对应的密钥,然后根据这个
密钥、报文 ID 和验证方发送的随机报文用 Md5 加密算法生成应答,随后将应答和自己的主机名
送回,同样验证方收到被验证方发送回应后,提取被验证方的用户名,然后去查找本地的数据
库,当找到与被验证方一致用户名后,根据该用户名所对应的密钥、保留报文 ID和随机报文用
Md5 加密算法生成结果,和刚刚被验证方所返回的应答进行比较,相同则返回 Ack,否则返回
Nak。
例 11:如图 4-2 所示,当路由器 A(被验证方)收到了路由器 B 的 Challenge 报文后,报文内
容如下:
7EFF03C001C10FF 41 CF 22 AA 8E F1 B9 99 9A 79 A7 56 78 C4 A74d 41 35 32 30 30 417E
下划线的前 16 个字节是验证方随机产生的一段报文,后 7 个字节是验证方的主机名
(MA5200A),而且单个字节 10表示随机报文的长度。
而此时路由器 A 会根据用户名所对应的密钥使用报文的 ID 和该报文的内容生成一个回应报文,
报文内容如下:
7EFF03C001F1018 86 22 FF CE 81 D0 68 FF 80 85 00 A7 E3 85 3570 70 6B 69 73 73 40 68
75 617E
我们将这个回应报文与验证方发送的挑战报文进行比较,报文的代码域已由原 01 改为 02,总
报文的长度有变化,主要后而一个下划线的内容是被验证方的主机名(),而且此时回应的 16
个字节的报文已经是经过 MD5算法加密过的。
当验证方收到了这个回应报文后,会根据报文中被验证方的主机名()在本地的数据库中去查
找密钥,然后再对原发先发送的那段挑战报文进行 MD5 的算法加密,如果所得的结果与对方刚
发过来的 16 个字节的加密值一样的话,则就会发送一个报文通知被验证方,你的认证已经通
过,我们可以进入到下一个阶段了。在实际应用当中,我们很多都是使用 PC 机来进行拨号这个
过程,实际中当验证方发送挑战后,PC 机只接收而并不去查本地数据库,而直接使用在拨号对
话框中所输入的密码和报文的 ID 及报报文的内容进行 MD5 算法加密(这个在 PC 机采用 PPPOE
软件拨入到 MA5200时就是这样的)。
下面来看一下验证通过时,验证方给被验证方所发送的一段报文内容:
7EFF03C57 65 6C 63 6F 6D 65 20 74 6F20 4D 41 35 32 30 30 41 2E7E
此时所回应的报文的代码域为 03,且报文的实际内容是,WeltoMA5200A。
NCP 协议的数据报文是在网络层协议阶段被交换的,在这个阶段所需的一些配置参数选项协商
完后,就可以进行网络层的通信,也即是在点对点的链路上可以开始传送网络层的数据报文
了。NCP 协议主要包括 IPCP、IPXCP 等,但我们在实际当中最常遇见的也只有 IPCP 协议了,如
果对 IPXCP或其它的一些网络控制协议有兴趣,则可参见 RFC1552。
IPCP 控制协议主要是负责完成 IP 网络层协议通信所需配置参数的选项协商的。IPCP 在运行的
过程当中,主要是完成点对点通信设备的两端动态的协商 IP 地址。我们依据两端设备的配置选
项可将 IPCP的协商过程分为"静态"和"动态"。何为静态,何为动态,这是一个相对的概念,可
能不太准确,只作为参考使用。我们在下面会具体描述这两个过程。IPCP 的数据的文同 LCP 的
数据报文非常类似,只不过 NCP是在网络层协议阶段协商配置参数选项,
而 LCP 协议则是在链路建立阶段协商配置参数选项的。除此之外是两者在所使用报文上的相似
之处,我们知道 LCP 共包括十几种报文,而 IPCP也包括多种报文,但它的报文类型只是 LCP数
据报文的一个子集(只有 LCP 代码域从 1 到 7 这七种报文),而且实际的数据报文交换过程中
也仅涉及以下几种:Config-Request、Config-Ack、Config-Nak 和 Config-Reject(代码域从
1 到 4,而链路终止报文一般而言是不在网络协议阶段使用的,而且也是不需要的)。以下就具
体介绍一下 IPCP 控制协议的静态和动态的两个过程,实际上两者的区分是在于互连设备 IP 地
址的获取过程。
静态协商,也即是不协商。点对点的通信设备两端在 PPP协商之前已配置好了 IP 地址,所以就
无须在网络层协议阶段协商 IP地址,而双方唯一要做的就是告诉对方自身的 IP地址。在 IPCP
控制协议完成整个配置的过程时,最理想的情况将会看到如图所示的四种报文,而无其它报文
再被发送。如果当配置请求中所携带的网络层配置参数选项类似于 LCP 配置参数选项协商过程
一样,可能会有对方不识别的配置参数选项或不被对方所认可的配置参数选项的内容。这样在
这个阶段的协商过程中可能还会看到其它的一些报文。
在静态协商时,如果 IPCP 的 Config-Request 报文中只含有地址配置参数选项时(实际中可能
还会附带其它配置参数选项,这些配置参数选项的协商与
LCP阶段的一样,而我这里只提到了
IP 地址配置参数选项),无论是发送方还是接收方都同时发送 Config-Request 报文,其中配
置选项中只含有各自的 IP 地址。当对端收到该报文后,会发送一个 Config-Ack 报文,这个目
的是告诉对端我已经知道了你的 IP 地址,对路由器而言会增加一条到对端接口的主机路由。刚
进入网络层协议阶段时,IPCP 的状态机是 initial 的,但当完成了上述的整个过程后,IPCP 的
状态机改变为 Opened,双方也就可以开始网络层数据网的传送了。
当一端接收到 Config-Request 报文后,它从报文的配置参数选项中可获知对端的 IP 地址,但
并不与本端的 IP 地址进行比较。我们也知道,一般而言点对点的两端应该是在一个网段。但如
果双方的地址不在一个网段,IPCP 协议中并未规定,此时不给对方回应 Config-Ack 报文,而
是无条件的回送。因此说点对点通信的两端如果是手动设置每一端的 IP地址时,无须双方地址
在同一网段。
例 8:假设 IPCP 在网络层协议阶段开始协商配置参数选项(这里只举协商 IP 地址的配置参数
选项地的过程),发送方设置 IP 地址为 ,接收方设置 IP 地址为 ,发
送方发送给 Config-Request报文内容如下:
7EFF00A0306C0A800017E
在这个例子中我们能看见明显的改变之处再于 PPP 协议域字段由原先的 0xC021 改变为
0x8021,下划线的部分表示本端的 IP地址。
当对端正确接收到了该报文后,应该回应一个 Config-Ack报文,报文内容如下:
7EFF00A0306C0A800017E
同样的接收方给发送方也发送一个 Config-Request 报文内容如下,但此时报文中 IP 地址配置
参数选项的值为本端的 IP地址():
7EFF00A0306C0A800027E
发送方回应一个 Config-Ack报文给接收方,报文内容如下:
7EFF00A0306C0A800027E
动态协商,也即是一端配置为动态获取 IP 地址,另一端通过手动方式配置 IP 地址,且允许给
对端分配 IP 地址,这个过程实际上可与窄带拨号上网的过程相一致,如果我们想用计算机上
网,均会安装一个拨号适配器,而且计算机中的拨号网络适配器是采用动态获取 IP 地址的方
式,也就是在 IPCP的 Config-Request报文中只携带 IP地址的配置参数选项。
这个例子与一个例子相似如果是配置参数选项中含有其它配置参数选项,则可能会遇到其它的
一些情况(如不识别配置参数选项的代码域或不认可配置参数选项的内容,但对于这些情况的
处理方法和 LCP 配置参数选项的处理方法一致)。图我们可以看出发送方连续发送了两次
Config-Request 报文,才能完成发送方的协商过程。而接收方仍然只需要发送一次 Config-
Request即可完成本端的协商过程。
由于发送方没有配置 IP 地址(而是动态获取 IP 地址),所以在 IPCP 的 Config-Request 报文
的 IP 地址配置参数配置选项中的 IP 地址填充全 0(也即是 ),这样当对端收到这个
Config-Request 报文时,当接收方收到该配置请求报文后会迅检测 IP 地址的内容,如果发送
为全 0,则认为对端的这个 IP地址不是我所希望的值,这样就回应一个 Config-Nak
报文,并将希望分配给对方的 IP 地址填充到 Config-Nak 报文内。这时当接收方收到 Config-
Nak 报文后,就会重新发送一个 Config-Request 报文,这个报文中的 IP 地址配置选项为对方
在 Nak报文中所提供的。
接收方 IP 地址的配置过程与静态时的一样,只需发送一个 Config-Request 报文即可,当收到
发送方的 Config-Ack报文,就表示接收方的 IP地址配置完成。
例 9:假设 IPCP 在网络层协议阶段开始协商配置参数选项(这里只举协商 IP 地址的配置参数
选项地的过程),发送方没有配置 IP 地址,而接收方配置了 IP 地址为 ,接收方
可给
发送方分配 IP地址(),发送方发送给接收方的 Config-Request报文内容如下:
7EFF00A07E
有下划线的部分表示本端的 IP地址。
当对端正确接收到了该报文后,应该回应一个 Config-Nak报文,报文内容如下:
7EFF00A0306C0A800017E
当接收方收到该报文后,重新发送一个 Config-Request报文,报文内容如下:
7EFF00A0306C0A800017E
接收方再次收到发送方的一个 Config-Request报文,此时将回应一个 Config-Ack报文,报文内
容如下:
7EFF00A0306C0A800017E
请仔细观察一下这些报文在交互过程中,PPP数据帧净载荷内的数据报文的类型域和报文 ID。
同样的接收方给发送方也发送一个 Config-Request报文,报文内容如下:
7EFF00A0306C0A800027E
发送方应回送一个 Config-Ack给接收方,报文内容如下:
7EFF00A0306C0A800027E
第1章 PPPOE协议
第1章 PPPOE协议
随着宽带网络技术的不断发展,以 xDSL、CableModem 和以太网为主的几种主流宽带接入技术的
应用已开展的如火如荼。同时又给各大网络运营商们带来了种种困惑,无论使用哪种接入技
术,对于他们而言可盼和可求的是如何有效的管理用户,如何从网络的投资中收取回报,因此
对于各种宽带接入技术的收费的问题就变得更加敏感。在传统的以太网模型中,我们是不存在
所谓的用户计费的概念,要么用户能设置/获取 IP 地址上网,要么用户就无法上网。IETF 的工
程师们在秉承窄带拨号上网的运营思路(使用 NAS 设备终结用户的 PPP 数据包),制定出了在
以太网上传送 PPP 数据包的协议(PointToPointProtocolOverEthernet),这个协议出台后,
各网络设备制造商也相继推出自已品牌的宽带接入服务器(BAS),它不仅能支持 PPPOE协议数
据报文的终结,而且还能支持其它许多协议。如华为公司的 MA5200IP 接入设备和 ISN8850 智能
多业务交换机。
PPPOE 协议提供了在广播式的网络(如以太网)中多台主机连接到远端的访问集中器(我们对
目前能完成上述功能的设备为宽带接入服务器)上的一种标准。在这种网络模型中,我们不难
看出所有用户的主机都需要能独立的初始化自已的 PPP 协议栈,而且通过 PPP 协议本身所具有
的一些特点,能实现在广播式网络上对用户进行计费和管理。为了能在广播式的网络上建立、
维持各主机与访问集中器之间点对点的关系,那么就需要每个主机与访问集中器之间能建立唯
一的点到点的会话。
PPPOE 协议共包括两个阶段,即 PPPOE 的发现阶段(PPPOEDiscoveryStage)和 PPPOE 的会话阶
段(PPPOESessionStage)。这里我们更注重 PPPOE发现阶段的介绍,因为 PPPOE的会话阶段和
PPP 的会话过程基本上是一样的,两者的主要区别在于只是在 PPP 的数据报文前封装了 PPPOE
的报文头。无论是哪一个阶段的数据报文最终会被封装成以太网的帧进行传送。当一个主机希
望能够开始一个 PPPOE 会话时,它首先会在广播式的网络(也可能还要跨跃多点访问的网络,
如 ATM 等,从而就形成了 PPPOEOA 的数据包)上寻找一个访问集中器,当然可能网络上会存在
多个访问集中器时,对于主机而言则会根据各访问集中器(AC,AccessConcentration)所能提
供的服务或用户的预先的一些配置来进行相应的选择。当主机选择完了所需要的访问集中器
后,就开始和访问集中器建立一个 PPPOE 会话进程。在这个过程中访问集中器会为每一个
PPPOE 会话分配一个唯一的进程 ID,会话建立起来后就开始了 PPPOE 的会话阶段,在这个阶段
中已建立好点对点连接的双方(这种点对点的结构与 PPP 不一样,它是一种逻辑上的点对点关
系)就采用 PPP 协议来交换数据报文,从而完成一系列 PPP 的过程,最终将在这点对点的逻辑
通道上进行网络层数据报的传送。
PPPOE 的初始化过程是至关重要的,它不仅要在广播式的网络上确定一对一的逻辑关系,而且
还要为 PPPOE 的会话阶段准备一些必要条件,如访问集中器唯一分配的会话 ID
(SessionID)。在介绍 PPPOE 的发现阶段之前,首先让我们重温一下以太网帧的封装格式,前
面也介绍过了,所有的 PPPOE 的数据报文均是被封装在以太网的数据域(净载荷区)中传送
的。以太网的帧格式对于大多数人来说是并不陌生,而且目前大多数的网络中都在使用以太网
版,因此 EthernetII 就被作为一种事实上的工业标准而广泛使用,如果对以太网不太熟悉
或想深入了解的读者,可参考相关局域网技术方面的书籍。以太网目的地址(目的 MAC 地址)
和以太网源地址(源 MAC 地址),是我们大家最为熟悉的数据链路层地址。它包括单播地址、
多播地址和广播地址,而对于 PPPOE 协议中要使用到单播地址和广播地址。在前面也提到了,
对于 PPP 这样的数据链路层协议而言,二层地址通信双方之间已失去了原有的意义。以太网的
类型域也是我们最关心的一个字段,它在 1997 年以前还一直由施乐公司维护,但后来就交由
IEEE802 小组维护了。通过这个字段的内容,数据包的接收方可以识别以太网的数据域中承载
的是什么协议的数据报文。对于 PPPOE 的两大阶段,也正是通过以太网的类型域进行区分的。
在 PPPOE 的发现阶段时,以太网的类型域填充 0x8863;而在 PPPOE 的会话阶段时,以太网的类
型域填充为 0x8864。数据域(净载荷)主要是用来承载类型域中所指示的数据报文,在 PPPOE
协议中所有的 PPPOE数据报文就是被封装在这个域中被传送。
校验域,主要用来保证链路层数据帧传送的正确性。
PPPOE 的数据报文是被封装在以太网帧的数据域内的。简单来说我们可能把 PPPOE 报文分成两
大块,一大块是 PPPOE 的数据报头,另一块则是 PPPOE 的净载荷(数据域),对于 PPPOE 报文
数据域中的内容会随着会话过程的进行而不断改变。
PPPOE 的发现阶段可分为四步,其实这个过程也是 PPPOE 四种数据报文的交换的一个过程。当
完成这四步后,用户主机与访问集中器双方就能获知对方的 MAC 地址和唯一的会话 ID 号,从而
进入到下一个阶段(PPPOE 的会话阶段)。实际上双方在互相知道了对方的 MAC 地址后,就已
经在广播式的网络上确定了一一的对应关系,为了保证这个连接的有效性,同时使 PPPOE 协议
能更加灵活的运用,因此还加入了会话 ID 字段,通过这两个条件就可完成确定双方点对点的关
系。在这个阶段一开始,由于接入用户并不知道访问集中器的 MAC 地址,则使用类似于 ARP 解
析的过程的机制来获取访问集中器的 MAC 地址。首先由接入用户侧发起一个初始化的广播报
文,对于访问集中器如果配置了 PPPOE 的业务时,它会时实检测网络上的数据包,当发现以太
网数据帧中所承载的是 PPPOE 报文时(通过协议域的内容来区分),就会将其交给相应的模块
去处理。当收到初始化报文后,访问集中器会向该用户回应一个报文。如果网络上存在很多这
样的访问集中器且都收到了用户侧发送的初始化报文时,它们也都会向用户侧会送一个确认报
文,如果该用户收到这个报文后,则会依据报文中所携带的内容或本端的一些配置来选择一个
唯一的访问集中器进行会话。到此时已完成了前两步了,那么剩下的两步则是协商一些所提供
的服务选项和获取 PPPOE 会话阶段所必须的会话 ID 值。在这个阶段,所有数据报文是被承载在
以太网的数据域中的,而且以太网数据帧的协议域始终为 0x8863。
PPPOE 数据报文的数据区最开始的 4 位为版本域,协议中给出了明确的规定,这个域的内容填
充 0x01。紧接在版本域后的 4 位是类型域,协议中同样规定,这个域的内容填充为 0x01。代码
域占用 1 个字节,对于 PPPOE 的不同阶段这个域内的内容也是不一样的。会话 ID 点用 2 个字
节,当访问集中器还未分配唯一的会话 ID 给用户主机的话,则该域内的内容必须填充为
0x0000,一旦主机获取了会话 ID 后,那么在后续的所有报文中该域必须填充那个唯一的会话
ID 值。长度域为 2 个字节,用来指示 PPPOE 数据报文中净载荷的长度。数据域,有时也称之为
净载荷域,在 PPPOE 的不同阶段该域内的数据内容会有很大的不同。在 PPPOE 的发现阶段时,
该域内会填充一些 Tag(标记);而在 PPPOE的会话阶段,该域则携带的是 PPP的报文。
对于发现阶段的 PPPOE 数据报文而言,它的净载荷可能包含零个或多个 Tag(标记),实际上
这些标记的意义非常类似于 PPP 配置参数选项,它同样也是要经过协商的。对于 PPPOE 协议而
言,没有像 PPP 的配置参数选项那样定义了很多细节,而只是一个初略的定义,因此在实际当
中实现这个过程会依据不同厂商的设备有不同。
从上图中可以看出,标记的封装格式采用的是大家所熟知的 TLV 结构,也即是(类型+长度+数
据)。
标记的类型域为 2个字节,下表列出了各种标记类型的含义:
标记类型 标记说明
0x0000 表示 PPPOE 报文数据域中一串标记的结束,为了保证版本的
兼容性而保留,在有些报文中有应用。
0x0101 服务名,主要用来表明网络侧所能提供给用户的一些服务。
0x0102 访问集中器名,当用户侧接收到了 AC 的回应的 PADO 报文
时,就可获从所携带的标记中获知访问集中器的名子,而且
还可以据此来选择相应的访问集中器。
0x0103 主机唯一标识,类似于 PPP 数据报文中的标识域,主要是用
来匹配发送和接收端的,因为对于广播式的网络中会同时存
在很多个 PPPOE的数据报文。
0x0104 AC-Cookies,主要被用来防止恶意性 DOS功击。
0x0105 销售商的标识符。
0x0110 中继会话 ID,对于 PPPOE 的数据报文也同样可以像 DHCP 报
文一样被中断到另外的 AC 上终结,这个字段则是用来维护
另一个连接的。
0x0201 服务名错误,当请求的服务名不被对端所接受时,会在响应
的报文中携带这个标记。
0x0202 访问集中器名出错。
0x0203 一般性错误。
标记的长度域为 2个字节,它用来指明标记数据域的长度。
标记的数据域中用来放置不同类型标记所对应的相关数据。
上图中每一行后面的数字为该报文的代码值。
PADI(PPPOEActiveDiscoveryInitiation)是 PPPOE 发现阶段的第一步,也即是由用户侧首先
发送的一个报文。用户主机是以广播的方式发送这个报文,所以该报文所对应的以太网帧的目
的地址域应填充为全 1,而源地址域填充用户主机的 MAC 地址。广播包可能会被多个访问集中
器接收到,后面会讲到对于接收到 PADI报文的访问集中器会使用 PADO报文来回应用户主机。
我们来看一下 PADI 报文中几个域的填充情况,前面已强调过版本域和类型域固定填充 0x01,
因为两个域各占 4 位,所以合并为 1 个字节后应为 0x11。PADI 报文的代码域填充 0x09,会话
ID 填充 0x0000。PADI 报文必须含一个由用户侧请求的正确服务名标记,当然还可能携带一些
其它的标记,而一个完整的 PADI 报文(包括 PPPOE 头)不能超过 1484 个字节,以便能留下足
够的空间给中继代理增加一个中继的会话 ID标记。
例如:PADI数据报文
FFFFFFFFFFFF0010A497C1DC
这个报文中包括两个标记:一个是主机的只唯一标识,另一个则是服务名标记,从上面这个报
文中可以看出服务名没有具体实际的内容,说明对于用户主机可以接受任何由访问集中器所提
供的服务。
PADO(PPPOEActiveDiscoveryOffer)是 PPPOE发现阶段的第二步,也即是由访问集中器回应各
用户主机发送的 PADI 报文,此时该报文所对应的以太网帧的源地址填充访问集中器的 MAC 地
址,而目的地址则填充从 PADI中所获取的用户主机的 MAC地址。
我们来看一下 PADO 报文几个域的填充情况,版本域和类型域不变固定填充 0x01,代码域填充
0x07,会话 ID 填充 0x0000。PADO 报文中必须包含一个访问集中器名这个标记,同时还要包含
对 PADI报文中服务名标记的确认标记和对其它标记的一些确认标记。这个过程有点类似于 PPP
协议中链路建立过程中的 Config-Ack 报文,当然如果用户主机所申请的服务访问集中器不支持
的话,则访问集中器就不会回应 PADO报文。
例如:PADO数据报文
0010A497C1D900B0D0BCABA64D 44 35 35 30
这个报文中包括 4 个标记,在 PADI 所提供的标记的基础上又增加了两个标记,一个是访问集中
器名,下划线部分即表示访问集中器名(MD5500),而且还包含一个标记结束标记。
PADR(PPPOEActiveDiscoveryRequest)是 PPPOE发现阶段的第三步,也即是由用户主机向访问
服务器发送单播的请求报文。当用户主机收到 PADO 报文后,会从这些报文中挑选一个访问集中
器作为后续会话的对象。由于用户主机在收到 PADO 报文后,就获知了访问集中器的 MAC 地址,
因此 PADR 报文所以应的以太网帧的源地址填充用户主机的 MAC 地址,而以太网的目的地址填充
为访问集中器的 MAC地址。
我们来看一下 PADR报文几个域的填充情况,版本域和类型域不变固定填充 0x01,代码域填充
0x19,会话 ID 域填充 0x0000。此时 PADR 报文必须准确地包含一个服务名的标记,指示用户主
机申请的服务和其它的标记类型。
例如:PADR数据报文
00B0D0BCAB750010A497C1DC
当收到访问集中器的 PADO 报文后,用户主机会发送 PADR 报文,该报文所含的标记域与 PADI 报
文中的一致,但些时用户主机已获知了访问集中器名。
PADS(PPPOEActiveDiscoverySession-confirmation)是 PPPOE 发现阶段的第四步,也即是最
后一步,此时访问集中器当收到 PADR 报文时,就准备进入开始一个 PPP的会话了,而此时访问
集中器会为在这个会话分配一个唯一的会话进程 ID,并在发送给主机的 PADS 报文中携带上这
个会话 ID。当然如果访问集中器不满足用户所申请的服务的话,则会向用户发送一个 PADS 报
文,而其中携带一个服务名错误的标记,而且此时该 PADS报文中的会话 ID填充 0x0000。
我们来看一下 PADS 报文几个域的填充情况,版本域和类型域不变固定填充 0x01,代码域填充
0x65,会话 ID必须设为给这个 PPPOE进程所分配的唯一值。
例 4:PADS数据报文
0010A497C1D900B0D0BCAB1 6B
其中下划线部分为访问集中器给这个 PPPOE会话分配的唯一会话 ID。
PADT(PPPOEActiveDiscoveryTerminate)报文可能在会话进行开始之后的任意时间内被发送,
主要是用来终止一个 PPPOE 会话的止。它可以由主机或访问集中器发送,目的地址填充为对端
的以太网的
MAC地址
我们来看一下 PADT 报文几个域的填充情况,版本域和类型域不变固定填充 0x01,代码域填充
0xA7,会话 ID 是那个需要被终止的进程,报文中不需要携带任何标记。当收到 PADT 的时候,
不允许再使用当前这个进程发送 PPP数据流量。在收到或发送 PADT后甚至正常的 PPP终止报文
也不能被发送。
例如:PADT数据报文
00B0D0BCAB750010A497C1DA701 6B0000
这个报文中不含有任何标记,而且下划线部分为所需终止的会话进行 ID。
一旦 PPPOE 进入到会话阶段,则 PPP 的数据报文就会被填充在 PPPOE 的净载荷中被传送,这时
两者所发送的所有以太网包均是单目地址。PPPOE 会话阶段以太网帧的协议域填充为 0x8864,
代码域填充 0x00,整个会话的过程就是 PPP 的会话过程,但在 PPPOE 数据域内的 PPP 数据帧是
从协议域开始的。
例如:PPPOE会话阶段的数据报文
0010A497C1D900B0D0BCAB16B0014C0 21 01 00 00 12 01 04 05 DC 03 04 C0 23 05 06 00 00
4E 3D
我们可以看到下划线部分为 PPP 的数据报文(0xC021 表示 LCP 协商阶段,且为代码域为 0x01
表示是 Config-Request报文)。
Netxray 是一个抓包软件,它可以捕获达到本 PC 或从本 PC 发出去的数据包。这里给出了用该
软件捕获的 PPPOE过程的数据包。
该报文的目的地址是广播地址,对于 PPPOE 来说,它肯定是处于发现阶段的 PADI 报文。从后面
的 8863和 09也可以确定这一点。
附录缩略词表
AAA AuthenticationAuthorizationAcco
unting
验证、授权、计费
BNCP BridgingNetworkControlProtocol 桥接网络控制协议
BNP BridgingNetworkProtocol 桥接网络协议
CHAP Challenge-
HandshakeAuthenticationProtocol
验证请求握手协议
CHAP ChallengeHandshakeAuthenticatio
nProtocol
挑战握手验证协议
CRC CyclicRedundancyCheck 循环校验码
DSAP DestinationServiceAccessPoint 目的业务接入点
FCS FrameCheckSequence 帧检查序列
IPCP InternetProtocolControlProtocol IP控制协议
IPX InternetProtocoleXchangeprotoco
l
IP交换协议