Zephyr的网络架构和TCP/IP四层模型一致,按照数据链路层,网络层,传输层,应用层进行分层设计。最底层为物理层为TCP/IP提供物理传输通道。
应用层
应用层的代码集中在subsys/net/lib
下,该目录下的代码提供了socket的实现和应用协议库,包含目录如下:capture
:用于网络抓包coap
: 物联网CoAP应用层协议config
: 自动初始化网络conn_mgr
: 连接管理dns
: 域名解析服务http
: http 客服端和解析协议lwm2m
: 轻量级M2M物联网设备管理协议mqtt
: 物联网MQTT应用层协议openthread
:实现了Thread 1.1.1规范sntp
: 简单网络授时协议sockets
: 提供BSD套接字socks
: 代理服务协议tftp
: tftp传输协议tls_credentials
: TLS加密管理utils
: 对域名解析的封装,通过字符串域名获取到ip地址websocket
websocket通信协议
网络应用程序可以使用提供的应用程序级协议库或直接访问 BSD 套接字 API 来创建网络连接、发送或接收数据以及关闭连接。 应用程序还可以使用网络管理 API 来配置网络并设置相关参数,例如网络链接选项、开始扫描(如果适用)、侦听网络配置事件等。网络接口 API 可用于将 IP 地址设置为 网络接口,关闭网络接口等。
传输层&网络层
传输层和网络层的代码都放在subsys/net/ip
下,包含了核心网络协议IPv6、IPv4、UDP、TCP、ICMPv4、ICMPv6、IGMP的代码。
传输层对上抽象出网络上下文接口net_context
,应用层的套接字就是基于网络上下文接口进行封装。
net_if
将L2抽象成统一的网络接口,网络层通过统一的网络接口收发数据。net_if
提供了所有网络接口通用的功能,例如设置网络接口关闭等。系统中可以有多个网络接口。
数据链路层
数据链路层的代码放在subsys/net/l2
下,L2为向实际网络设备发送数据和从实际网络设备接收数据提供了一个通用 API。包含目录如下:bluetooth
蓝牙的L2,压缩IPv6头,经过L2CAP通道收发canbus
工业总线的L2dummy
虚拟的L2,Qemu中模拟网络接口ethernet
以太网的L2ieee802154
IEEE802.15.4的L2openthread
openthread的L2ppp
点对点传输的L2virtual
虚拟L2驱动,依赖于其它的L2wifi
wifi的L2,只做wifi管理和事件通知
L2包括以太网、IEEE 802.15.4、蓝牙、CANBUS 等。其中IEEE 802.15.4和蓝牙IPSP支持 IPv6 报头压缩 (6Lo),而IPv4 的 ARP 由以太网组件完成。
物理层
物理层对应到网络的设备驱动,主要有如下目录drivers/bluetooth
蓝牙驱动drivers/can
工业总线驱动drivers/ethernet
以太网驱动drivers/ieee802154
ieee802.15.4驱动drivers/net
ppp和slip驱动drivers/wifi
wifi驱动
参考
https://docs.zephyrproject.org/latest/connectivity/networking/net-stack-architecture.html