PPPOE协议

PPPOE协议原文 http www cnblogs com kzang articles 2581644 html PPPOE 协议 前言 PPPOE PPP over Ethernet RFC2516 值得注意的是此 RFC 不是 Standard 而是 Information 类型的 定义了如何在以太网上传输 PPP 数据包的方法 目前流行的宽带类型

大家好,我是讯享网,很高兴认识大家。

原文:

http://www.cnblogs.com/kzang/articles/2581644.html

PPPOE协议

前言

通信过程概述

建立PPPOE通道(ADSL拨号)分两个阶段:发现阶段和PPP会话阶段.

在发现阶段,以太网上的客户机要找到一个访问集中器(AC,Access Concentrator),就是ADSL MODEM,一般家用时一般就只有一个AC;但如果是一个以太网内可能会有多条ADSL,就会有多个AC,这时客户机就从中选择一个.发现阶段完成后,客户机和AC都得到要在以太网上建立PPP通道的相关信息.

发现阶段是无状态的,也就是两边都不用保存以前的状态信息;只有PPP会话开始后,双方就要建立一个虚拟的PPP通信接口,具体在Linux下会有ppp0网卡,在windows下网络连接中增加ADSL的接口.

协议头格式

协议值

PPPOE数据是直接在以太头数据之上的,其等级和ARP、IP等是相同的,在以太头的类型字段中,用0x8863 表示是PPPOE发现阶段数据,用0x8864表示PPP会话阶段数据,如下所示.(类比:0x0800表示IP数据,0x0806表示ARP数据)


讯享网

PPPOE协议头

PPPOE协议头有6个字节,正好和14字节的以太头实现了4字节对齐,包括以下字段:

      • VER版本号,4位,必须为0x01
      • TYPE类型,4位,必须是0x01
      • CODE:8位,在发现阶段和PPP会话阶段有不同的定义
      • SESSION_ID回话标识:16位,用来定义一个PPP会话,在发现过程中定义
      • LENGTH:16位,表示负载长度,不包括以太头和PPPOE头.

发现阶段

PPPOE发现阶段数据的以太类型是0x8863.

TAG

TAG_TYPE:16位,TAG类型(TAG_TYPE可取以下值(注意第一字节为2表示是错误信息))

      • 0x0000 End-Of-List
      • 0x0101 Service-Name
      • 0x0102 AC-Name
      • 0x0103 Host-Uniq
      • 0x0104 AC-Cookie
      • 0x0105 Vendor-Specific
      • 0x0110 Relay-Session-Id
      • 0x0201 Service-Name-Error
      • 0x0202 AC-System-Error
      • 0x0203 Generic-Error

TAG_LENGTH:16位,表示TAG_VALUE部分的长度TAG_VALUE:TAG值

PPPOE主动发现初始包

PPPOE主动发现提议包

PPPOE主动发现提议包(PPPoE Active Discovery Offer, PADO)由AC发出,用来回应客户机的PADI包,以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x07,SESSION_ID值必须为0,负载部分必须包含一个AC-Name类型的TAG,用来指示本AC的名称,一个在PADI包中指定的Service-Name的TAG,另外可以包含其他Service-Name的TAG.如果AC不对该客户机提供服务,AC就不回应PADO包. 一个PADO包的例子为:

PPPOE主动发现请求包

PPPOE主动发现请求包(PPPoE Active Discovery Request, PADR)由客户机发出,因为可能会有多个AC对客户机发出的PADI包回应了PADO包,客户机从回应的PADO包中选择一个AC发送PADR包,以太头中的目的地址是该AC的MAC地址,PPPOE头中的CODE为0x19,SESSION_ID值必须为0,负载部分必须只包含一个Service-Name类型的TAG表示请求的服务类型,另外可以包含其他TAG.

PPPOE主动发现会话确认包

PPPOE主动发现会话确认包(PPPoE Active Discovery Session-confirmation, PADS)由AC发出,收到客户机的PADR包后,AC将产生一个SEESSION_ID值用来标志本次PPP会话,以PADR包方式发送给客户机.以太头中的目的地址是客户机的MAC地址,PPPOE头中的CODE为0x65,SESSION_ID值必须为所生成的那个SESSION_ID,负载部分必须只包含一个Service-Name类型的TAG,表示该服务类型被AC接受,另外可以包含其他TAG.如果AC不接受PADR中的Server-Name,PADS中则包含一个Service-Name-Error类型的TAG,这时SESSION_ID设置为0.

PPPOE主动发现停止包

PPPOE主动发现停止包(PPPoE Active Discovery Terminate, PADT)表示PPPOE会话过程的结束,AC和客户机都可以主动发出.以太头中的目的地址是对方的MAC地址,PPPOE头中的CODE为0xa7,SESSION_ID值必须为PPPOE会话过程的SESSION_ID,不需要TAG.

PPP会话阶段

注意:由于PPPOE头是6字节,PPP协议ID号两个字节,一共要占用8个字节,而以太网的MTU值为1500,所以上层PPP负载数据不能超过1492字节,所以PPP协商时协商的最大接收单元值不能超过1492字节,也就是相当于在PPPOE环境下的MTU是1492字节.

ADSL拨号过程简述

客户机启动拨号程序,发送PADI包,ADSL MODEM回应PADO包,客户机再发送PADR包,ADSL MODEM回应PADS包后建立PPPOE通道,随后客户机进行普通的PPP协议拨号过程,不过PPP数据包都是包装进以太帧中的,拨号成功后客户机和服务器之间建立了PPP通道,ADSL MODEM起到将以太帧转换为PPP包的作用.ADSL虽然是用电话线,但所用频率不是通话用的频率,所以ADSL拨号不影响打电话.通信结束后,会发送PADT断开PPPOE通道.


小讯
上一篇 2025-01-05 19:12
下一篇 2025-01-25 17:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54139.html