当前位置: 首页 > article >正文

五种嵌入式中常见网络协议栈

一.LWIP

1.介绍

LwIP(Lightweight IP)是一个由瑞典计算机科学院(Swedish Institute of Computer Science)开发的轻量级TCP/IP协议栈,专为资源有限的嵌入式系统而设计。它以其小巧且功能完善的特性,在物联网、嵌入式系统等领域得到了广泛应用。

2.主要特性

轻量级:LwIP的设计初衷是用少量的资源消耗实现一个较为完整的TCP/IP协议栈,特别是TCP协议的完整性。它通常只需要几十KB的RAM和40KB左右的ROM就可以运行。

协议支持:支持ARP、ICMP、IGMP、UDP、TCP、PPP、DNS、DHCP等多种协议,满足嵌入式系统对网络通信的基本需求。

可移植性:LwIP可以移植到多种操作系统和处理器体系结构上,同时也支持在无操作系统的情况下独立运行。

API支持:提供Raw API、Socket API和NETCONN API等多种接口,以满足不同应用场景的需求。其中,Raw API用于提高应用程序性能,而Socket API则提供了类似Berkeley套接字的接口,便于开发者使用。

内部机制:LwIP内部实现了动态内存池和静态内存堆管理机制,使得各个模块可以灵活地申请和释放内存。同时,它还提供了网卡操作、IP协议实现、TCP/UDP协议实现等核心功能。

3.最新版本

截至当前时间(2024年09月18日),LwIP的最新版本为2.1.3。用户可以通过LwIP的官方网站(http://savannah.nongnu.org/projects/lwip/)下载最新版本的资源,并查看官方说明文档。

4.应用示例

LwIP还包含一个contrib包,提供了移植和应用LwIP的一些demo,即应用示例。这些示例包括常见的网络应用程序,如HTTP服务器、MQTT客户端、TFTP服务器等,有助于开发者快速上手并理解LwIP的使用。

二.uIP

1.介绍

uIP是专为8/16位嵌入式微处理器设计的小型TCP/IP协议栈。它去掉了TCP/IP协议栈中一些不常用的功能,采用BSD授权,遵循RFC标准,完全由C语言编写。uIP以库函数的形式提供给嵌入式Internet应用开发人员,并采用了一种基于事件驱动的程序模型,不使用动态内存,从而大大减少了代码容量和RAM的占用量。

官网链接:Svensk forskning för hållbar tillväxt| RISE

2.项目技术分析

uIP的核心在于其精简的设计。它包含了TCP、UDP、ICMP和IPv4等基本的网络协议,并通过一个易于理解和编写的代码库实现了这些功能。

在结构上,uIP分为以下几个主要部分:

apps/:包含多个示例应用程序,帮助开发者了解如何与uIP集成并构建自己的应用。

doc/:提供了详细的文档资料,有助于快速学习和理解uIP的工作原理。

lib/:一些辅助库代码,用于支持特定的应用场景。

uip/:uIP的核心代码,包括TCP/IP协议栈的具体实现。

unix/:为FreeBSD或Linux环境下运行的uIP提供了用户空间进程的支持。

由于uIP设计的目标是极小化内存占用,它采取了一种叫做"分段处理"的技术来优化内存管理,即使在非常有限的硬件资源下也能高效运作。

三.FreeRTOS+TCP:

   FreeRTOS+TCP是一个开源、可扩展和线程安全的TCP/IP堆栈,专为FreeRTOS设计。它提供了一个基于标准Berkeley套接字的接口,简单易用,便于快速学习。同时,FreeRTOS+TCP的功能和RAM占用空间完全可扩展,既适用于较小的低吞吐量微控制器,也适用于较大的高吞吐量微处理器。

四.RL-TCPnet

   RL-TCPnet是一个来自RL-ARM库的TCP/IP协议栈,旨在减少内存使用量和代码大小。它适用于资源有限的嵌入式系统设备,并提供了Web服务器、SMTP客户端、SNMP代理、DNS解析等高层应用。

   

五.uC/IP

  uC/IP主要是基于uC/OS操作系统设计的,也可移植到其它操作系统,并且开源、免费。其源码主要来源于BSD栈和KA9Q栈(一个DOS系统单任务环境下的协议栈)。uC/IP应用层支持DHCP/DNS/FTP/HTTP/TELNET/SNTP等协议,实现的网络功能较为全面也可进行裁减。根据硬件平台、编译器和应用功能的不同,uC/IP代码占有的容量一般介于40-80KB之间。


http://www.kler.cn/news/309636.html

相关文章:

  • 探索物联网 (IoT):从概念到应用
  • [性能]高速收发的TCP/MQTT通信
  • docker时区修改
  • linux网络编程1
  • iOS六大设计原则设计模式
  • c++9月18日
  • [C++] 剖析多态的原理及实现
  • 深入了解单元测试框架:JUnit 5、Mockito和 AssertJ
  • 前端项目优化:极致最优 vs 相对最优 —— 深入探索与实践
  • App Fiddler抓包配置
  • arm
  • 一种没有注释的语言
  • python画图|3D直方图基础教程
  • CSP-J/S赛前知识点大全3.1.1:初赛易错重难点(题目)
  • C++如何处理内存碎片问题
  • java -- JDBC
  • 鸿蒙Harmony应用开发,数据驾驶舱页面的实现
  • 技术美术一百问(02)
  • 游戏开发引擎__游戏场景(灯光,摄像机)
  • 0918作业
  • 使用Docker挂载部署JAVA项目
  • MICE MIXTURE OF CONTRASTIVE EXPERTS FOR UNSUPERVISED IMAGE CLUSTERING
  • Docker安装SVN,搭建自己的本地版本仓库
  • 高密原型验证系统解决方案(下篇)
  • 图像检测【YOLOv5】——深度学习
  • 面向对象程序设计之模板进阶(C++)
  • MySQL8.0.13-函数索引
  • 高通Liunx 系统镜像编译
  • 接口开发基本规范
  • 软件测试学习笔记丨Postman基础使用