前一阵之做了一个2G模块作客户端通过内置协议栈上网的项目,我只负责库文件,业务层的实现是由别人完成的。这里想就过程中遇到的问题做个总结,算是学习笔记。
注:以下内容都是本人在工作过程中的自己思考和向前辈工程师们讨教的结果,若有侵权,请与我联系。
首先想说一下什么是内置协议栈。说白了就是模块内部已经集成了TCP/IP协议栈,开发者只需要调用模块供应商提供的AT指令接口就可以实现数据的收发。就像调用标准的LINUX库函数一样,fread就能从一个文件描述符指向的地方读取到数据。
顺带一提外置协议栈。一般指在操作系统中通过ppp的方式拨号上网,应用程序进程和内核中的ppp进程交互,建立数据链路层通道,协商IP协议,协商传输层协议(具体请查阅ppp拨号上网的流程)。拨号成功之后,开发者利用标准的socket编程接口,就可以实现网络进程间的数据传输。
之所以没用外置协议栈的方法,是因为2G模块只有一个串口,既接收AT指令,又用来做数据收发,这样造成的问题是:在拨号成功后,该串口上走的都是ppp协议封装的数据,模块将不能识别应用程序发送的AT指令(将拨号进程kil