pppoe协议试验学习-

 前几天将pppoe协议看完,但仅仅停留在概念的理解上,至于Adsl通过PPPoE如何实现与Adsl server的认证则需要通过实验来加深了解。
   PPPoE大致原理如下: 
   1. PPPoE的验证过程是由用户计算机的PADI(PPPoE Active Discovery Initiation)数据包开始的,PADI广播发送,它的作用是询问网络上有没有提供服务的PPPoE验证服务器,服务器会以一个单播发送的PADO(PPPoE Active Discovery Offer)做为回应,之后两者之间的所有数据包都是单播发送的。
   2.如果网络上存在多台验证服务器,用户计算机会与最先收到的PADO所对应的服务器进行后续的验证过程,而不再向其它服务器发送任何数据。
   3.验证过程中,计算机会在一个数据包中以明文发送用户名和密码,因为是单播发送,所以只有验证服务器会收到。
   4.验证成功后,用户就可以正常上网了。验证服务器会定时向用户发送Echo-Request数据包,用户则会回应一个Echo-Reply数据包,它们的作用是测试连接是否正常,如果服务器多次没有收到用户的Echo-Request,就认为用户已经失去响应,并断开连接。

    实战准备工作:
   1.NIC MAC地址:00-01-6C-AD-6E-C5
   2.Huawei Adsl line指示灯工作正常。
   3.server 是Huawei 的 5200,yn-qj-ma5200-3
   4.sniffer选用Wiresharp Version 0.99.6a (SVN Rev 22276)
一、当选用错误的密码登录时,wiresharp抓取到的报文:
 
可以看出Adsl与服务器端同步后,即以广播方式不间断地发送PADI数据报,询问是否存有PPPOE验证服务器。最近的一个服务器Huaweite_14(当前只有一个)收到该广播后,发出PADO数据报,NIC收到该数据报后,向服务器发出PADR请求,服务器响应之PADS。然后即进入用户名密码验证阶段,从图中可看出,在第15数据报中,用户名与密码是明文传输的(密码为123456)。当用户名密码错误时,服务器会首先向用户端发出PADT数据报,用户响应之PADT,最后服务器端以PADT确认,共需要三个数据报来拆除链接。至于中间密码验证过程,wiresharp将数据报识别为arp协议,估计有误。
二、当选用正确的用户名与密码登录时,抓的报文如下:

建立初期,仍然要经过四个阶段:PADI,PADO,PADR,PADS,然后再对用户名与密码进行验证(用户名与密码以明文传输),由于是用户端主动断开连接,因此,只是由用户端发一个数据报PADT来结束连接。只是在该验证过程中,涉及到相当多的ARP协议与IGMP协议传输,不知为何?
PPPOE的初始化过程
PPPOE 的初始化过程是至关重要的,它不仅要在广播式的网络上确定一对一的逻辑关系,而且还要为 PPPOE 的会话阶段准备一些必要条件,如访问集中器唯一分配的会话 ID Session ID )。在介绍 PPPOE 的发现阶段之前,首先让我们重温一下以太网帧的封装格式,前面也介绍过了,所有的 PPPOE 的数据报文均是被封装在以太网的数据域(净载荷区)中传送的。

1.1.1   以太网的帧格式

以太网的帧格式对于大多数人来说是并不陌生,而且目前大多数的网络中都在使用以太网 2.0 版,因此 EthernetII 就被作为一种事实上的工业标准而广泛使用,如果对以太网不太熟悉或想深入了解的读者,可参考相关局域网技术方面的书籍。下图为以太网的帧格式:(图略)
 
Ÿ  以太网目的地址(目的 MAC 地址)和以太网源地址(源 MAC 地址),是我们大家最为熟悉的数据链路层地址。它包括单播地址、多播地址和广播地址,而对于 PPPOE 协议中要使用到单播地址和广播地址。在 PPP 的培训教材中也提到了,对于 PPP 这样的数据链路层协议而言,二层地址通信双方之间已失去了原有的意义。
Ÿ  以太网的类型域也是我们最关心的一个字段,它在 1997 年以前还一直由施乐公司维护,但后来就交由 IEEE802 小组维护了。通过这个字段的内容,数据包的接收方可以识别以太网的数据域中承载的是什么协议的数据报文。对于 PPPOE 的两大阶段,也正是通过以太网的类型域进行区分的。在 PPPOE 的发现阶段时,以太网的类型域填充 0x8863 ;而在 PPPOE 的会话阶段时,以太网的类型域填充为 0x8864
Ÿ  数据域(净载荷)主要是用来承载类型域中所指示的数据报文,在 PPPOE 协议中所有的 PPPOE 数据报文就是被封装在这个域中被传送。
Ÿ  校验域,主要用来保证链路层数据帧传送的正确性。

1.1.2  PPPOE的数据报文格式

描述完了以太网的帧格式后,我们简要介绍一下 PPPOE 的数据报文格式。 PPPOE 的数据报文是被封装在以太网帧的数据域内的。简单来说我们可能把 PPPOE 报文分成两大块,(虽然这样比较笼统,但还是比较好助于理解),一大块是 PPPOE 的数据报头,另一块则是 PPPOE 的净载荷(数据域),对于 PPPOE 报文数据域中的内容会随着会话过程的进行而不断改变。下图为 PPPOE 的报文的格式:(图略)
Ÿ  PPPOE 数据报文最开始的 4 位为版本域,协议中给出了明确的规定,这个域的内容填充 0x01
Ÿ  紧接在版本域后的 4 位是类型域,协议中同样规定,这个域的内容填充为 0x01
Ÿ  代码域占用 1 个字节,对于 PPPOE 的不同阶段这个域内的内容也是不一样的,在这里没有用表格的形式将所有代码列出,但在后续章节会给出一些代码与数据报文的对照。
Ÿ  会话 ID 点用 2 个字节,当访问集中器还未分配唯一的会话 ID 给用户主机的话,则该域内的内容必须填充为 0x0000 ,一旦主机获取了会话 ID 后,那么在后续的所有报文中该域必须填充那个唯一的会话 ID 值。
Ÿ  长度域为 2 个字节,用来指示 PPPOE 数据报文中净载荷的长度。
Ÿ  数据域,有时也称之为净载荷域,在 PPPOE 的不同阶段该域内的数据内容会有很大的不同。在 PPPOE 的发现阶段时,该域内会填充一些 Tag (标记);而在 PPPOE 的会话阶段,该域则携带的是 PPP 的报文。

1.1.3  PPPOE发现阶段的数据报文

PPPOE 的发现阶段可分为四步,其实这个过程也是 PPPOE 四种数据报文的交换的一个过程。当完成这四步后,用户主机与访问集中器双方就能获知对方的 MAC 地址和唯一的会话 ID 号,从而进入到下一个阶段( PPPOE 的会话阶段)。实际上双方在互相知道了对方的 MAC 地址后,就已经在广播式的网络上确定了一一的对应关系,为了保证这个连接的有效性,同时使 PPPOE 协议能更加灵活的运用,因此还加入了会话 ID 字段,通过这两个条件就可完成确定双方点对点的关系。
在这个阶段一开始,由于接入用户并不知道访问集中器的 MAC 地址,则使用类似于 ARP 解析的过程的机制来获取访问集中器的 MAC 地址。首先由接入用户侧发起一个初始化的广播报文,对于访问集中器如果配置了 PPPOE 的业务时,它会时实检测网络上的数据包,当发现以太网数据帧中所承载的是 PPPOE 报文时(通过协议域的内容来区分),就会将其交给相应的模块去处理。当收到初始化报文后,访问集中器会向该用户回应一个报文。如果网络上存在很多这样的访问集中器且都收到了用户侧发送的初始化报文时,它们也都会向用户侧会送一个确认报文,如果该用户收到这个报文后,则会依据报文中所携带的内容或本端的一些配置来选择一个唯一的访问集中器进行会话。到此时已完成了前两步了,那么剩下的两步则是协商一些所提供的服务选项和获取 PPPOE 会话阶段所必须的会话 ID 值。
在这个阶段,前面在讲述以太网帧格式时也特别强调了,所有数据报文是被承载在以太网的数据域中的,而且以太网数据帧的协议域始终为 0x8863
下面我们结合具体的数据报文的内容,来具体的讲解这四步的过程。

2.1.3.1 PPPOE数据报文中Tag(标记)的格式

对于发现阶段的 PPPOE 数据报文而言,它的净载荷可能包含零个或多个 Tag (标记),实际上这些标记的意义非常类似于 PPP 配置参数选项,它同样也是要经过协商的。对于 PPPOE 协议而言,没有像 PPP 的配置参数选项那样定义了很多细节,而只是一个初略的定义,因此在实际当中实现这个过程会依据不同厂商的设备有不同。首先还是让我们看一下承载在 PPPOE 报文数据域中的标记封装格式:(图略)
 
从上图中可以看出,标记的封装格式采用的是大家所熟知的 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 个字节,它用来指明标记数据域的长度。
Ÿ  标记的数据域中用来放置不同类型标记所对应的相关数据。

2.1.3.2 PADIPPPOE Active Discovery Initiation)报文

PPPOE 发现阶段的第一步,也即是由用户侧首先发送这样一个报文。用户主机是以广播的方式发送这个报文,所以该报文所对应的以太网帧的目的地址域应填充为全 1 ,而源地址域填充用户主机的 MAC 地址。广播包可能会被多个访问集中器接收到,后面会讲到对于接收到 PADI 报文的访问集中器会使用 PADO 报文来回应用户主机。
我们来看一下 PADI 报文中几个域的填充情况,前面已强调过版本域和类型域固定填充 0x01 ,因为两个域各占 4 位,所以合并为 1 个字节后应为 0x11 PADI 报文的代码域填充 0x09 ,会话 ID 填充 0x0000 PADI 报文必须含一个由用户侧请求的正确服务名标记,当然还可能携带一些其它的标记,而一个完整的 PADI 报文(包括 PPPOE 头)不能超过 1484 个字节,以便能留下足够的空间给中继代理增加一个中继的会话 ID 标记。
1 PADI 数据报文
这个报文中包括两个标记:一个是主机的只唯一标识,另一个则是服务名标记,从上面这个报文中可以看出服务名没有具体实际的内容,说明对于用户主机可以接受任何由访问集中器所提供的服务。

2.1.3.3 PADOPPPOE Active Discovery Offer)报文

PPPOE 发现阶段的第二步,也即是由访问集中器回应各用户主机发送的 PADI 报文,此时该报文所对应的以太网帧的源地址填充访问集中器的 MAC 地址,而目的地址则填充从 PADI 中所获取的用户主机的 MAC 地址。
我们来看一下 PADO 报文几个域的填充情况,版本域和类型域不变固定填充 0x01 ,代码域填充 0x07 ,会话 ID 填充 0x0000 PADO 报文中必须包含一个访问集中器名这个标记,同时还要包含对 PADI 报文中服务名标记的确认标记和对其它标记的一些确认标记。这个过程有点类似于 PPP 协议中链路建立过程中的 Config-Ack 报文,当然如果用户主机所申请的服务访问集中器不支持的话,则访问集中器就不会回应 PADO 报文。
2 PADO 数据报文
这个报文中包括 4 个标记,在 PADI 所提供的标记的基础上又增加了两个标记,一个是访问集中器名,下划线部分即表示访问集中器名( MD5500 ),而且还包含一个标记结束标记。

2.1.3.4 PADRPPPOE Active Discovery Request)报文

PPPOE 发现阶段的第三步,也即是由用户主机向访问服务器发送单播的请求报文。当用户主机收到 PADO 报文后,会从这些报文中挑选一个访问集中器作为后续会话的对象。由于用户主机在收到 PADO 报文后,就获知了访问集中器的 MAC 地址,因此 PADR 报文所以应的以太网帧的源地址填充用户主机的 MAC 地址,而以太网的目的地址填充为访问集中器的 MAC 地址。
我们来看一下 PADR 报文几个域的填充情况,版本域和类型域不变固定填充 0x01 ,代码域填充 0x19 ,会话 ID 域填充 0x0000 。此时 PADR 报文必须准确地包含一个服务名的标记,指示用户主机申请的服务和其它的标记类型。
3 PADR 数据报文
 
当收到访问集中器的 PADO 报文后,用户主机会发送 PADR 报文,该报文所含的标记域与 PADI 报文中的一致,但些时用户主机已获知了访问集中器名。

2.1.3.5 PADSPPPOE Active Discovery Session-confirmation)报文

PPPOE 发现阶段的第四步,也即是最后一步,此时访问集中器当收到 PADR 报文时,就准备进入开始一个 PPP 的会话了,而此时访问集中器会为在这个会话分配一个唯一的会话进程 ID ,并在发送给主机的 PADS 报文中携带上这个会话 ID 。当然如果访问集中器不满足用户所申请的服务的话,则会向用户发送一个 PADS 报文,而其中携带一个服务名错误的标记,而且此时该 PADS 报文中的会话 ID 填充 0x0000
我们来看一下 PADS 报文几个域的填充情况,版本域和类型域不变固定填充 0x01 ,代码域填充 0x65 ,会话 ID 必须设为给这个 PPPOE 进程所分配的唯一值。
4 PADS 数据报文
其中下划线部分为访问集中器给这个 PPPOE 会话分配的唯一会话 ID

2.1.3.6 PADTPPPOE Active Discovery Terminate)报文

PADT 报文可能在会话进行开始之后的任意时间内被发送,主要是用来终止一个 PPPOE 会话的止。它可以由主机或访问集中器发送,目的地址填充为对端的以太网的 MAC 地址
我们来看一下 PADT 报文几个域的填充情况,版本域和类型域不变固定填充 0x01 ,代码域填充 0xA7 ,会话 ID 是那个需要被终止的进程,报文中不需要携带任何标记。当收到 PADT 的时候,不允许再使用当前这个进程发送 PPP 数据流量。在收到或发送 PADT 后甚至正常的 PPP 终止报文也不能被发送。
5 PADT 数据报文
这个报文中不含有任何标记,而且下划线部分为所需终止的会话进行 ID

你可能感兴趣的:(职场,休闲)