Zephyr网络分析-软件分层架构

Creative Commons
本作品采用知识共享署名

本文介绍Zephyr网络的分层架构

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 工业总线的L2
dummy 虚拟的L2,Qemu中模拟网络接口
ethernet 以太网的L2
ieee802154 IEEE802.15.4的L2
openthread openthread的L2
ppp 点对点传输的L2
virtual 虚拟L2驱动,依赖于其它的L2
wifi 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