热门关键字:  听力密码  单词密码  新概念美语  巧用听写练听力  零起点

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

中国水利水电出版社
    【作 者】朱升林 【I S B N 】978-7-5170-0059-4 【责任编辑】陈洁 【适用读者群】科技 【出版时间】2012-08-22 【开 本】16开 【装帧信息】平装(光膜) 【版 次】第1版第1次印刷 【页 数】488 【千字数】709 【印 张】30.5 【定 价】68 【丛 书】 【备注信息】
图书详情

    本书面向网络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
    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

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册