PPPPPP 是一种数据链路层协议,遵循HDLC(高级数据链路控制协议)族的一般报文格式。PPP 是为了在点对点物理链路(例如RS232 串口链路、电话ISDN 线路等)上传输OSI 模型中的网络层报文而设计的,它改进了之前的一个点对点协议–SLIP 协议–只能同时运行一个网络协议、无容错控制、无授权等许多缺陷,PPP 是现在最流行的点对点链路控制协议。上图中PPP 的flag 字段恒为0×7f,地址(adress)字段恒为0xff,控制(control)字段恒为0×03.协议(protocol)字段表示 PPP 报文中封装的payload(data 字段)的类型,如果为0×0021,则表示 PPP 封装的IP 报文,0×002B 表示 IPX 报文,0×0029 表示 AppleTalk 报文,这几种都属于 PPP 的数据报文;如果为0×8021则表示PPP的LCP报文(用来协商连 接),如果为0xC021则属于 PPP 的NCP 报文(用来协商封装的三层协议),这些属于 PPP的控制报文。PPP 协议状态机如下图所示:在上图的链接建立阶段(建立),PPP 使用 LCP 报文来协商连接(一种发送配置请求,然后接收响应的简单“握手”过程,不做过多介绍,感兴趣可以去细读RFC1661),协商中双方获得当前点对点连接的状态配置等,之后的“鉴别”阶段使用哪种鉴别方式也在这个协商中确定下来。鉴别阶段是可选的,如果链接协商阶段并没有设置鉴别方式,则将忽略本阶段直接进入“网络”阶段。鉴别阶段使用链接协商阶段确定下来的鉴别方式来为连接授权,以起到保证点对点连接安全,防止非法终端接入点对点链路的功能。常用的鉴别认证方式有 CHAP 和 PAP 方式。CHAP 方式的原理是由一端定期发起挑战“challenge”,收到“challenge”的一端将收到的“challenge”报文中的密钥使用之前双发协商好的一种算法加密后再把结果发回发起端,这种算法应该是结果唯一(不同输入必得到不同输出)且不可逆(由 输出无法得到输入)的,发起端也使用该算法计算后验证结果是否正确来为对端授权认证。一个常用的方案实例是:发起端发送随机长度及内容的字符串加上自己的用户名作为“密钥”发送出来,接受到“challenge”的一方将收到的字符串和与对方用户名相对应的本端用户的密码使用 MD5 算法计算后发回,然后发 起端将收到的计算结果和本端 MD5 计算该随机字符串加自己密码的结果相对照,如果双发一致,则认证成功。另一种认证方式 PAP 方式相比就简单很多,直接由被验证方将自己的用户名和密码明文方式发送给对端,由对端对用户名...