《嵌入式网络那些事:LwIP协议深度剖析与实战演练》面向网络TCP/IP协议初学者以及大量嵌入式网络开发人员,从当下流行的嵌入式网络协议栈LwIP的源代码入手,详细讲解TCP/IP协议的各层机制及其实现原理。同时,通过搭建简单的实验环境,还详细阐述LwIP在嵌入式设备组网过程中的移植过程、应用编程案例、编程框架、注意事项等。
目录
- 第1章 故事前传
- 1.1 背景知识
- 1.1.1 嵌入式网络概述
- 嵌入式网络那些事
- 嵌入式网络那些事
- 1.1.2 写作背景
- 1.1.3 几个疑问
- 1.2 TCP/IP扫盲班
- 1.2.1 OSI模型
- 1.2.2 TCP/IP协议
- 1.2.3 OSI模型 VS
- 1.2.4 嵌入式TCP/IP协议栈
- 1.3 旅行集结号
- 1.3.1 实验环境说明
- 1.3.2 本书内容概述
- 1.3.3 一起出发
- 第2章 有备而无患
- 2.1 传说中的ARM微处理器
- 2.1.1 背景知识
- 2.1.2 存储器组织结构
- 2.1.3 指令系统
- 2.1.4 数据类型与存储格式
- 2.1.5 处理器状态与处理器模式
- 2.1.6 寄存器组织
- 2.1.7 异常处理
- 2.2 S3C44B0X初体验
- 2.2.1 简介
- 2.2.2 存储管理器
- 2.2.3 中断控制器
- 2.2.4 其他模块
- 2.3 ARM汇编真经
- 2.3.1 简介
- 2.3.2 ARM指令集编码格式
- 2.3.3 ARM寻址方式
- 2.3.4 ARM指令集简介
- 2.3.5 ARM汇编语言
- 第3章 让板子跑起来
- 3.1 ARM开发工具
- 3.1.1 ADS简介
- 3.1.2 ARM汇编器
- 3.1.3 ARM编译器
- 3.1.4 ARM连接器
- 3.2 程序的调试
- 3.2.1 几种调试方式
- 3.2.2 AXD调试器
- 3.2.3 ARMulator的使用
- 3.3 编写启动代码
- 3.3.1 开发板结构
- 3.3.2 启动代码讲解
- 3.3.3 几个测试程序
- 第4章 快马加鞭
- 4.1 嵌入式实时操作系统
- 4.1.1 概述
- 4.1.2 μC/OS-II的文件结构
- 4.1.3 μC/OS-II中的任务
- 4.1.4 就绪任务的管理
- 4.1.5 任务堆栈
- 4.2 移植μC/OS-II实时操作系统
- 4.2.1 概述
- 4.2.2 编写OS_CPU.H
- 4.2.3 编写OS_CPU_C.C
- 4.2.4 编写OS_CPU_A.S
- 4.3 测试程序
- 4.3.1 系统时钟
- 4.3.2 第一个测试程序
- 4.3.3 第二个测试程序
- 第5章 无操作系统模拟层LwIP的移植
- 5.1 LwIP综述
- 5.1.1 简介
- 5.1.2 用SI阅读源代码
- 5.2 移植工作
- 5.2.1 移植头文件
- 5.2.2 RTL8019AS网卡
- 5.2.3 编写网卡驱动程序
- 5.3 测试程序
- 5.3.1 协议栈初始化
- 5.3.2 数据包的查询接收
- 5.3.3 数据包的中断接收
- 5.3.4 一个简单的TCP服务器
- 5.3.5 移植小结
- 第6章 动态内存管理
- 6.1 背景知识
- 6.1.1 内存管理概述
- 6.1.2 常见内存分配策略
- 6.2 动态内存池
- 6.2.1 数据结构描述
- 6.2.2 函数实现
- 6.3 动态内存堆
- 6.3.1 数据结构描述
- 6.3.2 函数实现
- 6.4 其他内存分配策略
- 第7章 数据包管理
- 7.1 预备知识
- 7.1.1 LwIP的分层特点
- 7.1.2 协议进程模型
- 7.2 数据包管理
- 7.2.1 数据包结构pbuf
- 7.2.2 pbuf的类型
- 7.2.3 数据包申请函数
- 7.2.4 数据包释放函数
- 7.2.5 其他数据包操作函数
- 第8章 网络接口管理
- 8.1 引言
- 8.2 网络接口结构
- 8.2.1 数据结构
- 8.2.2 函数实现
- 8.3 环回接口
- 8.3.1 相关函数
- 8.3.2 实验程序
- 第9章 ARP协议
- 9.1 ARP协议简介
- 9.1.1 物理地址与网络地址
- 9.1.2 ARP协议的本质
- 9.2 数据结构
- 9.2.1 ARP表
- 9.2.2 ARP报文
- 9.3 ARP层数据包输入
- 9.3.1 以太网数据包递交
- 9.3.2 ARP数据包处理
- 9.3.3 ARP攻击
- 9.3.4 ARP缓存表的更新
- 9.4 ARP层数据包输出
- 9.4.1 ARP层数据处理总流程
- 9.4.2 广播包与多播包的发送
- 9.4.3 单播包的发送
- 第10章 网际协议(IP)
- 10.1 相关知识
- 10.1.1 概述
- 10.1.2 IP地址
- 10.1.3 特殊IP地址
- 10.1.4 子网划分与子网掩码
- 10.1.5 网络地址转换(NAT)
- 10.1.6 单播、多播与广播
- 10.2 数据报
- 10.2.1 数据报组成结构
- 10.2.2 数据结构
- 10.3 IP层输出
- 10.3.1 发送数据报
- 10.3.2 数据报分片
- 10.4 IP层输入
- 10.4.1 数据报接收
- 10.4.2 分片重装数据结构
- 10.4.3 分片重装函数
- 10.4.4 分片插入与检查
- 第11章 网际控制报文协议(ICMP)
- 11.1 基本知识
- 11.1.1 ICMP协议
- 11.1.2 报文交付
- 11.1.3 报文类型
- 11.1.4 报文格式
- 11.1.5 差错报文
- 11.1.6 查询报文
- 11.2 ICMP的实现
- 11.2.1 数据结构
- 11.2.2 发送差错报文
- 11.2.3 ICMP报文的处理
- 11.2.4 ping命令
- 11.2.5 ICMP洪水
- 第12章 用户数据报协议(UDP)
- 12.1 背景知识
- 12.1.1 传输层协议
- 12.1.2 UDP协议
- 12.1.3 端口号
- 12.1.4 UDP报文的交付
- 12.1.5 UDP报文格式
- 12.1.6 UDP伪首部与校验和
- 12.2 UDP数据结构
- 12.2.1 报文首部结构
- 12.2.2 控制块
- 12.3 控制块操作函数
- 12.3.1 使用UDP编程
- 12.3.2 新建控制块
- 12.3.3 绑定控制块
- 12.3.4 连接控制块
- 12.3.5 其他控制块操作函数
- 12.4 报文处理函数
- 12.4.1 报文的发送
- 12.4.2 报文接收与递交
- 12.5 测试程序
- 12.5.1 回送程序
- 12.5.2 测试结果
- 12.5.3 回调编程的缺陷
- 第13章 传输控制协议(TCP)
- 13.1 协议简介
- 13.1.1 TCP的必要性
- 13.1.2 TCP的特性
- 13.1.3 连接的定义
- 13.1.4 数据流编号
- 13.1.5 滑动窗口
- 13.2 TCP报文
- 13.2.1 报文格式
- 13.2.2 TCP选项
- 13.2.3 紧急数据
- 13.2.4 强迫数据交互
- 13.2.5 报文首部数据结构
- 13.3 TCP连接
- 13.3.1 建立连接
- 13.3.2 断开连接
- 13.3.3 复位连接
- 13.3.4 TCP状态转换图
- 13.3.5 特殊的状态转换
- 13.4 TCP控制块
- 13.4.1 控制块数据结构
- 13.4.2 控制块链表
- 13.4.3 接收窗口
- 13.4.4 发送窗口
- 13.5 TCP编程函数
- 13.5.1 控制块新建
- 13.5.2 控制块绑定
- 13.5.3 控制块侦听
- 13.5.4 控制块连接
- 13.5.5 发送数据
- 13.5.6 关闭连接
- 13.5.7 其他函数
- 13.6 TCP输出处理
- 13.6.1 报文段缓冲
- 13.6.2 报文段构建
- 13.6.3 报文段发送
- 13.7 TCP输入处理
- 13.7.1 TCP层函数调用流程
- 13.7.2 报文输入
- 13.7.3 TIME_WAIT状态的报文处理
- 13.7.4 LISTEN状态的报文处理
- 13.7.5 SYN攻击
- 13.7.6 TCP状态机函数
- 13.7.7 TCP数据输入
- 13.8 可靠的传输服务
- 13.8.1 超时重传与RTT估计
- 13.8.2 慢启动与拥塞避免
- 13.8.3 快速重传与快速恢复
- 13.8.4 糊涂窗口与避免
- 13.8.5 零窗口探查
- 13.8.6 保活机制
- 13.8.7 TCP定时器
- 13.9 测试程序
- 13.9.1 Telnet服务器
- 13.9.2 测试结果
- 第14章 移植操作系统模拟层
- 14.1 移植过程
- 14.1.1 移植综述
- 14.1.2 添加文件
- 14.1.3 修改头文件lwipopts.h
- 14.1.4 头文件sys_arch.h
- 14.1.5 全局变量与初始化
- 14.1.6 信号量函数
- 14.1.7 邮箱函数
- 14.1.8 超时相关函数
- 14.1.9 创建新进程
- 14.2 测试程序
- 14.2.1 初始化函数
- 14.2.2 简单的HTTP服务器
- 14.2.3 测试结果
- 第15章 用户编程接口
- 15.1 定时事件
- 15.1.1 定时结构
- 15.1.2 定时链表
- 15.1.3 内核进程
- 15.1.4 处理定时事件
- 15.2 消息机制
- 15.2.1 消息结构
- 15.2.2 数据包消息
- 15.2.3 协议栈API实现
- 15.2.4 API消息
- 15.3 协议栈接口
- 15.3.1 用户数据缓冲netbuf
- 15.3.2 数据缓冲操作
- 15.3.3 连接结构netconn
- 15.3.4 内核回调接口
- 15.3.5 协议栈API函数
- 15.3.6 测试程序
- 15.4 套接字接口
- 15.4.1 socket的实现
- 15.4.2 套接字函数
- 15.4.3 测试程序
- 第16章 最后的战役
- 16.1 域名解析
- 16.1.1 域名系统(DNS)
- 16.1.2 测试程序
- 16.1.3 测试结果
- 16.2 动态主机配置
- 16.2.1 DHCP协议
- 16.2.2 测试程序
- 16.2.3 测试结果
- 16.3 Internet组管理
- 16.3.1 IGMP协议
- 16.3.2 测试程序
- 16.3.3 测试结果
- 16.4 终结篇
- 16.4.1 常见问题及解决方法
- 16.4.2 故事结局
- 参考文献