原文地址:PPPoE拨号过程解析 作者:nike

PPPoE(PPP overEthernet)是在以太网上建立PPP连接,由于以太网技术十分成熟且使用广泛,而PPP协议在传统的拨号上网应用中显示出良好的可扩展性和优质的管理控制机制,二者结合而成的PPPoE协议得到了宽带接入运营商的认可并广为采用。PPPoE不仅有以太网的快速简便的特点,同时还有PPP的强大功能,任何能被PPP封装的协议都可以通过PPPoE传输。

PPPoE的数据报文是被封装在以太网帧的数据域内的。

以太网帧头包括:

1. 目的MAC地址(该阶段为ffffffffffff的广播地址)

2. 源MAC地址(客户端MAC地址)

3. 以太网协议类型(该阶段为0x8863,表示为发现阶段)。

PPPoE数据报文的格式:

1.PPPoE数据报文最开始的4位为版本域(Version),协议中给出了明确的规定,这个域填充的内容为0x01.

2. 版本域后是4位的类型域(Type),根据协议规定,这个域填充的内容也是0x01.

3. 代码域(Code)占用一个字节,对于PPPoE的不同阶段这个域内容也不一样。

4. 会话ID(Session ID)占用两个字节,当访问集中器(AccessConcentrator)还没有分配唯一的会话ID给用户主机的话,改域的内容必须填充为0x0000;一旦主机获取了会话ID后,那么在后续的所有报文里面必须填充那个唯一的会话ID。

5.PPPoE的Payload长度(Length)占两个字节。PPPoE的Payload可以由多个TLV组成,每个包括Tag_Type,Tag_Length,Tag_Vlaue。

PPPoE建立过程可以分为Discovery阶段和PPP会话阶段。Discovery阶段是一个无状态的阶段,该阶段主要是选择接入服务器,确定所要建立的PPP会话标识符SessionID,同时获得对方点到点的连接信息;PPP会话阶段执行标准的PPP过程

一、发现阶段(Discovery)

PPPoE的发现阶段一共分为4步,分别是:PADI(PPPoE Active DiscoveryInitiation),PADO(PPPoE Active Discovery Offer),PADR(PPPoE ActiveDiscovery Request),PADS(PPPoE Active DiscoverySession-confirmation)。当完成这四步之后,用户主机(PC)和访问集中器(AC)双方就能获知对方唯一的MAC地址和唯一的会话ID。MAC地址和会话ID共同定义了唯一的PPPoE会话。PPPoE Discovery的以太网类型域为0x8863。

1.PADI:PPPoE发现阶段的第一步。用户主机以广播的方式发送PADI数报包,请求建立链路。Code域置为0x09,会话ID域必须置为0x0000。

2.PADO:PPPoE发现阶段的第二步。访问集中器(AC)以单播的方式发送一个PADO数据包对主机的请求做出应答。目的地址为主机的MAC地址,Code域置为0x07,会话ID域必须置为0x0000。PADO数据包必须包含一个类型为AC-Name的Tag(包含了访问集中器的名字)。

3.PADR:PPPoE发现阶段的第三步。因为PADI数据包是广播的,所以主机可能收到不止一个的PADO报文。主机在收到报文后,会根据AC-Name或者PADO所提供的服务来选择一个AC,然后主机向选中的AC单播一个PADR数据包。目的地址域为AC的MAC地址,Code域置为0x19,会话ID域必须置为0x0000。PADR报文必须且只能包含一个Tag_Type为Service-Name的Tag,表明主机请求的服务。

4.PADS:PPPoE发现阶段最后一步。当AC在收到PADR报文时,就准备开始一个PPP的会话了。它为PPPoE会话创建一个唯一的会话ID并用单播一个PADS数据包来给主机做出响应。目的地址域为主机的MAC地址,Code域置为0x65,会话ID必须设置为所创建好的会话ID。

注意:

1. Host-Uniq

在PPPoE发现阶段的四个步骤中,PPPoE头的Payload中始终含有这样一个TLV:

Tag_Type = 0103 (表示为Host-Uniq)

Tag_Length = 8 (8个字节的长度)

Tag_Value = 0500000008000000

Host-Uniq为主机唯一标识,类似于PPP数据报文中的标识域,主要是用来匹配发送和接收端的。因为对于广播式的网络中会同时存在很多个PPPoE的数据报文。

2. AC-Cookie

PADO和PADR数据包里面都含有Tag_Type为AC-Cookie的Tag,16Bytes。Ac-Cookie是为了防止拒绝服务攻击(DenialofService,简称DOS)。访问集中器(AC)能够根据PADR的源地址来重新产生唯一的Tag_Value。使用这种方法,AC可以确保PADI的源地址是可达的,并对该地址的并行会话数进行限制。

二、会话阶段(PPP)

PPP会话的建立,需要两端的设备都发送LCP(Link ControlProtocol)数据包来配置和测试数据通信链路。

LCP报文可以分为三类:链路配置报文(LCP Configure Request,LCP ConfigureReject,LCP Configure Ack和LCP Configure Nak)、链路终止报文和链路维护报文。

Ⅰ 协商阶段

LCP的Request主机和AC都要给对方发送,LCP协商阶段完成最大传输单元,是否进行认证和采用何种认证方式的协商。

LCP协商阶段的数据帧由三部分组成:以太网头,PPPoE头和PPP头。PPPoESession的以太网类型域为0x8864。

PPP信息包括: Code=01(表示Configure Request,请求同意Option中的内容)

02(表示ConfigureAck,完全同意)

03(表示ConfigureNak,同意部分Option中的内容,还需要再协商)

04(表示Configure Reject,完全不同意)

06(Terminate Ack,正常下网)

1.当Config-Request报文的一端能识别发送过来的所有配置参数选项且认可所有配置参数选项数据域的内容时,接收端将会给对端回一个Config-Ack报文并将配置请求报文中的配置参数选项原封不动的放置在Config-Ack报文的数据域内。

2.当接收Config-Request报文的一端能识别发送端所发送过来的所有配置参数选项,但对部分配置参数选项数据域中的内容不认可时,接收端将会给对端回应一个Config-Nak报文,该报文只携带不认可的配置参数选项,而这些配置参数选项的数据内容为本端希望的值。

当接收端接收到Config-Nak报文后,会重新新发送Config-Request报文。这次的报文和上一次报文的区别在于那些被对端不认可的配置参数选项的内容被替换成Config-Nak报文里面相应的内容。

3.当接收Config-Request报文的一端不能识别所有发送端发送过来的配置参数选项时,此时接收端将会向对端回一个Config-Reject报文,该报文中的数据域只携带那些不能识别的配置参数选项。当对端接收到Config-Reject报文后,会再次发送Config-Request报文,只是将不被识别的那些配置参数选项给删除了。
Ⅱ 认证阶段

会话双方通过LCP协商好的认证方法进行认证,如果认证通过了,才可以进行下面的网络层的协商。认证过程在链路协商结束后就进

行。但此时可能链路质量的协商还在进行。所以会延缓认证过程。

认证阶段包括:Challenge Packet Identifier ,Response Packet Identifier.Success Packet Identifier和Failure Packet Identifier

认证报文包括:以太网头,PPPOE头,PPP头和CHAP头(采用的是Chap认证)。

以太网头和PPPOE头跟LCP中的相似。PPP头中,Protocol=0xc223(Challenge HandshakeAuthentication)

认证通过要经过三个步骤:首先AC发送Challenge Packet Identifier,然后客户端发送 ResponsePacket Identifier,最后AC发送Success Packet Identifier。

认证失败要经过三个步骤:首先AC发送Challenge Packet Identifier,然后客户端发送两次 ResponsePacket Identifier,最后AC发送 Failure Packet Identifier。

Ⅲ IPCP协商阶段

用户和接入设备对IP服务阶段的一些要求进行多次协商,以决定双方都能够接收的约定。如:IP业务阶段使用的IP压缩协议等。双方的协议是通过报文中包含的Option项进行协商的,每一个Option都是一个需要协商的问题。最后双方都需要对方答复Configure_Ack的同意报文。

IPCP阶段的报文:以太网头,PPPoE头,PPP。以太网头和PPPOE头跟LCP阶段相同。

PPP中存放的是多个Option。Option格式与LCP的TLV相同。

Configure_Request:要求协商的Option

Configure_Nak:表示对收到的Option都可识别,但是一些不能够接收。

Configure_Ack:表示对收到的都能够接收。

Configure_Reject:收到的Option不能够接收。

达成一致后,进入数据包的真正传输阶段,即IP阶段。用户和AC之间通信都开始使用对方的IP地址而不是MAC地址。

查看原文:http://blog.sina.com.cn/s/blog_4db83b6f01000apf.html

PPPoE拨号过程解析相关推荐

  1. ar路由器 pppoe下发ipv6 dns_手机从路由器获取IP、光猫PPPOE拨号过程、IP/VLAN

    路由器DHCP服务器分配给手机IP地址过程,光猫路由器PPPOE拨号建立连接过程,IP.VLAN报文分析 附全部wireshark抓包分析,如有疑问,欢迎评论区留言: 一.DHCP通信过程 DHCP通 ...

  2. PPPoE协议讲解以及拨号过程Wireshark抓包解析

    文章目录 前言 一.PPPoE的简单介绍 1.PPPoE客户端 2.PPPoE服务器 3.一些典型用例 4.PPPoE帧格式 二.PPPoE会话建立过程 三.PPPoE抓包详解 1.PADI 2.PA ...

  3. PhoneAccount流程解析(SIM卡管理器)拨号过程中解析PhoneAccount

    刚开始看拨号流程是 总是出现PhoneAccount和PhoneAccountHandler,一直不知道是干嘛使的.所以今天写一篇文章来记录一下免得忘了. 在网上找了挺多资料,然后对照代码看了一遍. ...

  4. ADSL 各种拨号错误代码解析

    ADSL 各种拨号错误代码解析 常见的上网方式有:PPPoE.静态IP.动态IP地址三种. 6xx 600 601 602 603 604 605 606 607 608 609 610 611 61 ...

  5. ADSL的PPPOE拨号客户端上的ppp authentication pap “callin”的正确理解

    ADSL的PPPOE拨号客户端上的ppp authentication pap "callin"的正确理解 对callin参数的理解一定要注意,很容易单让初学者通过"中国 ...

  6. ppp服务器连通状态 失败移动,某局点MSR路由器PPPOE拨号IPCP阶段协商失败处理案例...

    检查配置没有发现具体问题,现来分析debugging 信息: 首先理解PPPOE拨号的整个交互过程 由于查看当前接口物理层UP,则说明PPP已经开始进入链路建立阶段(Establish)阶段,PPP在 ...

  7. 水星pppoe连接服务器无响应,利用水星路由器系统日志解决PPPOE拨号故障

    如今,PPPOE拨号已经成为家庭用户最常见的宽带接入类型,很多家庭都拥有两台.三台或更多的电脑.下面学习啦小编将在水星路由器上以PPPOE拨号上网的常见故障介绍,希望对您有所帮助! 利用水星路由器系统 ...

  8. 破解TP-Link路由-嗅探PPPoE拨号密码

    如果你平时都使用路由器直接上网,那么你还记得你的宽带(ADSL)帐户名和密码吗?忘记密码后又该如何找回呢?别急,本文带你一同找回遗忘的ADSL密码. 1.安全性较差的路由器(例如腾达的某些路由器): ...

  9. OpenWrt PPPoE拨号问题之mac地址克隆

    [转载请注明出处:钱国正的专栏http://blog.csdn.net/qianguozheng/article/details/38322705] 在实施任何大型项目中,我们会遇到各种各样的问题,当 ...

最新文章

  1. BZOJ 2429: [HAOI2006]聪明的猴子【最小生成树】
  2. Java初学者不得不知的概念,JDK,JRE,JVM的区别?
  3. const指针 常指针
  4. 数字语音信号处理学习笔记——语音信号的数字模型(2)
  5. Android开发面试题Service之startService和bindService之间的区别
  6. node 根据图片img url 获取 base64
  7. Python bytes 和 string 相互转换 - Python零基础入门教程
  8. Crowdin 使用指南
  9. Linux echo
  10. 过年用计算机弹奏,过年实用,你可能需要的亲戚称呼计算器
  11. python如何获得列表中某个元素的index
  12. 机器学习-预测之BP神经网络模型原理及实战
  13. 覆盖计算机网络分类有哪些 英语缩写,简述按覆盖范围划分计算机网络的分类类型有哪些?英语缩写分别是什么?...
  14. MATLAB内外插值
  15. 如何建立能力评估模型?
  16. 微信视频号值不值得去做
  17. 【爬虫入门】一键爬取LOL全部高清皮肤
  18. 概念模型(conceptualDataModel)
  19. WPS word中插入“批注”不显示
  20. 高斯消元法的python实现

热门文章

  1. html 强制分散对齐,强制两端对齐的函数或者CSS
  2. springMVC实现图片上传
  3. 找对英语学习方法的第一本书之:标准发音
  4. C语言循环链表(不带头结点)解约瑟夫问题的一种变形
  5. DICOM:dcm4che工具包如何压缩dcm文件探讨(续篇)
  6. moment 获得上月开始日期和结束日期
  7. qduoj 韬韬说做出这个泥萌就AK辣
  8. Android S 指纹解锁后的水波纹动画
  9. JSON java 正则_9、正则表达式与JSON
  10. 跟着沐神学习深度学习