LWIP开源协议栈
目录
《LwIP协议栈源码详解——TCP/IP协议的实现》移植综述_lwip 协议栈源码详解——tcp/ip协议的实现_痞子IT的博客-CSDN博客
LWIP
LwIP源代码文件目录解析
LwIP为用户提供三组API接口,
sequential API(Netconn API) 为普通的、顺序的程序提供了使用lwIP栈的方法。依赖操作系统,所有操作都需要协议栈去处理,应用程序与协议栈通信,通过发送消息方式进行,因此这种方式会造成频繁的任务切换,速度相比RAW API慢了许多。在操作系统上推荐使用本API。
BSD Socket API 建立在sequential API之上的,封装出的一套BSD Socket API。同样依赖操作系统,效率低,消耗的资源更多。
Raw API(native API / callback) 基于零拷贝发送和接收的事件驱动的API,在没有操作系统的情况下唯一可用的API。操作较复杂但速度最快,效率最高。
移植相关
LWIP支持无操作系统模式(while循环处理)和操作系统模式
- 需要将网卡数据转化到lwip, 以及从lwip转化到网卡数据, 这一部分一般无需移植者处理, 直接从网上获取资源
- 配置LwIP , lwipopts.h
LWIP代码深入
pbuf有很多种, 详见链接里的pbuf, https://codinglover.top/2021/06/26/lwip应用笔记(一):lwip移植的一些预备知识/
源码分析:
内存管理, 网络接口, IP处理 , UDP处理, TCP处理
其它
linux下有两个网卡A和B, 怎么把A网卡的数据转发给B网卡 ?
- 一个应用场景是在 Linux 上用 IP转发使内部网络连接到互联网
- 确认两个网卡的名称,可以使用
ifconfig
或ip addr
命令查看网卡信息。 - 开启 IP 转发功能。在命令行输入以下命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
这将启用 IP 转发功能。 - 配置转发规则。使用
iptables
命令来实现,例如:iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
这个命令的意思是将来自 eth0 网卡的数据包转发到 eth1 网卡上,并且允许这个过程。 - 测试。现在可以测试转发是否正常工作,例如从连接在 A 网卡的设备发送一些数据包,看看是否能够从连接在 B 网卡的设备接收到这些数据包。
请注意,这只是基本的转发设置,具体的设置还需要根据实际情况进行调整。此外,也需要确保网络环境和安全性,以避免不必要的风险。