Q/DKBA华为技术有限公司企业技术标准Q/DKBAXXXX-2001华为公司宽带产品Portal协议标准第2部分:Portal标准V2.02001-XX-XX发布2001-XX-XX实施华为技术有限公司发布Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:132目次1范围42术语和定义43概述44协议44.1报文格式44.2报文字段说明44.2.1Ver54.2.2Type54.2.3Pap/Chap54.2.4Rsv64.2.5SerialNo64.2.6ReqID64.2.7UserIP64.2.8UserPort64.2.9ErrCode64.2.10AttrNum64.2.11Authenticator64.2.12报文属性字段(Attr)的格式75流程和相关说明95.1信息询问流程(无论成功还是失败)95.2下线通知流程(BAS通知PortalServer)106其他说明116.1关于TextInfo属性的使用116.2协议的兼容性116.3协议的不完善之处11Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:133前言本标准由宽带联合系统部提出。本标准主要起草部门:宽带联合系统部,MA5200产品组,ESR产品组,iNet产品组本标准主要解释部门:宽带总体组本标准主要起草人:杨宏杰、周和秘、乔明本标准主要审核人:卢朝晖、胡鹏本标准批准人:Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:134华为公司宽带产品Portal协议标准V2.01范围本标准规定了华为公司宽带产品所采用的Portal协议标准。本标准适用于华为公司具备Portal特性的宽带设备,包括服务器端设备(如:iTellin、iNetIPHotel系统等)以及BAS端设备(如:ESR、MA5200等)特别的:对于服务器端设备(如:iTellin、iNetIPHotel系统等)必须同时支持V1.0与V2.0协议,对于BAS端设备(如:ESR、MA5200等)以V2.0为标准。2术语和定义Portal——门户业务Web认证——通过Web方式进行用户认证认证Client——本文中使用的概念,表示协议中发起认证请求的一方,可以为PortalServer或任何发起认证的客户机。在不会引起混淆的情况下,简称为Client认证Server——本文中使用的概念,表示协议中接受认证请求的一方,例如BAS设备。在不会引起混淆的情况下,简称为ServerBAS——BroadAccessServer宽带接入设备3概述本文档主要分两部分,一部分描述了PortalServer和BAS设备之间的通信协议,令一部分(附录)提出了对PortalServer的Web服务器相关配置和网页设计的一些规定。PortalServer和BAS设备之间的协议规定了采用Portal认证(或Web认证)时PortalServer和BAS设备之间的报文格式和通信流程,协议支持PAP和CHAP两种认证方式,对可能出现的各种情况的认证流程分别做了详细的规定。PortalV2.0协议是对原有V1.0协议存在的漏洞和不合理之处进行部分完善,增加了用于对协议报文进行验证的字段Authenticator。对于V1.0与V2.0相互冲突之处,一律以V2.0为准。4协议4.1报文格式协议包采用固定长度头加可变长度的属性字段组成,属性字段采用TLV格式。为了增加对协议报文的校验,扩充报文格式如下(图4-1):Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:135图4-1增加报文校验之后的Portal协议报文格式4.2报文字段说明VerVer字段是协议的版本号,长度为1字节,Ver=0x02。之所以对Version进行升级,是因为对Version1做了如下的扩充:修改了报文格式,在AttrNum字段之后增加了16个字节的Authenticator字段。增加对所有协议报文的校验,包括上线流程、下线流程和查询流程。修改了TextInfo属性,使其完全符合TLV格式(version1曾经出现过不完全符合TLV格式的软件实现版本),不再区分其内容的语言,并且约定:BAS本地产生的提示信息不上报到PortalServer。TypeType字段定义报文的类型,长度为1字节。该版本兼容原协议的全部命令字,同时新增类型为0x08,0x09,0x0a三个命令字:Type值方向含义REQ_CHALLENGE0x01Client--ServerPortalServer向BAS发送的Challenge请求报文ACK_CHALLENGE0x02Server--ClientBAS对PortalServer请求Challenge报文的响应报文REQ_AUTH0x03Client--ServerPortalServer向BAS发送的认证请求报文ACK_AUTH0x04Server--ClientBAS对PortalServer认证请求的响应报文REQ_LOGOUT0x05Client--ServerPortalServer向BAS发送的下线请求报文VerTypePAP/chapRsvdSerialNoReqIDUserIPUserPortErrCodeAttrNumAuthenticatorAuthenticator(cont)Attr......Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:136Type值方向含义ACK_LOGOUT0x06Server--ClientBAS对PortalServer下线请求的响应报文AFF_ACK_AUTH0x07Client--ServerPortalServer向BAS发送的NTF_LOGOUT0x08Server--Client用户被强制下线通知报文REQ_INFO0x09Client--Server信息询问报文ACK_INFO0x0aServer--Client信息询问的应答报文表1协议支持的命令字Pap/Chap与原协议一致。Pap/Chap字段定义此用户的认证方式,长度为1字节,只对Type值为0x03的认证请求报文有意义:Chap方式认证---值为0x00;Pap方式认证---值为0x01;把Pap/Chap放在协议报文的目前位置,使得整个报文不太协调。但是考虑到现实的原因,目前不对该字段进行任何更改。Rsv与原协议一致。Rsv目前为保留字段,长度为1字节,在所有报文中值为0;SerialNo与原协议一致。(1)、SerialNo字段为报文的序列号,长度为2字节,由PortalServer随机生成,PortalServer必须尽量保证不同认证流程的SerialNo在一定时间内不得重复,在同一个认证流程中所有报文的SerialNo相同;(2)、PortalServer发给BAS设备的报文a、由PortalServer发出的Type值为1、3的请求报文其SerialNo都是随机生成数;b、由PortalServer向BAS设备发出的Type值为5的报文其SerialNo值分两中情况:当ErrCode为0时,SerialNo值为一个随机生成数;当ErrCode为1时,SerialNo值可能和Type值为1或3的报文相同,具体要看是请求Challenge超时还是请求认证超时;c、由PortalServer向BAS设备发出的认证成功确认报文(Type值为7的报文)SerialNo和其发出的相应请求报文的SerrialNo相同;比如对于Type值为7的报文其SerialNo值和Type值为3的请求认证报文相同;(3)、每一个由BAS设备发给PortalServer的响应报文的SerialNo必须和PortalServer发送的相应请求报文的SerialNo一样,否则PortalServer会丢掉从BAS设备发来的响应报文;比如Type值Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:137为2的报文其SerialNo值必须和Type值为1的报文相同,Type值为4的报文其SerialNo值必须和Type值为3的报文相同,Type值为6的报文其SerialNo值必须和Type值为5的报文相同。ReqID与原协议一致。(1)、ReqID字段长度为2个字节,由BAS设备随机生成,尽量使得在一定时间内ReqID不重复。(2)、在Chap认证方式中:a、BAS设备在Type为2的请求Challenge响应报文中把该ReqID的值告诉PortalServer;b、在Type值为3、4、7的报文中ReqID字段的值都和Type值为2的报文中此字段的值相同;c、在Type值为5的报文中,若报文表示请求Challenge超时则此字段值为0;若报文表示请求认证超时则此字段值和Type值为2的报文中此字段的值相同;(3)、在Pap认证方式中,此字段无意义,其值为0;(4)、在Type值为5的报文中,若报文表示请求下线时则此字段值为0;(5)、在Type值为1、6的报文中,该字段均无意义,值都为0;UserIP与原协议一致。UserIP字段为Portal用户的IP地址,长度为4字节,其值由PortalServer根据其获得的IP地址填写,在所有的报文中此字段都要有具体的值;UserPort与原协议一致。UserPort字段目前没有用到,长度为2字节,在所有报文中其值为0;ErrCodeErrCode字段和Type字段一起表示一定的意义,长度为1字节。对原协议支持的Type,ErrCode与原协议一致。具体如下:(1)、对于Type值为1、3、7的报文,ErrCode字段无意义,其值为0;(2)、当Type值为2时:ErrCode=0,表示BAS设备告诉PortalServer请求Challenge成功;ErrCode=1,表示BAS设备告诉PortalServer请求Challenge被拒绝;ErrCode=2,表示BAS设备告诉PortalServer此链接已建立;ErrCode=3,表示BAS设备告诉PortalServer有一个用户正在认证过程中,请稍后再试;ErrCode=4,则表示BAS设备告诉PortalServer此用户请求Challenge失败(发生错误);(3)、当Type值为4时:ErrCode=0,表示BAS设备告诉PortalServer此用户认证成功;ErrCode=1,表示BAS设备告诉PortalServer此用户认证请求被拒绝;ErrCode=2,表示BAS设备告诉PortalServer此链接已建立;Q/DKBAXXXX-2001密级:机密2005-3-10,10:32:138ErrCode=3,表示BAS设备告诉PortalServer有一个用户正在认证过程中,请稍后再试;ErrCode=4,表示BAS设备告诉PortalServer此用户认证失败(发生错误);(4)、当Type值为5时:ErrCode=0,表示此报文是PortalServer发给BAS设备的请求下线报文;ErrCode=1,表示此报文是在PortalServer没有收到BAS设备发来的对各种请求的响应报文,而定时器时间到(即超时)时由PortalServer发给BAS设备的报文;(5)、当Type值为6时:ErrCode=0,表示BAS设备告诉PortalServer此用户下线成功;ErrCode=1,表示BAS设备告诉PortalServer此用户下线被拒绝;ErrCode=2,表示BAS设备告诉PortalServer此用户下线失败(发生错误);对新增命令报文的ErrCode说明如下:对Type为REQ_INFO时,ErrCode无意义,其值为0;对Type为NTF_LOGOUT时,ErrCode含义如下:ErrCode含义0下线对Type为ACK_INFO时,ErrCode含义如下:ErrCode含义0处理成功,但不表示全部消息都被获