姓名:石廷澳 学号:21011210031 学院:通信工程学院
【嵌牛导读】PPPoE,以太网上的点对点协议,是将点对点协议(PPP)封装在以太网Ethernet)框架中的一种网络隧道协议
【嵌牛鼻子】PPPoE协议发现阶段交互及FPGA实现过程,包括PADI、PADO、PADR、PADS
【嵌牛提问】如何实现PPPoE的发现阶段
【嵌牛正文】
发现阶段交互过程
PPPoE ( Point to Point Protocol over Ethernet ),基于以太网的点对点协议,包括发现阶段和会话阶段。发现阶段,即 PPPoE Discovery,目的是获取客户端MAC地址并建立连接。发现阶段包括PADI、PADO、PADR、PADS四个阶段。发现阶段结束后,就进入标准PPP会话阶段。发现阶段交互过程如下图所示:
数据帧格式如下图所示:
帧类型域发现阶段都是0x8863,会话阶段都是0x8864;版本和类型在发现阶段和会话阶段都是0x01,代码域不同阶段对应着不同的类型号;会话ID默认为0x0000,在服务器向客户端发送PADS中会指定一个唯一标识会话ID;长度指的是静载荷的长度,单位是字节B。
PADI
PADI ( PPPoE Active Discovery Initiation ),PADI是广播帧,用于寻找可用的服务器,由客户端发送。PADI分组必须包含至少一个服务类型标签 (Service Name Tag,字段值为0x0101),向服务器提出所要求的提供的服务。当客户端在一定时间内没有收到PADO,客户端会重新发送PADI,并加倍等待时间。
目的地址:0xFFFF_FFFF
帧类型域:0x8863
代码域:0x09
会话ID:0x0000
Wireshark接收到的PADI如下图所示:
没有画圈的字节就是静载荷。当接收到PADI帧,就可以根据数据帧格式提取出客户端MAC地址、帧类型、代码ID、载荷帧长
载荷要用FIFO存起来,因为PADO载荷是由PADI的Host-Uniq Tag和AC_name(服务器名字)组成的
PADO
PADO ( PPPoE Active Discovery Offer),当服务器接收到PADI帧,服务器就发送PADO帧响应请求。PADO帧也必须包含至少一个服务器名称类型标签(字段值为0x0102),表明可向主机提供的服务种类。PADO载荷是由PADI的Host-Uniq Tag和AC_name(服务器名字)组成。
目的地址:提取的客户端MAC地址
帧类型域:0x8863
代码域:0x07
会话ID:0x0000
Wireshark接收到服务器发送的的PADO如下图所示:
最后圈中的4字节数据不是PADI的Host-Uniq Tag,也不是AC_name,是PADO的服务器名称类型标签,0x000d表示名称字节数量。当提取出PADI或者PADR的帧长时,就可得出PADO和PADS的帧头部
PADO帧长+16‘h11是因为还有AC_name和服务器名称类型标签。
PADR
PADR ( PPPoE Active Discovery Request ),客户端在收到的一个或多个PADO中选择一个,然后向选择的服务器发送PADR。PADR也必须包含一个服务名称类型标签。
目的地址:服务器MAC地址
帧类型域:0x8863
代码域:0x19
会话ID:0x0000
Wireshark接收到服务器发送的的PADO如下图所示:
PADR的接收流程与PADI的接收流程一样,提取客户端MAC地址、帧类型、代码ID、载荷帧长,并将载荷存在FIFO中。
PADS
PADS ( PPPoE Active Discovery Session-confirmation ),服务器收到PADR后,组建PADS帧。PADS和PADR的Host-Uniq Tag值相同。
目的地址:客户端MAC地址
帧类型域:0x8863
代码域:0x65
会话ID:唯一标识会话ID的值,不能是0x0000
Wireshark接收到服务器发送的的PADO如下图所示:
Host-Uniq Tag后面的数据并不需要发,是传输时自动加上的。发送PADO和PADS需要计数器进行计数,以此来判别什么时候发帧头,什么时候发载荷,什么时候发AC_name
根据计数值判断发送哪些数据