IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> LWIP学习笔记 -> 正文阅读

[网络协议]LWIP学习笔记

LWIP代码组成

文件目录

这里以源码版本2.1.2为例。
在这里插入图片描述
源码解压后如上图所示,三个文件夹。
doc文件夹里由两个重要文件提一下,rawapi.txt是关于如何使用raw API;sys_arch.txt是关于移植说明,规定了需要实现的函数和宏定义等等。
在这里插入图片描述
src文件夹下一共有五个文件夹,apps, api, core, include, netif。
apps 包含了各种应用层协议;
api 包括了LWIP的sequential API和socket API两类接口函数和实现相关源码,需要操作系统支持;
core 是LWIP内核源代码,可以单独运行,无需操作系统支持;
include 包含协议栈使用的头文件;
netif 主要包含底层网络接口相关文件。

下图是CORE文件夹下的截图:
在这里插入图片描述

其中core文件夹是整个协议栈重点,包含了IP、ICMP、IGMP、TCP、UDP等核心协议以及建立它们之上的DNS、DHCP、SNMP等上层应用协议。
ipv4文件夹里由IPv4标准中与IP层数据处理相关的所有代码,同理ipv6是IPv6标准与IP层相关代码;
snmp文件夹、dns.c、dhcp.c分别实现的是简单网络管理协议、动态主机配置协议、域名系统协议。
init.c 包含一个与LWIP协议栈初始化密切相关函数,和一些协议栈配置信息的检查与输出。
mem.c memp.c 两种特有的内存管理方式实现对协议栈内存的有效管理。
netif.c 包含了协议栈接口管理的相关函数,协议栈支持多个网络接口。
pbuf.c 包含了协议栈内核使用的数据包管理函数,采用特殊的数据包结构,避免各层次间拷贝。提高数据传递效率,同时节省内存空间。
raw.c 为应用层提供了一种直接和IP数据包交互的方式,通TCP处于同一等级,享受IP层提供服务。
stats.c 包含协议栈内部数据统计与显示的相关函数,比如内存使用、邮箱、信号量等。
sys.c sys_arch.c 前者实现对操作系统模拟层封装,为协议栈提供统一邮箱、信号量操作函数。后者是完成对操作系统中邮箱和信号量函数的封装。前者是将后者的函数再次封装得到具有协议栈特色的邮箱、信号量操作函数。
tcp.c 对TCP控制块操作函数。
udp.c 包括UDP控制块管理、数据发送函数、数据接收函数等。

下图是api文件夹下截图:
在这里插入图片描述
如图所示,为用户提供了两种简单的上层api接口,一种是协议栈的sequent API,另一种是socket API。这两种API均是通过引进邮箱和信号量等通信与同步机制,实现对内核core中raw API封装和调用。
从用户对的角度来讲,两种API为程序开发提供了方便,但是不可避免降低了代码执行效率和整个系统的稳定性。
api_lib.c和api_msg.c包含了所有sequential API的实现相关函数,前者预留给洪湖的编程接口,后者是对消息封装和处理函数;
neibuf.c包含上层数据包管理函数的实现,netdb.c包含与主机名字转换相关函数,主要再socket中使用;netifapi.c包含上层网络接口管理函数的实现;sockets.c包含socket API实现;
tcpip.c提供上层API与协议栈内核交互的函数,是API功能实现的一个枢纽。

include文件夹下比较重要的文件就两个,一个是opt.h,包含所有内核参数的默认配置;另一个init.h文件,包含源代码相关的宏定义,如协议版本号等。

协议栈

协议栈构成如下:
在这里插入图片描述
对于应用层协议先不管,主要先学习ARP、IP、ICMP、UDP、TCP这些核心协议的原理与代码实现。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:18:31  更:2021-09-01 12:20:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 20:41:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计