1. PPPoE的验证过程
PPPoE的验证过程,包括2个阶段,Discovery阶段和PPP Session阶段 。
文章插图
2.Discovery阶段,包含4个步骤:
Step 1 :PADI(PPPoE Active Discovery Initiation)
PPPoE客户端发送主动发现初始化包(PPPoE Active Discovery Initiation,PADI)以太头中的目的地址是以太广播地址 FF:FF:FF:FF:FF:FF,PPPOE 头中的 CODE 为 0x09,SESSION_ID 值必须为 0,负载部分必须只包含一个 Service-Name 类型的 TAG 表示请求的服务类型,另外可以包含其他 TAG,整个 PPPOE 包不能超过 1484 字节;
文章插图
Step 2: PADO(PPPoE Active Discovery Offer)
服务器端 PPPoE 进程在网络接口侦听到 PADI 包后,发送主动发现提议包(PPPoEActive Discovery Offer, PADO),用来回应客户机的 PADI 包,以太头中的目的地址是客户机的mac 地址,PPPOE 头中的 CODE 为 0x07, SESSION_ID 值必须为 0,负载部分必须包含一个 AC-Name 类型的 TAG,用来指示本 AC 的名称,一个在 PADI 包中指定的Service- Name 的 TAG,另外可以包含其他 Service-Name 的 TAG 。如果 AC 不对该客户机提供服务,AC 就不回应 PADO 包 。
文章插图
Step 3: PADR(PPPoE Active Discovery Request)
PPPoE 客户端收到 PADO 包后,在 PADO 包中选择一个(可能有多个 PPPoE 服务器,通常选取最快的一个)发送主动发现请求包(PPPoEActive Discovery Request,PADR),以太头中的目的地址是所选取的 PADO 包的源以太头地址(即 PPPoE 服务器的 MAC 地址),PPPOE 头中的 CODE 为 0x19,SESSION_ID 值必须为 0,负载部分必须只包含一个 Service-Name 类型的 TAG 表示请求的服务类型,另外可以包含其他 TAG 。
文章插图
Step 4: PADS(PPPoE Active Discovery Seession-Confirmation)
MAC 地址匹配的 PPPoE 服务器收到 PADR 包后,发送主动发现会话确认包(PPPoE Active Discovery Session-confirmation, PADS),将产生一个 SEESSION_ID 值用来标志本次 PPP 会话,以 PADR 包方式发送给客户机 。以太头中的目的地址是客户机的 MAC 地址,PPPOE 头中 的 CODE 为 0x65,SESSION_ID 值必须为所生成的那个SESSION_ID,负载部分必须只包含一个 Service-Name 类型的 TAG, 表示该服务类型被 PPPoE 服务器接受,另外可以包含其他 TAG 。如果 PPPoE 服务器不接受 PADR 中的
Server-Name,PADS 中则包含一个 Service-Name -Error 类型的 TAG,这时 SESSION_ID 设置为 0 。
文章插图
3. PPP Session 阶段:
当客户端与服务器端远成发现阶段之后,即进入会话阶段,在 PPP 会话阶段,PPP 包被封装在 PPPoE 以太帧中,以太包目的地址都是单一的,以太协议为 0x8864, PPPoE 头的CODE必须为0,SESSION_ID必须一直为发现阶段协商出的SEESION_ID值, PPPoE 的负载是整个 PPP 包,PPP 包前是两字节的 PPP 协议 ID 值 。
Step 1: LCP(Link Control Protocol)协商
主要协商了MRU(Maximum Receive Unit),并提出了认证使用的Magic Number 。
图3-1 client发送到server的Configuration Request
文章插图
【PPPoE报文交互详解】图3-2 server发送到client的Configuration Request
文章插图
图3-3 client发送到server的Configuration Ack
文章插图
图3-4 server发送到client的Configuration Ack
文章插图
Step 2: 认证阶段
认证阶段务器端将验证客户端的合法性 。最常见的两种就是PAP和CHAP;
PAP(Password Authentication Protocol)验证为两次握手验证,密码为明文;
PAP验证的过程如下:
(1)被验证方发送用户名和密码到验证方;
(2)验证方根据本端用户表查看是否有此用户以及密码是否正确,然后返回不同的响应 。
CHAP(Challenge-Handshake Authentication Protocol)验证为三次握手验证,密码为密文(密钥);
注意:PAP不是一种安全的验证协议 。当验证时,口令以明文方式在链路上发送,并且由于完成PPP链路建立后,被验证方会不停地在链路上反复发送用户名和口令,直到身份验证过程结束,所以不能防止攻击 。
推荐阅读
- HTTP 报文详解
- 音视频流媒体开发WebRTC 基础知识 -- ICE 交互总结
- PPPOE拨号上网服务器端与客户端的完整配置
- 网络基本功:http报文及TCP拥塞控制机制
- 如何通过Python批量生成测试报文?
- 防火墙对TCP/UDP/ICMP协议报文处理方式
- 手机从路由器获取IP、光猫PPPOE拨号过程、IP/VLAN
- 用Python开发一个交互式网络和IP地址计算器
- SpringMVC:进阶
- Linux 下的交互式进程浏览器 htop 3.0.0 发布