EAPOL是802.1x协议定义的一种报文封装格式,主要用于在客户端和设备端之间传送EAP协议报文,以允许EAP协议报文在LAN上传送。格式如下图所示。
PAE Ethernet Type:表示协议类型,802.1x分配的协议类型为0x888E。
Protocol Version:表示EAPOL帧的发送方所支持的协议版本号。
Type:
-
EAP-Packet(值为00),认证报文数据,用于承载认证信息;
-
EAPOL-Start(值为01),认证开始报文,用于主动发起认证过程;
-
EAPOL-Logoff(值为02),下线请求报文,用于用户主动发起下线请求;
-
EAPOL-Key(值为03),密钥信息报文;
-
EAPOL-Encapsulated-ASF-Alert(值为04),用于支持ASF(Alerting Standards Forum)的Alerting消息。
Length:表示数据长度,也就是“Packet Body”字段的长度。如果为0,则表示没有后面的数据域。
Packet Body:根据不同的Type有不同的格式。
其中,EAPOL-Start,EAPOL-Logoff和EAPOL-Key仅在客户端和设备端之间存在;在设备端和认证服务器之间,EAP-Packet报文会被重新封装承载于RADIUS协议上,我们称之为EAPoR,以便穿越复杂的网络到达认证服务器;EAPOL-Encapsulated-ASF-Alert封装与网管相关的信息,例如各种警告信息,由设备端终结。
注意,当是EAPOL-Start或EAPOL-Logoff类型报文时,并不需要PacketBody有具体的内容。
下面详细介绍PacketBody字段的详细构成:
当EAPOL数据包的Type域为EAP-Packet时,Packet Body为EAP数据包内容,如下图所示:
Code:指明EAP包的类型,一共有4种:Request,Response,Success,Failure。
Identifier:辅助进行Response和Request消息的匹配。设备通常通过该字段来验证报文是否合法。如果该字段在状态机中所保存的值不一样则会认为非法,直接丢弃。
Length:EAP包的长度,包含Code、Identifier、Length和Data的全部内容。
Data:EAP数据信息,内容格式由Code决定。
Success和Failure类型的包没有Data域,相应的Length域的值为4。(现在也有利用该DATA域来传送成功及失败信息的,如认证失败的原因可以通过DATA域回传给客户端,客户端软件将其解析出来显示给用户)
Request和Response类型的Data域的格式如下图所示。
Type:指出EAP的认证类型。其中,值为1时,代表Identity,用来查询对方的身份;值为4时,代表MD5-Challenge,类似于PPP CHAP协议,包含质询消息。
Type Data:Type Data域的内容随不同类型的Request和Response而不同。