IP 网络
Mbed OS 中的 IP 网络分为三个明确定义的 API 级别。下图显示了最接近的匹配 OSI 模型层旁边的图层。
IP 网络
以下部分介绍了每个级别中实现的 API 和技术。
套接字 API
套接字 API 是所有 IP 连接方法中的通用 API。Mbed OS 中的所有网络栈都提供相同的套接字 API,使应用程序可以在不同的连接方法甚至栈之间移植。
在 OSI 模型中,套接字 API 与第 4 层(传输层)相关。在 Mbed OS 中,套接字 API 支持 TCP 和 UDP 协议。
有关使用说明,请参阅套接字 API 参考。
IP 栈
Mbed OS 有三个选项可供 IP 栈选择。连接模块提供两个内置 IP 栈或外部 IP 栈。
网络栈
如上图所示,所有栈都实现相同的套接字 API。因此,应用程序开发人员很少需要知道将使用哪个栈。Mbed OS 在构建时选择一个,通常是 LwIP。
从应用的角度来看,一些外部 Wi-Fi 模块和大多数蜂窝模块实际上是外部 IP 栈。在这种情况下,网络驱动程序实现完整的网络栈 API。这些驱动程序通常通过 AT 命令类型的接口驱动模块。使用外部 IP 模块可以节省 RAM 和 Flash,但是根据驱动程序和 AT 命令接口,它可能无法与完整的套接字 API 匹配。
下表总结了不同的栈,用例及其限制。
栈 | 支持网络协议 | 用例 | 限制 |
---|---|---|---|
LwIP | IPv4, IPv6, PPP | 以太网络, Wi-Fi, 2G/3G/4G 蜂窝 | 4 套接字, 1 接口, 没有路由 |
Nanostack | IPv6, 6LoWPAN, Thread | 网状网络,边界路由器 | 只有 IPv6 |
外部 IP 模块 | 取决于该模块 | (保存 RAM/Flash) | 取决于该模块。通常与套接字 AP I匹配不佳 |
配置 IP 栈接口
根据所使用的第 3 层,网络层和协议,有不同的方法来配置接口。它还取决于使用的栈,每个链路层支持哪些配置。
栈 | 数据链路层 | 网络层 | 配置支持 |
---|---|---|---|
LwIP | 以太网络, WiFi | IPv4 | DHCP,静态 |
LwIP | 以太网络, WiFi | IPv6 | RFC 4862 IPv6 无状态地址自动配置。没有 DHCPv6 支持 |
LwIP | PPP | IPv4,IPv6 | 自动 |
Nanostack | 以太网络 | IPv6 | 静态或 RFC 4862 IPv6 无状态地址自动配置。没有 DHCPv6 支持 |
Nanostack | IEEE 802.15.4 | 6LoWPAN | Thread 或 6LoWPAN-ND+RPL |
网络接口
网络接口是应用程序级 API,用户可在其中选择驱动程序,连接方法和 IP 栈。每种连接方法都需要不同的配置,因此这些 API 不可互换。应用程序开发人员必须选择一个选择接口还会自动将网络栈作为依赖项拉入。
请注意,接口 API 与网络驱动程序不同。接口 API 是应用程序的控制接口。仅当网络驱动程序需要从应用程序进行配置时,才会实现控制 API。从应用程序的角度来看,没有区别,但网络驱动程序开发人员需要意识到这一点。
Mbed OS 实现以下网络接口 API:
- 以太网络。
- WiFi。
- 蜂窝 (PPP)。
- 6LoWPAN-ND 网状网络。
- Thread 网状网络。
有关使用说明,请参阅网络接口 API 参考。
网络驱动程序
“网络驱动程序” 描述了将网络设备连接到 IP 栈或套接字 API 的不同 API。以下是每个驱动程序 API 的说明。
以太网络驱动程序
Emac API
以太网驱动程序使用独立于栈的 EMAC API 实现。由于以太网驱动程序不需要配置,因此它不会为应用程序实现任何控制接口。
Wi-Fi 驱动程序
Wi-Fi 驱动程序
Mbed OS 中有两种类型的 Wi-Fi 驱动程序,具体取决于它实现的协议层。Wi-Fi 驱动程序是以太网驱动程序或外部 IP 栈的特例。Wi-Fi 驱动程序需要从应用程序进行配置,因此需要实现低级 EMAC API 或网络栈 API 以及称为 WiFiInterface 的高级控制接口 API。
蜂窝调制解调器驱动程序
蜂窝驱动程序
蜂窝驱动程序与 Wi-Fi 具有相同的两个独立案例。如果他们使用外部 IP 栈,则驱动程序会实现网络栈 API。如果他们使用内部 IP 栈 LwIP,那么他们实现串行 PPP 驱动程序。
6LoWPAN/Thread RF 驱动程序
RF 驱动程序
在 Mesh 网络上,Nanostack 使用 IEEE 802.15.4 无线电来发送和接收数据包。RF 驱动程序实现了 NanostackRfPhy API。
此驱动程序类型没有其他用例,因此它使用特定于 Nanostack 的 API 在 C 中实现。
有关详细信息,请参阅 6LoWPAN Mesh 技术部分 和为 6LoWPAN 栈移植新的 RF 驱动程序。