首页>参考读物>计算机科学与技术>计算机网络

LwIP应用开发实战指南:基于STM32
作者 : 刘火良 杨森 编著
出版日期 : 2019-09-12
ISBN : 978-7-111-63582-6
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 458
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书以LwIP源码为核心,讲解TCP/IP协议栈的实现,讲解常见的网络协议,讲解LwIP各层之间的数据传递,最终辅以实战案例,教你如何连接各大云平台,配套野火STM32 M4/M7系列开发板,提供完整源代码,极具操作性。

图书特色

深入剖析LwIP中的各种协议和应用。
以LwIP源码为核心,结合经典的云-管-端物联网应用实例,由浅入深,讲解LwIP技术和应用开发。配套野火STM32 M4/M7系列开发板,提供完整源代码,极具操作性。

图书前言

如何学习本书
本书围绕LwIP 2.1.2版本源码讲解TCP/IP网络协议栈的基本知识,带领读者进入网络的世界。无论你是学生、嵌入式开发者还是物联网开发者,都可以从本书中学习到网络的相关知识,了解网络协议栈的处理思想。
本书将深入分析网络协议栈的原理与实现过程,涉及ARP、IP、ICMP、TCP、UDP、HTTP、MQTT等协议,还将深入讲解LwIP中内存管理、pbuf数据包、网卡接口管理的原理与实现,并详细介绍LwIP的移植过程,读者可以将其移植到无操作系统/有操作系统的环境中使用。
除此之外,本书还通过理论和实践相结合,使用LwIP接入当前较大的几个云平台,如阿里云、百度云、OneNET,以使读者熟练掌握接入方法。在本书中,读者可以熟练掌握LwIP中Netconn API与Socket API的使用方式,并且掌握多种网络调试工具,如Wireshark、Postman以及MQTT.fx等的使用方法。
全书内容循序渐进,不断迭代,建议读者在学习的时候做到两点:一是不能一味看书,要把代码和理论结合起来学习,一边看书,一边调试代码。通过执行每一个程序,检验程序的执行流程和执行效果与自己想的是否一致,不断总结经验;二是在每学完一章之后,必须将配套的例程重写一遍(切记不要复制,即使是一个符号),举一反三,确保真正理解。
推荐阅读
LwIP官方源代码
《STM32库开发实战指南》(已由机械工业出版社出版多个版本)
《FreeRTOS内核实现与应用开发实战指南:基于STM32》(已由机械工业出版社出版,ISBN 978-7-111-61825-6)
本书的技术论坛
如果在学习过程中遇到问题,可以到野火电子论坛(www.f?irebbs.cn)发帖交流,开源共享,共同进步。
鉴于水平有限,本书难免有错漏之处,热心的读者也可把勘误发送到论坛以便我们加以改进。祝你学习愉快,LwIP的世界,野火与你同行!

上架指导

计算机\网络

封底文字

本书以LwIP 2.1.2版本源码为核心,逐步讲解TCP/IP协议栈的原理与实现过程,详细介绍了常见网络协议,如ARP、IP、ICMP、TCP、UDP、HTTP、MQTT等,此外还讲解了LwIP中的数据包管理、内存管理、内核线程、消息投递、各层之间的数据传递,同时结合实战例程,教你一步步连接到各大物联网云平台,从零开始到完全理解LwIP协议和应用开发。
本书内容翔实,案例丰富,配有大量实例代码,适合作为嵌入式物联网领域工作者的参考书籍,也适合相关专业的学生学习参考。

作者简介

刘火良 杨森 编著:暂无简介

图书目录

前 言
第1章 网络协议概述 1
1.1 常用网络协议 1
1.2 网络协议的分层模型 2
1.3 协议层报文间的封装与拆封 3
第2章 LwIP概述 5
2.1 LwIP的优缺点 5
2.2 LwIP的文件说明 6
2.2.1 获取LwIP源码文件 6
2.2.2 LwIP文件说明 8
2.3 LwIP的说明文档 11
2.4 使用vs code查看源码 14
2.4.1 查看文件中的符号列表和函数列表 14
2.4.2 函数定义跳转 15
2.5 LwIP源码里的示例 16
2.6 LwIP的3种编程接口 17
2.6.1 RAW/Callback API 17
2.6.2 Netconn API 18
2.6.3 Socket API 19
第3章 开发平台 20
3.1 以太网概述 20
3.1.1 PHY层 20
3.1.2 MAC子层 21
3.2 STM32的ETH外设 23
3.3 MII和RMII接口 24
3.4 PHY:LAN8720A 25
3.5 硬件设计 27
3.6 软件设计 29
3.6.1 获取STM32的裸机工程模板 29
3.6.2 添加bsp_eth.c与bsp_eth.h 29
3.6.3 修改stm32f4xx_hal_conf.h文件 35
第4章 LwIP的网络接口管理 37
4.1 netif结构体 37
4.2 netif的使用 41
4.3 与netif相关的底层函数 45
4.4 ethernetif.c文件内容 46
4.4.1 ethernetif数据结构 46
4.4.2 ethernetif_init() 47
4.4.3 low_level_init() 48
第5章 LwIP的内存管理 50
5.1 几种内存分配策略 50
5.1.1 固定大小的内存块 50
5.1.2 可变长度分配 51
5.2 动态内存池 52
5.2.1 内存池的预处理 52
5.2.2 内存池的初始化 57
5.2.3 内存分配 58
5.2.4 内存释放 59
5.3 动态内存堆 61
5.3.1 内存堆的组织结构 61
5.3.2 内存堆初始化 62
5.3.3 内存分配 64
5.3.4 内存释放 67
5.4 使用C库的malloc和free函数来管理内存 71
5.5 LwIP中的配置 72
第6章 网络数据包 74
6.1 TCP/IP的分层思想 74
6.2 LwIP的线程模型 75
6.3 pbuf结构体说明 76
6.4 pbuf的类型 77
6.4.1 PBUF_RAM类型的pbuf 78
6.4.2 PBUF_POOL类型的pbuf 78
6.4.3 PBUF_ROM和PBUF_REF类型的pbuf 80
6.5 pbuf_alloc() 81
6.6 pbuf_free() 84
6.7 其他pbuf操作函数 88
6.7.1 pbuf_realloc() 88
6.7.2 pbuf_header() 88
6.7.3 pbuf_take()、pbuf_copy()、pbuf_chain()和pbuf_ref() 88
6.8 网卡中使用的pbuf 88
6.8.1 low_level_output() 88
6.8.2 low_level_input() 91
6.8.3 ethernetif_input() 93
第7章 无操作系统移植LwIP 94
7.1 将LwIP添加到裸机工程 94
7.2 移植头文件 97
7.3 移植网卡驱动 103
7.4 LwIP时基 111
7.5 协议栈初始化 112
7.6 获取数据包 114
7.6.1 查询方式 114
7.6.2 ping命令详解 115
7.6.3 中断方式 116
第8章 有操作系统移植LwIP 119
8.1 向LwIP中添加操作系统 119
8.1.1 复制FreeRTOS源码到工程文件夹 119
8.1.2 添加FreeRTOS源码到工程组文件夹 120
8.1.3 指定FreeRTOS头文件的路径 120
8.1.4 修改stm32f10x_it.c 121
8.2 lwipopts.h文件需要加入的配置 122
8.3 sys_arch.c/h文件的编写 126
8.4 网卡底层的编写 136
8.5 协议栈初始化 138
8.6 移植后使用ping命令测试基本响应 141
第9章 LwIP一探究竟 142
9.1 网卡数据传入LwIP内核的流程 142
9.2 内核超时处理 142
9.2.1 sys_timeo结构体与超时链表 144
9.2.2 注册超时事件 144
9.2.3 超时检查 147
9.3 tcpip_thread线程 149
9.4 LwIP中的消息 151
9.4.1 消息结构 151
9.4.2 数据包消息 153
9.4.3 API消息 154
9.5 揭开LwIP的神秘面纱 158
第10章 ARP 159
10.1 数据链路层概述 159
10.2 MAC地址的基本概念 159
10.3 初识ARP 160
10.4 以太网帧结构 160
10.5 IP地址映射为物理地址 161
10.6 ARP缓存表 162
10.7 ARP缓存表的超时处理 165
10.8 ARP报文 167
10.9 发送ARP请求包 170
10.10 数据包接收流程 172
10.10.1 以太网中数据包的接收 172
10.10.2 ARP数据包处理 176
10.10.3 更新ARP缓存表 178
10.11 数据包发送流程 182
10.11.1 etharp_output() 182
10.11.2 etharp_output_to_arp_index() 185
10.11.3 etharp_query() 186
第11章 IP 193
11.1 IP地址 193
11.1.1 概述 193
11.1.2 IP地址编址 193
11.1.3 特殊IP地址 195
11.2 局域网和广域网的概念 196
11.2.1 局域网 196
11.2.2 广域网 196
11.3 网络地址转换 197
11.4 IP数据报 198
11.5 IP数据报的数据结构 202
11.6 IP数据报分片 204
11.7 IP数据报发送 208
11.8 IP数据报接收 214
第12章 ICMP 222
12.1 ICMP功能简介 222
12.2 ICMP报文结构 223
12.3 ICMP报文类型 224
12.3.1 ICMP差错报告报文 224
12.3.2 ICMP查询报文 226
12.4 LwIP中的ICMP实现 227
12.4.1 ICMP报文数据结构 227
12.4.2 发送ICMP差错报文 229
12.4.3 处理ICMP报文 231
第13章 TCP 235
13.1 TCP服务概述 235
13.2 TCP的特性 235
13.2.1 连接机制 235
13.2.2 确认与重传 235
13.2.3 缓冲机制 236
13.2.4 全双工通信 236
13.2.5 流量控制 236
13.2.6 差错控制 237
13.2.7 拥塞控制 237
13.3 端口号的概念 237
13.4 TCP报文段结构 239
13.4.1 TCP报文段的封装 239
13.4.2 TCP报文段格式 239
13.5 TCP连接 243
13.5.1 “三次握手”建立连接 243
13.5.2 “四次挥手”终止连接 246
13.6 TCP状态 247
13.6.1 LwIP中定义的TCP状态 247
13.6.2 TCP状态转移 248
13.7 TCP中的数据结构 250
13.8 窗口的概念 253
13.8.1 接收窗口 254
13.8.2 发送窗口 254
13.9 TCP报文段处理 255
13.9.1 报文段缓冲队列 255
13.9.2 TCP报文段发送 256
13.9.3 TCP报文段接收 260
第14章 UDP 265
14.1 UDP概述 265
14.2 UDP常用端口号 266
14.3 UDP报文 266
14.4 UDP报文的数据结构 267
14.4.1 UDP报文首部结构体 267
14.4.2 UDP控制块 267
14.5 UDP报文发送 270
14.6 UDP报文接收 272
第15章 使用Netconn接口编程 277
15.1 netbuf结构体 277
15.2 netbuf相关函数说明 279
15.2.1 netbuf_new() 279
15.2.2 netbuf_delete() 279
15.2.3 netbuf_alloc() 280
15.2.4 netbuf_free() 280
15.2.5 netbuf_ref() 281
15.2.6 netbuf_chain() 282
15.2.7 netbuf_data() 282
15.2.8 netbuf_next()与netbuf_first() 282
15.2.9 netbuf_copy() 283
15.2.10 netbuf_take() 284
15.2.11 其他操作netbuf的宏定义 285
15.3 netconn结构体 285
15.4 netconn函数接口说明 287
15.4.1 netconn_new() 287
15.4.2 netconn_delete() 288
15.4.3 netconn_getaddr() 290
15.4.4 netconn_bind() 290
15.4.5 netconn_connect() 291
15.4.6 netconn_disconnect() 292
15.4.7 netconn_listen() 293
15.4.8 netconn_accept() 293
15.4.9 netconn_recv() 295
15.4.10 netconn_send() 296
15.4.11 netconn_sendto() 297
15.4.12 netconn_write() 298
15.4.13 netconn_close() 301
15.5 实验 302
15.5.1 TCP Client实验 302
15.5.2 TCP Client实验现象 307
15.5.3 TCP Server实验 308
15.5.4 TCP Server实验现象 314
15.5.5 UDP实验 315
15.5.6 UDP实验现象 319
第16章 使用Socket接口编程 321
16.1 什么是Socket 321
16.2 LwIP中的Socket 321
16.3 Socket API 322
16.3.1 socket() 322
16.3.2 bind() 323
16.3.3 connect() 324
16.3.4 listen() 325
16.3.5 accept() 325
16.3.6 read()、recv()、recvfrom() 325
16.3.7 sendto() 326
16.3.8 send() 327
16.3.9 write() 327
16.3.10 close() 327
16.3.11 ioctl()、ioctlsocket() 327
16.3.12 setsockopt() 328
16.3.13 getsockopt() 329
16.4 实验 329
16.4.1 TCP Client实验 329
16.4.2 TCP Server实验 331
16.4.3 UDP实验 333
第17章 使用RAW API接口编程 335
17.1 RAW API的UDP编程 335
17.1.1 新建控制块:udp_new() 335
17.1.2 绑定控制块:udp_bind() 336
17.1.3 建立会话:udp_connect() 337
17.1.4 断开会话:udp_disconnect() 338
17.1.5 接收数据:udp_recv() 339
17.1.6 发送数据:udp_send()与udp_sendto() 339
17.1.7 删除UDP控制块:udp_remove() 341
17.2 RAW API的TCP编程 341
17.2.1 新建控制块:tcp_new() 341
17.2.2 绑定控制块:tcp_bind() 342
17.2.3 控制块监听:tcp_listen() 343
17.2.4 处理连接:tcp_accept() 345
17.2.5 建立连接:tcp_connect() 346
17.2.6 终止连接:tcp_close() 348
17.2.7 接收数据:tcp_recv() 350
17.2.8 发送数据:tcp_sent() 350
17.2.9 异常处理:tcp_err() 351
17.2.10 周期性回调:tcp_poll() 351
17.2.11 构建报文段:tcp_write() 352
17.2.12 更新接收窗口:tcp_recved() 352
17.3 实验 353
17.3.1 TCP Client实验 353
17.3.2 TCP Server实验 358
17.3.3 UDP实验 360
第18章 使用JPerf工具测试网速 362
18.1 iPerf与JPerf 362
18.2 测试网络速度 362
18.2.1 获取JPerf网络测速工具 362
18.2.2 测试开发板接收速度(Netconn API) 363
18.2.3 测试开发板接收速度(Socket API) 366
18.2.4 测试开发板发送速度(Netconn API) 369
18.2.5 测试开发板发送速度(Socket API) 372
18.3 提高LwIP网络传输的速度 375
第19章 HTTP 377
19.1 什么是HTTP 377
19.2 URL与资源 378
19.3 HTTP报文 379
19.4 使用Postman获取论坛数据 380
19.5 使用开发板获取论坛数据 382
第20章 HTTP服务器 386
20.1 Hello World网页demo 386
20.2 提供网页控制LED开关的功能 389
第21章 MQTT协议 394
21.1 MQTT协议概述 394
21.2 MQTT通信模型 394
21.3 消息主题与服务质量 395
21.4 MQTT控制报文 396
21.4.1 固定报头 396
21.4.2 可变报头 397
21.4.3 有效载荷 400
21.5 移植MQTT协议 401
21.6 cJSON移植 407
第22章 连接到百度天工物接入 411
22.1 物接入概述 411
22.2 使用IoT Hub 411
22.2.1 创建计费套餐 411
22.2.2 创建项目 411
22.2.3 创建策略 413
22.2.4 创建身份与创建用户 413
22.2.5 MQTT软件测试连接 415
22.3 开发板连接IoT Hub 417
22.4 IoT Hub的规则引擎 422
22.4.1 什么是规则引擎 422
22.4.2 使用规则引擎 422
22.5 数据可视化 424
22.5.1 IoT Hub的时序数据库 424
22.5.2 IoT Hub的物可视 426
第23章 连接到阿里云物联 429
23.1 使用阿里云物联 429
23.2 MQTT软件测试连接 431
23.3 开发板连接阿里云物联 434
23.4 阿里云物联的规则引擎 435
第24章 连接到OneNET 437
24.1 使用OneNET 437
24.2 测试连接 438
24.3 开发板连接OneNET 439
24.4 添加数据流 441
24.5 系统主题的发布格式 442
24.6 使用开发板发布数据点 443
24.7 数据可视化 446

教学资源推荐
作者: [美]拉里 L. 彼得森(Larry L. Peterson) 布鲁斯 S. 戴维(Bruce S. Davie) 著
作者: (美)Behrouz A. Forouzan, Firouz Mosharraf 著
作者: (美)Behrouz A.Forouzan 著