为了实现移植LWIP连入GSM网络,需要理解PPP协议的每个字段信息,以下节选翻译自TCPIP协议第二版,与大家分享~
PPP表示点对点协议,这是一种很流行的方式用来携带IP数据包,无论是高速光学线路上还是用于低速拨号调制解调器。PPP协议被广泛用于DSL服务运营商,同时也被用于配置Internet系统参数,比如用于初始化IP地址和DNS服务器。
PPP实际上应当被视为一簇协议的集合而不是单个协议。它包括链路控制协议LCP,一簇网络控制协议NCPs,以及一些相关的协议如压缩控制协议CCP和认证协议等。
链路控制协议LCP
PPP的LCP部分负责建立和维持一个在点对点链路上的低层次两端交流通道,因此LCP的操作只需要关注单一链路的两端,而不需要像以太网和WI-FI那样处理多路访问而引发的问题。
通常,PPP协议,准确的说应该是LCP协议,只对基础的点对点链路有极少的要求。链路应当支持双向操作并且支持同步通信和异步通信。LCP用比特流建立一条链路,比特流的格式是基于高级数据链路控制协议HDLC。因为在PPP设计之时,HDLC已经是一个很完善的协议了。IBM将HDLC修改之后使之成为同步数据链路控制协议SDLC,并将SDLC作为它专有的系统网络架构协议栈SNA的链路层协议。HDLC同时也作为802.2里的LLC标准的基础。
通常情况下,类似于HDLC帧格式的的PPP帧如上图所示。PPP帧首尾都是一个标志字节0X7E,该字节标志着PPP帧的开始和结束。那么这里就有一个小问题,当PPP帧的有效数据部分出现0X7E怎么办?这里有两种解决办法。当PPP处于异步操作方式下,PPP使用字节填充的方式。当标志字节出现在帧的非首尾部分时,0X7E被替换为两个字节0X7D5E,0X7D是PPP的跳脱符。如果0X7D本身出现在了有效数据部分,那么0X7D被替换为两个字节的0X7D5D。在接收端,0X7D5E又被替换为0X7E,0X7D5D又被替换为0X7D。如果是处于同步操作方式下,PPP使用比特填充的方式。0X7E的二进制比特流为01111110,有连续6个0,比特填充的方法就是在连续5个1的地方插入一个0,除了标志字符(这样,数据0X7E有9比特,标志0X7E只有8