嵌入式网络那些事:LwIP协议深度剖析与实战演练

简介
本书特色
前言
章节列表
精彩阅读
下载资源
相关图书
本书面向网络TCP/IP协议初学者以及大量嵌入式网络开发人员,从当下流行的嵌入式网络协议栈LwIP的源代码入手,详细讲解TCP/IP协议的各层机制及其实现原理。同时,通过搭建简单的实验环境,还详细阐述LwIP在嵌入式设备组网过程中的移植过程、应用编程案例、编程框架、注意事项等。
本书可以作为TCP/IP学习者的快速入门及精通的指导书籍,配以简易的实验平台及专门的实验例程,读者可以轻松学习TCP/IP协议内的各种机制,通过实验验证,达到理论与实践结合的目的;对于嵌入式初学者来说,本书具有相关的实验平台,通过对实验平台的学习与使用,初学者能快速实现嵌入式入门;最后,本书可以作为广大嵌入式网络开发人员的参考手册。
本书实例的完整源代码可以从万水书苑网站上下载,网址为:http://www.waterpub. com.cn/softdown/和http://www.wsbookshow.com。
骨灰级TCP/IP专家、风靡网络的电子书《LwIP协议栈源码详解》朱升林老师倾情分享
超精彩!延续了电子书的语言及内容风格,轻松诙谐,简单直白
超实战!完整的实验环境配合详细的实验步骤,使你修改的每一行代码都可以在实验板上看到效果。
超实用!囊括作者多年开发经验,助您轻松解决LwIP应用中遇到的问题
搞嵌入式开发,必学LwIP,你懂的。
LwIP菜鸟到骨灰:
CHA 01故事前传→CHA 02有备而无患 →CHA 03让板子跑起来→CHA 04快马加鞭……CHA 16最后的战役
轻松诙谐的写作手法+简单易懂的语言+源自实战的开发经验=一条轻松学习LwIP技术之路
终于有了继续码字的机会。一年前在网上发布了电子版《LwIP协议栈源码详解——TCP/IP协议的实现》一书,也因此结识了许多LwIP应用及嵌入式网络编程的爱好者,他们之中有的是学生,正在竭力规划着自己的未来;有的是IT公司职员,正努力完成Boss交给的项目;更有创业者,希望在嵌入式网络方向赚下人生的第一桶金。但不管怎么样,很高兴有这么多人在关心和使用着LwIP,关注着嵌入式网络的发展未来。电子版书籍发布至今,受到了诸多读者的肯定和欢迎,笔者也收到了很多读者邮件,大部分是关于协议栈移植、应用编程等方面的问题。笔者也与很多读者在网上有过面对面的交流,一直坚信,相互学习与探讨才是进步的关键,他们的困惑与学习渴望让我觉得自己应该做更多的事情。其实网络电子版并不完善,一次在和一个读者偶然的聊天中,有了将这本书完善并出版的想法,“有价格的东西才会更有价值”,你可能会觉得这句话有错误,但不管你信不信,我是信了(虽然马克思经济学理论不是这样说的)。在读者、朋友及家人的鼓励和支持下,笔者最终将想法付诸于实践,一是为完成以前偷懒没有完成的任务,二是将广大读者使用过程中遇到的问题总结出来,以供大家借鉴。
写本书的目的可以归纳为三点:第一,给需要使用LwIP的人一个借鉴和解决问题的方法,这也是当初写电子版的初衷;第二,也是最基础的,写给那些需要学习TCP/IP的同学,TCP/IP的重要性就不在这里多说了,遥想笔者当年毕业找工作之季,辗转来回于各大公司的招聘面试场所,TCP/IP真的是各个面试官最青睐的问题,笔者也恰好因为在这方面有着独到的理解,因此顺利拿下了国内外众多知名企业的offer,所以本书也想告诉那些正在努力的同学,学习TCP/IP是绝对值得的,这是一条康庄大道;第三,也是最重要的,嵌入式网络当然离不开实践,本书力求在讲网络协议之前,给学习嵌入式的同学一个基础的、易上手的嵌入式学习过程,在此之后,读者能在实验平台上实际运行、调试网络应用程序,更可以修改协议栈内核,你改的每一行代码都能在实验板上看出实际效果。
网络编程大神们可以绕道了,这里没有IPsec、没有SSL、没有并发服务器、没有每秒上亿次的服务请求,我们玩的是低端玩艺儿;神秘黑客们也可以绕道了,这里没有系统漏洞、没有文件系统、没有账号、玩不转木马,您都不屑于和我们较真。本书的使用者定位在嵌入式初学者、网络初学者以及对LwIP应用有兴趣或疑问的同学,你们一定可以在本书中找到想要的东西。
本书背景
TCP/IP技术是目前最流行的IT技术之一,也是当代互联网及相关技术应用、发展的基石。近年来,TCP/IP技术在各大高校俨然已成为学习和研究的热点,而另一方面,TCP/IP知识也成了各IT企业招聘时关注的重点问题。对于广大TCP/IP初学者来说,要真正掌握并精通TCP/IP协议其实是有难度的:首先,TCP/IP是个非常庞大的协议族,其源代码一般只存在于各个大型操作系统内核中,协议的整体结构对于使用者来说不可见,学习者只能使用系统内部提供的API完成网络编程功能,但对协议内部的实现细节并不明了,这样TCP/IP的学习者只能停留在上层应用,如Socket编程的层次,而事实上,了解协议内部运作细节是编写高效可靠应用程序的基础;其次,目前市场上针对TCP/IP的书籍较少,而与TCP/IP协议内部机制相关的实验书籍就更加缺乏了,读者只能从书本上学到一些关于TCP/IP的基础理论知识,但很难将这些理论用于实际编程实践中,因为系统内核对于读者来说并不可见。
目前,嵌入式产品连入互联网已成了越来越多企业关注的热点,这使得在嵌入式产品上移植TCP/IP协议成为一种必然的趋势。LwIP是应用于嵌入式领域的一款开源TCP/IP协议,它的实现同BSD的实现有很大的相似性,可以作为TCP/IP协议的典型代表,它的功能完备,除了实现TCP/IP的基本通信功能外,其新版本还支持DNS、SNMP、DHCP、IGMP等高级应用功能。当前网络上关于LwIP的讨论很多,但市场上却鲜见相关书籍。
本书特点
理论与实践结合,是本书编写的一个重要出发点,不但让读者掌握TCP/IP理论知识,而且让读者通过实验深入地理解并运用这些知识,达到学以致用的目的。首先,整个协议栈对读者来说全部可见,这样读者能对TCP/IP协议有宏观的把握,摈弃掉TCP/IP以往神秘的面纱;本书以网络数据包在协议栈内部的递交顺序为编写导向,思路明显,条理清楚,语言精简幽默,更利于读者对TCP/IP协议基本知识的理解;最后,本书内容大部分建立在笔者开发经验之上,其中包括了很多LwIP在实际应用中遇到的问题及其解决方法,这对大部分刚接触LwIP的嵌入式开发人员来说,具有很强的指导意义。
概括来讲,本书具有如下特点:
延续了电子版的写作手法,轻松诙谐的语言、简单直白的讲解能让读者摆脱阅读时的枯燥感觉,技术学习也可以很轻松。
协议与实现的完美结合。着眼于TCP/IP基本理论,以LwIP源代码为基础,全面讲解TCP/IP协议的原理与具体实现,由于协议栈全部源代码对读者可见,因此TCP/IP不再神秘。
理论与实践并重。对各层协议尽量提供实验例程或测试方法,简单的实验搭建环境,读者能直观感受到各层协议在嵌入式设备组网过程中的实际应用,每个案例的开发步骤都以通俗易懂的语言阐述,并穿插必要的图片和表格,学习TCP/IP不再是纸上谈兵。
目的明确,实用性强。以嵌入式设备组网为目的,结合了笔者的大量实际开发经验,从系统启动代码编写到操作系统移植,从LwIP协议栈移植到网络应用程序设计,内容由浅入深,知识点覆盖全面,特别适合于嵌入式初学人员。
LwIP协议栈全部用C写成,所有源代码对读者可见,读者可以宏观把握整个协议的代码组织结构。在本书中,通过在实验板上移植、使用协议栈,读者可以清楚地知道TCP/IP协议内部各个机制的实现方法以及不同参数设置对协议栈内核性能的影响,例如:如何自行配置TCP发送超时间隔与重发次数以满足特定场合的需求,又如可否根据实际使用情况更改TCP状态机以提高内核效率,再如可否自行构建静态ARP缓存表以提高协议栈响应效率,等等。通过实验,读者可以清楚地看到整个协议的运行过程,加深对协议的理解。
组织结构
本书以开源TCP/IP协议栈——LwIP的源代码为基础,详细为读者讲解TCP/IP协议的内部各层结构与实现细节,既包括ARP、ICMP、IGMP、IP、UDP、TCP等基本协议知识,也包括DHCP、DNS等高级应用知识,以LwIP为起点学习TCP/IP,将为广大读者各方面的学习创造捷径。同时,LwIP代码组织和实验平台搭建简单,读者可以方便地进行协议栈内部的相关实验,通过对平台搭建过程的学习,读者也可以了解到许多嵌入式领域入门基础知识,如汇编程序、C编程基础、编译链接原理、嵌入式处理器、内存管理、操作系统、任务管理、任务通信机制等。
TCP/IP技术是互联网技术发展的基础,在各软硬件IT企业招聘面试上,TCP/IP的知识成了面试官青睐的问题,对于广大学子来说,精通TCP/IP相关知识,无疑将为自己打开一道成功择业的大门。但目前很多学者想学习TCP却无处下手,这成了许多初学者面临的问题,通过本书,不论是从宏观还是细节上,读者都可以对TCP/IP协议有很好的把握。另一方面,嵌入式设备组网技术是目前流行的技术,LwIP由于开源免费、功能齐全、性能优越等特点成了嵌入式网络领域使用的热点,本书将从裸机出发,向读者讲解网络协议栈移植过程以及应用编程细节,同时也包括了一些开发过程中常见的各种问题及解决方法,因此,对LwIP应用开发者来说,本书将是一本重要的指导手册。
编者与致谢
本书由朱升林著,粟思科审校。最后,笔者想感谢一年多以来一直陪伴和帮助我的人,没有你们的帮助和付出,这本书不会这么顺利的完成,因为你们的存在,使得这段时光更加珍贵。同时参与本书编写工作的人员还有:王治国、钟晓林、王娟、胡静、杨龙、张成林、方明、王波、陈小军、雷晓、李军华、陈晓云、方鹏、龙帆、刘亚航、凌云鹏、陈龙、曹淑明、徐伟、杨阳、张宇、刘挺、单琳、吴川、李鹏、李岩、朱榕、陈思涛和孙浩,在此一并表示感谢。
感谢对本书电子版提出过改进建议和支持的众多网友朋友,感谢笑迎冬风,感谢sailing,感谢关海山,还有2K100、Aimar、M刀、WISCO……,还有许多不能在这里一一列出名字的网友,谢谢你们的支持和肯定,与大家的探讨也让我学到了很多东西。
感谢我的父母和亲友们,是你们的宽容和细心帮我克服了生活中的许多困难和难题,你们的默默支持和付出是我完成此书的最大动力。
配套服务
我们为读者和用户尽心服务,围绕协议、产品和项目市场,探讨应用与发展,发掘热点与重点;开展相关教学工作。TCP/IP协议俱乐部QQ:183090495,电子邮件bojiakeji@tom.com,欢迎TCP/IP协议爱好者和用户联系。
由于作者水平所限,网络技术也日新月异,本书难免存在错误和不妥之处,恳请广大读者批评指证。共同探讨,始终是学习的一种高效方式,值得指出的是,本书最后一节的LwIP常见问题与解决方法就得益于众多网友的反馈,这里再次对他们表示感谢。
1.1 背景知识 1
1.1.1 嵌入式网络概述 1
1.1.2 写作背景 3
1.1.3 几个疑问 4
1.2 TCP/IP扫盲班 5
1.2.1 OSI模型 5
1.2.2 TCP/IP协议 5
1.2.3 OSI模型 VS TCP/IP模型 7
1.2.4 嵌入式TCP/IP协议栈 8
1.3 旅行集结号 9
1.3.1 实验环境说明 9
1.3.2 本书内容概述 10
1.3.3 一起出发 12
第2章 有备而无患 13
2.1 传说中的ARM微处理器 13
2.1.1 背景知识 13
2.1.2 存储器组织结构 15
2.1.3 指令系统 17
2.1.4 数据类型与存储格式 19
2.1.5 处理器状态与处理器模式 21
2.1.6 寄存器组织 23
2.1.7 异常处理 28
2.2 S3C44B0X初体验 32
2.2.1 简介 32
2.2.2 存储管理器 34
2.2.3 中断控制器 39
2.2.4 其他模块 42
2.3 ARM汇编真经 46
2.3.1 简介 46
2.3.2 ARM指令集编码格式 46
2.3.3 ARM寻址方式 48
2.3.4 ARM指令集简介 53
2.3.5 ARM汇编语言 55
第3章 让板子跑起来 65
3.1 ARM开发工具 65
3.1.1 ADS简介 65
3.1.2 ARM汇编器 70
3.1.3 ARM编译器 71
3.1.4 ARM连接器 78
3.2 程序的调试 83
3.2.1 几种调试方式 83
3.2.2 AXD调试器 87
3.2.3 ARMulator的使用 90
3.3 编写启动代码 91
3.3.1 开发板结构 91
3.3.2 启动代码讲解 92
3.3.3 几个测试程序 108
第4章 快马加鞭 115
4.1 嵌入式实时操作系统 116
4.1.1 概述 116
4.1.2 μC/OS-II的文件结构 118
4.1.3 μC/OS-II中的任务 120
4.1.4 就绪任务的管理 126
4.1.5 任务堆栈 129
4.2 移植μC/OS-II实时操作系统 130
4.2.1 概述 130
4.2.2 编写OS_CPU.H 132
4.2.3 编写OS_CPU_C.C 134
4.2.4 编写OS_CPU_A.S 138
4.3 测试程序 145
4.3.1 系统时钟 145
4.3.2 第一个测试程序 146
4.3.3 第二个测试程序 147
第5章 无操作系统模拟层LwIP的移植 150
5.1 LwIP综述 150
5.1.1 简介 150
5.1.2 用SI阅读源代码 156
5.2 移植工作 160
5.2.1 移植头文件 160
5.2.2 RTL8019AS网卡 163
5.2.3 编写网卡驱动程序 176
5.3 测试程序 186
5.3.1 协议栈初始化 186
5.3.2 数据包的查询接收 188
5.3.3 数据包的中断接收 191
5.3.4 一个简单的TCP服务器 193
5.3.5 移植小结 195
第6章 动态内存管理 196
6.1 背景知识 196
6.1.1 内存管理概述 196
6.1.2 常见内存分配策略 198
6.2 动态内存池 200
6.2.1 数据结构描述 200
6.2.2 函数实现 205
6.3 动态内存堆 207
6.3.1 数据结构描述 208
6.3.2 函数实现 209
6.4 其他内存分配策略 214
第7章 数据包管理 218
7.1 预备知识 218
7.1.1 LwIP的分层特点 218
7.1.2 协议进程模型 219
7.2 数据包管理 220
7.2.1 数据包结构pbuf 221
7.2.2 pbuf的类型 221
7.2.3 数据包申请函数 224
7.2.4 数据包释放函数 227
7.2.5 其他数据包操作函数 229
第8章 网络接口管理 230
8.1 引言 230
8.2 网络接口结构 231
8.2.1 数据结构 231
8.2.2 函数实现 234
8.3 环回接口 236
8.3.1 相关函数 236
8.3.2 实验程序 238
第9章 ARP协议 242
9.1 ARP协议简介 242
9.1.1 物理地址与网络地址 242
9.1.2 ARP协议的本质 243
9.2 数据结构 245
9.2.1 ARP表 245
9.2.2 ARP报文 249
9.3 ARP层数据包输入 253
9.3.1 以太网数据包递交 253
9.3.2 ARP数据包处理 255
9.3.3 ARP攻击 258
9.3.4 ARP缓存表的更新 259
9.4 ARP层数据包输出 263
9.4.1 ARP层数据处理总流程 263
9.4.2 广播包与多播包的发送 264
9.4.3 单播包的发送 266
第10章 网际协议(IP) 269
10.1 相关知识 269
10.1.1 概述 269
10.1.2 IP地址 270
10.1.3 特殊IP地址 271
10.1.4 子网划分与子网掩码 273
10.1.5 网络地址转换(NAT) 275
10.1.6 单播、多播与广播 276
10.2 数据报 277
10.2.1 数据报组成结构 277
10.2.2 数据结构 282
10.3 IP层输出 283
10.3.1 发送数据报 283
10.3.2 数据报分片 286
10.4 IP层输入 289
10.4.1 数据报接收 290
10.4.2 分片重装数据结构 294
10.4.3 分片重装函数 297
10.4.4 分片插入与检查 300
第11章 网际控制报文协议(ICMP) 303
11.1 基本知识 303
11.1.1 ICMP协议 303
11.1.2 报文交付 304
11.1.3 报文类型 304
11.1.4 报文格式 306
11.1.5 差错报文 306
11.1.6 查询报文 308
11.2 ICMP的实现 309
11.2.1 数据结构 310
11.2.2 发送差错报文 311
11.2.3 ICMP报文的处理 312
11.2.4 ping命令 315
11.2.5 ICMP洪水 316
第12章 用户数据报协议(UDP) 319
12.1 背景知识 319
12.1.1 传输层协议 319
12.1.2 UDP协议 320
12.1.3 端口号 321
12.1.4 UDP报文的交付 322
12.1.5 UDP报文格式 322
12.1.6 UDP伪首部与校验和 324
12.2 UDP数据结构 325
12.2.1 报文首部结构 325
12.2.2 控制块 326
12.3 控制块操作函数 329
12.3.1 使用UDP编程 329
12.3.2 新建控制块 329
12.3.3 绑定控制块 329
12.3.4 连接控制块 331
12.3.5 其他控制块操作函数 332
12.4 报文处理函数 333
12.4.1 报文的发送 333
12.4.2 报文接收与递交 335
12.5 测试程序 338
12.5.1 回送程序 338
12.5.2 测试结果 339
12.5.3 回调编程的缺陷 339
第13章 传输控制协议(TCP) 341
13.1 协议简介 341
13.1.1 TCP的必要性 341
13.1.2 TCP的特性 342
13.1.3 连接的定义 344
13.1.4 数据流编号 345
13.1.5 滑动窗口 345
13.2 TCP报文 346
13.2.1 报文格式 346
13.2.2 TCP选项 348
13.2.3 紧急数据 349
13.2.4 强迫数据交互 349
13.2.5 报文首部数据结构 350
13.3 TCP连接 350
13.3.1 建立连接 350
13.3.2 断开连接 351
13.3.3 复位连接 352
13.3.4 TCP状态转换图 353
13.3.5 特殊的状态转换 355
13.4 TCP控制块 356
13.4.1 控制块数据结构 356
13.4.2 控制块链表 358
13.4.3 接收窗口 359
13.4.4 发送窗口 359
13.5 TCP编程函数 360
13.5.1 控制块新建 360
13.5.2 控制块绑定 361
13.5.3 控制块侦听 362
13.5.4 控制块连接 363
13.5.5 发送数据 364
13.5.6 关闭连接 365
13.5.7 其他函数 366
13.6 TCP输出处理 366
13.6.1 报文段缓冲 366
13.6.2 报文段构建 367
13.6.3 报文段发送 370
13.7 TCP输入处理 372
13.7.1 TCP层函数调用流程 372
13.7.2 报文输入 373
13.7.3 TIME_WAIT状态的报文处理 376
13.7.4 LISTEN状态的报文处理 376
13.7.5 SYN攻击 378
13.7.6 TCP状态机函数 379
13.7.7 TCP数据输入 382
13.8 可靠的传输服务 387
13.8.1 超时重传与RTT估计 387
13.8.2 慢启动与拥塞避免 392
13.8.3 快速重传与快速恢复 395
13.8.4 糊涂窗口与避免 397
13.8.5 零窗口探查 399
13.8.6 保活机制 401
13.8.7 TCP定时器 403
13.9 测试程序 406
13.9.1 Telnet服务器 406
13.9.2 测试结果 409
第14章 移植操作系统模拟层 411
14.1 移植过程 411
14.1.1 移植综述 411
14.1.2 添加文件 413
14.1.3 修改头文件lwipopts.h 414
14.1.4 头文件sys_arch.h 414
14.1.5 全局变量与初始化 415
14.1.6 信号量函数 416
14.1.7 邮箱函数 417
14.1.8 超时相关函数 420
14.1.9 创建新进程 420
14.2 测试程序 421
14.2.1 初始化函数 421
14.2.2 简单的HTTP服务器 421
14.2.3 测试结果 422
第15章 用户编程接口 424
15.1 定时事件 424
15.1.1 定时结构 424
15.1.2 定时链表 425
15.1.3 内核进程 427
15.1.4 处理定时事件 428
15.2 消息机制 430
15.2.1 消息结构 430
15.2.2 数据包消息 431
15.2.3 协议栈API实现 432
15.2.4 API消息 434
15.3 协议栈接口 436
15.3.1 用户数据缓冲netbuf 436
15.3.2 数据缓冲操作 436
15.3.3 连接结构netconn 439
15.3.4 内核回调接口 441
15.3.5 协议栈API函数 443
15.3.6 测试程序 448
15.4 套接字接口 450
15.4.1 socket的实现 450
15.4.2 套接字函数 451
15.4.3 测试程序 453
第16章 最后的战役 457
16.1 域名解析 457
16.1.1 域名系统(DNS) 457
16.1.2 测试程序 458
16.1.3 测试结果 460
16.2 动态主机配置 460
16.2.1 DHCP协议 460
16.2.2 测试程序 461
16.2.3 测试结果 463
16.3 Internet组管理 464
16.3.1 IGMP协议 464
16.3.2 测试程序 465
16.3.3 测试结果 466
16.4 终结篇 467
16.4.1 常见问题及解决方法 467
16.4.2 故事结局 473
参考文献 474
- 计算机网络原理及应用 [主编 唐继勇 叶坤 孙梦娜]
- 计算机网络技术实训教程(第二版) [主编 高良诚]
- 计算机网络实训教程 [主编 张浩军 赵玉娟]
- HCIA-Datacom认证题库分类精讲 [主 编 韩立刚]
- 网络规划设计师备考一本通 [夏杰 编著]
- 计算机网络基础 [主编 宋焱宏 李安邦]
- 网络工程师备考一本通 [夏杰 编著]
- 软件定义网络技术与实践 [主编 但唐仁]
- 计算机网络技术项目化教程(微课版) [主编 王艳萍 安华萍]
- 网络系统集成 [主编 唐继勇 孙梦娜]
- 计算机网络基础创新教程(模块化+课程思政版) [主编 唐继勇 李旭]
- 路由交换技术项目化教程 [主编 范国娟]
- 计算机网络创新教程 [韩立刚 编著]
- 数据通信与计算机网络(第三版) [主 编 季福坤 钱文光]
- 计算机网络技术基础项目式教程 [主 编 柳 青 曾德生]
- 遨游数字时代——全球IT高管网络安全秘籍 [[美] Palo Alto Networks 编]
- 计算机网络基础教程 [主 编 赵志茹 张尼奇 王宏斌]
- 计算机网络技术基础 [陈家迁]
- 网络规划设计师5天修炼 [朱小平 施游 编著]
- 计算机网络实验指导 [主编 吴东]
- 网络工程师5天修炼(第三版) [朱小平 施游 编著]
- 计算机网络原理与应用(第二版) [何小东 编著]
- 计算机网络技术实训教程 [主编 高良诚]
- 云计算与网络安全 [主编 肖睿 徐文义]
- AutoCAD 网络工程设计教程 [主编 刘通 董灿]
- 计算机网络实训创新教程(基于Cisco IOS) [主编 韩立刚]
- 计算机网络原理创新教程 [主编 韩立刚]
- 深入理解计算机网络 [王达]
- 交换机路由器配置与管理实训教程 [主编 孙飞显 靳晓婷]
- 网络安全技术项目化教程 [主编 段新华 宋风忠]