LwIP协议栈简介

简介

LwIP最先是由瑞典计算机科学院的Adam Dunkels等开发的用于嵌入式系统的开源TCP/IP(共分为四层,详见上一个博客)协议栈,LwIP的含义是Light Weight(轻型)IP协议。
LwIP最大的优势在于可以移植到操作系统上,也可以在无操作系统的情况下独立运行,且代码量小。

实现的协议

  • ARP协议:以太网地址解析协议,用来实现主机以太网物理地址到IP地址的映射;
  • IP协议:包括IPv4和IPv6,支持IP分片与重装,支持多网络接口下数据报转发,;
  • ICMP协议:用于网络调试与维护;
  • IGMP协议:用于网络组管理,可以实现多播数据的接收;
  • UDP协议,用户数据报协议;
  • TCP协议:支持TCP拥塞控制、RTT估计、快速恢复与重传等;
  • 提供三种用户编程接口方式:Raw/CallbackAPI、SequentialAPI、BSD-styleSocketAPI;
  • DNS:域名解析;
  • SNMP:简单网络管理协议;
  • DHCP:动态主机配置协议;
  • AUTOIP:IP地址自动配置;
  • PPP:点对点协议,支持PPPoE。

进程模型

协议的进程模型可以理解为协议实现时被划分在几个进程中,即实现具体协议栈时需要几个进程。

  • LwIP采用的进程模型为:协议栈内核同操作系统内核相互隔离,而同时整个协议栈作为操作系统中的一个单独进程而存在。
  • 用户应用程序可以驻留在协议栈内核的进程中,也可以实现为一个单独的进程。
  • 当驻留在协议栈内核的进程中时,用户程序与协议栈之间的通信是通过回调函数(Raw/CallbackAPI)来实现的。
  • 用户程序为一个单独的进程时,需要使用协议栈中的操作系统模拟层提供的信号量与邮箱机制,实现用户进程和协议栈内核的数据交互,也可以用SequentialAPI和SocketAPI进行编程。

协议栈编程接口

LwIP为用户应用程序的编写提供了三种编程接口,用户可以从自己的处理器特点及网络应用程序需求等多方面考虑,选择最佳的编程方式或组合。

Raw/Callback API

使用该API接口来实现LwIP网络编程时,协议栈与用户程序之间通信是通过回调函数来实现的,此时用户程序和协议栈内核运行于同一进程中。

  • 用户通过回调的方式执行,致使用户程序和协议栈内核出现了相互制约的关系;
  • 在大量数据发送和高速率状态下会使Raw/Callback API不适合在多任务、交互数据量大、数据处理时间开销长等场合下使用。
Sequential API

在操作系统环境中,可以使用该API进行网络应用程序的开发,它是基于操作系统的IPC机制(即信号量和邮箱机制)实现的,它的设计将lwip内核代码和网络应用程序分离成了独立的线程。

  • 由此lwip内核线程就只负责数据包的TCP/IP封装和拆封,而不用进行数据应用层处理,大大提高系统对网络数据包的处理效率;
  • 使用该API时,可以根据任务的重要性,分配不同的优先级给线程保证时效性,具体原则如下:

在这里插入图片描述

Socket API
  • socket,即套接字,它对网络连接进行了高级的抽象,使得用户可以像操作文件一样操作网络连接;
  • socket编写的网络应用程序具有很好的可移植性;
  • lwip中的socket API是BSD Socket,但是并没有也没办法实现全部的BSD socket。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值