目录
前言
李柱明博客:https://www.cnblogs.com/lizhuming/p/15487055.html
2. 三种编程接口
-
RAW/Callback API
-
NETCONN API
-
SOCKET API
2.1 RAW/Callback API
内核回调型的 API。
这种 API 可以在裸机和 OS 上使用。
而裸机只能使用这种 API。
优点:
- 可以在没有操作系统的环境中使用。
- 在有操作系统的环境中使用它,对比另外两种 API,可以提高应用程序的效率、节省内存开销。
缺点:
- 基于回调函数开发应用程序时的思维过程比较复杂。
- 在操作系统环境中,应用程序代码与内核代码处于同一个线程。如果应用程序占用的时间过长,而且碰巧这时又有大量的数据包到达,由于内核代码长期得不到执行,网卡接收缓存里的数据包就持续积累,到最后很可能因为满载而丢弃一些数据包,从而造成丢包的现象。
2.2 NETCONN API
NETCONN API 是基于操作系统的 IPC 机制(即信号量和邮箱机制)实现的。
内核代码和网络应用程序分离成了独立的线程:
- 内核代码线程:
tcpip_thread
- 网络应用程序线程:按各种网络模块区分。
- 优先级参考:
线程 | 优先级 |
---|---|
LwIP 内核线程 tcpip_thread |
很高 |
重要的网络应用程序 | 高 |
不太重要&处理数据比较耗时的网络应用程序 | 低 |
优缺点:
-
相对 RAW/Callback API
- 用户可以按照操作文件的方式来操作网络连接。
- 依赖与信号量和邮箱,消耗更多时间和内存,效率降低。
-
相对 Socket API
- 避免了内核程序和网络应用程序之间的数据拷贝,提高数据递交效率。
- Socket API 的易用性较好,NETCONN API 需要了解内核结构体。
2.3 SOCKET API
套接字接口。
Socket API 具有更好的易用性&移植性。
LwIP 的 Socket API 是基于 NETCONN API 实现的。