嵌入式网络那些事
2012-9
朱升林 中国水利水电出版社 (2012-09出版)
朱升林
473
无
前言: 终于有了继续码字的机会。一年前在网上发布了电子版《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常见问题与解决方法就得益于众多网友的反馈,这里再次对他们表示感谢。
《嵌入式网络那些事:LwIP协议深度剖析与实战演练》面向网络TCP/IP协议初学者以及大量嵌入式网络开发人员,从当下流行的嵌入式网络协议栈LwIP的源代码入手,详细讲解TCP/IP协议的各层机制及其实现原理。同时,通过搭建简单的实验环境,还详细阐述LwIP在嵌入式设备组网过程中的移植过程、应用编程案例、编程框架、注意事项等。 本书可以作为TCP/IP学习者的快速入门及精通的指导书籍,配以简易的实验平台及专门的实验例程,读者可以轻松学习TCP/IP协议内的各种机制,通过实验验证,达到理论与实践结合的目的;对于嵌入式初学者来说,本书具有相关的实验平台,通过对实验平台的学习与使用,初学者能快速实现嵌入式入门;最后,本书可以作为广大嵌入式网络开发人员的参考手册。
朱升林,非著名码农,法号及网名“老衲五木”,风靡网络的电子书《LwIP协议栈源码详解——TCP/IP协议的实现》作者。对TCP/IP有丰富的实践经验和深入独到的理解,长期从事物联网热点技术如ZigBee,Wifi,HFRFID,UHF RFID的研究与应用。目前在国内某知名通信公司从事软件研发工作。
本书之What&Why 第1章故事前传 1.1背景知识 1.1.1嵌入式网络概述 1.1.2写作背景 1.1.3几个疑问 1.2TCP/lP扫盲班 1.2.1OSI模型 1.2.2TCP/IP协议 1.2.3OSI模型VSTCP/IP模型 l.2.4嵌入式TcP/IP协议栈 l.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.2S3C344BOX初体验 2.2.1简介 2.2.2存储管理器 2.2.3中断控制器 2.2.4其他模块 2.3ARM汇编真经 2.3.1简介 2.3.2ARM指令集编码格式 2.3.3ARM寻址方式 2.3.4ARM指令集简介 2.3.5ARM汇编语言 第3章让板子跑起来 3.1ARM开发工具 3.1.1ADS简介 3.1.2ARM汇编器 3.1.3ARM编译器 3.1.4ARM连接器 3.2程序的调试 3.2.1几种调试方式 3.2.2AXD调试器 3.2.3ARMulator的使用 3.3编写启动代码 3.3.1开发板结构 3.3.2启动代码讲解 3.3.3几个测试程序 第4章快马加鞭 4.1嵌入式实时操作系统 4.1.1概述 4.1.2uc/OS—Ⅱ的文件结构 4.1.3uc/OS—Ⅱ中的任务 4.1.4就绪任务的管理 4.1.5任务堆栈 4.2移植uc/OS—Ⅱ实时操作系统 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 ARE协议简介 9.1.1物理地址与网络地址 9.1.2 ARP协议的本质 9.2数据结构 9.2.1 ARP表 9.2.2 ARP报文 9.3 ALRP层数据包输入 9.3.1 以太网数据包递交 9.3.2 APE数据包处理 9.3.3 ARP攻击 9.3.4 ARP缓存表的更新 9.4 ARP层数据包输出 9.4.1 ARP层数据处理总流程 …… 第10章网际协议 第11章网际控制报文协议 第12章用户数据报协议 第13章传输控制协议 第14章移植操作系统模拟层 第15章用户编程接口 第16章最后的战役 参考文献
版权页: 插图: 对于一个路由器或主机,当它接收到一个数据包时,若要判断发送数据包的源主机与自己是否处于同一个网络内,可以将源IP地址与子网掩码进行与运算,即得到源主机所处的网络地址。同样,将它自己的IP地址与子网掩码进行与运算,得到自己所处的网络地址,如果这两个网络地址相同,则可以判断出发送方与它自己处于同一个网络。注意,子网掩码不能单独存在,它必须结合IP地址一起使用,子网掩码只有一个作用,就是将某个IP地址划分为网络号(包括子网号)和主机号两部分。 10.1.5网络地址转换(NAT) 随着Internet的迅速发展,IP地址短缺现象已成为一个十分突出的问题。在ISP那里,即使是拥有几百台计算机的大型企业,当他们申请IP地址时,得到的也不过只有几个或十几个IP地址。 显然,这样少的IP地址根本无法满足企业内部大量用户的需求,为了解决这个问题,出现了多种方案。其中,最流行也是最有效的就是目前使用的局域网技术,事实上,局域网本质上属于专用网的一种类型,专用网被用在机构内部使用,它允许机构内部访问共同的资源,但却对外部网络屏蔽了内部网络的结构和主机信息,大大提高了内部主机的安全性。通常在一个企业能够申请到的合法网络IP地址很少,但其内部网络用户很多的情况下,使用专用网可以实现多个用户同时公用一个合法IP地址与外部网络进行通信。在专用网内部,用户可以使用如表10.2所示的专用IP地址进行相互间的通信。 我们用以太网局域网为例,看看这个专用网是如何实现多个用户公用一个IP地址与外部网络进行通信的,这里涉及一个很重要的技术,叫做网络地址转换(NAT)。通常,企业内部使用的局域网路由器都是具有NAT功能的,具有NAT功能的路由器至少要有一个内部端口和一个外部端口,内部端口是路由器为了与局域网内的用户通信而使用的,它使用一个内部专用IP地址,例如常见的路由器内部IP地址可以为192.168.1.1;外部端口是路由器用来与外部网络通信用的,它通常具有一个有效的IP地址,假设为一个有效的C类地址222.197.179.21。 NAT的功能可简单描述为:当内部网络用户连接互联网时,NAT将用户的内部IP地址转换成一个外部公共IP地址,反之,数据从外部返回时,NAT将目的地址替换成用户的内部IP地址。 NAT实现的方式有很多种,但是其中使用最广泛也是最有效的方式称为端口多路复用,它基于TCP或UDP协议端口号以及IP地址来实现NAT功能。
《嵌入式网络那些事:LwIP协议深度剖析与实战演练》可以作为TCP/IP学习者的快速入门及精通的指导书籍,配以简易的实验平台及专门的实验例程,读者可以轻松学习TCP/IP协议内的各种机制,通过实验验证,达到理论与实践结合的目的;对于嵌入式初学者来说,《嵌入式网络那些事:LwIP协议深度剖析与实战演练》具有相关的实验平台,通过对实验平台的学习与使用,初学者能快速实现嵌入式入门;最后,《嵌入式网络那些事:LwIP协议深度剖析与实战演练》可以作为广大嵌入式网络开发人员的参考手册。
无
电子版不太详细,这书还行。。。
书还没有看,内容不评,就书的纸张质量来说还不错的。
封面有破损,扉页底部开胶。第一次在amazon以外的网站买书,太失望了。
写的挺生动挺详细,值得购买
很不错,不过可惜我用的不是三星的芯片
还不错深入浅出,内容丰富
水不小心滴了一滴上去,磨一下竟然把字都磨掉了。。
质量很好,书很厚额!
内容很详实,没有废话,对学习嵌入式网络协议栈有很大的帮助,从LwIP无操作系统的移植到有操作系统的移植包括测试方法,源代码等等非常详实的一本书。
内容:不错,讲的很详细,适合初学者,我觉得要是能深入扩展一些应用协议部分那就更好了,比如CGI包装:包装太单薄,一个崭新的书,到手书皮都破了个大洞,胶背头部像砸过,不好知道是不是快递原因。总的还算满意吧
移植Lwip
小说化撰写,嵌入式网络太大了
挺不错的奥